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
endAnd 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 = :middleWill 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? # => trueAlso first_step?, third_step?, etc. methods are accessible.
To get name of the next and previous steps:
@product.next_step
# and
@product.previous_stepIf 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 :productswill 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.