Wizard Controller

Wizard controller provides a base class (Inheriting from ActionController::Base) that provides a DSL for quickly making Wizards.

VERY IMPORTANT!!! DONT OVERRIDE INDEX! Doing so will break all functionality. WizardController works by defining an “index” method that does all the work. To start a wizard, go to the “index” method.

Setup and Configuration

Add the following gem configuration to config/environment.rb

config.gem "wizard_controller"

Ensure the following is present in config/routes.rb

map.connect ':controller/:action/:id'

… or explicitly map the routes you want to use.

Example Controller

class ExampleController < Codeprimate::Wizard::Base
  # Define the method names of the wixard steps
  define_steps :page_one, :page_two, :page_three

  # Specify where the Wizard should redirect upon completion.
  set_finish_path "http://www.example.com/go_here_when_done.html"

  # Ensure "index" is not defined!
  # def index
  # end

  def start
    # Create a "safe"  index method for this controller, and handle it appropriately
  end

  def foobar
    # You can define whatever actions you want.  WizardController doesnt get in the way.
  end

  def page_one
    # This is a regular action method. Create indiviual views for action methods.
  end

  def process_page_one
    # Place logic to handle any output from page one here.
    # No view will be shown for this 
    #
    # Return true if your logic wants you to go to the next step
    # Return false if you want to return to the page_one view
    return true
  end  

  def page_two
    # Let's say this action/view is merely informative.
    # We will not supply a process method, and the user will always be able
    # to go to the next step
  end

  def page_three
    # Just another step method here
  end

  def process_page_three
    # Since this is the last step, if this process method returns true
    # the user will be redirected to the URL specified in the 
    # "set_finish_path" declaration at the beginning of the Controller definition
  end
end

View Helper Methods

  • step_number(): Current step index.

  • total_steps(): Total Number of steps in the wizard.

  • step_completed(): Returns boolean, whether the step has been completed.

  • wizard_path(): Wizard index path. THIS SHOULD BE THE ACTION PATH OF ALL FORMS/VIEWS WITH A “process” action.

  • next_step_path(): URL to the next step.

  • previous_step_path(): URL to the previous step.

  • direct_step_path(): URL to a direct step. Example for step 3: direct_step_path(:id=>3). User will stay on the current step if they have not completed the one they are requesting.

  • reset_wizard_path(): URL to reset the Wizard.

  • abort_wizard_path(): URL to abort the Wizard.