jeffp-wizardly 0.1.8 → 0.1.8.1
Sign up to get free protection for your applications and to get access to all the features.
data/lib/validation_group.rb
CHANGED
@@ -43,7 +43,18 @@ module ValidationGroup
|
|
43
43
|
end
|
44
44
|
|
45
45
|
module InstanceMethods # included in every model which calls validation_group
|
46
|
-
|
46
|
+
#needs testing
|
47
|
+
# def reset_validation_group(group)
|
48
|
+
# group_classes = self.class.validation_group_classes
|
49
|
+
# found = ValidationGroup::Util.current_and_ancestors(self.class).find do |klass|
|
50
|
+
# group_classes[klass] && group_classes[klass].include?(group)
|
51
|
+
# end
|
52
|
+
# if found
|
53
|
+
# group_classes[found][group].each do |field|
|
54
|
+
# self[field] = nil
|
55
|
+
# end
|
56
|
+
# end
|
57
|
+
# end
|
47
58
|
def enable_validation_group(group)
|
48
59
|
# Check if given validation group is defined for current class or one of
|
49
60
|
# its ancestors
|
@@ -32,18 +32,5 @@ module Wizardly
|
|
32
32
|
public
|
33
33
|
def wizard_config; self.class.wizard_config; end
|
34
34
|
|
35
|
-
private
|
36
|
-
def reset_wizard_session_vars
|
37
|
-
session[:progression] = nil
|
38
|
-
init = session[:initial_referer]
|
39
|
-
session[:initial_referer] = nil
|
40
|
-
init
|
41
|
-
end
|
42
|
-
|
43
|
-
# better name: underscore_button_name, changes submit_tag button names like
|
44
|
-
# 'Next Step' ==> 'next_step', used to identify callback methods
|
45
|
-
def methodize_button_name(value)
|
46
|
-
value.to_s.strip.squeeze(' ').gsub(/ /, '_').downcase
|
47
|
-
end
|
48
35
|
end
|
49
36
|
end
|
@@ -62,6 +62,8 @@ MACRO
|
|
62
62
|
page = @pages[id]
|
63
63
|
finish_button = self.button_for_function(:finish).id
|
64
64
|
next_button = self.button_for_function(:next).id
|
65
|
+
model_persist_line = self.persist_model_per_page? ? 'save_wizard_model!' : ''
|
66
|
+
|
65
67
|
(mb = StringIO.new) << <<-ONE
|
66
68
|
def #{page.name}
|
67
69
|
begin
|
@@ -104,8 +106,7 @@ MACRO
|
|
104
106
|
redirect_to #{Utils.formatted_redirect(self.completed_redirect)} unless self.performed?
|
105
107
|
return
|
106
108
|
end
|
107
|
-
|
108
|
-
# session[:progression] = [:#{id}]
|
109
|
+
#{model_persist_line}
|
109
110
|
return if callback_performs_action?(:on_#{id}_form_#{next_button})
|
110
111
|
redirect_to :action=>:#{self.next_page(id)}
|
111
112
|
THREE
|
@@ -117,8 +118,7 @@ MACRO
|
|
117
118
|
redirect_to #{Utils.formatted_redirect(self.completed_redirect)} unless self.performed?
|
118
119
|
return
|
119
120
|
end
|
120
|
-
|
121
|
-
# session[:progression].push(:#{id})
|
121
|
+
#{model_persist_line}
|
122
122
|
return if callback_performs_action?(:on_#{id}_form_#{next_button})
|
123
123
|
redirect_to :action=>:#{self.next_page(id)}
|
124
124
|
FOUR
|
@@ -126,7 +126,7 @@ MACRO
|
|
126
126
|
|
127
127
|
mb << <<-ENSURE
|
128
128
|
ensure
|
129
|
-
self.wizard_form_data = h.merge(@#{self.model}.attributes) if (@#{self.model} && !@
|
129
|
+
self.wizard_form_data = h.merge(@#{self.model}.attributes) if (@#{self.model} && !@wizard_completed_flag)
|
130
130
|
end
|
131
131
|
end
|
132
132
|
ENSURE
|
@@ -142,25 +142,26 @@ ENSURE
|
|
142
142
|
protected
|
143
143
|
def _on_wizard_#{finish}
|
144
144
|
@#{self.model}.save_without_validation!
|
145
|
-
@
|
145
|
+
@wizard_completed_flag = true
|
146
146
|
reset_wizard_form_data
|
147
147
|
_wizard_final_redirect_to(:completed)
|
148
148
|
end
|
149
149
|
def _on_wizard_#{skip}
|
150
|
+
session[:progression] = (session[:progression]||[]) - [@step]
|
150
151
|
redirect_to(:action=>wizard_config.next_page(@step)) unless self.performed?
|
151
152
|
end
|
152
|
-
def _on_wizard_#{back}
|
153
|
-
|
154
|
-
# redirect_to(:action=>((session[:progression]||[]).pop || :#{self.page_order.first})) unless self.performed?
|
155
|
-
redirect_to(:action=>wizard_config.previous_page(@step)) unless self.performed?
|
153
|
+
def _on_wizard_#{back}
|
154
|
+
redirect_to(:action=>(previous_in_progression_from(@step) || :#{self.page_order.first})) unless self.performed?
|
156
155
|
end
|
157
156
|
def _on_wizard_#{cancel}
|
158
157
|
_wizard_final_redirect_to(:canceled)
|
159
158
|
end
|
160
|
-
def _wizard_final_redirect_to(
|
161
|
-
initial_referer =
|
159
|
+
def _wizard_final_redirect_to(type)
|
160
|
+
initial_referer = (type == :canceled && wizard_config.form_data_keep_in_session?) ?
|
161
|
+
session[:initial_referer] :
|
162
|
+
reset_wizard_session_vars
|
162
163
|
unless self.performed?
|
163
|
-
redir = (
|
164
|
+
redir = (type == :canceled ? wizard_config.canceled_redirect : wizard_config.completed_redirect) || initial_referer
|
164
165
|
return redirect_to(redir) if redir
|
165
166
|
raise Wizardly::RedirectNotDefinedError, "No redirect was defined for completion or canceling the wizard. Use :completed and :canceled options to define redirects.", caller
|
166
167
|
end
|
@@ -173,27 +174,73 @@ ENSURE
|
|
173
174
|
next_id = self.button_for_function(:next).id
|
174
175
|
finish_id = self.button_for_function(:finish).id
|
175
176
|
first_page = self.page_order.first
|
176
|
-
guard_line =
|
177
|
-
|
177
|
+
guard_line = self.guard? ? '' : 'return check_progression #guard entry disabled'
|
178
|
+
mb = StringIO.new
|
179
|
+
mb << <<-PROGRESSION
|
178
180
|
protected
|
179
|
-
def
|
181
|
+
def previous_in_progression_from(step)
|
182
|
+
po = wizard_config.page_order
|
183
|
+
p = session[:progression]||[]
|
184
|
+
p -= po[po.index(step)..-1]
|
185
|
+
session[:progression] = p
|
186
|
+
p.last
|
187
|
+
end
|
188
|
+
def check_progression
|
189
|
+
p = session[:progression]||[]
|
190
|
+
a = params[:action].to_sym
|
191
|
+
return if p.last == a
|
192
|
+
po = wizard_config.page_order
|
193
|
+
return unless (ai = po.index(a))
|
194
|
+
p -= po[ai..-1]
|
195
|
+
p << a
|
196
|
+
session[:progression] = p
|
197
|
+
end
|
198
|
+
PROGRESSION
|
199
|
+
if self.form_data_keep_in_session?
|
200
|
+
mb << <<-SESSION
|
201
|
+
# for :form_data=>:session
|
202
|
+
def guard_entry
|
180
203
|
if (r = request.env['HTTP_REFERER'])
|
181
204
|
h = ::ActionController::Routing::Routes.recognize_path(URI.parse(r).path)
|
182
|
-
return if (h[:controller]||'') == '#{self.controller_name}'
|
183
|
-
session[:initial_referer]
|
184
|
-
else
|
185
|
-
session[:initial_referer] = nil
|
205
|
+
return check_progression if (h[:controller]||'') == '#{self.controller_name}'
|
206
|
+
session[:initial_referer] ||= h
|
186
207
|
end
|
187
|
-
|
188
|
-
|
208
|
+
# coming from outside the controller
|
209
|
+
#{guard_line}
|
210
|
+
if (params[:action] == '#{first_page}' || params[:action] == 'index')
|
211
|
+
return check_progression
|
212
|
+
elsif self.wizard_form_data
|
213
|
+
p = session[:progression]||[]
|
214
|
+
return check_progression if p.include?(params[:action].to_sym)
|
215
|
+
return redirect_to(:action=>(p.last||:#{first_page}))
|
216
|
+
end
|
217
|
+
redirect_to :action=>:#{first_page}
|
218
|
+
end
|
219
|
+
hide_action :guard_entry
|
220
|
+
|
221
|
+
SESSION
|
222
|
+
else
|
223
|
+
mb << <<-SANDBOX
|
224
|
+
# for :form_data=>:sandbox
|
225
|
+
def guard_entry
|
226
|
+
if (r = request.env['HTTP_REFERER'])
|
227
|
+
h = ::ActionController::Routing::Routes.recognize_path(URI.parse(r).path)
|
228
|
+
return check_progression if (h[:controller]||'') == '#{self.controller_name}'
|
229
|
+
session[:initial_referer] = h
|
189
230
|
else
|
190
|
-
|
231
|
+
session[:initial_referer] = nil
|
191
232
|
end
|
233
|
+
# coming from outside the controller
|
234
|
+
reset_wizard_form_data
|
192
235
|
#{guard_line}
|
193
|
-
redirect_to
|
236
|
+
return redirect_to(:action=>:#{first_page}) unless (params[:action] || '') == '#{first_page}'
|
237
|
+
check_progression
|
194
238
|
end
|
195
239
|
hide_action :guard_entry
|
196
240
|
|
241
|
+
SANDBOX
|
242
|
+
end
|
243
|
+
mb << <<-HELPERS
|
197
244
|
def save_wizard_model!
|
198
245
|
@#{self.model}.save_without_validation!
|
199
246
|
if wizard_config.form_data_keep_in_session?
|
@@ -238,11 +285,24 @@ ENSURE
|
|
238
285
|
def performed?; super; end
|
239
286
|
hide_action :performed?
|
240
287
|
|
288
|
+
def underscore_button_name(value)
|
289
|
+
value.to_s.strip.squeeze(' ').gsub(/ /, '_').downcase
|
290
|
+
end
|
291
|
+
hide_action :underscore_button_name
|
292
|
+
|
293
|
+
def reset_wizard_session_vars
|
294
|
+
session[:progression] = nil
|
295
|
+
init = session[:initial_referer]
|
296
|
+
session[:initial_referer] = nil
|
297
|
+
init
|
298
|
+
end
|
299
|
+
hide_action :reset_wizard_session_vars
|
300
|
+
|
241
301
|
def check_action_for_button
|
242
302
|
button_id = nil
|
243
303
|
#check if params[:commit] has returned a button from submit_tag
|
244
304
|
unless (params[:commit] == nil)
|
245
|
-
button_name =
|
305
|
+
button_name = underscore_button_name(params[:commit])
|
246
306
|
unless [:#{next_id}, :#{finish_id}].include?(button_id = button_name.to_sym)
|
247
307
|
action_method_name = "on_" + params[:action].to_s + "_form_" + button_name
|
248
308
|
callback_performs_action?(action_method_name)
|
@@ -259,11 +319,6 @@ ENSURE
|
|
259
319
|
end
|
260
320
|
hide_action :check_action_for_button
|
261
321
|
|
262
|
-
@wizard_callbacks ||= {}
|
263
|
-
class << self
|
264
|
-
attr_reader :wizard_callbacks
|
265
|
-
end
|
266
|
-
|
267
322
|
def callback_performs_action?(methId, arg=nil)
|
268
323
|
return false unless self.methods.include?(methId.to_s)
|
269
324
|
#self.__send__(methId)
|
@@ -273,6 +328,7 @@ ENSURE
|
|
273
328
|
hide_action :callback_performs_action?
|
274
329
|
|
275
330
|
HELPERS
|
331
|
+
mb.string
|
276
332
|
end
|
277
333
|
end
|
278
334
|
end
|
@@ -13,19 +13,6 @@ class <%= controller_class_name %> < ApplicationController
|
|
13
13
|
|
14
14
|
<%= callback_macro_methods %>
|
15
15
|
|
16
|
-
private
|
17
|
-
def methodize_button_name(value)
|
18
|
-
value.to_s.strip.squeeze(' ').gsub(/ /, '_').downcase
|
19
|
-
end
|
20
|
-
|
21
|
-
def reset_wizard_session_vars
|
22
|
-
session[:progression] = nil
|
23
|
-
init = session[:initial_referer]
|
24
|
-
session[:initial_referer] = nil
|
25
|
-
init
|
26
|
-
end
|
27
|
-
hide_action :methodize_button_name, :reset_wizard_session_vars
|
28
|
-
|
29
16
|
public
|
30
17
|
def wizard_config; self.class.wizard_config; end
|
31
18
|
hide_action :wizard_config
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jeffp-wizardly
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.8
|
4
|
+
version: 0.1.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Patmon
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-08-
|
12
|
+
date: 2009-08-14 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|