wicked 1.0.3 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/check_changelog.yml +13 -0
  3. data/.github/workflows/ci.yml +53 -0
  4. data/.gitignore +15 -0
  5. data/Appraisals +11 -0
  6. data/CHANGELOG.md +45 -0
  7. data/CONTRIBUTING.md +19 -0
  8. data/Gemfile +3 -20
  9. data/README.md +150 -35
  10. data/Rakefile +2 -15
  11. data/gemfiles/rails_5.2.gemfile +12 -0
  12. data/gemfiles/rails_6.0.gemfile +12 -0
  13. data/gemfiles/rails_7.0.gemfile +12 -0
  14. data/lib/wicked/controller/concerns/action.rb +13 -0
  15. data/lib/wicked/controller/concerns/path.rb +13 -3
  16. data/lib/wicked/controller/concerns/render_redirect.rb +35 -23
  17. data/lib/wicked/controller/concerns/steps.rb +12 -17
  18. data/lib/wicked/version.rb +3 -0
  19. data/lib/wicked/wizard/translated.rb +3 -6
  20. data/lib/wicked/wizard.rb +28 -23
  21. data/{app/controllers → lib}/wicked/wizard_controller.rb +1 -2
  22. data/lib/wicked.rb +2 -1
  23. data/test/controllers/bar_controller_test.rb +3 -2
  24. data/test/controllers/status_codes_controller_test.rb +18 -0
  25. data/test/controllers/updates_controller_test.rb +27 -0
  26. data/test/dummy/app/controllers/application_controller.rb +5 -2
  27. data/test/dummy/app/controllers/dynamic_different_steps_controller.rb +18 -0
  28. data/test/dummy/app/controllers/dynamic_steps_controller.rb +1 -1
  29. data/test/dummy/app/controllers/jump_controller.rb +9 -2
  30. data/test/dummy/app/controllers/redirect_to_next_controller.rb +1 -1
  31. data/test/dummy/app/controllers/status_codes_controller.rb +39 -0
  32. data/test/dummy/app/controllers/update_params_controller.rb +30 -0
  33. data/test/dummy/app/controllers/updates_controller.rb +30 -0
  34. data/test/dummy/app/views/bar/first.html.erb +3 -1
  35. data/test/dummy/app/views/bar/second.html.erb +2 -1
  36. data/test/dummy/app/views/dynamic_different_steps/first.html.erb +3 -0
  37. data/test/dummy/app/views/jump/last_step.html.erb +3 -1
  38. data/test/dummy/app/views/jump/second.html.erb +3 -1
  39. data/test/dummy/app/views/status_codes/bad.html.erb +1 -0
  40. data/test/dummy/app/views/status_codes/good.html.erb +1 -0
  41. data/test/dummy/app/views/update_params/_step_position.html.erb +16 -0
  42. data/test/dummy/app/views/update_params/first.html.erb +1 -0
  43. data/test/dummy/app/views/update_params/index.html.erb +1 -0
  44. data/test/dummy/app/views/update_params/last_step.html.erb +1 -0
  45. data/test/dummy/app/views/update_params/second.html.erb +1 -0
  46. data/test/dummy/app/views/updates/_step_position.html.erb +16 -0
  47. data/test/dummy/app/views/updates/first.html.erb +1 -0
  48. data/test/dummy/app/views/updates/index.html.erb +1 -0
  49. data/test/dummy/app/views/updates/last_step.html.erb +1 -0
  50. data/test/dummy/app/views/updates/second.html.erb +1 -0
  51. data/test/dummy/config/application.rb +3 -0
  52. data/test/dummy/config/environments/development.rb +0 -1
  53. data/test/dummy/config/environments/test.rb +3 -1
  54. data/test/dummy/config/routes.rb +4 -0
  55. data/test/integration/dynamic_steps_test.rb +8 -1
  56. data/test/integration/helpers_test.rb +27 -0
  57. data/test/integration/jump_test.rb +16 -0
  58. data/test/integration/redirect_to_next_test.rb +1 -1
  59. data/test/integration/security_test.rb +0 -2
  60. data/test/integration/update_params_test.rb +20 -0
  61. data/test/integration/updates_test.rb +20 -0
  62. data/test/support/wicked_controller_test_case.rb +9 -0
  63. data/test/test_helper.rb +9 -9
  64. data/wicked.gemspec +22 -150
  65. data/wicked.png +0 -0
  66. metadata +156 -51
  67. data/.rvmrc +0 -19
  68. data/.travis.yml +0 -22
  69. data/VERSION +0 -1
  70. /data/test/dummy/app/controllers/{steps_controller.rb → step_positions_controller.rb} +0 -0
@@ -1,51 +1,63 @@
1
1
  module Wicked::Controller::Concerns::RenderRedirect
2
2
  extend ActiveSupport::Concern
3
3
 
4
-
5
- def render_wizard(resource = nil, options = {})
6
- process_resource!(resource)
4
+ def render_wizard(resource = nil, options = {}, params = {})
5
+ process_resource!(resource, options)
7
6
 
8
7
  if @skip_to
9
- redirect_to wizard_path(@skip_to), options
8
+ url_params = (@wicked_redirect_params || {}).merge(params)
9
+ redirect_to wizard_path(@skip_to, url_params), options
10
10
  else
11
- render_step wizard_value(step), options
11
+ render_step(wizard_value(step), options, params)
12
12
  end
13
13
  end
14
14
 
15
- def process_resource!(resource)
16
- if resource
17
- if resource.save
18
- @skip_to ||= @next_step
19
- else
20
- @skip_to = nil
21
- end
15
+ def process_resource!(resource, options = {})
16
+ return unless resource
17
+
18
+ if options[:context]
19
+ did_save = resource.save(context: options[:context])
20
+ else
21
+ did_save = resource.save
22
+ end
23
+
24
+ if did_save
25
+ @skip_to ||= @next_step
26
+ else
27
+ @skip_to = nil
28
+ # Do not override user-provided status for render
29
+ options[:status] ||= :unprocessable_entity
22
30
  end
23
31
  end
24
32
 
25
- def render_step(the_step, options = {})
33
+ def render_step(the_step, options = {}, params = {})
26
34
  if the_step.nil? || the_step.to_s == Wicked::FINISH_STEP
27
- redirect_to_finish_wizard options
35
+ redirect_to_finish_wizard options, params
28
36
  else
29
37
  render the_step, options
30
38
  end
31
39
  end
32
40
 
33
- def redirect_to_next(next_step, options = {})
41
+ def redirect_to_next(next_step, options = {}, params = {})
34
42
  if next_step.nil?
35
- redirect_to_finish_wizard(options)
43
+ redirect_to_finish_wizard(options, params)
36
44
  else
37
- redirect_to wizard_path(next_step), options
45
+ redirect_to wizard_path(next_step, params), options
38
46
  end
39
47
  end
40
48
 
41
49
  # TODO redirect to resource if one is passed to render_wizard
42
- def finish_wizard_path
43
- '/'
50
+ def finish_wizard_path(params = {})
51
+ url = '/'
52
+ url = "#{url}?#{params.to_query}" unless params.blank?
53
+ url
44
54
  end
45
55
 
46
- def redirect_to_finish_wizard(options = {})
47
- Rails.logger.debug("Wizard has finished, redirecting to finish_wizard_path: #{finish_wizard_path.inspect}")
48
- redirect_to finish_wizard_path, options
56
+ def redirect_to_finish_wizard(options = {}, params = {})
57
+ wicked_final_redirect_path = method(:finish_wizard_path).arity == 1 ? finish_wizard_path(params) : finish_wizard_path
58
+ Rails.logger.debug("Wizard has finished, redirecting to finish_wizard_path: #{wicked_final_redirect_path.inspect}")
59
+ # flash.keep is required for Rails 3 where a flash message is lost on a second redirect.
60
+ flash.keep
61
+ redirect_to wicked_final_redirect_path, options
49
62
  end
50
63
  end
51
-
@@ -3,12 +3,14 @@ module Wicked::Controller::Concerns::Steps
3
3
 
4
4
  extend ActiveSupport::Concern
5
5
 
6
- def jump_to(goto_step)
7
- @skip_to = goto_step
6
+ def jump_to(goto_step, options = {})
7
+ @skip_to = goto_step
8
+ @wicked_redirect_params = options
8
9
  end
9
10
 
10
- def skip_step
11
- @skip_to = @next_step
11
+ def skip_step(options = {})
12
+ @skip_to = @next_step
13
+ @wicked_redirect_params = options
12
14
  end
13
15
 
14
16
  def step
@@ -50,8 +52,8 @@ module Wicked::Controller::Concerns::Steps
50
52
  options = args.extract_options!
51
53
  steps = args
52
54
  check_protected!(steps)
53
- prepend_before_filter(options) do
54
- self.steps = steps
55
+ prepend_before_action(options) do
56
+ self.steps = steps.dup
55
57
  end
56
58
  end
57
59
 
@@ -79,31 +81,24 @@ module Wicked::Controller::Concerns::Steps
79
81
  index = steps.index(current_step)
80
82
  step = steps.at(index - 1) if index.present? && index != 0
81
83
  step ||= steps.first
82
- step
83
84
  end
84
85
 
85
-
86
86
  def next_step(current_step = nil)
87
87
  return @next_step if current_step.nil?
88
88
  index = steps.index(current_step)
89
89
  step = steps.at(index + 1) if index.present?
90
90
  step ||= Wicked::FINISH_STEP
91
- step
92
91
  end
93
92
 
94
- private
95
-
96
- def step_index_for(step_name)
93
+ private def step_index_for(step_name)
97
94
  steps.index(step_name)
98
95
  end
99
96
 
100
- def current_step_index
97
+ private def current_step_index
101
98
  step_index_for(step)
102
99
  end
103
100
 
104
- def current_and_given_step_exists?(step_name)
105
- return false if current_step_index.nil? || steps.index(step_name).nil?
106
- return true
101
+ private def current_and_given_step_exists?(step_name)
102
+ current_step_index.present? && steps.index(step_name).present?
107
103
  end
108
104
  end
109
-
@@ -0,0 +1,3 @@
1
+ module Wicked
2
+ VERSION = "2.0.0"
3
+ end
@@ -5,8 +5,8 @@ module Wicked
5
5
  include Wicked::Wizard
6
6
 
7
7
  included do
8
- skip_before_filter :setup_wizard
9
- before_filter :setup_wizard_translated
8
+ skip_before_action :setup_wizard
9
+ before_action :setup_wizard_translated
10
10
 
11
11
  helper_method :wizard_translate, :wizard_value
12
12
  end
@@ -57,7 +57,6 @@ module Wicked
57
57
  end
58
58
 
59
59
 
60
- private
61
60
  # sets up a translated wizard controller
62
61
  # translations are expected under the 'wicked' namespace
63
62
  #
@@ -74,12 +73,10 @@ module Wicked
74
73
  #
75
74
  # steps "wicked.first", "wicked.second"
76
75
  #
77
- def setup_wizard_translated
76
+ private def setup_wizard_translated
78
77
  self.steps = wizard_translations.keys # must come before setting previous/next steps
79
78
  setup_wizard
80
79
  end
81
- public
82
80
  end
83
81
  end
84
82
  end
85
-
data/lib/wicked/wizard.rb CHANGED
@@ -3,14 +3,18 @@ module Wicked
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  class InvalidStepError < RuntimeError
6
- def initialize
7
- super "The requested step did not match any steps defined for this controller."
6
+ attr_accessor :step
7
+
8
+ def initialize(step = nil)
9
+ self.step = step
10
+
11
+ super "The requested step did not match any steps defined for this controller: #{step.inspect}"
8
12
  end
9
13
  end
10
14
 
11
15
  class UndefinedStepsError < RuntimeError
12
16
  def initialize
13
- super "No step definitions have been supplied; if setting via `before_filter`, use `prepend_before_filter`"
17
+ super "No step definitions have been supplied; if setting via `before_action`, use `prepend_before_action`"
14
18
  end
15
19
  end
16
20
 
@@ -20,19 +24,19 @@ module Wicked
20
24
  include Wicked::Controller::Concerns::Steps
21
25
 
22
26
  included do
27
+ include Wicked::Controller::Concerns::Action
23
28
  # Give our Views helper methods!
24
- helper_method :wizard_path, :next_wizard_path, :previous_wizard_path,
25
- :step, :wizard_steps, :current_step?,
26
- :past_step?, :future_step?, :previous_step?,
27
- :next_step?
29
+ helper_method :wizard_path, :wizard_url, :next_wizard_path, :next_wizard_url, :previous_wizard_path,
30
+ :previous_wizard_url, :step, :wizard_steps, :current_step?, :past_step?, :future_step?,
31
+ :next_step?, :previous_step?
32
+
28
33
  # Set @step and @next_step variables
29
- before_filter :setup_wizard
34
+ before_action :initialize_wicked_variables, :setup_wizard
30
35
  end
31
36
 
32
37
  # forward to first step with whatever params are provided
33
38
  def index
34
- query_string = "?#{request.query_parameters.to_query}" if request.query_parameters.any?
35
- redirect_to "#{ wizard_path(steps.first) }#{ query_string || '' }"
39
+ redirect_to wizard_path(steps.first, request.query_parameters)
36
40
  end
37
41
 
38
42
  # returns the canonical value for a step name, needed for translation support
@@ -40,43 +44,44 @@ module Wicked
40
44
  step_name
41
45
  end
42
46
 
43
- private
47
+ private def initialize_wicked_variables
48
+ @skip_to = nil
49
+ @wicked_redirect_params = nil
50
+ end
44
51
 
45
- def check_redirect_to_first_last!(step)
52
+ private def check_redirect_to_first_last!(step)
46
53
  redirect_to wizard_path(steps.first) if step.to_s == Wicked::FIRST_STEP
47
54
  redirect_to wizard_path(steps.last) if step.to_s == Wicked::LAST_STEP
48
55
  end
49
56
 
50
- def setup_step_from(the_step)
57
+ private def setup_step_from(the_step)
51
58
  return if steps.nil?
52
59
 
53
60
  the_step ||= steps.first
54
61
  check_redirect_to_first_last!(the_step)
55
62
 
56
63
  valid_steps = steps + self.class::PROTECTED_STEPS
57
- the_step = valid_steps.detect { |stp| stp.to_s == the_step }
64
+ resolved_step = valid_steps.detect { |stp| stp.to_s == the_step }
58
65
 
59
- raise InvalidStepError if the_step.nil?
60
- the_step
66
+ raise InvalidStepError.new(the_step) if resolved_step.nil?
67
+ resolved_step
61
68
  end
62
69
 
63
- def check_steps!
70
+ private def check_steps!
64
71
  raise UndefinedStepsError if steps.nil?
65
72
  end
66
73
 
67
- def set_previous_next(step)
68
- @previous_step = previous_step(@step)
69
- @next_step = next_step(@step)
74
+ private def set_previous_next(step)
75
+ @previous_step = previous_step(step)
76
+ @next_step = next_step(step)
70
77
  end
71
78
 
72
- def setup_wizard
79
+ private def setup_wizard
73
80
  check_steps!
74
81
  return if params[:id].nil?
75
82
 
76
83
  @step = setup_step_from(params[:id])
77
84
  set_previous_next(@step)
78
85
  end
79
- public
80
86
  end
81
87
  end
82
-
@@ -32,7 +32,6 @@ class Wicked::WizardController < ApplicationController
32
32
  # @user.update_attributes(params[:user])
33
33
  # end
34
34
  # sign_in(@user, :bypass => true) # needed for devise
35
- # render_wizard
35
+ # render_wizard @user
36
36
  # end
37
37
  end
38
-
data/lib/wicked.rb CHANGED
@@ -13,6 +13,7 @@ module Wicked
13
13
  end
14
14
  module Wizard
15
15
  end
16
+ autoload :WizardController, "wicked/wizard_controller"
16
17
  end
17
18
 
18
19
  class WickedError < StandardError; end
@@ -21,7 +22,7 @@ class WickedProtectedStepError < WickedError; end
21
22
  require 'wicked/controller/concerns/render_redirect'
22
23
  require 'wicked/controller/concerns/steps'
23
24
  require 'wicked/controller/concerns/path'
25
+ require 'wicked/controller/concerns/action'
24
26
  require 'wicked/wizard'
25
27
  require 'wicked/wizard/translated'
26
28
  require 'wicked/engine'
27
-
@@ -1,13 +1,14 @@
1
1
  require 'test_helper'
2
2
 
3
- class BarControllerTest < ActionController::TestCase
3
+ class BarControllerTest < WickedControllerTestCase
4
+
4
5
  test 'index redirects to the first step' do
5
6
  get :index
6
7
  assert_redirected_to bar_path(:first)
7
8
  end
8
9
 
9
10
  test 'index redirects to the first step, preserving query args' do
10
- get :index, :some => 'arguments', :were => 'passed'
11
+ get :index, params: { :some => 'arguments', :were => 'passed' }
11
12
  assert_redirected_to bar_path(:first, :some => 'arguments', :were => 'passed')
12
13
  end
13
14
  end
@@ -0,0 +1,18 @@
1
+ require 'test_helper'
2
+
3
+ class StatusCodesControllerTest < WickedControllerTestCase
4
+ test 'returns successful status code for show' do
5
+ get :show, params: { id: 'good' }
6
+ assert_response(:success)
7
+ end
8
+
9
+ test 'returns correct status code for successfuly update' do
10
+ put :update, params: { id: 'good' }
11
+ assert_response(:redirect)
12
+ end
13
+
14
+ test 'returns correct status code for failed update' do
15
+ put :update, params: { id: 'bad' }
16
+ assert_response(:unprocessable_entity)
17
+ end
18
+ end
@@ -0,0 +1,27 @@
1
+ require 'test_helper'
2
+
3
+ class UpdatesControllerTest < WickedControllerTestCase
4
+ test 'redirect from first step to second step' do
5
+ put :update, params: {:id => 'first'}
6
+ assert_redirected_to update_path(:second)
7
+ assert_equal 'Thing was updated from step first.', flash[:notice]
8
+ end
9
+
10
+ test 'redirect from second step to final step' do
11
+ put :update, params: {:id => 'second'}
12
+ assert_redirected_to update_path(:last_step)
13
+ assert_equal 'Thing was updated from step second.', flash[:notice]
14
+ end
15
+
16
+ test 'redirect from last_step to root path' do
17
+ put :update, params: {:id => 'last_step'}
18
+ assert_redirected_to update_path(:wicked_finish)
19
+ assert_equal 'Thing was updated from step last_step.', flash[:notice]
20
+ end
21
+
22
+ test 'redirect from wicked_finish to root path' do
23
+ get :show, params: {:id => Wicked::FINISH_STEP}, flash: {:notice => "flash from last_step"}
24
+ assert_redirected_to updates_path
25
+ assert_equal 'flash from last_step', flash[:notice]
26
+ end
27
+ end
@@ -1,7 +1,10 @@
1
1
  class ApplicationController < ActionController::Base
2
2
  protect_from_forgery
3
- before_filter :pull_out_locale
4
-
3
+ if respond_to? :before_action
4
+ before_action :pull_out_locale
5
+ else
6
+ before_filter :pull_out_locale
7
+ end
5
8
 
6
9
  def pull_out_locale
7
10
  I18n.locale = params[:locale] if params[:locale].present?
@@ -0,0 +1,18 @@
1
+ class DynamicDifferentStepsController < ApplicationController
2
+ include Wicked::Wizard
3
+
4
+ before_action :set_steps
5
+ before_action :setup_wizard
6
+
7
+ def show
8
+ render_wizard
9
+ end
10
+
11
+
12
+ private
13
+ def set_steps
14
+ self.steps = if params[:steps]
15
+ params[:steps]
16
+ end
17
+ end
18
+ end
@@ -1,6 +1,6 @@
1
1
  class DynamicStepsController < ApplicationController
2
2
  include Wicked::Wizard
3
- prepend_before_filter :set_steps
3
+ prepend_before_action :set_steps
4
4
 
5
5
  def show
6
6
  render_wizard
@@ -5,8 +5,8 @@ class JumpController < ApplicationController
5
5
  steps :first, :second, :last_step
6
6
 
7
7
  def show
8
- skip_step if params[:skip_step]
9
- jump_to :last_step if params[:jump_to]
8
+ skip_step(skip_step_options) if params[:skip_step]
9
+ jump_to :last_step, skip_step_options if params[:jump_to]
10
10
  if params[:resource]
11
11
  value = params[:resource][:save] == 'true'
12
12
  @bar = Bar.new(value)
@@ -19,4 +19,11 @@ class JumpController < ApplicationController
19
19
  def update
20
20
  end
21
21
 
22
+ private
23
+
24
+ def skip_step_options
25
+ options = params[:skip_step_options]
26
+ options.permit! if options.respond_to? :permitted?
27
+ options
28
+ end
22
29
  end
@@ -17,4 +17,4 @@ class RedirectToNextController < ApplicationController
17
17
  def update
18
18
  end
19
19
 
20
- end
20
+ end
@@ -0,0 +1,39 @@
1
+ class StatusCodesController < ApplicationController
2
+ include Wicked::Wizard
3
+
4
+ class GoodThing
5
+ def save
6
+ true
7
+ end
8
+ end
9
+
10
+ class BadThing
11
+ def save
12
+ false
13
+ end
14
+ end
15
+
16
+ steps :good, :bad
17
+
18
+ def index; end
19
+
20
+ def show
21
+ render_wizard
22
+ end
23
+
24
+ def update
25
+ case step
26
+ when :good
27
+ @thing = GoodThing.new
28
+ when :bad
29
+ @thing = BadThing.new
30
+ end
31
+ render_wizard(@thing, notice: "Thing was updated from step #{step}.")
32
+ end
33
+
34
+ private
35
+
36
+ def finish_wizard_path
37
+ updates_path
38
+ end
39
+ end
@@ -0,0 +1,30 @@
1
+ class UpdateParamsController < ApplicationController
2
+ include Wicked::Wizard
3
+
4
+ class Thing
5
+ def save
6
+ true
7
+ end
8
+ end
9
+
10
+ steps :first, :second, :last_step
11
+
12
+ def index
13
+
14
+ end
15
+
16
+ def show
17
+ render_wizard(nil, {}, { one: 'two' })
18
+ end
19
+
20
+ def update
21
+ @thing = Thing.new
22
+ render_wizard(@thing, { notice: "Thing was updated from step #{step}." }, { one: 'two' })
23
+ end
24
+
25
+ private
26
+
27
+ def finish_wizard_path(params)
28
+ update_params_path(params)
29
+ end
30
+ end
@@ -0,0 +1,30 @@
1
+ class UpdatesController < ApplicationController
2
+ include Wicked::Wizard
3
+
4
+ class Thing
5
+ def save
6
+ true
7
+ end
8
+ end
9
+
10
+ steps :first, :second, :last_step
11
+
12
+ def index
13
+
14
+ end
15
+
16
+ def show
17
+ render_wizard
18
+ end
19
+
20
+ def update
21
+ @thing = Thing.new
22
+ render_wizard(@thing, notice: "Thing was updated from step #{step}.")
23
+ end
24
+
25
+ private
26
+
27
+ def finish_wizard_path
28
+ updates_path
29
+ end
30
+ end
@@ -4,4 +4,6 @@ first
4
4
  <%= "params[:foo] #{params[:foo]}" %>
5
5
  <%= link_to 'last', wizard_path(:last_step) %>
6
6
  <%= link_to 'current', wizard_path %>
7
- <%= link_to 'skip', next_wizard_path %>
7
+ <%= link_to 'current url', wizard_url %>
8
+ <%= link_to 'skip', next_wizard_path %>
9
+ <%= link_to 'next url', next_wizard_url %>
@@ -1,3 +1,4 @@
1
1
  second
2
2
 
3
- <%= link_to 'previous', previous_wizard_path %>
3
+ <%= link_to 'previous', previous_wizard_path %>
4
+ <%= link_to 'previous url', previous_wizard_url %>
@@ -0,0 +1,3 @@
1
+ <%= step.inspect %>
2
+ <br />
3
+ <%= wizard_steps.inspect %>
@@ -1 +1,3 @@
1
- last_step
1
+ last_step
2
+
3
+ <%= params.inspect %>
@@ -1 +1,3 @@
1
- second
1
+ second
2
+
3
+ <%= params.inspect %>
@@ -0,0 +1 @@
1
+ bad step
@@ -0,0 +1 @@
1
+ good step
@@ -0,0 +1,16 @@
1
+ <% wizard_steps.each do |s| %>
2
+ <%= s.inspect %>
3
+ <%= I18n.t("wicked.#{s}") %>
4
+ <p>
5
+ <strong><u><%= s.inspect %></u></strong><br />
6
+ <%= current_step?(s) ? "#{s} step is the current step" : "nope" %><br />
7
+ <%= past_step?(s) ? "#{s} step is a past step" : "nope" %><br />
8
+ <%= future_step?(s) ? "#{s} step is a future step" : "nope" %><br />
9
+ <%= previous_step?(s) ? "#{s} step was the previous step" : "nope" %><br />
10
+ <%= next_step?(s) ? "#{s} step is the next step" : "nope" %><br />
11
+ </p>
12
+ <% end %>
13
+
14
+ <%= form_tag update_param_path(step, {one: 'two'}), :method => :put do %>
15
+ <%= submit_tag "Next" %>
16
+ <% end %>
@@ -0,0 +1 @@
1
+ <%= render 'step_position' %>
@@ -0,0 +1 @@
1
+ Index page.
@@ -0,0 +1 @@
1
+ <%= render 'step_position' %>
@@ -0,0 +1 @@
1
+ <%= render 'step_position' %>
@@ -0,0 +1,16 @@
1
+ <% wizard_steps.each do |s| %>
2
+ <%= s.inspect %>
3
+ <%= I18n.t("wicked.#{s}") %>
4
+ <p>
5
+ <strong><u><%= s.inspect %></u></strong><br />
6
+ <%= current_step?(s) ? "#{s} step is the current step" : "nope" %><br />
7
+ <%= past_step?(s) ? "#{s} step is a past step" : "nope" %><br />
8
+ <%= future_step?(s) ? "#{s} step is a future step" : "nope" %><br />
9
+ <%= previous_step?(s) ? "#{s} step was the previous step" : "nope" %><br />
10
+ <%= next_step?(s) ? "#{s} step is the next step" : "nope" %><br />
11
+ </p>
12
+ <% end %>
13
+
14
+ <%= form_tag update_path(step, {one: 'two'}), :method => :put do %>
15
+ <%= submit_tag "Next" %>
16
+ <% end %>
@@ -0,0 +1 @@
1
+ <%= render 'step_position' %>
@@ -0,0 +1 @@
1
+ Index page.
@@ -0,0 +1 @@
1
+ <%= render 'step_position' %>
@@ -0,0 +1 @@
1
+ <%= render 'step_position' %>