wicked 0.3.4 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of wicked might be problematic. Click here for more details.
- data/CHANGELOG.md +5 -1
- data/README.md +132 -119
- data/VERSION +1 -1
- data/lib/wicked/controller/concerns/render_redirect.rb +1 -1
- data/lib/wicked/controller/concerns/steps.rb +1 -1
- data/lib/wicked/wizard.rb +7 -5
- data/lib/wicked/wizard/translated.rb +4 -4
- data/test/dummy/app/controllers/dynamic_steps_controller.rb +1 -1
- data/test/dummy/app/controllers/steps_controller.rb +7 -0
- data/test/integration/dynamic_steps_test.rb +1 -1
- data/wicked.gemspec +2 -2
- metadata +21 -21
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
## 0.4.0
|
2
|
+
* User imputs no longer converted to symbol this mitigates risk of DoS
|
3
|
+
via symbol table or RAM (symbols are not garbage collected).
|
4
|
+
|
1
5
|
## 0.3.4
|
2
6
|
* Dynamic steps officially supported and tested
|
3
7
|
|
@@ -63,4 +67,4 @@
|
|
63
67
|
|
64
68
|
## 0.0.1
|
65
69
|
|
66
|
-
* First Release
|
70
|
+
* First Release
|
data/README.md
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
![](http://cl.ly/image/3O2i1P061o3y/content.png)
|
2
|
+
|
3
|
+
# Step-By-Step Wizard Controllers
|
2
4
|
|
3
5
|
[![Build Status](https://secure.travis-ci.org/schneems/wicked.png)](http://travis-ci.org/schneems/wicked) [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/schneems/wicked)
|
4
6
|
|
@@ -13,7 +15,7 @@ Many times I'm left wanting a RESTful way to display a step by step process that
|
|
13
15
|
Add this to your Gemfile
|
14
16
|
|
15
17
|
```ruby
|
16
|
-
|
18
|
+
gem 'wicked'
|
17
19
|
```
|
18
20
|
|
19
21
|
Then run `bundle install` and you're ready to start
|
@@ -29,27 +31,29 @@ Then run `bundle install` and you're ready to start
|
|
29
31
|
|
30
32
|
## How
|
31
33
|
|
32
|
-
We are going to build an 'after signup' wizard.
|
34
|
+
We are going to build an 'after signup' wizard. If you don't have a `current_user` then check out how to [Build a step-by-step object with Wicked](https://github.com/schneems/wicked/wiki/Building-Partial-Objects-Step-by-Step).
|
35
|
+
|
36
|
+
First create a controller:
|
33
37
|
|
34
38
|
```
|
35
|
-
|
39
|
+
rails g controller after_signup
|
36
40
|
```
|
37
41
|
|
38
42
|
Add Routes into `config/routes.rb`:
|
39
43
|
|
40
44
|
```ruby
|
41
|
-
|
45
|
+
resources :after_signup
|
42
46
|
```
|
43
47
|
|
44
48
|
Next include `Wicked::Wizard` in your controller
|
45
49
|
|
46
50
|
```ruby
|
47
51
|
|
48
|
-
|
49
|
-
|
52
|
+
class AfterSignupController < ApplicationController
|
53
|
+
include Wicked::Wizard
|
50
54
|
|
51
|
-
|
52
|
-
|
55
|
+
steps :confirm_password, :confirm_profile, :find_friends
|
56
|
+
# ...
|
53
57
|
|
54
58
|
```
|
55
59
|
|
@@ -57,30 +61,30 @@ You can also use the old way of inheriting from `Wicked::WizardController`.
|
|
57
61
|
|
58
62
|
```ruby
|
59
63
|
|
60
|
-
|
64
|
+
class AfterSignupController < Wicked::WizardController
|
61
65
|
|
62
|
-
|
63
|
-
|
66
|
+
steps :confirm_password, :confirm_profile, :find_friends
|
67
|
+
# ...
|
64
68
|
|
65
69
|
```
|
66
70
|
|
67
71
|
The wizard is set to call steps in order in the show action, you can specify custom logic in your show using a case statement like below. To send someone to the first step in this wizard we can direct them to `after_signup_path(:confirm_password)`.
|
68
72
|
|
69
73
|
```ruby
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
end
|
81
|
-
render_wizard
|
74
|
+
class AfterSignupController < ApplicationController
|
75
|
+
include Wicked::Wizard
|
76
|
+
|
77
|
+
steps :confirm_password, :confirm_profile, :find_friends
|
78
|
+
|
79
|
+
def show
|
80
|
+
@user = current_user
|
81
|
+
case step
|
82
|
+
when :find_friends
|
83
|
+
@friends = @user.find_friends
|
82
84
|
end
|
85
|
+
render_wizard
|
83
86
|
end
|
87
|
+
end
|
84
88
|
```
|
85
89
|
|
86
90
|
**Note:** Wicked uses the `:id` parameter to control the flow of steps, if you need to have an id parameter, please use nested routes see [building objects with wicked](https://github.com/schneems/wicked/wiki/Partial-Validation-of-Active-Record-Objects) for an example. It will need to be prefixed, for example a Product's `:id` would be `:product_id`
|
@@ -91,35 +95,35 @@ By default the wizard will render a view with the same name as the step. So for
|
|
91
95
|
|
92
96
|
Then in your view you can use the helpers to get to the next step.
|
93
97
|
|
94
|
-
```
|
95
|
-
|
98
|
+
```erb
|
99
|
+
<%= link_to 'skip', next_wizard_path %>
|
96
100
|
```
|
97
101
|
|
98
102
|
You can manually specify which wizard action you want to link to by using the wizard_path helper.
|
99
103
|
|
100
|
-
```
|
101
|
-
|
104
|
+
```erb
|
105
|
+
<%= link_to 'skip', wizard_path(:find_friends) %>
|
102
106
|
```
|
103
107
|
|
104
108
|
In addition to showing sequential views we can update elements in our controller.
|
105
109
|
|
106
110
|
|
107
111
|
```ruby
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
end
|
119
|
-
sign_in(@user, :bypass => true) # needed for devise
|
120
|
-
render_wizard @user
|
112
|
+
class AfterSignupController < ApplicationController
|
113
|
+
include Wicked::Wizard
|
114
|
+
|
115
|
+
steps :confirm_password, :confirm_profile, :find_friends
|
116
|
+
|
117
|
+
def update
|
118
|
+
@user = current_user
|
119
|
+
case step
|
120
|
+
when :confirm_password
|
121
|
+
@user.update_attributes(params[:user])
|
121
122
|
end
|
123
|
+
sign_in(@user, :bypass => true) # needed for devise
|
124
|
+
render_wizard @user
|
122
125
|
end
|
126
|
+
end
|
123
127
|
```
|
124
128
|
|
125
129
|
We're passing `render_wizard` our `@user` object here. If you pass an object into `render_wizard` it will show the next step if the object saves or re-render the previous view if it does not save.
|
@@ -127,15 +131,13 @@ We're passing `render_wizard` our `@user` object here. If you pass an object int
|
|
127
131
|
|
128
132
|
To get to this update action, you simply need to submit a form that PUT's to the same url
|
129
133
|
|
130
|
-
```
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
<%= f.password_field :password_confirmation %>
|
135
|
-
|
136
|
-
<%= f.submit "Change Password" %>
|
137
|
-
<% end %>
|
134
|
+
```erb
|
135
|
+
<%= form_for @user, :url => wizard_path, :method => :put do |f| %>
|
136
|
+
<%= f.password_field :password %>
|
137
|
+
<%= f.password_field :password_confirmation %>
|
138
138
|
|
139
|
+
<%= f.submit "Change Password" %>
|
140
|
+
<% end %>
|
139
141
|
```
|
140
142
|
|
141
143
|
We explicitly tell the form to PUT above. If you forget this, you will get a warning about the create action not existing, or no route found for POST. Don't forget this.
|
@@ -144,20 +146,18 @@ We explicitly tell the form to PUT above. If you forget this, you will get a war
|
|
144
146
|
In the controller if you find that you want to skip a step, you can do it simply by calling `skip_step`
|
145
147
|
|
146
148
|
```ruby
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
skip_step
|
156
|
-
end
|
149
|
+
def show
|
150
|
+
@user = current_user
|
151
|
+
case step
|
152
|
+
when :find_friends
|
153
|
+
if @user.has_facebook_access_token?
|
154
|
+
@friends = @user.find_friends
|
155
|
+
else
|
156
|
+
skip_step
|
157
157
|
end
|
158
|
-
render_wizard
|
159
158
|
end
|
160
|
-
|
159
|
+
render_wizard
|
160
|
+
end
|
161
161
|
```
|
162
162
|
|
163
163
|
Now you've got a fully functioning AfterSignup controller! If you have questions or if you struggled with something, let me know on [twitter](http://twitter.com/schneems), and i'll try to make it better or make the docs better.
|
@@ -167,26 +167,25 @@ Now you've got a fully functioning AfterSignup controller! If you have questions
|
|
167
167
|
View/URL Helpers
|
168
168
|
|
169
169
|
```ruby
|
170
|
+
wizard_path # Grabs the current path in the wizard
|
171
|
+
wizard_path(:specific_step) # Url of the :specific_step
|
172
|
+
next_wizard_path # Url of the next step
|
173
|
+
previous_wizard_path # Url of the previous step
|
170
174
|
|
171
|
-
|
172
|
-
|
173
|
-
next_wizard_path # Url of the next step
|
174
|
-
previous_wizard_path # Url of the previous step
|
175
|
-
|
176
|
-
# These only work while in a Wizard, and are not absolute paths
|
177
|
-
# You can have multiple wizards in a project with multiple `wizard_path` calls
|
175
|
+
# These only work while in a Wizard, and are not absolute paths
|
176
|
+
# You can have multiple wizards in a project with multiple `wizard_path` calls
|
178
177
|
```
|
179
178
|
|
180
179
|
|
181
180
|
Controller Tidbits:
|
182
181
|
|
183
182
|
```ruby
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
183
|
+
steps :first, :second # Sets the order of steps
|
184
|
+
step # Gets symbol of current step
|
185
|
+
next_step # Gets symbol of next step
|
186
|
+
skip_step # Tells render_wizard to skip to the next logical step
|
187
|
+
render_wizard # Renders the current step
|
188
|
+
render_wizard(@user) # Shows next_step if @user.save, otherwise renders current step
|
190
189
|
```
|
191
190
|
|
192
191
|
|
@@ -195,8 +194,8 @@ Finally:
|
|
195
194
|
Don't forget to create your named views
|
196
195
|
|
197
196
|
```
|
198
|
-
|
199
|
-
|
197
|
+
app/
|
198
|
+
views/
|
200
199
|
controller_name/
|
201
200
|
first.html.erb
|
202
201
|
second.html.erb
|
@@ -209,21 +208,21 @@ Don't forget to create your named views
|
|
209
208
|
You can specify the url that your user goes to by over-riding the `finish_wizard_path` in your wizard controller.
|
210
209
|
|
211
210
|
|
212
|
-
```
|
213
|
-
|
214
|
-
|
215
|
-
|
211
|
+
```ruby
|
212
|
+
def finish_wizard_path
|
213
|
+
user_path(current_user)
|
214
|
+
end
|
216
215
|
```
|
217
216
|
|
218
217
|
|
219
218
|
### Testing with RSpec
|
220
219
|
|
221
220
|
```ruby
|
222
|
-
|
223
|
-
|
221
|
+
# Test find_friends block of show action
|
222
|
+
get :show, :id => :find_friends
|
224
223
|
|
225
|
-
|
226
|
-
|
224
|
+
# Test find_friends block of update action
|
225
|
+
put :update, {'id' => 'find_friends', "user" => { "id" => @user.id.to_s }}
|
227
226
|
```
|
228
227
|
|
229
228
|
|
@@ -231,11 +230,15 @@ You can specify the url that your user goes to by over-riding the `finish_wizard
|
|
231
230
|
|
232
231
|
If your site works in multiple languages, or if you just want more control over how your URL's look you can now use I18n with wicked. To do so you need to replace this:
|
233
232
|
|
234
|
-
|
233
|
+
```ruby
|
234
|
+
include Wicked::Wizard
|
235
|
+
```
|
235
236
|
|
236
237
|
With this:
|
237
238
|
|
238
|
-
|
239
|
+
```ruby
|
240
|
+
include Wicked::Wizard::Translated
|
241
|
+
```
|
239
242
|
|
240
243
|
This will allow you to specify translation keys instead of literal step names. Let's say you've got steps that look like this:
|
241
244
|
|
@@ -245,26 +248,29 @@ So the urls would be `/after_signup/first` and `/after_signup/second`. But you w
|
|
245
248
|
|
246
249
|
To internationalize first you need to create your locales files under `config/locales` such as `config/locales/es.yml` for Spanish. You then need to add a `first` and `second` key under a `wicked` key like this:
|
247
250
|
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
251
|
+
```yaml
|
252
|
+
es:
|
253
|
+
hello: "hola mundo"
|
254
|
+
wicked:
|
255
|
+
first: "uno"
|
256
|
+
second: "dos"
|
257
|
+
```
|
253
258
|
|
254
259
|
It would also be a good idea to create a english version under `config/locales/en.yml` or your english speaking friends will get errors. If your app already uses I18n you don't need to do anything else, if not you will need to make sure that you set the `I18n.locale` on each request you could do this somewhere like a before filter in your application_controller.rb
|
255
260
|
|
261
|
+
```ruby
|
262
|
+
before_filter :set_locale
|
256
263
|
|
257
|
-
|
264
|
+
private
|
258
265
|
|
259
|
-
|
266
|
+
def set_locale
|
267
|
+
I18n.locale = params[:locale] if params[:locale].present?
|
268
|
+
end
|
260
269
|
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
def default_url_options(options = {})
|
266
|
-
{locale: I18n.locale}
|
267
|
-
end
|
270
|
+
def default_url_options(options = {})
|
271
|
+
{locale: I18n.locale}
|
272
|
+
end
|
273
|
+
```
|
268
274
|
|
269
275
|
For a screencast on setting up and using I18n check out [Railscasts](http://railscasts.com/episodes/138-i18n-revised). You can also read the [free I18n Rails Guide](http://guides.rubyonrails.org/i18n.html).
|
270
276
|
|
@@ -276,19 +282,25 @@ Wicked expects your files to be named the same as your keys, so when a user visi
|
|
276
282
|
|
277
283
|
Very similar to using I18n from above but instead of making new files for different languages, you can stick with one language. Make sure you are using the right module:
|
278
284
|
|
279
|
-
|
285
|
+
```ruby
|
286
|
+
include Wicked::Wizard::Translated
|
287
|
+
```
|
280
288
|
|
281
289
|
Then you'll need to specify translations in your language file. For me, the language I'm using is english so I can add translations to `config/locales/en.yml`
|
282
290
|
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
291
|
+
```yaml
|
292
|
+
en:
|
293
|
+
hello: "hello world"
|
294
|
+
wicked:
|
295
|
+
first: "verify_email"
|
296
|
+
second: "if_you_are_popular_add_friends"
|
297
|
+
```
|
288
298
|
|
289
299
|
Now you can change the values in the URL's to whatever you want without changing your controller or your files, just modify your `en.yml`. If you're not using English you can set your default_locale to something other than `en` in your `config/application.rb` file.
|
290
300
|
|
291
|
-
|
301
|
+
```ruby
|
302
|
+
config.i18n.default_locale = :de
|
303
|
+
```
|
292
304
|
|
293
305
|
Custom crafted wizard urls: just another way Wicked makes your app a little more saintly.
|
294
306
|
|
@@ -296,22 +308,23 @@ Custom crafted wizard urls: just another way Wicked makes your app a little more
|
|
296
308
|
|
297
309
|
If you wish to set the order of your steps dynamically you can do this with a `prepend_before_filter` and `self.steps =` like this:
|
298
310
|
|
299
|
-
```
|
300
|
-
|
301
|
-
|
311
|
+
```ruby
|
312
|
+
include Wicked::Wizard
|
313
|
+
prepend_before_filter :set_steps
|
302
314
|
|
303
|
-
|
315
|
+
# ...
|
304
316
|
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
end
|
317
|
+
private
|
318
|
+
def set_steps
|
319
|
+
if params[:flow] == "twitter"
|
320
|
+
self.steps = [:ask_twitter, :ask_email]
|
321
|
+
elsif params[:flow] == "facebook"
|
322
|
+
self.steps = [:ask_facebook, :ask_email]
|
312
323
|
end
|
324
|
+
end
|
313
325
|
```
|
314
326
|
|
327
|
+
Note: Do not pass user submitted params directly into `self.steps` while using the custom or translated urls. The translator calls `to_sym` on steps provided, and if a user is allowed to submit arbitrary symbols, they could flood the take down your production app by filling up the symbol table. So just don't do it.
|
315
328
|
|
316
329
|
## About
|
317
330
|
|
@@ -319,4 +332,4 @@ Please poke around the source code, if you see easier ways to get a Rails contro
|
|
319
332
|
|
320
333
|
If you have a question file an issue or, find me on the Twitters [@schneems](http://twitter.com/schneems).
|
321
334
|
|
322
|
-
This project rocks and uses MIT-LICENSE.
|
335
|
+
This project rocks and uses MIT-LICENSE.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
@@ -23,7 +23,7 @@ module Wicked::Controller::Concerns::RenderRedirect
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def render_step(the_step, options = {})
|
26
|
-
if the_step.nil? || the_step ==
|
26
|
+
if the_step.nil? || the_step.to_s == 'finish'
|
27
27
|
redirect_to_finish_wizard options
|
28
28
|
else
|
29
29
|
render the_step, options
|
@@ -25,7 +25,7 @@ module Wicked::Controller::Concerns::Steps
|
|
25
25
|
current_step_index > step_index_for(step_name)
|
26
26
|
end
|
27
27
|
|
28
|
-
# will return true if the step passed in has
|
28
|
+
# will return true if the step passed in has not been executed by the wizard
|
29
29
|
def future_step?(step_name)
|
30
30
|
return false unless current_and_given_step_exists?(step_name)
|
31
31
|
current_step_index < step_index_for(step_name)
|
data/lib/wicked/wizard.rb
CHANGED
@@ -29,14 +29,15 @@ module Wicked
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def check_redirect_to_first_last!(step)
|
32
|
-
redirect_to wizard_path(steps.first) if step ==
|
33
|
-
redirect_to wizard_path(steps.last) if step ==
|
32
|
+
redirect_to wizard_path(steps.first) if step.to_s == 'wizard_first'
|
33
|
+
redirect_to wizard_path(steps.last) if step.to_s == 'wizard_last'
|
34
34
|
end
|
35
35
|
|
36
36
|
def setup_step_from(the_step)
|
37
|
-
the_step = the_step
|
37
|
+
the_step = the_step || steps.try(:first)
|
38
38
|
check_redirect_to_first_last!(the_step)
|
39
|
-
|
39
|
+
step = steps.detect {|stp| stp.to_s == the_step } if steps.present? && the_step.present?
|
40
|
+
return step || the_step
|
40
41
|
end
|
41
42
|
|
42
43
|
def check_steps!(the_step)
|
@@ -52,4 +53,5 @@ module Wicked
|
|
52
53
|
end
|
53
54
|
public
|
54
55
|
end
|
55
|
-
end
|
56
|
+
end
|
57
|
+
|
@@ -10,8 +10,8 @@ module Wicked
|
|
10
10
|
end
|
11
11
|
|
12
12
|
# creates a hash where keys are translated steps, values are the name of the view file
|
13
|
-
# {:first=>"first", :second=>"second"}
|
14
|
-
# {:uno=>"first",
|
13
|
+
# {:first => "first", :second => "second"}
|
14
|
+
# {:uno => "first", :dos => "second"}
|
15
15
|
#
|
16
16
|
def wizard_translations
|
17
17
|
@wizard_translations ||= steps.inject(ActiveSupport::OrderedHash.new) do |hash, step|
|
@@ -41,9 +41,9 @@ module Wicked
|
|
41
41
|
# steps "wicked.first", "wicked.second"
|
42
42
|
#
|
43
43
|
def setup_wizard_translated
|
44
|
+
self.steps = wizard_translations.keys # must come before setting previous/next steps
|
44
45
|
step_name = setup_step_from(params[:id])
|
45
46
|
check_steps!(step_name)
|
46
|
-
self.steps = wizard_translations.keys # must come before setting previous/next steps
|
47
47
|
@previous_step = previous_step(step_name)
|
48
48
|
@next_step = next_step(step_name)
|
49
49
|
@step = wizard_translations[step_name] # translates step name to url
|
@@ -51,4 +51,4 @@ module Wicked
|
|
51
51
|
public
|
52
52
|
end
|
53
53
|
end
|
54
|
-
end
|
54
|
+
end
|
@@ -2,7 +2,7 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
class DynamicStepsTest < ActiveSupport::IntegrationCase
|
4
4
|
test 'set dynamic steps from params' do
|
5
|
-
steps = [
|
5
|
+
steps = ['first', 'second']
|
6
6
|
visit dynamic_steps_path(:steps => steps)
|
7
7
|
assert has_content?(steps.first.inspect)
|
8
8
|
assert has_content?(steps.inspect)
|
data/wicked.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "wicked"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["schneems"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2013-01-16"
|
13
13
|
s.description = "Wicked is a Rails engine for producing easy wizard controllers"
|
14
14
|
s.email = "richard.schneeman@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wicked
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-01-16 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
16
|
-
requirement: &
|
16
|
+
requirement: &70204702345240 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 3.0.7
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70204702345240
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rails
|
27
|
-
requirement: &
|
27
|
+
requirement: &70204702344580 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 3.0.7
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70204702344580
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
requirement: &
|
38
|
+
requirement: &70204702343980 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70204702343980
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: jeweler
|
49
|
-
requirement: &
|
49
|
+
requirement: &70204702341060 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.6.4
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70204702341060
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rcov
|
60
|
-
requirement: &
|
60
|
+
requirement: &70204702340560 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70204702340560
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: capybara
|
71
|
-
requirement: &
|
71
|
+
requirement: &70204702340040 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 0.4.0
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70204702340040
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: launchy
|
82
|
-
requirement: &
|
82
|
+
requirement: &70204702339560 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70204702339560
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: sqlite3
|
93
|
-
requirement: &
|
93
|
+
requirement: &70204702339020 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70204702339020
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: activerecord-jdbcsqlite3-adapter
|
104
|
-
requirement: &
|
104
|
+
requirement: &70204702338540 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *70204702338540
|
113
113
|
description: Wicked is a Rails engine for producing easy wizard controllers
|
114
114
|
email: richard.schneeman@gmail.com
|
115
115
|
executables: []
|
@@ -217,7 +217,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
217
217
|
version: '0'
|
218
218
|
segments:
|
219
219
|
- 0
|
220
|
-
hash:
|
220
|
+
hash: -2935823026133279485
|
221
221
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
222
222
|
none: false
|
223
223
|
requirements:
|