wizard_controller 0.1.7 → 0.1.8
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +1 -0
- data/README.rdoc +19 -22
- data/lib/wizard_controller.rb +27 -12
- metadata +4 -4
- data/README +0 -3
data/History.txt
CHANGED
@@ -1,2 +1,3 @@
|
|
1
|
+
20100129: 0.1.8 Midwire added the direct_step action, and supporting 'direct_step_path' method, to allow handling of navigating to a step directly instead of always using next and previous.
|
1
2
|
20091102: 0.1.5 Changed session variable that stores redirect information, to avoid conflicts.
|
2
3
|
20090925: Packaged as Gem
|
data/README.rdoc
CHANGED
@@ -3,46 +3,48 @@
|
|
3
3
|
Wizard controller provides a base class (Inheriting from ActionController::Base)
|
4
4
|
that provides a DSL for quickly making Wizards.
|
5
5
|
|
6
|
-
In order for this to work, you need to have this standard route present:
|
7
|
-
|
8
|
-
map.connect ':controller/:action/:id'
|
9
|
-
|
10
6
|
VERY IMPORTANT!!! DONT OVERRIDE INDEX!
|
11
7
|
Doing so will break all functionality. WizardController works by defining an
|
12
8
|
"index" method that does all the work. To start a wizard, go to the "index" method.
|
13
9
|
|
14
10
|
=== Setup and Configuration
|
15
11
|
|
16
|
-
Add the gem configuration to
|
12
|
+
Add the following gem configuration to <tt>config/environment.rb</tt>
|
17
13
|
|
18
14
|
config.gem "wizard_controller"
|
19
15
|
|
16
|
+
Ensure the following is present in <tt>config/routes.rb</tt>
|
17
|
+
|
18
|
+
map.connect ':controller/:action/:id'
|
19
|
+
|
20
|
+
... or explicitly map the routes you want to use.
|
21
|
+
|
20
22
|
=== Example Controller
|
21
23
|
|
22
24
|
class ExampleController < Codeprimate::Wizard::Base
|
23
25
|
# Define the method names of the wixard steps
|
24
26
|
define_steps :page_one, :page_two, :page_three
|
25
|
-
|
27
|
+
|
26
28
|
# Specify where the Wizard should redirect upon completion.
|
27
29
|
set_finish_path "http://www.example.com/go_here_when_done.html"
|
28
|
-
|
30
|
+
|
29
31
|
|
30
32
|
# Ensure "index" is not defined!
|
31
33
|
# def index
|
32
34
|
# end
|
33
|
-
|
35
|
+
|
34
36
|
def start
|
35
37
|
# Create a "safe" index method for this controller, and handle it appropriately
|
36
38
|
end
|
37
|
-
|
39
|
+
|
38
40
|
def foobar
|
39
41
|
# You can define whatever actions you want. WizardController doesnt get in the way.
|
40
42
|
end
|
41
|
-
|
43
|
+
|
42
44
|
def page_one
|
43
45
|
# This is a regular action method. Create indiviual views for action methods.
|
44
46
|
end
|
45
|
-
|
47
|
+
|
46
48
|
def process_page_one
|
47
49
|
# Place logic to handle any output from page one here.
|
48
50
|
# No view will be shown for this
|
@@ -51,24 +53,24 @@ Add the gem configuration to your config/environment.rb
|
|
51
53
|
# Return false if you want to return to the page_one view
|
52
54
|
return true
|
53
55
|
end
|
54
|
-
|
56
|
+
|
55
57
|
def page_two
|
56
58
|
# Let's say this action/view is merely informative.
|
57
59
|
# We will not supply a process method, and the user will always be able
|
58
60
|
# to go to the next step
|
59
61
|
end
|
60
|
-
|
62
|
+
|
61
63
|
def page_three
|
62
64
|
# Just another step method here
|
63
65
|
end
|
64
|
-
|
66
|
+
|
65
67
|
def process_page_three
|
66
68
|
# Since this is the last step, if this process method returns true
|
67
69
|
# the user will be redirected to the URL specified in the
|
68
70
|
# "set_finish_path" declaration at the beginning of the Controller definition
|
69
71
|
end
|
70
72
|
end
|
71
|
-
|
73
|
+
|
72
74
|
=== View Helper Methods
|
73
75
|
|
74
76
|
* <tt>step_number()</tt>: Current step index.
|
@@ -77,11 +79,6 @@ Add the gem configuration to your config/environment.rb
|
|
77
79
|
* <tt>wizard_path()</tt>: Wizard index path. <b>THIS SHOULD BE THE ACTION PATH OF ALL FORMS/VIEWS WITH A "process" action.</b>
|
78
80
|
* <tt>next_step_path()</tt>: URL to the next step.
|
79
81
|
* <tt>previous_step_path()</tt>: URL to the previous step.
|
82
|
+
* <tt>direct_step_path()</tt>: URL to a direct step. Example for step 3: <code>direct_step_path(:id=>3)</code>. User will stay on the current step if they have not completed the one they are requesting.
|
80
83
|
* <tt>reset_wizard_path()</tt>: URL to reset the Wizard.
|
81
|
-
* <tt>abort_wizard_path()</tt>: URL to abort the Wizard.
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
84
|
+
* <tt>abort_wizard_path()</tt>: URL to abort the Wizard.
|
data/lib/wizard_controller.rb
CHANGED
@@ -1,24 +1,22 @@
|
|
1
|
-
module Codeprimate
|
2
|
-
VERSION = "0.1.7"
|
3
|
-
|
1
|
+
module Codeprimate
|
4
2
|
# = Wizard Controller
|
5
3
|
#
|
6
4
|
# Wizard controller provides a base class (Inheriting from ActionController::Base)
|
7
5
|
# that provides a DSL for quickly making Wizards.
|
8
6
|
#
|
9
|
-
# In order for this to work, you need to have this standard route present:
|
10
|
-
#
|
11
|
-
# map.connect ':controller/:action/:id'
|
12
|
-
#
|
13
7
|
# VERY IMPORTANT!!! DONT OVERRIDE INDEX!
|
14
8
|
# Doing so will break all functionality. WizardController works by defining an
|
15
9
|
# "index" method that does all the work. To start a wizard, go to the "index" method.
|
16
10
|
#
|
17
11
|
# === Setup and Configuration
|
18
12
|
#
|
19
|
-
# Add the gem configuration to
|
13
|
+
# Add the following gem configuration to <tt>config/environment.rb</tt>
|
20
14
|
#
|
21
15
|
# config.gem "wizard_controller"
|
16
|
+
#
|
17
|
+
# Ensure the following is present in <tt>config/routes.rb</tt>
|
18
|
+
#
|
19
|
+
# map.connect ':controller/:action/:id'
|
22
20
|
#
|
23
21
|
# === Example Controller
|
24
22
|
#
|
@@ -83,6 +81,7 @@ module Codeprimate
|
|
83
81
|
# * <tt>reset_wizard_path()</tt>: URL to reset the Wizard.
|
84
82
|
# * <tt>abort_wizard_path()</tt>: URL to abort the Wizard.
|
85
83
|
module Wizard
|
84
|
+
VERSION = "0.1.7"
|
86
85
|
|
87
86
|
class Base < ApplicationController
|
88
87
|
before_filter :restrict_access, :init_wizard_session
|
@@ -151,6 +150,17 @@ module Codeprimate
|
|
151
150
|
redirect_to :action => :index
|
152
151
|
end
|
153
152
|
|
153
|
+
# Internal.
|
154
|
+
def direct_step
|
155
|
+
step = params[:id].to_i
|
156
|
+
if step_completed(step)
|
157
|
+
set_current_wizard_step([1, step].max)
|
158
|
+
else
|
159
|
+
flash[:error] ||= self.class.wizard_default_error
|
160
|
+
end
|
161
|
+
redirect_to :action => :index
|
162
|
+
end
|
163
|
+
|
154
164
|
# Public action to reset the wizard
|
155
165
|
def reset
|
156
166
|
reset_wizard
|
@@ -199,7 +209,7 @@ module Codeprimate
|
|
199
209
|
end
|
200
210
|
|
201
211
|
def restrict_access
|
202
|
-
['index', 'next_step', 'previous_step', 'reset'].include?(params[:action])
|
212
|
+
['index', 'next_step', 'previous_step', 'direct_step', 'reset'].include?(params[:action])
|
203
213
|
end
|
204
214
|
|
205
215
|
def execute_method(m=current_wizard_step_method)
|
@@ -234,9 +244,14 @@ module Codeprimate
|
|
234
244
|
url_for(:controller => self.controller_name, :action => :previous_step)
|
235
245
|
end
|
236
246
|
|
247
|
+
helper_method :direct_step_path
|
248
|
+
def direct_step_path(step)
|
249
|
+
url_for(:controller => self.controller_name, :action => :direct_step, :id => step)
|
250
|
+
end
|
251
|
+
|
237
252
|
helper_method :step_completed
|
238
|
-
def step_completed
|
239
|
-
session[:wizard][self.class.to_s][:completed][
|
253
|
+
def step_completed(direct_step = current_wizard_step)
|
254
|
+
session[:wizard][self.class.to_s][:completed][direct_step] == true
|
240
255
|
end
|
241
256
|
|
242
257
|
helper_method :wizard_path
|
@@ -273,7 +288,7 @@ module Codeprimate
|
|
273
288
|
def decr_step
|
274
289
|
set_current_wizard_step([1, (current_wizard_step - 1)].max)
|
275
290
|
end
|
276
|
-
|
291
|
+
|
277
292
|
def current_wizard_step_method
|
278
293
|
self.class.wizard_steps[(current_wizard_step - 1)]
|
279
294
|
end
|
metadata
CHANGED
@@ -1,20 +1,21 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wizard_controller
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Patrick Morgan
|
8
|
+
- Midwire
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
12
|
|
12
|
-
date:
|
13
|
+
date: 2010-02-02 00:00:00 -06:00
|
13
14
|
default_executable:
|
14
15
|
dependencies: []
|
15
16
|
|
16
17
|
description: Wizard Controller is an inheritable class to ease the creation of Wizards
|
17
|
-
email: patrick.morgan@masterwebdesign.net
|
18
|
+
email: patrick.morgan@masterwebdesign.net midwire@midwire.com
|
18
19
|
executables: []
|
19
20
|
|
20
21
|
extensions: []
|
@@ -22,7 +23,6 @@ extensions: []
|
|
22
23
|
extra_rdoc_files: []
|
23
24
|
|
24
25
|
files:
|
25
|
-
- README
|
26
26
|
- README.rdoc
|
27
27
|
- History.txt
|
28
28
|
- lib/wizard_controller.rb
|
data/README
DELETED