brine-dsl 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +4 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +11 -0
  5. data/Gemfile +3 -0
  6. data/Gemfile.lock +123 -0
  7. data/Guardfile +12 -0
  8. data/LICENSE +21 -0
  9. data/README.md +137 -0
  10. data/Rakefile +32 -0
  11. data/brine-dsl.gemspec +32 -0
  12. data/config/cucumber.yml +2 -0
  13. data/docs/build.gradle +19 -0
  14. data/docs/cookbook.html +567 -0
  15. data/docs/gradle/wrapper/gradle-wrapper.jar +0 -0
  16. data/docs/gradle/wrapper/gradle-wrapper.properties +6 -0
  17. data/docs/gradlew +172 -0
  18. data/docs/gradlew.bat +84 -0
  19. data/docs/guide.html +1149 -0
  20. data/docs/index.html +472 -0
  21. data/docs/specs.html +1672 -0
  22. data/docs/src/cookbook.adoc +87 -0
  23. data/docs/src/guide.adoc +427 -0
  24. data/docs/src/index.adoc +16 -0
  25. data/docs/src/spec.erb +121 -0
  26. data/docs/src/specs.adoc +24 -0
  27. data/features/argument_transforms/boolean.feature +37 -0
  28. data/features/argument_transforms/datetime.feature +45 -0
  29. data/features/argument_transforms/integer.feature +41 -0
  30. data/features/argument_transforms/list.feature +46 -0
  31. data/features/argument_transforms/object.feature +66 -0
  32. data/features/argument_transforms/quoted.feature +41 -0
  33. data/features/argument_transforms/regex.feature +40 -0
  34. data/features/argument_transforms/template.feature +46 -0
  35. data/features/argument_transforms/whitespace.feature +51 -0
  36. data/features/assertions/is_a_valid.feature +184 -0
  37. data/features/assertions/is_equal_to.feature +60 -0
  38. data/features/assertions/is_including.feature +29 -0
  39. data/features/assertions/is_matching.feature +35 -0
  40. data/features/deprecations/replaced_with.feature +35 -0
  41. data/features/request_construction/basic.feature +29 -0
  42. data/features/request_construction/body.feature +26 -0
  43. data/features/request_construction/clearing.feature +46 -0
  44. data/features/request_construction/headers.feature +94 -0
  45. data/features/request_construction/params.feature +60 -0
  46. data/features/resource_cleanup/cleanup.feature +86 -0
  47. data/features/selectors/all.feature +55 -0
  48. data/features/selectors/any.feature +48 -0
  49. data/features/step_definitions/test_steps.rb +5 -0
  50. data/features/support/env.rb +10 -0
  51. data/lib/brine/cleaner_upper.rb +62 -0
  52. data/lib/brine/coercer.rb +18 -0
  53. data/lib/brine/hooks.rb +4 -0
  54. data/lib/brine/mustache_binder.rb +25 -0
  55. data/lib/brine/requester.rb +125 -0
  56. data/lib/brine/rest_steps.rb +138 -0
  57. data/lib/brine/selector.rb +66 -0
  58. data/lib/brine/step_definitions/assertions.rb +37 -0
  59. data/lib/brine/step_definitions/assignment.rb +13 -0
  60. data/lib/brine/step_definitions/cleanup.rb +4 -0
  61. data/lib/brine/step_definitions/request_construction.rb +19 -0
  62. data/lib/brine/step_definitions/selection.rb +37 -0
  63. data/lib/brine/test_steps.rb +138 -0
  64. data/lib/brine/transforms.rb +81 -0
  65. data/lib/brine/type_checks.rb +35 -0
  66. data/lib/brine/util.rb +35 -0
  67. data/lib/brine.rb +39 -0
  68. data/tutorial/missing.feature +5 -0
  69. data/tutorial/post_matching.feature +12 -0
  70. data/tutorial/post_status.feature +10 -0
  71. data/tutorial/support/env.rb +2 -0
  72. metadata +306 -0
data/lib/brine/util.rb ADDED
@@ -0,0 +1,35 @@
1
+ # Assorted utility functions
2
+ module BrineUtil
3
+ # reevaluate passed block until it returns without throwing an exception
4
+ # or `time` elapses; retry every `interval`
5
+ def retry_for(time, interval=1)
6
+ failure = nil
7
+ quit = Time.now + time
8
+ while (Time.now <= quit)
9
+ begin
10
+ return yield
11
+ rescue Exception => ex
12
+ failure = ex
13
+ sleep interval
14
+ end
15
+ end
16
+ raise failure
17
+ end
18
+
19
+ # iterate over data table and shave_value for each cell value
20
+ # mutates and returns table
21
+ # FIXME: Shouldn't be needed and removed after use of tables is dropped
22
+ def transform_table!(table)
23
+ table.cells_rows.each do |row|
24
+ row.each{|cell| cell.value = Transform(cell.value)}
25
+ end
26
+ table
27
+ end
28
+ end
29
+
30
+ def replaced_with(type, new_step, version, multiline=nil)
31
+ warn """
32
+ DEPRECATION: This step will be removed in version #{version}. Replace with:
33
+ #{type} #{new_step}\n#{multiline}""" unless ENV['BRINE_QUIET_DEPRECATIONS']
34
+ step new_step, multiline
35
+ end
data/lib/brine.rb ADDED
@@ -0,0 +1,39 @@
1
+ # brine.rb -- loader file for the rest of brine
2
+ #
3
+ # The primary goal of this file is to load all resources needed to use brine.
4
+ # A secondary goal which should inform how that is done is that loading this file by itself
5
+ # should provide new objects but not otherwise impact existing state such as by
6
+ # modifying the World or defining any Steps, Transforms, or similar.
7
+ # Those types of changes should be done by [#brine_mix].
8
+
9
+ require 'brine/cleaner_upper'
10
+ require 'brine/mustache_binder'
11
+ require 'brine/requester'
12
+ require 'brine/util'
13
+ require 'brine/selector'
14
+ require 'brine/type_checks'
15
+
16
+ # Modules to add to World
17
+ module Brine
18
+ include CleanerUpper
19
+ include MustacheBinder
20
+ include Requesting
21
+ include BrineUtil
22
+ include Selection
23
+ include TypeChecking
24
+ end
25
+
26
+ # Load the more side effecty files and return the Module,
27
+ # expected to be called as `World(brine_mix)`
28
+ def brine_mix
29
+ require 'brine/step_definitions/assignment'
30
+ require 'brine/step_definitions/request_construction'
31
+ require 'brine/step_definitions/assertions'
32
+ require 'brine/step_definitions/cleanup'
33
+ require 'brine/step_definitions/selection'
34
+
35
+ require 'brine/transforms'
36
+ require 'brine/rest_steps'
37
+ require 'brine/hooks'
38
+ Brine
39
+ end
@@ -0,0 +1,5 @@
1
+ Feature: Absent resources return 404s.
2
+
3
+ Scenario: A request for a known missing resource.
4
+ When a GET is sent to `/bins/brine-absent`
5
+ Then the value of the response status is equal to `404`
@@ -0,0 +1,12 @@
1
+ Feature: A POST returns a link to the created resource.
2
+
3
+ Scenario: A valid post.
4
+ When the request body is assigned:
5
+ """
6
+ {"name": "boolean-setting",
7
+ "value": true}
8
+ """
9
+ And a POST is sent to `/bins`
10
+
11
+ Then the value of the response status is equal to `201`
12
+ And the value of the response body child `uri` is matching `/https://api.myjson.com/bins/\w+/`
@@ -0,0 +1,10 @@
1
+ Feature: A POST returns a 201.
2
+
3
+ Scenario: A valid post.
4
+ When the request body is assigned:
5
+ """
6
+ {"name": "boolean-setting",
7
+ "value": true}
8
+ """
9
+ And a POST is sent to `/bins`
10
+ Then the value of the response status is equal to `201`
@@ -0,0 +1,2 @@
1
+ require 'brine'
2
+ World(brine_mix)
metadata ADDED
@@ -0,0 +1,306 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: brine-dsl
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.0
5
+ platform: ruby
6
+ authors:
7
+ - Matt Whipple
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-12-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: cucumber
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.4'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.4'
27
+ - !ruby/object:Gem::Dependency
28
+ name: mustache
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: oauth2
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: jsonpath
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: faraday
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: faraday_middleware
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rake
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: aruba
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: guard
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: guard-cucumber
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: asciidoctor
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ description: Cucumber@REST in Brine
182
+ email:
183
+ - mwhipple@brightcove.com
184
+ executables: []
185
+ extensions: []
186
+ extra_rdoc_files: []
187
+ files:
188
+ - ".gitignore"
189
+ - ".ruby-version"
190
+ - ".travis.yml"
191
+ - Gemfile
192
+ - Gemfile.lock
193
+ - Guardfile
194
+ - LICENSE
195
+ - README.md
196
+ - Rakefile
197
+ - brine-dsl.gemspec
198
+ - config/cucumber.yml
199
+ - docs/build.gradle
200
+ - docs/cookbook.html
201
+ - docs/gradle/wrapper/gradle-wrapper.jar
202
+ - docs/gradle/wrapper/gradle-wrapper.properties
203
+ - docs/gradlew
204
+ - docs/gradlew.bat
205
+ - docs/guide.html
206
+ - docs/index.html
207
+ - docs/specs.html
208
+ - docs/src/cookbook.adoc
209
+ - docs/src/guide.adoc
210
+ - docs/src/index.adoc
211
+ - docs/src/spec.erb
212
+ - docs/src/specs.adoc
213
+ - features/argument_transforms/boolean.feature
214
+ - features/argument_transforms/datetime.feature
215
+ - features/argument_transforms/integer.feature
216
+ - features/argument_transforms/list.feature
217
+ - features/argument_transforms/object.feature
218
+ - features/argument_transforms/quoted.feature
219
+ - features/argument_transforms/regex.feature
220
+ - features/argument_transforms/template.feature
221
+ - features/argument_transforms/whitespace.feature
222
+ - features/assertions/is_a_valid.feature
223
+ - features/assertions/is_equal_to.feature
224
+ - features/assertions/is_including.feature
225
+ - features/assertions/is_matching.feature
226
+ - features/deprecations/replaced_with.feature
227
+ - features/request_construction/basic.feature
228
+ - features/request_construction/body.feature
229
+ - features/request_construction/clearing.feature
230
+ - features/request_construction/headers.feature
231
+ - features/request_construction/params.feature
232
+ - features/resource_cleanup/cleanup.feature
233
+ - features/selectors/all.feature
234
+ - features/selectors/any.feature
235
+ - features/step_definitions/test_steps.rb
236
+ - features/support/env.rb
237
+ - lib/brine.rb
238
+ - lib/brine/cleaner_upper.rb
239
+ - lib/brine/coercer.rb
240
+ - lib/brine/hooks.rb
241
+ - lib/brine/mustache_binder.rb
242
+ - lib/brine/requester.rb
243
+ - lib/brine/rest_steps.rb
244
+ - lib/brine/selector.rb
245
+ - lib/brine/step_definitions/assertions.rb
246
+ - lib/brine/step_definitions/assignment.rb
247
+ - lib/brine/step_definitions/cleanup.rb
248
+ - lib/brine/step_definitions/request_construction.rb
249
+ - lib/brine/step_definitions/selection.rb
250
+ - lib/brine/test_steps.rb
251
+ - lib/brine/transforms.rb
252
+ - lib/brine/type_checks.rb
253
+ - lib/brine/util.rb
254
+ - tutorial/missing.feature
255
+ - tutorial/post_matching.feature
256
+ - tutorial/post_status.feature
257
+ - tutorial/support/env.rb
258
+ homepage: http://github.com/brightcove/brine
259
+ licenses:
260
+ - MIT
261
+ metadata: {}
262
+ post_install_message:
263
+ rdoc_options: []
264
+ require_paths:
265
+ - lib
266
+ required_ruby_version: !ruby/object:Gem::Requirement
267
+ requirements:
268
+ - - ">="
269
+ - !ruby/object:Gem::Version
270
+ version: 2.3.0
271
+ required_rubygems_version: !ruby/object:Gem::Requirement
272
+ requirements:
273
+ - - ">="
274
+ - !ruby/object:Gem::Version
275
+ version: '0'
276
+ requirements: []
277
+ rubyforge_project:
278
+ rubygems_version: 2.5.1
279
+ signing_key:
280
+ specification_version: 4
281
+ summary: Cucumber@REST in Brine
282
+ test_files:
283
+ - features/argument_transforms/boolean.feature
284
+ - features/argument_transforms/datetime.feature
285
+ - features/argument_transforms/integer.feature
286
+ - features/argument_transforms/list.feature
287
+ - features/argument_transforms/object.feature
288
+ - features/argument_transforms/quoted.feature
289
+ - features/argument_transforms/regex.feature
290
+ - features/argument_transforms/template.feature
291
+ - features/argument_transforms/whitespace.feature
292
+ - features/assertions/is_a_valid.feature
293
+ - features/assertions/is_equal_to.feature
294
+ - features/assertions/is_including.feature
295
+ - features/assertions/is_matching.feature
296
+ - features/deprecations/replaced_with.feature
297
+ - features/request_construction/basic.feature
298
+ - features/request_construction/body.feature
299
+ - features/request_construction/clearing.feature
300
+ - features/request_construction/headers.feature
301
+ - features/request_construction/params.feature
302
+ - features/resource_cleanup/cleanup.feature
303
+ - features/selectors/all.feature
304
+ - features/selectors/any.feature
305
+ - features/step_definitions/test_steps.rb
306
+ - features/support/env.rb