Wizardry

Simple step-by-step wizard for Rails.

Installation

Add this line to your application's Gemfile:

gem 'wizardry'

And run the bundle command to install it.

Usage

Bring wizardry to your model:

class Product < ActiveRecord::Base
  wizardry :initial, :middle, :final
end

And you will get a bunch of methods. To get name of the current step:

@product.current_step # => 'initial'

To change the current step name:

@product.current_step = :middle

Will be set only if new step name is included in wizardry steps (initial, middle, final in our example).

For the second step name:

@product.second_step # => 'middle'

Also first_step, third_step, etc. methods are available.

You can check position of the current step:

@product.second_step? # => true
# or
@product.current_step.middle? # => true

Also first_step?, third_step?, etc. methods are accessible.

To get name of the next and previous steps:

@product.next_step
# and
@product.previous_step

If not exists next/previous step then nil will be returned.

Class methods are accessible:

Product.steps # => ['initial', 'middle', 'final']
# and
Product.steps_regexp # => /initial|middle|final/

Routing helpers

Wizardry includes some routing helpers:

resources :products do
  has_wizardry
end
# same as
wizardry_resources :products

will replace default :id/edit path with :id/edit/:step (and :step => /initial|middle|final/ in our example). has_wizardry is also acceptable for singular resources. And wizardry_resource herper is here for that.

I18n

en:
  wizardry:
    steps:
      initial: 'Product details'
      middle: 'Upload images'

To get the translated step name:

@product.step_title(:middle) # => 'Upload images'

If you are passing nonexistent step name, then will be returned nil.

Without providing the step name, you will get the translation for current_step:

@product.step_title # => 'Product details'

In case of absence of step translation:

@product.step_title(:final) # => 'Final'

License

MIT License. Copyright 2012 Aleksey Magusev.