module Wizardry
Constants
- VERSION
Public Instance Methods
edit()
click to toggle source
# File lib/wizardry.rb, line 41 def edit Rails.logger.debug("🧙 Running before_edit callback") @wizard.current_page.before_edit!(@wizard.object) end
update()
click to toggle source
# File lib/wizardry.rb, line 46 def update Rails.logger.debug("🧙 Object valid, saving and moving on") @wizard.object.assign_attributes(object_params.merge(last_completed_step_params)) Rails.logger.debug("🧙 Running before_update callback") @wizard.current_page.before_update!(@wizard.object) if @wizard.object.valid?(@wizard.current_page.name) @wizard.object.transaction do @wizard.object.save! Rails.logger.debug("🧙 Object saved, trying after_update callback") @wizard.current_page.after_update!(@wizard.object) Rails.logger.debug("🧙 Object saved and callbacks run, moving on") finish if @wizard.complete? end redirect_to send(@wizard.framework.edit_path_helper, @wizard.next_page.name.to_s.dasherize) else Rails.logger.debug("🧙 Object not valid, try again") render :edit end end
wizard(...)
click to toggle source
# File lib/wizardry.rb, line 31 def wizard(...) define_method(:wizard) do @framework ||= Wizardry::Framework.new(...) end end
Private Instance Methods
check_wizard()
click to toggle source
# File lib/wizardry.rb, line 93 def check_wizard @wizard.ensure_not_complete unless @wizard.current_page.is_a?(Wizardry::Pages::CompletionPage) end
clear_identifier!()
click to toggle source
# File lib/wizardry.rb, line 131 def clear_identifier! Rails.logger.debug("🧙 Clearing cookie") cookies.delete(wizard.cookie_name) end
finalize_object!(finalize_method: :finalize!)
click to toggle source
# File lib/wizardry.rb, line 81 def finalize_object!(finalize_method: :finalize!) Rails.logger.debug("🧙 Trying to finalize object") if @wizard.object.respond_to?(finalize_method) Rails.logger.debug("🧙 Object has #{finalize_method} method - calling it") @wizard.object.send(finalize_method) else Rails.logger.warn("🧙 Wizard object has no #{finalize_method} method") end end
finish()
click to toggle source
# File lib/wizardry.rb, line 74 def finish Rails.logger.debug("🧙 Wizard complete, finishing off") finalize_object! clear_identifier! end
identifier()
click to toggle source
# File lib/wizardry.rb, line 119 def identifier cookies.fetch(wizard.cookie_name) { set_identifier! } end
last_completed_step_params()
click to toggle source
# File lib/wizardry.rb, line 115 def last_completed_step_params { last_completed_step: @wizard.current_page.name } end
object_params()
click to toggle source
# File lib/wizardry.rb, line 107 def object_params param_key = @wizard.framework.class_name.constantize.model_name.param_key params.require(param_key).permit(@wizard.current_page.question_names) rescue ActionController::ParameterMissing { param_key => last_completed_step_params } end
set_identifier!()
click to toggle source
# File lib/wizardry.rb, line 123 def set_identifier! identifier = SecureRandom.uuid Rails.logger.debug("🧙 Setting cookie #{identifier}") cookies[wizard.cookie_name] = identifier end
setup_wizard()
click to toggle source
# File lib/wizardry.rb, line 97 def setup_wizard Rails.logger.debug("🧙 Finding or initialising #{wizard.class_name} with '#{identifier}'") object = wizard.class_name.constantize.find_or_initialize_by(identifier: identifier) Rails.logger.debug("🧙 Initialising the wizard 🪄") @wizard = Wizardry::Instance.new(current_page: params[:page].underscore, object: object, framework: @framework) end