cucumber_scaffold 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest CHANGED
@@ -9,4 +9,5 @@ lib/generators/cucumber_scaffold/feature/templates/feature.feature
9
9
  lib/generators/cucumber_scaffold/feature/templates/steps.rb
10
10
  lib/generators/cucumber_scaffold/install/USAGE
11
11
  lib/generators/cucumber_scaffold/install/install_generator.rb
12
- lib/generators/cucumber_scaffold/install/templates/shared/web_steps_additional.rb
12
+ lib/generators/cucumber_scaffold/install/templates/step_definitions/web_steps_additional.rb
13
+ lib/generators/cucumber_scaffold/install/templates/support/table_helpers.rb
@@ -4,14 +4,29 @@
4
4
 
5
5
  == Usage
6
6
 
7
+ Install the support files (you should also do this when updating the gem):
8
+
7
9
  $ rails generate cucumber_scaffold:install
8
- $ rails generate cucumber_scaffold:feature Post name:string body:text
10
+
11
+ Run the built-in Rails scaffold generator:
12
+
13
+ $ rails generate scaffold Post name:string body:text rating:integer published:boolean
14
+
15
+ Then run the cucumber_scaffold generator with the same parameters:
16
+
17
+ $ rails generate cucumber_scaffold:feature Post name:string body:text rating:integer published:boolean
18
+
19
+ == Notes
20
+
21
+ * By default the generated features are targeted at the Rails scaffold generator
22
+ * Only tested with Rails 3 and Capybara (not webrat)
23
+ * Only supports string, text, integer and boolean fields at present
9
24
 
10
25
  == Sample Output
11
26
 
12
27
  # Generated by cucumber_scaffold - http://github.com/andyw8/cucumber_scaffold
13
28
 
14
- Feature: Manage Posts
29
+ Feature: Manage posts
15
30
  In order to [goal]
16
31
  [stakeholder]
17
32
  wants [behaviour]
@@ -19,64 +34,77 @@
19
34
  @index
20
35
  Scenario: List all posts
21
36
  Given the following posts:
22
- | name | body |
23
- | name 1 | body 1 |
24
- | name 2 | body 2 |
25
- | name 3 | body 3 |
37
+ | name | body | rating | published |
38
+ | name 1 | body 1 | 11 | true |
39
+ | name 2 | body 2 | 12 | true |
40
+ | name 3 | body 3 | 13 | true |
26
41
  When I go to the posts page
27
42
  Then I should see the following posts:
28
- | Name | Body |
29
- | name 1 | body 1 |
30
- | name 2 | body 2 |
31
- | name 3 | body 3 |
43
+ | Name | Body | Rating | Published |
44
+ | name 1 | body 1 | 11 | true |
45
+ | name 2 | body 2 | 12 | true |
46
+ | name 3 | body 3 | 13 | true |
32
47
 
33
48
  @show
34
49
  Scenario: View a post
35
50
  Given the following post:
36
- | name | name 1 |
37
- | body | body 1 |
51
+ | name | name 10 |
52
+ | body | body 10 |
53
+ | rating | 20 |
54
+ | published | true |
38
55
  When I go to the page for that post
39
56
  Then I should see the following post:
40
- | Name: | name 1 |
41
- | Body: | body 1 |
57
+ | Name: | name 10 |
58
+ | Body: | body 10 |
59
+ | Rating: | 20 |
60
+ | Published: | true |
42
61
 
43
62
  @edit
44
63
  Scenario: Edit a post
45
64
  Given the following post:
46
- | name | name 1 |
47
- | body | body 1 |
65
+ | name | name 10 |
66
+ | body | body 10 |
67
+ | rating | 20 |
68
+ | published | true |
48
69
  When I go to the edit page for that post
49
70
  Then I should see the following form field values:
50
- | Name | name 1 |
51
- | Body | body 1 |
71
+ | Name | name 10 |
72
+ | Body | body 10 |
73
+ | Rating | 20 |
74
+ | Published | [x] |
52
75
 
53
76
  @index @destroy
54
77
  Scenario: Delete a post via the index page
55
78
  Given the following posts:
56
- | name | body |
57
- | name 1 | body 1 |
58
- | name 2 | body 2 |
59
- | name 3 | body 3 |
79
+ | name | body | rating | published |
80
+ | name 1 | body 1 | 11 | true |
81
+ | name 2 | body 2 | 12 | true |
82
+ | name 3 | body 3 | 13 | true |
60
83
  When I go to the posts page
61
84
  And I click "Destroy" in the 2nd row
62
85
  Then I should see the following posts:
63
- | Name | Body |
64
- | name 1 | body 1 |
65
- | name 3 | body 3 |
86
+ | Name | Body | Rating | Published |
87
+ | name 1 | body 1 | 11 | true |
88
+ | name 3 | body 3 | 13 | true |
66
89
  And I should be on the posts page
90
+
67
91
 
68
92
  @new @create @show
69
93
  Scenario: Create a new post
70
94
  Pending
71
95
  # Given I am on the new post page
72
- # When I fill in the following:
73
- # | Name | name 1 |
74
- # | Body | body 1 |
96
+ # When I fill in the form with:
97
+ # | Name | name 10 |
98
+ # | Body | body 10 |
99
+ # | Rating | 20 |
100
+ # | Published | [x] |
75
101
  # And I press "Create"
76
102
  # Then I should see "Post was successfully created."
77
103
  # And I should see the following post:
78
- # | Name: | name 1 |
79
- # | Body: | body 1 |
104
+ # | Name: | name 10 |
105
+ # | Body: | body 10 |
106
+ # | Rating: | 20 |
107
+ # | Published: | true |
80
108
  #
81
109
  # In order to confirm that the user is redirected to the correct page
82
110
  # after create, you'll need to add an entry to paths.rb to uniquely
@@ -101,18 +129,21 @@
101
129
  Pending
102
130
  # You should use this scenario as the basis for scenarios involving ActiveRecord validations, or delete it if it's not required
103
131
  # Given I am on the new post page
104
- # When I fill in the following:
105
- # | Name | name 1 |
106
- # | Body | body 1 |
132
+ # When I fill in the form with:
133
+ # | Name | name 10 |
134
+ # | Body | body 10 |
135
+ # | Rating | 20 |
136
+ # | Published | [x] |
107
137
  # And I press "Create"
108
138
  # Then I should see "prohibited this post from being saved:"
109
139
  #
110
140
  # [You should add checks for specific errors here. It may be appropriate to add extra scenarios.]
111
141
  #
112
- # And I should be on the posts page
113
142
  # And I should see the following form field values:
114
- # | Name: | name 1 |
115
- # | Body: | body 1 |
143
+ # | Name | name 10 |
144
+ # | Body | body 10 |
145
+ # | Rating | 20 |
146
+ # | Published | [x] |
116
147
 
117
148
  @edit @update
118
149
  Scenario: Attempt to update a post with invalid input
@@ -120,32 +151,43 @@
120
151
  # You should use this scenario as the basis for scenarios involving ActiveRecord validations, or delete it if it's not required
121
152
  # Given a post exists
122
153
  # When I go to the edit page for that post
123
- # And I fill in the following:
124
- # | Name | name 1 |
125
- # | Body | body 1 |
154
+ # And I fill in the form with:
155
+ # | Name | name 10 |
156
+ # | Body | body 10 |
157
+ # | Rating | 20 |
158
+ # | Published | [x] |
126
159
  # And I press "Update"
127
160
  # Then I should see "prohibited this post from being saved:"
128
161
  #
129
162
  # [You should add checks for specific errors here. It may be appropriate to add extra scenarios.]
130
163
  #
131
- # And I should be on the page for that post
132
164
  # And I should see the following form field values:
133
- # | Name: | name 1 |
134
- # | Body: | body 1 |
165
+ # | Name | name 10 |
166
+ # | Body | body 10 |
167
+ # | Rating | 20 |
168
+ # | Published | [x] |
135
169
 
136
170
  @edit @update @show
137
171
  Scenario: Update a post
138
- Given a post exists
172
+ Given the following post:
173
+ | name | name 10 |
174
+ | body | body 10 |
175
+ | rating | 20 |
176
+ | published | true |
139
177
  When I go to the edit page for that post
140
- And I fill in the following:
141
- | Name | name 1 updated |
142
- | Body | body 1 updated |
178
+ And I fill in the form with:
179
+ | Name | name 10 updated |
180
+ | Body | body 10 updated |
181
+ | Rating | -20 |
182
+ | Published | [ ] |
143
183
  And I press "Update"
144
184
  Then I should be on the page for that post
145
185
  And I should see "Post was successfully updated."
146
186
  And I should see the following post:
147
- | Name: | name 1 updated |
148
- | Body: | body 1 updated |
187
+ | Name: | name 10 updated |
188
+ | Body: | body 10 updated |
189
+ | Rating: | -20 |
190
+ | Published: | false |
149
191
 
150
192
  @index @new
151
193
  Scenario: Navigate from the posts page to the new post page
@@ -156,10 +198,10 @@
156
198
  @index @show
157
199
  Scenario: Navigate from posts page to the show post page
158
200
  Given the following posts:
159
- | name | body |
160
- | name 1 | body 1 |
161
- | name 2 | body 2 |
162
- | name 3 | body 3 |
201
+ | name | body | rating | published |
202
+ | name 1 | body 1 | 11 | true |
203
+ | name 2 | body 2 | 12 | true |
204
+ | name 3 | body 3 | 13 | true |
163
205
  When I go to the posts page
164
206
  And I click "Show" in the 2nd row
165
207
  Then I should be on the page for the 2nd post
@@ -167,10 +209,10 @@
167
209
  @index @edit
168
210
  Scenario: Navigate from posts page to the edit post page
169
211
  Given the following posts:
170
- | name | body |
171
- | name 1 | body 1 |
172
- | name 2 | body 2 |
173
- | name 3 | body 3 |
212
+ | name | body | rating | published |
213
+ | name 1 | body 1 | 11 | true |
214
+ | name 2 | body 2 | 12 | true |
215
+ | name 3 | body 3 | 13 | true |
174
216
  When I go to the posts page
175
217
  And I click "Edit" in the 2nd row
176
218
  Then I should be on the edit page for the 2nd post
@@ -213,7 +255,7 @@
213
255
  Scenario: Posts page title
214
256
  When I go to the posts page
215
257
  Then the heading should be "Listing posts"
216
-
258
+
217
259
  @new
218
260
  Scenario: New post page title
219
261
  When I go to the new post page
@@ -224,3 +266,4 @@
224
266
  Given a post exists
225
267
  When I go to the edit page for that post
226
268
  Then the heading should be "Editing post"
269
+
data/Rakefile CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'rake'
3
3
  require 'echoe'
4
4
 
5
- Echoe.new('cucumber_scaffold', '0.1.2') do |p|
5
+ Echoe.new('cucumber_scaffold', '0.1.3') do |p|
6
6
  p.description = "Generate scaffolding for Cucumber features and steps definitions"
7
7
  p.url = "http://github.com/andyw8/cucumber_scaffold"
8
8
  p.author = "Andy Waite"
@@ -2,15 +2,15 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{cucumber_scaffold}
5
- s.version = "0.1.2"
5
+ s.version = "0.1.3"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Andy Waite"]
9
- s.date = %q{2010-11-07}
9
+ s.date = %q{2010-11-13}
10
10
  s.description = %q{Generate scaffolding for Cucumber features and steps definitions}
11
11
  s.email = %q{andy@andywaite.com}
12
- s.extra_rdoc_files = ["README.rdoc", "TODO", "lib/generators/cucumber_scaffold/feature/USAGE", "lib/generators/cucumber_scaffold/feature/feature_generator.rb", "lib/generators/cucumber_scaffold/feature/templates/feature.feature", "lib/generators/cucumber_scaffold/feature/templates/steps.rb", "lib/generators/cucumber_scaffold/install/USAGE", "lib/generators/cucumber_scaffold/install/install_generator.rb", "lib/generators/cucumber_scaffold/install/templates/shared/web_steps_additional.rb"]
13
- s.files = ["Manifest", "README.rdoc", "Rakefile", "TODO", "cucumber_scaffold.gemspec", "lib/generators/cucumber_scaffold/feature/USAGE", "lib/generators/cucumber_scaffold/feature/feature_generator.rb", "lib/generators/cucumber_scaffold/feature/templates/feature.feature", "lib/generators/cucumber_scaffold/feature/templates/steps.rb", "lib/generators/cucumber_scaffold/install/USAGE", "lib/generators/cucumber_scaffold/install/install_generator.rb", "lib/generators/cucumber_scaffold/install/templates/shared/web_steps_additional.rb"]
12
+ s.extra_rdoc_files = ["README.rdoc", "TODO", "lib/generators/cucumber_scaffold/feature/USAGE", "lib/generators/cucumber_scaffold/feature/feature_generator.rb", "lib/generators/cucumber_scaffold/feature/templates/feature.feature", "lib/generators/cucumber_scaffold/feature/templates/steps.rb", "lib/generators/cucumber_scaffold/install/USAGE", "lib/generators/cucumber_scaffold/install/install_generator.rb", "lib/generators/cucumber_scaffold/install/templates/step_definitions/web_steps_additional.rb", "lib/generators/cucumber_scaffold/install/templates/support/table_helpers.rb"]
13
+ s.files = ["Manifest", "README.rdoc", "Rakefile", "TODO", "cucumber_scaffold.gemspec", "lib/generators/cucumber_scaffold/feature/USAGE", "lib/generators/cucumber_scaffold/feature/feature_generator.rb", "lib/generators/cucumber_scaffold/feature/templates/feature.feature", "lib/generators/cucumber_scaffold/feature/templates/steps.rb", "lib/generators/cucumber_scaffold/install/USAGE", "lib/generators/cucumber_scaffold/install/install_generator.rb", "lib/generators/cucumber_scaffold/install/templates/step_definitions/web_steps_additional.rb", "lib/generators/cucumber_scaffold/install/templates/support/table_helpers.rb"]
14
14
  s.homepage = %q{http://github.com/andyw8/cucumber_scaffold}
15
15
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Cucumber_scaffold", "--main", "README.rdoc"]
16
16
  s.require_paths = ["lib"]
@@ -28,17 +28,17 @@ module CucumberScaffold
28
28
  template('steps.rb', "features/step_definitions/#{singular}_steps.rb")
29
29
 
30
30
  extra_paths = <<EOF
31
- when /edit page for that #{singular}/
31
+ when /edit page for that #{singular.humanize.downcase}/
32
32
  edit_#{singular}_path(@#{singular})
33
- when /page for that #{singular}/
34
- raise 'no #{singular}' unless @#{singular}
33
+ when /page for that #{singular.humanize.downcase}/
34
+ raise 'no #{singular.humanize.downcase}' unless @#{singular}
35
35
  #{singular}_path(@#{singular})
36
- when /edit page for the (\\d+)(?:st|nd|rd|th) #{singular}/
37
- raise 'no #{plural}' unless @#{plural}
36
+ when /edit page for the (\\d+)(?:st|nd|rd|th) #{singular.humanize.downcase}/
37
+ raise 'no #{plural.humanize.downcase}' unless @#{plural}
38
38
  nth_#{singular} = @#{plural}[$1.to_i - 1]
39
39
  edit_#{singular}_path(nth_#{singular})
40
- when /page for the (\\d+)(?:st|nd|rd|th) #{singular}/
41
- raise 'no #{plural}' unless @#{plural}
40
+ when /page for the (\\d+)(?:st|nd|rd|th) #{singular.humanize.downcase}/
41
+ raise 'no #{plural.humanize.downcase}' unless @#{plural}
42
42
  nth_#{singular} = @#{plural}[$1.to_i - 1]
43
43
  #{singular}_path(nth_#{singular})
44
44
  EOF
@@ -69,11 +69,11 @@ EOF
69
69
  end
70
70
 
71
71
  def singular_title
72
- singular.titleize
72
+ singular.humanize
73
73
  end
74
74
 
75
75
  def plural_title
76
- plural.titleize
76
+ plural.humanize
77
77
  end
78
78
 
79
79
  def activerecord_table_header_row
@@ -81,103 +81,116 @@ EOF
81
81
  end
82
82
 
83
83
  def html_table_header_row
84
- make_row(attribute_names.map(&:titleize))
84
+ make_row(attribute_names.map(&:humanize))
85
85
  end
86
86
 
87
87
  def attribute_names
88
- @attributes.collect {|a| a.first[0]}
88
+ @attributes.collect {|a| a.first[0].gsub('_', ' ')}
89
89
  end
90
90
 
91
- def html_single_resource(updated=nil, commented=nil)
91
+ def html_single_resource(options={})
92
92
  lines = []
93
93
  @attributes.each do |pair|
94
94
  attribute_name = pair.first[0]
95
- attribute_value = pair.first[1]
96
- lines << "| #{attribute_name.titleize}: | #{default_value(attribute_name, attribute_value, updated)} |"
95
+ attribute_type = pair.first[1]
96
+ default_value = default_value(:attribute_name => attribute_name, :attribute_type => attribute_type, :updated => options[:updated])
97
+
98
+ lines << "| #{attribute_name.humanize}: | #{default_value} |"
97
99
  end
98
- lines.join(commented ? LINE_BREAK_WITH_INDENT_COMMENTED : LINE_BREAK_WITH_INDENT)
100
+ lines.join(options[:commented] ? LINE_BREAK_WITH_INDENT_COMMENTED : LINE_BREAK_WITH_INDENT)
99
101
  end
100
102
 
101
103
  def form_single_resource_commented
102
- form_single_resource(false, true)
104
+ form_single_resource(:commented => true)
103
105
  end
104
106
 
105
107
  def html_single_resource_commented
106
- html_single_resource(false, true)
108
+ html_single_resource(:commented => true)
107
109
  end
108
110
 
109
- def form_single_resource(updated=nil, commented=nil)
111
+ def form_single_resource(options = {})
110
112
  lines = []
111
113
  @attributes.each do |pair|
112
114
  attribute_name = pair.first[0]
113
- attribute_value = pair.first[1]
114
- lines << "| #{attribute_name.titleize} | #{default_value(attribute_name, attribute_value, updated)} |"
115
+ attribute_type = pair.first[1]
116
+ lines << "| #{attribute_name.humanize} | #{default_value(:attribute_name => attribute_name, :attribute_type => attribute_type, :updated => options[:updated], :form => true)} |"
115
117
  end
116
- result = lines.join(commented ? LINE_BREAK_WITH_INDENT_COMMENTED : LINE_BREAK_WITH_INDENT)
118
+ result = lines.join(options[:commented] ? LINE_BREAK_WITH_INDENT_COMMENTED : LINE_BREAK_WITH_INDENT)
117
119
  end
118
120
 
119
- def activerecord_single_resource(updated=nil)
121
+ def activerecord_single_resource(options={})
120
122
  lines = []
121
123
  @attributes.each do |pair|
122
124
  attribute_name = pair.first[0]
123
- attribute_value = pair.first[1]
124
- lines << "| #{attribute_name} | #{default_value(attribute_name, attribute_value, updated)} |"
125
+ attribute_type = pair.first[1]
126
+ lines << "| #{attribute_name} | #{default_value(:attribute_name => attribute_name, :attribute_type => attribute_type, :updated =>options[:updated])} |"
125
127
  end
126
128
  lines.join(LINE_BREAK_WITH_INDENT)
127
129
  end
128
130
 
129
131
  def html_resources
130
132
  [html_table_header_row,
131
- html_table_row(1),
132
- html_table_row(2),
133
- html_table_row(3)].join(LINE_BREAK_WITH_INDENT)
133
+ html_table_row(:index => 1),
134
+ html_table_row(:index => 2),
135
+ html_table_row(:index => 3)].join(LINE_BREAK_WITH_INDENT)
134
136
  end
135
137
 
136
138
  def activerecord_resources
137
139
  [activerecord_table_header_row,
138
- activerecord_table_row(1),
139
- activerecord_table_row(2),
140
- activerecord_table_row(3)].join(LINE_BREAK_WITH_INDENT)
140
+ activerecord_table_row(:index => 1),
141
+ activerecord_table_row(:index => 2),
142
+ activerecord_table_row(:index => 3)].join(LINE_BREAK_WITH_INDENT)
141
143
  end
142
144
 
143
145
  def activerecord_single_resource_updated
144
- activerecord_single_resource(true)
146
+ activerecord_single_resource(:updated => true)
145
147
  end
146
148
 
147
149
  def form_single_resource_updated
148
- form_single_resource(true)
150
+ form_single_resource(:updated => true)
149
151
  end
150
152
 
151
153
  def html_single_resource_updated
152
- html_single_resource(true)
154
+ html_single_resource(:updated => true)
153
155
  end
154
156
 
155
- def default_value(attribute_name, attribute_type, updated=false, index=1)
157
+ def default_value(options={}) # attribute_name, attribute_type, updated=false, index=1
156
158
  # TODO use an options hash instead of all these arguments
157
- if ['string', 'text'].include?(attribute_type)
158
- result = "#{attribute_name} #{index}"
159
- result += ' updated' if updated
160
- elsif attribute_type == 'integer'
161
- result = 10 + index
162
- result = -result if updated
159
+
160
+ options[:index] ||= 10
161
+
162
+ if ['string', 'text'].include?(options[:attribute_type])
163
+ result = "#{options[:attribute_name].humanize.downcase} #{options[:index]}"
164
+ result += ' updated' if options[:updated]
165
+ elsif options[:attribute_type] == 'integer'
166
+ result = 10 + options[:index]
167
+ result = -result if options[:updated]
168
+ elsif options[:attribute_type] == 'boolean'
169
+ if options[:form]
170
+ result = '[x]'
171
+ result = '[ ]' if options[:updated]
172
+ else
173
+ result = true
174
+ result = false if options[:updated]
175
+ end
163
176
  else
164
- raise "Cannot create default value for attribute type '#{attribute_type}'"
177
+ raise "Cannot create default value for attribute type '#{options[:attribute_type]}'"
165
178
  end
166
179
  result
167
180
  end
168
181
 
169
- def activerecord_table_row(n)
182
+ def activerecord_table_row(options)
170
183
  data = []
171
184
  @attributes.each do |attribute|
172
185
  attribute_name = attribute.first[0]
173
186
  attribute_type = attribute.first[1]
174
- data << default_value(attribute_name, attribute_type, false, n)
187
+ data << default_value(:attribute_name => attribute_name, :attribute_type => attribute_type, :index => options[:index])
175
188
  end
176
189
  make_row(data)
177
190
  end
178
191
 
179
- def html_table_row(n)
180
- activerecord_table_row(n)
192
+ def html_table_row(options)
193
+ activerecord_table_row(options)
181
194
  end
182
195
 
183
196
  def tags(tags)
@@ -25,257 +25,256 @@ else
25
25
  edit_heading = "Editing #{singular}"
26
26
  new_heading = "New #{singular}"
27
27
  back_to_all = 'Back'
28
- problems_intro = "prohibited this post from being saved:"
28
+ problems_intro = "prohibited this #{singular} from being saved:"
29
29
  end
30
30
 
31
31
  pending_explanation_1 = "You should use this scenario as the basis for scenarios involving ActiveRecord validations, or delete it if it's not required"
32
32
  pending_explanation_2 = "[You should add checks for specific errors here. It may be appropriate to add extra scenarios.]"
33
33
  -%>
34
34
 
35
- Feature: Manage <%= plural_title %>
35
+ Feature: Manage <%= plural_title.humanize.downcase %>
36
36
  In order to [goal]
37
37
  [stakeholder]
38
38
  wants [behaviour]
39
39
 
40
40
  <%= tags('@index') %>
41
- Scenario: List all <%= plural %>
42
- Given the following <%= plural %>:
41
+ Scenario: List all <%= plural.humanize.downcase %>
42
+ Given the following <%= plural.humanize.downcase %>:
43
43
  <%= activerecord_table_header_row %>
44
- <%= activerecord_table_row(1) %>
45
- <%= activerecord_table_row(2) %>
46
- <%= activerecord_table_row(3) %>
47
- When I go to the <%= plural %> page
48
- Then I should see the following <%= plural %>:
44
+ <%= activerecord_table_row(:index => 1) %>
45
+ <%= activerecord_table_row(:index => 2) %>
46
+ <%= activerecord_table_row(:index => 3) %>
47
+ When I go to the <%= plural.humanize.downcase %> page
48
+ Then I should see the following <%= plural.humanize.downcase %>:
49
49
  <%= html_table_header_row %>
50
- <%= html_table_row(1) %>
51
- <%= html_table_row(2) %>
52
- <%= html_table_row(3) %>
50
+ <%= html_table_row(:index => 1) %>
51
+ <%= html_table_row(:index => 2) %>
52
+ <%= html_table_row(:index => 3) %>
53
53
 
54
54
  <%= tags('@show') %>
55
- Scenario: View a <%= singular %>
56
- Given the following <%= singular %>:
55
+ Scenario: View a <%= singular.humanize.downcase %>
56
+ Given the following <%= singular.humanize.downcase %>:
57
57
  <%= activerecord_single_resource %>
58
- When I go to the page for that <%= singular %>
59
- Then I should see the following <%= singular %>:
58
+ When I go to the page for that <%= singular.humanize.downcase %>
59
+ Then I should see the following <%= singular.humanize.downcase %>:
60
60
  <%= html_single_resource %>
61
61
 
62
62
  <%= tags('@edit') %>
63
- Scenario: Edit a <%= singular %>
64
- Given the following <%= singular %>:
63
+ Scenario: Edit a <%= singular.humanize.downcase %>
64
+ Given the following <%= singular.humanize.downcase %>:
65
65
  <%= activerecord_single_resource %>
66
- When I go to the edit page for that <%= singular %>
66
+ When I go to the edit page for that <%= singular.humanize.downcase %>
67
67
  Then I should see the following form field values:
68
68
  <%= form_single_resource %>
69
69
 
70
70
  <%= tags('@index @destroy') %>
71
- Scenario: Delete a <%= singular %> via the index page
72
- Given the following <%= plural %>:
71
+ Scenario: Delete a <%= singular.humanize.downcase %> via the index page
72
+ Given the following <%= plural.humanize.downcase %>:
73
73
  <%= activerecord_table_header_row %>
74
- <%= activerecord_table_row(1) %>
75
- <%= activerecord_table_row(2) %>
76
- <%= activerecord_table_row(3) %>
77
- When I go to the <%= plural %> page
74
+ <%= activerecord_table_row(:index => 1) %>
75
+ <%= activerecord_table_row(:index => 2) %>
76
+ <%= activerecord_table_row(:index => 3) %>
77
+ When I go to the <%= plural.humanize.downcase %> page
78
78
  And I click "Destroy" in the 2nd row
79
- Then I should see the following <%= plural %>:
79
+ Then I should see the following <%= plural.humanize.downcase %>:
80
80
  <%= html_table_header_row %>
81
- <%= activerecord_table_row(1) %>
82
- <%= activerecord_table_row(3) %>
83
- And I should be on the <%= plural %> page
81
+ <%= activerecord_table_row(:index => 1) %>
82
+ <%= activerecord_table_row(:index => 3) %>
83
+ And I should be on the <%= plural.humanize.downcase %> page
84
84
  <% if successful_destroy_message %>
85
85
  And I should see "<%= successful_destroy_message %>"
86
86
  <% end -%>
87
87
 
88
88
  <% if nifty? %>
89
89
  <%= tags('@show @destroy @index') %>
90
- Scenario: Delete a <%= singular %> via the show page
91
- Given the following <%= plural %>:
90
+ Scenario: Delete a <%= singular.humanize.downcase %> via the show page
91
+ Given the following <%= plural.humanize.downcase %>:
92
92
  <%= activerecord_table_header_row %>
93
- <%= activerecord_table_row(1) %>
94
- <%= activerecord_table_row(2) %>
95
- <%= activerecord_table_row(3) %>
93
+ <%= activerecord_table_row(:index => 1) %>
94
+ <%= activerecord_table_row(:index => 2) %>
95
+ <%= activerecord_table_row(:index => 3) %>
96
96
  When I go to the page for the 2nd post
97
97
  And I follow "Destroy"
98
- Then I should see the following <%= plural %>:
98
+ Then I should see the following <%= plural.humanize.downcase %>:
99
99
  <%= html_table_header_row %>
100
- <%= activerecord_table_row(1) %>
101
- <%= activerecord_table_row(3) %>
102
- And I should be on the <%= plural %> page
100
+ <%= activerecord_table_row(:index => 1) %>
101
+ <%= activerecord_table_row(:index => 3) %>
102
+ And I should be on the <%= plural.humanize.downcase %> page
103
103
  And I should see "<%= successful_destroy_message %>"
104
104
  <% end -%>
105
105
 
106
106
  <%= tags('@new @create @show') %>
107
- Scenario: Create a new <%= singular %>
107
+ Scenario: Create a new <%= singular.humanize.downcase %>
108
108
  Pending
109
- # Given I am on the new <%= singular %> page
110
- # When I fill in the following:
109
+ # Given I am on the new <%= singular.humanize.downcase %> page
110
+ # When I fill in the form with:
111
111
  # <%= form_single_resource_commented %>
112
112
  # And I press "<%= create_button_title %>"
113
113
  # Then I should see "<%= successful_create_message %>"
114
- # And I should see the following <%= singular %>:
114
+ # And I should see the following <%= singular.humanize.downcase %>:
115
115
  # <%= html_single_resource_commented %>
116
116
  #
117
117
  # In order to confirm that the user is redirected to the correct page
118
118
  # after create, you'll need to add an entry to paths.rb to uniquely
119
- # find a <%= singular %>, e.g.:
119
+ # find a <%= singular.humanize.downcase %>, e.g.:
120
120
  #
121
- # when /page for the <%= singular %> with name "([^"]*)"$/
121
+ # when /page for the <%= singular.humanize.downcase %> with name "([^"]*)"$/
122
122
  # conditions = { :conditions => {:name => $1} }
123
- # matches = <%= singular_title %>.all(conditions)
123
+ # matches = <%= singular.camelcase %>.all(conditions)
124
124
  # if matches.size == 0
125
- # raise "Could not find any <%= plural %> using criteria #{conditions.inspect}"
125
+ # raise "Could not find any <%= plural.humanize.downcase %> using criteria #{conditions.inspect}"
126
126
  # elsif matches.size > 1
127
- # raise "Could not find a unique <%= singular %> using criteria #{conditions.inspect} (#{matches.size} matches)"
127
+ # raise "Could not find a unique <%= singular.humanize.downcase %> using criteria #{conditions.inspect} (#{matches.size} matches)"
128
128
  # end
129
129
  # <%= singular %>_path(matches.first)
130
130
  #
131
131
  # Then add a step such as this to the scenario:
132
132
  #
133
- # And I should be on the page for the <%= singular %> with name "..."
133
+ # And I should be on the page for the <%= singular.humanize.downcase %> with name "..."
134
134
 
135
135
  <%= tags('@new @create') %>
136
- Scenario: Attempt to create a new <%= singular %> with invalid input
136
+ Scenario: Attempt to create a new <%= singular.humanize.downcase %> with invalid input
137
137
  Pending
138
138
  # <%= pending_explanation_1 %>
139
- # Given I am on the new <%= singular %> page
140
- # When I fill in the following:
139
+ # Given I am on the new <%= singular.humanize.downcase %> page
140
+ # When I fill in the form with:
141
141
  # <%= form_single_resource_commented %>
142
142
  # And I press "<%= create_button_title %>"
143
143
  # Then I should see "<%= problems_intro %>"
144
144
  #
145
145
  # <%= pending_explanation_2 %>
146
146
  #
147
- # And I should be on the <%= plural %> page
148
147
  # And I should see the following form field values:
149
- # <%= html_single_resource_commented %>
148
+ # <%= form_single_resource_commented %>
150
149
 
151
150
  <%= tags('@edit @update') %>
152
- Scenario: Attempt to update a <%= singular %> with invalid input
151
+ Scenario: Attempt to update a <%= singular.humanize.downcase %> with invalid input
153
152
  Pending
154
153
  # <%= pending_explanation_1 %>
155
- # Given a <%= singular %> exists
156
- # When I go to the edit page for that <%= singular %>
157
- # And I fill in the following:
154
+ # Given a <%= singular.humanize.downcase %> exists
155
+ # When I go to the edit page for that <%= singular.humanize.downcase %>
156
+ # And I fill in the form with:
158
157
  # <%= form_single_resource_commented %>
159
158
  # And I press "<%= update_button_title %>"
160
159
  # Then I should see "<%= problems_intro %>"
161
160
  #
162
161
  # <%= pending_explanation_2 %>
163
162
  #
164
- # And I should be on the page for that <%= singular %>
165
163
  # And I should see the following form field values:
166
- # <%= html_single_resource_commented %>
164
+ # <%= form_single_resource_commented %>
167
165
 
168
166
  <%= tags('@edit @update @show') %>
169
- Scenario: Update a <%= singular %>
170
- Given a <%= singular %> exists
171
- When I go to the edit page for that <%= singular %>
172
- And I fill in the following:
167
+ Scenario: Update a <%= singular.humanize.downcase %>
168
+ Given the following <%= singular.humanize.downcase %>:
169
+ <%= activerecord_single_resource %>
170
+ When I go to the edit page for that <%= singular.humanize.downcase %>
171
+ And I fill in the form with:
173
172
  <%= form_single_resource_updated %>
174
173
  And I press "<%= update_button_title %>"
175
- Then I should be on the page for that <%= singular %>
174
+ Then I should be on the page for that <%= singular.humanize.downcase %>
176
175
  And I should see "<%= successful_update_message %>"
177
- And I should see the following <%= singular %>:
176
+ And I should see the following <%= singular.humanize.downcase %>:
178
177
  <%= html_single_resource_updated %>
179
178
 
180
179
  <%= tags('@index @new') %>
181
- Scenario: Navigate from the <%= plural %> page to the new <%= singular %> page
182
- Given I am on the <%= plural %> page
180
+ Scenario: Navigate from the <%= plural.humanize.downcase %> page to the new <%= singular.humanize.downcase %> page
181
+ Given I am on the <%= plural.humanize.downcase %> page
183
182
  When I follow "New <%= singular_title %>"
184
- Then I should be on the new <%= singular %> page
183
+ Then I should be on the new <%= singular.humanize.downcase %> page
185
184
 
186
185
  <%= tags('@index @show') %>
187
- Scenario: Navigate from <%= plural %> page to the show <%= singular %> page
188
- Given the following <%= plural %>:
186
+ Scenario: Navigate from <%= plural.humanize.downcase %> page to the show <%= singular.humanize.downcase %> page
187
+ Given the following <%= plural.humanize.downcase %>:
189
188
  <%= activerecord_table_header_row %>
190
- <%= activerecord_table_row(1) %>
191
- <%= activerecord_table_row(2) %>
192
- <%= activerecord_table_row(3) %>
193
- When I go to the <%= plural %> page
189
+ <%= activerecord_table_row(:index => 1) %>
190
+ <%= activerecord_table_row(:index => 2) %>
191
+ <%= activerecord_table_row(:index => 3) %>
192
+ When I go to the <%= plural.humanize.downcase %> page
194
193
  And I click "Show" in the 2nd row
195
- Then I should be on the page for the 2nd <%= singular %>
194
+ Then I should be on the page for the 2nd <%= singular.humanize.downcase %>
196
195
 
197
196
  <%= tags('@index @edit') %>
198
- Scenario: Navigate from <%= plural %> page to the edit <%= singular %> page
199
- Given the following <%= plural %>:
197
+ Scenario: Navigate from <%= plural.humanize.downcase %> page to the edit <%= singular.humanize.downcase %> page
198
+ Given the following <%= plural.humanize.downcase %>:
200
199
  <%= activerecord_table_header_row %>
201
- <%= activerecord_table_row(1) %>
202
- <%= activerecord_table_row(2) %>
203
- <%= activerecord_table_row(3) %>
204
- When I go to the <%= plural %> page
200
+ <%= activerecord_table_row(:index => 1) %>
201
+ <%= activerecord_table_row(:index => 2) %>
202
+ <%= activerecord_table_row(:index => 3) %>
203
+ When I go to the <%= plural.humanize.downcase %> page
205
204
  And I click "Edit" in the 2nd row
206
- Then I should be on the edit page for the 2nd <%= singular %>
205
+ Then I should be on the edit page for the 2nd <%= singular.humanize.downcase %>
207
206
 
208
207
  <%= tags('@new @index') %>
209
- Scenario: Navigate from new <%= singular %> page to <%= plural %> page
210
- Given I am on the new <%= singular %> page
208
+ Scenario: Navigate from new <%= singular.humanize.downcase %> page to <%= plural.humanize.downcase %> page
209
+ Given I am on the new <%= singular.humanize.downcase %> page
211
210
  When I follow "<%= back_to_all %>"
212
- Then I should be on the <%= plural %> page
211
+ Then I should be on the <%= plural.humanize.downcase %> page
213
212
 
214
213
  <%= tags('@edit @show') %>
215
- Scenario: Navigate from the edit <%= singular %> page to the show <%= singular %> page
216
- Given a <%= singular %> exists
217
- When I go to the edit page for that <%= singular %>
214
+ Scenario: Navigate from the edit <%= singular.humanize.downcase %> page to the show <%= singular.humanize.downcase %> page
215
+ Given a <%= singular.humanize.downcase %> exists
216
+ When I go to the edit page for that <%= singular.humanize.downcase %>
218
217
  And I follow "Show"
219
- Then I should be on the page for that <%= singular %>
218
+ Then I should be on the page for that <%= singular.humanize.downcase %>
220
219
 
221
220
  <%= tags('@edit @index') %>
222
- Scenario: Navigate from edit <%= singular %> page to the <%= plural %> page
223
- Given a <%= singular %> exists
224
- When I go to the edit page for that <%= singular %>
221
+ Scenario: Navigate from edit <%= singular.humanize.downcase %> page to the <%= plural.humanize.downcase %> page
222
+ Given a <%= singular.humanize.downcase %> exists
223
+ When I go to the edit page for that <%= singular.humanize.downcase %>
225
224
  And I follow "<%= back_to_all %>"
226
- Then I should be on the <%= plural %> page
225
+ Then I should be on the <%= plural.humanize.downcase %> page
227
226
 
228
227
  <%= tags('@show @edit') %>
229
- Scenario: Navigate from show <%= singular %> page to edit <%= singular %> page
230
- Given a <%= singular %> exists
231
- When I go to the page for that <%= singular %>
228
+ Scenario: Navigate from show <%= singular.humanize.downcase %> page to edit <%= singular.humanize.downcase %> page
229
+ Given a <%= singular.humanize.downcase %> exists
230
+ When I go to the page for that <%= singular.humanize.downcase %>
232
231
  And I follow "Edit"
233
- Then I should be on the edit page for that <%= singular %>
232
+ Then I should be on the edit page for that <%= singular.humanize.downcase %>
234
233
 
235
234
  <%= tags('@show @index') %>
236
- Scenario: Navigate from show <%= singular %> page to <%= plural %> page
237
- Given a <%= singular %> exists
238
- And I am on the page for that <%= singular %>
235
+ Scenario: Navigate from show <%= singular.humanize.downcase %> page to <%= plural.humanize.downcase %> page
236
+ Given a <%= singular.humanize.downcase %> exists
237
+ When I go to the page for that <%= singular.humanize.downcase %>
239
238
  <% if nifty? %>
240
239
  And I follow "View All"
241
240
  <% else %>
242
241
  And I follow "Back"
243
242
  <% end %>
244
- Then I should be on the <%= plural %> page
243
+ Then I should be on the <%= plural.humanize.downcase %> page
245
244
 
246
245
  <%= tags('@index') %>
247
246
  Scenario: <%= plural_title %> page title
248
- When I go to the <%= plural %> page
247
+ When I go to the <%= plural.humanize.downcase %> page
249
248
  Then the heading should be "<%= index_heading %>"
250
249
  <% if index_title %>
251
250
  And the title should be "<%= index_title %>"
252
251
  <% end -%>
253
252
 
254
- <%= tags('@show') %>
255
253
  <% if show_heading || index_title %>
254
+ <%= tags('@show') %>
256
255
  Scenario: <%= singular_title %> page title
257
- Given a <%= singular %> exists
256
+ Given a <%= singular.humanize.downcase %> exists
258
257
  When I go to the page for that <%= singular %>
259
- <% if show_heading %>
258
+ <% if show_heading -%>
260
259
  Then the heading should be "<%= show_heading %>"
261
- <% end %>
262
- <% if index_title %>
260
+ <% end -%>
261
+ <% if index_title -%>
263
262
  And the title should be "<%= show_title %>"
264
263
  <% end -%>
265
264
  <% end -%>
266
265
 
267
266
  <%= tags('@new') %>
268
- Scenario: New <%= singular %> page title
269
- When I go to the new <%= singular %> page
267
+ Scenario: New <%= singular.humanize.downcase %> page title
268
+ When I go to the new <%= singular.humanize.downcase %> page
270
269
  Then the heading should be "<%= new_heading %>"
271
270
  <% if index_title %>
272
271
  And the title should be "<%= new_title %>"
273
272
  <% end -%>
274
273
 
275
274
  <%= tags('@edit') %>
276
- Scenario: Edit <%= singular %> page title
277
- Given a <%= singular %> exists
278
- When I go to the edit page for that <%= singular %>
275
+ Scenario: Edit <%= singular.humanize.downcase %> page title
276
+ Given a <%= singular.humanize.downcase %> exists
277
+ When I go to the edit page for that <%= singular.humanize.downcase %>
279
278
  Then the heading should be "<%= edit_heading %>"
280
279
  <% if index_title %>
281
280
  And the title should be "<%= edit_title %>"
@@ -1,10 +1,10 @@
1
1
  <%= generated_by %>
2
2
 
3
- Given /^a <%= singular %> exists$/ do
4
- @<%= singular %> = <%= singular_title %>.create!(valid_<%= singular %>_attributes)
3
+ Given /^a <%= singular.humanize.downcase %> exists$/ do
4
+ @<%= singular %> = <%= singular.camelcase %>.create!(valid_<%= singular %>_attributes)
5
5
  end
6
6
 
7
- Then /^I should see the following <%= singular %>:$/ do |expected_table|
7
+ Then /^I should see the following <%= singular.humanize.downcase %>:$/ do |expected_table|
8
8
 
9
9
  <% if nifty? %>
10
10
  show_fields_css_query = 'body p strong'
@@ -22,16 +22,18 @@ Then /^I should see the following <%= singular %>:$/ do |expected_table|
22
22
  assert_equal actual, expected_table.rows_hash
23
23
  end
24
24
 
25
- Then /^I should see the following <%= plural %>:$/ do |expected_table|
25
+ Then /^I should see the following <%= plural.humanize.downcase %>:$/ do |expected_table|
26
26
  expected_table.diff!(tableish('table tr', 'td,th'))
27
27
  end
28
28
 
29
- Given /^the following <%= plural %>:$/ do |table|
30
- @<%= plural %> = <%= singular_title %>.create!(table.hashes)
29
+ Given /^the following <%= plural.humanize.downcase %>:$/ do |table|
30
+ hashes = replace_spaces_with_underscores_in_keys(table.hashes)
31
+ @<%= plural %> = <%= singular.camelcase %>.create!(hashes)
31
32
  end
32
33
 
33
- Given /^the following <%= singular %>:$/ do |table|
34
- @<%= singular %> = <%= singular_title %>.create!(table.rows_hash)
34
+ Given /^the following <%= singular.humanize.downcase %>:$/ do |table|
35
+ hashes = replace_spaces_with_underscores_in_keys(table.rows_hash)
36
+ @<%= singular %> = <%= singular.camelcase %>.create!(hashes)
35
37
  end
36
38
 
37
39
  def valid_<%= singular %>_attributes
@@ -5,7 +5,8 @@ module CucumberScaffold
5
5
 
6
6
  def do_it
7
7
 
8
- template('shared/web_steps_additional.rb', 'features/step_definitions/web_steps_additional.rb')
8
+ template('step_definitions/web_steps_additional.rb', 'features/step_definitions/web_steps_additional.rb')
9
+ template('support/table_helpers.rb', 'features/support/table_helpers.rb')
9
10
 
10
11
  end
11
12
 
@@ -26,13 +26,33 @@ end
26
26
  def form_field_for_label(label)
27
27
  input_tags = label.parent.css('input,textarea')
28
28
  return if input_tags.size == 0
29
- if input_tags.size > 1
29
+ # rails renders a hidden input alongside each checkbox
30
+ input_tag = input_tags.last
31
+ if input_tags.size > 1 && input_tag['type'] != 'checkbox'
30
32
  raise "Wrong number of input tags while parsing form (found #{input_tags.size})"
31
33
  end
32
- input_tag = input_tags.first
33
34
  if input_tag.name == 'textarea'
34
35
  input_tag.inner_html
35
36
  elsif input_tag.name == 'input'
36
- input_tag['value']
37
+ if input_tag['type'] == 'checkbox'
38
+ input_tag['checked'] == 'checked' ? '[x]' : '[ ]'
39
+ else
40
+ input_tag['value']
41
+ end
37
42
  end
38
43
  end
44
+
45
+ When /^(?:|I )fill in the form with(?: within "([^"]*)")?:$/ do |selector, fields|
46
+ with_scope(selector) do
47
+ fields.rows_hash.each do |name, value|
48
+ # assume it's a checkbox
49
+ if value == '[x]'
50
+ When %{I check "#{name}"}
51
+ elsif value == '[ ]'
52
+ When %{I uncheck "#{name}"}
53
+ else
54
+ When %{I fill in "#{name}" with "#{value}"}
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,20 @@
1
+ def replace_spaces_with_underscores_in_keys(hashes)
2
+ # hashes will either be a single hash or an array of hashes
3
+ if hashes.class == Hash
4
+ result = {}
5
+ hashes.each_pair do |key, value|
6
+ new_key = key.gsub(' ', '_')
7
+ result[new_key] = value
8
+ end
9
+ else
10
+ result = []
11
+ hashes.each do |record|
12
+ result << {}
13
+ record.each_pair do |key, value|
14
+ new_key = key.gsub(' ', '_')
15
+ result.last[new_key] = value
16
+ end
17
+ end
18
+ end
19
+ result
20
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cucumber_scaffold
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 29
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 2
10
- version: 0.1.2
9
+ - 3
10
+ version: 0.1.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Andy Waite
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-07 00:00:00 +00:00
18
+ date: 2010-11-13 00:00:00 +00:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -34,7 +34,8 @@ extra_rdoc_files:
34
34
  - lib/generators/cucumber_scaffold/feature/templates/steps.rb
35
35
  - lib/generators/cucumber_scaffold/install/USAGE
36
36
  - lib/generators/cucumber_scaffold/install/install_generator.rb
37
- - lib/generators/cucumber_scaffold/install/templates/shared/web_steps_additional.rb
37
+ - lib/generators/cucumber_scaffold/install/templates/step_definitions/web_steps_additional.rb
38
+ - lib/generators/cucumber_scaffold/install/templates/support/table_helpers.rb
38
39
  files:
39
40
  - Manifest
40
41
  - README.rdoc
@@ -47,7 +48,8 @@ files:
47
48
  - lib/generators/cucumber_scaffold/feature/templates/steps.rb
48
49
  - lib/generators/cucumber_scaffold/install/USAGE
49
50
  - lib/generators/cucumber_scaffold/install/install_generator.rb
50
- - lib/generators/cucumber_scaffold/install/templates/shared/web_steps_additional.rb
51
+ - lib/generators/cucumber_scaffold/install/templates/step_definitions/web_steps_additional.rb
52
+ - lib/generators/cucumber_scaffold/install/templates/support/table_helpers.rb
51
53
  has_rdoc: true
52
54
  homepage: http://github.com/andyw8/cucumber_scaffold
53
55
  licenses: []