cucumber-api 0.3 → 0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 8f24455a2087518ebd14b824f5429dffe0d74c7e
4
- data.tar.gz: 21a09dc92c6674c3e16d1f89fd3ada453896320c
2
+ SHA256:
3
+ metadata.gz: fbd5a42ce1e58be266e72a9ef14c57050a3095badf920e0de6ac12f411e35a72
4
+ data.tar.gz: 9eac80341c0eadaf45d5adfa87b72ce2852a8e02201851055f74d750b106257f
5
5
  SHA512:
6
- metadata.gz: db2290dc5d15a16d7c3e827066e184b46e0a2e18ef19b4fecae7d430d1cc8d4a8f3e74c4e9766152f7ed92a1b62b38e7bb9d04a3ba3c97c893b944262ac3089e
7
- data.tar.gz: ab083a9e8ad73fa731b195a4d325e65c686764e64d2106ddf42af9665b4a07069feb0bfc06f383104952e6301b699a9b283408217e5c06b20d53beb140a111bf
6
+ metadata.gz: 802f90159a95ac6bdaf0adfc82cdaf6fdb5d18da457aba8fbf9d61e7b78a39b1cabe7ee4523eab0526544c1be8642ba3cf2c16b28a23b5f16ff1fd2e9f45c17b
7
+ data.tar.gz: da591efd35bb2a4480cac6d638b45d6ba6689737480938f2d618e07bb7f168b0e6ae7aa416f44a9ed074a318cc275829a783949911efb73f218de4d697bd1307
data/.travis.yml CHANGED
@@ -1,2 +1,14 @@
1
1
  language: ruby
2
- script: "cucumber -p verbose"
2
+ sudo: false
3
+
4
+ rvm:
5
+ - 2.3
6
+ - 2.4
7
+ - ruby-head
8
+
9
+ matrix:
10
+ allow_failures:
11
+ - ruby-head
12
+
13
+ script: "cucumber -p verbose"
14
+
data/CHANGELOG.md CHANGED
@@ -1,6 +1,27 @@
1
1
  # Change Log
2
2
 
3
- ## [Current](https://github.com/hidroh/cucumber-api/compare/0.2...master)
3
+ ## [Current](https://github.com/hidroh/cucumber-api/compare/0.7...master)
4
+
5
+ ## [0.7](https://github.com/hidroh/cucumber-api/compare/0.6...0.7) (Aug 29, 2018)
6
+ * Allow clearing GET response cache #25
7
+
8
+ ## [0.6](https://github.com/hidroh/cucumber-api/compare/0.5...0.6) (May 08, 2018)
9
+ * Allow headers to use grabbed values #24
10
+
11
+ ## [0.5](https://github.com/hidroh/cucumber-api/compare/0.4...0.5) (January 26, 2018)
12
+ * Bump up dependencies, requires min Ruby version 2.3.0
13
+ * Fix bug where grabbed values are not shared #11
14
+
15
+ ## [0.4](https://github.com/hidroh/cucumber-api/compare/0.3...0.4) (November 03, 2016)
16
+ * Support additional request headers
17
+ * Allow specifying JSON request body with docstring
18
+ * Support simple JSON response value verification
19
+ * Grabbed values now persist until overridden within scenario, or when scenario exits
20
+
21
+ ## [0.3](https://github.com/hidroh/cucumber-api/compare/0.2...0.3) (March 27, 2015)
22
+
23
+ * Bumped up gem dependencies, relax to minor versions
24
+ * Added gem license
4
25
 
5
26
  ## [0.2](https://github.com/hidroh/cucumber-api/compare/0.1...0.2) (March 07, 2015)
6
27
 
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
  [![Build Status](https://travis-ci.org/hidroh/cucumber-api.svg?branch=master)](https://travis-ci.org/hidroh/cucumber-api) [![Gem Version](https://badge.fury.io/rb/cucumber-api.svg)](http://badge.fury.io/rb/cucumber-api) [![Dependency Status](https://gemnasium.com/hidroh/cucumber-api.svg)](https://gemnasium.com/hidroh/cucumber-api)
3
3
  [![Code Climate](https://codeclimate.com/github/hidroh/cucumber-api/badges/gpa.svg)](https://codeclimate.com/github/hidroh/cucumber-api) [![Total Downloads](http://ruby-gem-downloads-badge.herokuapp.com/cucumber-api?type=total)](https://rubygems.org/gems/cucumber-api)
4
4
 
5
- API validator in BBD style with [Cucumber](https://cukes.info/). **cucumber-api** lets one validate public APIs JSON response in blazingly fast time.
5
+ API validator in BDD style with [Cucumber](https://cukes.info/). **cucumber-api** lets one validate public APIs JSON response in blazingly fast time.
6
6
 
7
7
  Inspired by [cucumber-api-steps](https://github.com/jayzes/cucumber-api-steps).
8
8
 
@@ -44,6 +44,15 @@ Given I send and accept JSON
44
44
  Given I send "(.*?)" and accept JSON
45
45
  ```
46
46
 
47
+ You could also others header's information like:
48
+
49
+ ```gherkin
50
+ Given I send and accept JSON
51
+ And I add Headers:
52
+ | name1 | value |
53
+ | name2 | other |
54
+ ```
55
+
47
56
  Specify POST body
48
57
 
49
58
  ```gherkin
@@ -52,6 +61,13 @@ When I set form request body to:
52
61
  | key1 | value1 |
53
62
  | key2 | {value2} |
54
63
  | key3 | file://path-to-file |
64
+ When I set JSON request body to:
65
+ """
66
+ {
67
+ "key1": "jsonString",
68
+ "key2": 1
69
+ }
70
+ """
55
71
  ```
56
72
 
57
73
  Or from YAML/JSON file
@@ -83,13 +99,20 @@ When I send a (GET|POST|PATCH|PUT|DELETE) request to "(.*?)" with:
83
99
  | value1 | value2 | ... |
84
100
  ```
85
101
 
86
- Temporarily save values from the last request to use in the next request in the same scenario:
102
+ Temporarily save values from the last request to use in subsequent steps in the same scenario:
87
103
 
88
104
  ```gherkin
89
105
  When I grab "(.*?)" as "(.*?)"
90
106
  ```
91
107
 
92
- The saved value can then be used to replace `{placeholder}` in the next request.
108
+ Optionally, auto infer placeholder from grabbed JSON path:
109
+
110
+ ```gherkin
111
+ # Grab and auto assign {id} as placeholder
112
+ When I grab "$..id"
113
+ ```
114
+
115
+ The saved value can then be used to replace `{placeholder}` in the subsequent steps.
93
116
 
94
117
  Example:
95
118
 
@@ -97,16 +120,19 @@ Example:
97
120
  When I send a POST request to "http://example.com/token"
98
121
  And I grab "$..request_token" as "token"
99
122
  And I grab "$..access_type" as "type"
100
- And I send a GET request to "http://example.com/{token} with:
123
+ And I grab "$..id"
124
+ And I send a GET request to "http://example.com/{token}" with:
101
125
  | type | pretty |
102
126
  | {type} | true |
127
+ Then the JSON response should have required key "id" of type string and value "{id}"
103
128
  ```
104
129
 
105
- Assume that [http://example.com/token](http://example.com/token) have an element `{"request_token": 1, "access_type": "full"}`, **cucumber-api** will execute the followings:
130
+ Assume that [http://example.com/token](http://example.com/token) have an element `{"request_token": 1, "access_type": "full", "id": "user1"}`, **cucumber-api** will execute the followings:
106
131
 
107
132
  * POST [http://example.com/token](http://example.com/token)
108
- * Extract the first `request_token` and `access_type` from JSON response and save it for next request
133
+ * Extract the first `request_token`, `access_type` and `id` from JSON response and save it for subsequent steps
109
134
  * GET [http://example.com/1?type=full&pretty=true](http://example.com/1?type=full&pretty=true)
135
+ * Verify that JSON response has a pair of JSON key-value: `"id": "user1"`
110
136
  * Clear all saved values
111
137
 
112
138
  This will be handy when one needs to make a sequence of calls to authenticate/authorize API access.
@@ -123,7 +149,8 @@ Then the response status should be "(\d+)"
123
149
  Then the JSON response should follow "(.*?)"
124
150
  Then the JSON response root should be (object|array)
125
151
  Then the JSON response should have key "([^\"]*)"
126
- Then the JSON response should have (required|optional) key "(.*?)" of type (numeric|string|array|boolean|numeric_string|object|array|any)( or null)
152
+ Then the JSON response should have (required|optional) key "(.*?)" of type (numeric|string|boolean|numeric_string|object|array|any)( or null)
153
+ Then the JSON response should have (required|optional) key "(.*?)" of type (numeric|string|boolean|numeric_string|object|array|any)( or null) and value "(.*?)"
127
154
  ```
128
155
 
129
156
  Example:
@@ -134,6 +161,7 @@ Then the JSON response should follow "features/schemas/example_all.json"
134
161
  Then the JSON response root should be array
135
162
  Then the JSON response should have key "id"
136
163
  Then the JSON response should have optional key "format" of type string or null
164
+ Then the JSON response should have required key "status" of type string and value "foobar"
137
165
  ```
138
166
 
139
167
  Also checkout [sample](/features/sample.feature) for real examples. Run sample with the following command:
@@ -148,6 +176,12 @@ Response caching is provided for GET requests by default. This is useful when yo
148
176
 
149
177
  Only the first request to that endpoint is made, subsequent requests will use cached response. Response caching is only available for GET method.
150
178
 
179
+ The response cache can also be cleared if needed:
180
+
181
+ ```gherkin
182
+ Given I clear the response cache
183
+ ```
184
+
151
185
  ## Dependencies
152
186
  * [cucumber](https://github.com/cucumber/cucumber) for BDD style specs
153
187
  * [jsonpath](https://github.com/joshbuddy/jsonpath) for traversal of JSON response via [JSON path](http://goessner.net/articles/JsonPath/)
data/cucumber-api.gemspec CHANGED
@@ -13,11 +13,12 @@ Gem::Specification.new do |s|
13
13
  s.description = %q{cucumber-api allows API JSON response validation and verification in BDD style.}
14
14
  s.files = `git ls-files`.split("\n")
15
15
  s.require_paths = ["lib"]
16
- s.required_ruby_version = '>= 1.9.3'
16
+ s.required_ruby_version = '>= 2.3.0'
17
17
  s.license = 'Apache-2.0'
18
18
 
19
- s.add_dependency('cucumber', '~> 2.0')
20
- s.add_dependency('jsonpath', '~> 0.5')
21
- s.add_dependency('rest-client', '~> 1.8')
22
- s.add_dependency('json-schema', '~> 2.5')
23
- end
19
+ s.add_dependency('addressable', '2.5')
20
+ s.add_dependency('cucumber', '~> 3.1.0')
21
+ s.add_dependency('jsonpath', '~> 0.8')
22
+ s.add_dependency('rest-client', '~> 2.0.2')
23
+ s.add_dependency('json-schema', '~> 2.8.0')
24
+ end
@@ -1,15 +1,18 @@
1
1
  # https://github.com/HackerNews/API
2
2
  Feature: Hacker News REST API validation
3
3
 
4
+ Background:
5
+ Given I send and accept JSON
6
+
4
7
  Scenario: Verify top stories JSON schema
5
- When I send and accept JSON
8
+ When I add Headers:
9
+ | Cache-Control | no-cache |
6
10
  And I send a GET request to "https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty"
7
11
  Then the response status should be "200"
8
12
  And the JSON response should follow "features/schemas/topstories.json"
9
13
 
10
14
  Scenario Outline: Verify item JSON schema
11
- When I send and accept JSON
12
- And I send a GET request to "https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty"
15
+ When I send a GET request to "https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty"
13
16
  Then the response status should be "200"
14
17
  And the JSON response root should be array
15
18
  When I grab "$[0]" as "id"
@@ -19,9 +22,27 @@ Feature: Hacker News REST API validation
19
22
  Then the response status should be "200"
20
23
  And the JSON response root should be object
21
24
  And the JSON response should have <optionality> key "<key>" of type <value type>
25
+ And the JSON response should have "id" of type numeric and value "{id}"
22
26
 
23
27
  Examples:
24
28
  | key | value type | optionality |
25
29
  | id | numeric | required |
26
30
  | score | numeric | required |
27
31
  | url | string | optional |
32
+
33
+ Scenario: Demonstrate setting the JSON body with a docstring
34
+ When I set JSON request body to:
35
+ """
36
+ {
37
+ "title": "foo",
38
+ "body": "bar",
39
+ "userId": 1
40
+ }
41
+ """
42
+ And I send a POST request to "http://jsonplaceholder.typicode.com/posts"
43
+ Then the response status should be "201"
44
+ And the JSON response should have "id" of type numeric and value "101"
45
+ And the JSON response should have "title" of type string and value "foo"
46
+ And the JSON response should have "body" of type string and value "bar"
47
+ And the JSON response should have "userId" of type numeric and value "1"
48
+
@@ -0,0 +1,21 @@
1
+ module CucumberApi
2
+ module Helpers
3
+ # Bind grabbed values into placeholders in given URL
4
+ # Ex: http://example.com?id={id} with {id => 1} becomes http://example.com?id=1
5
+ # @param url [String] parameterized URL with placeholders
6
+ # @return [String] binded URL or original URL if no placeholders
7
+ def resolve url
8
+ url.gsub!(/\{([a-zA-Z0-9_]+)\}/) do |s|
9
+ s.gsub!(/[\{\}]/, '')
10
+ if instance_variable_defined?("@#{s}")
11
+ instance_variable_get("@#{s}")
12
+ else
13
+ raise 'Did you forget to "grab" ' + s + '?'
14
+ end
15
+ end
16
+ url
17
+ end
18
+ end
19
+ end
20
+
21
+ World(CucumberApi::Helpers)
@@ -6,9 +6,6 @@ module CucumberApi
6
6
 
7
7
  # Extension of {RestClient::Response} with support for JSON path traversal and validation
8
8
  module Response
9
-
10
- include RestClient::Response
11
-
12
9
  # Create a Response with JSON path support
13
10
  # @param response [RestClient::Response] original response
14
11
  # @return [Response] self
@@ -91,6 +88,21 @@ module CucumberApi
91
88
  value.nil? ? value : get_as_type(json_path, type, json)
92
89
  end
93
90
 
91
+ # Retrieve value of the first JSON element with given JSON path as given type, and check for a given value
92
+ # @param json_path [String] a valid JSON path expression
93
+ # @param type [String] required type, possible values are 'numeric', 'string', 'boolean', or 'numeric_string'
94
+ # @param value [String] value to check for
95
+ # @param json [String] optional JSON from which to apply JSON path, default to response body
96
+ # @return [Object] value of first retrieved JSON element in form of given type or nil
97
+ # @raise [Exception] if JSON path is invalid or no matching JSON element found or matching element does not match
98
+ # required type or value
99
+ def get_as_type_and_check_value json_path, type, value, json=nil
100
+ v = get_as_type json_path, type, json
101
+ if value != v.to_s
102
+ raise %/Expect '#{json_path}' to be '#{value}' but was '#{v}'\n#{to_json_s}/
103
+ end
104
+ end
105
+
94
106
  # Retrieve pretty JSON response for logging
95
107
  # @return [String] pretty JSON response if verbose setting is true, empty string otherwise
96
108
  def to_json_s
@@ -100,5 +112,6 @@ module CucumberApi
100
112
  ''
101
113
  end
102
114
  end
115
+ RestClient::Response.send(:include, self)
103
116
  end
104
- end
117
+ end
@@ -1,4 +1,5 @@
1
1
  require 'cucumber-api/response'
2
+ require 'cucumber-api/helpers'
2
3
  require 'rest-client'
3
4
  require 'json-schema'
4
5
 
@@ -8,6 +9,10 @@ end
8
9
 
9
10
  $cache = {}
10
11
 
12
+ Given(/^I clear the response cache$/) do
13
+ $cache = {}
14
+ end
15
+
11
16
  Given(/^I send and accept JSON$/) do
12
17
  steps %Q{
13
18
  Given I send "application/json" and accept JSON
@@ -21,10 +26,44 @@ Given(/^I send "(.*?)" and accept JSON$/) do |content_type|
21
26
  }
22
27
  end
23
28
 
29
+ Given(/^I add Headers:$/) do |params|
30
+ params.rows_hash.each do |key, value|
31
+ @headers[key.to_sym] = resolve(value)
32
+ end
33
+ end
34
+
35
+ When(/^I grab "([^"]+)"$/) do |k|
36
+ if @response.nil?
37
+ raise 'No response found.'
38
+ end
39
+
40
+ if k[0] == '$'
41
+ v = k
42
+ else
43
+ v = "$.#{k}"
44
+ end
45
+
46
+ k.gsub!(/[^0-9a-zA-Z_]/, '')
47
+ instance_variable_set("@#{k}", @response.get(v))
48
+ end
49
+
50
+ When(/^I grab "([^"]+)" as "([^"]+)"$/) do |k, v|
51
+ if @response.nil?
52
+ raise 'No response found.'
53
+ end
54
+
55
+ k = "$.#{k}" unless k[0] == '$'
56
+ instance_variable_set("@#{v}", @response.get(k))
57
+ end
58
+
24
59
  When(/^I set JSON request body to '(.*?)'$/) do |body|
25
60
  @body = JSON.parse body
26
61
  end
27
62
 
63
+ When(/^I set JSON request body to:$/) do |body|
64
+ @body = JSON.dump(JSON.parse(body))
65
+ end
66
+
28
67
  When(/^I set form request body to:$/) do |params|
29
68
  @body = {}
30
69
  params.rows_hash.each do |key, value|
@@ -51,15 +90,6 @@ When(/^I set request body from "(.*?).(yml|json)"$/) do |filename, extension|
51
90
  end
52
91
  end
53
92
 
54
- When(/^I grab "(.*?)" as "(.*?)"$/) do |json_path, place_holder|
55
- if @response.nil?
56
- raise 'No response found, a request need to be made first before you can grab response'
57
- end
58
-
59
- @grabbed = {} if @grabbed.nil?
60
- @grabbed[%/#{place_holder}/] = @response.get json_path
61
- end
62
-
63
93
  When(/^I send a (GET|POST|PATCH|PUT|DELETE) request to "(.*?)" with:$/) do |method, url, params|
64
94
  unless params.hashes.empty?
65
95
  query = params.hashes.first.map{|key, value| %/#{key}=#{value}/}.join("&")
@@ -76,7 +106,6 @@ When(/^I send a (GET|POST|PATCH|PUT|DELETE) request to "(.*?)"$/) do |method, ur
76
106
  @response = $cache[%/#{request_url}/]
77
107
  @headers = nil
78
108
  @body = nil
79
- @grabbed = nil
80
109
  next
81
110
  end
82
111
 
@@ -100,7 +129,6 @@ When(/^I send a (GET|POST|PATCH|PUT|DELETE) request to "(.*?)"$/) do |method, ur
100
129
  @response = CucumberApi::Response.create response
101
130
  @headers = nil
102
131
  @body = nil
103
- @grabbed = nil
104
132
  $cache[%/#{request_url}/] = @response if 'GET' == %/#{method}/
105
133
  end
106
134
 
@@ -118,8 +146,7 @@ Then(/^the JSON response should follow "(.*?)"$/) do |schema|
118
146
  $!.fragments, $!.failed_attribute, $!.schema)
119
147
  end
120
148
  else
121
- puts %/WARNING: missing schema '#{file_path}'/
122
- pending
149
+ raise %/Schema not found: '#{file_path}'/
123
150
  end
124
151
  end
125
152
 
@@ -136,7 +163,7 @@ Then(/^the JSON response should have key "([^\"]*)"$/) do |json_path|
136
163
  end
137
164
 
138
165
  Then(/^the JSON response should have (required|optional) key "(.*?)" of type \
139
- (numeric|string|array|boolean|numeric_string|object|array|any)( or null)?$/) do |optionality, json_path, type, null_allowed|
166
+ (numeric|string|boolean|numeric_string|object|array|any)( or null)?$/) do |optionality, json_path, type, null_allowed|
140
167
  next if optionality == 'optional' and not @response.has(json_path) # if optional and no such key then skip
141
168
  if 'any' == type
142
169
  @response.get json_path
@@ -147,13 +174,7 @@ Then(/^the JSON response should have (required|optional) key "(.*?)" of type \
147
174
  end
148
175
  end
149
176
 
150
- # Bind grabbed values into placeholders in given URL
151
- # Ex: http://example.com?id={id} with {id => 1} becomes http://example.com?id=1
152
- # @param url [String] parameterized URL with placeholders
153
- # @return [String] binded URL or original URL if no placeholders
154
- def resolve url
155
- unless @grabbed.nil?
156
- @grabbed.each { |key, value| url = url.gsub /\{#{key}\}/, %/#{value}/ }
157
- end
158
- url
177
+ Then(/^the JSON response should have "([^"]*)" of type \
178
+ (numeric|string|boolean|numeric_string) and value "([^"]*)"$/) do |json_path, type, value|
179
+ @response.get_as_type_and_check_value json_path, type, resolve(value)
159
180
  end
@@ -1,3 +1,3 @@
1
1
  module CucumberApi
2
- VERSION = "0.3"
3
- end
2
+ VERSION = "0.8"
3
+ end
metadata CHANGED
@@ -1,71 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cucumber-api
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.3'
4
+ version: '0.8'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ha Duy Trung
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-27 00:00:00.000000000 Z
11
+ date: 2021-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: addressable
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: '2.5'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: '2.5'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: cucumber
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
31
  - - "~>"
18
32
  - !ruby/object:Gem::Version
19
- version: '2.0'
33
+ version: 3.1.0
20
34
  type: :runtime
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
38
  - - "~>"
25
39
  - !ruby/object:Gem::Version
26
- version: '2.0'
40
+ version: 3.1.0
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: jsonpath
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - "~>"
32
46
  - !ruby/object:Gem::Version
33
- version: '0.5'
47
+ version: '0.8'
34
48
  type: :runtime
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
52
  - - "~>"
39
53
  - !ruby/object:Gem::Version
40
- version: '0.5'
54
+ version: '0.8'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rest-client
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '1.8'
61
+ version: 2.0.2
48
62
  type: :runtime
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '1.8'
68
+ version: 2.0.2
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: json-schema
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '2.5'
75
+ version: 2.8.0
62
76
  type: :runtime
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: '2.5'
82
+ version: 2.8.0
69
83
  description: cucumber-api allows API JSON response validation and verification in
70
84
  BDD style.
71
85
  email:
@@ -86,6 +100,7 @@ files:
86
100
  - features/schemas/topstories.json
87
101
  - features/support/env.rb
88
102
  - lib/cucumber-api.rb
103
+ - lib/cucumber-api/helpers.rb
89
104
  - lib/cucumber-api/response.rb
90
105
  - lib/cucumber-api/steps.rb
91
106
  - lib/cucumber-api/version.rb
@@ -93,7 +108,7 @@ homepage: https://github.com/hidroh/cucumber-api
93
108
  licenses:
94
109
  - Apache-2.0
95
110
  metadata: {}
96
- post_install_message:
111
+ post_install_message:
97
112
  rdoc_options: []
98
113
  require_paths:
99
114
  - lib
@@ -101,16 +116,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
101
116
  requirements:
102
117
  - - ">="
103
118
  - !ruby/object:Gem::Version
104
- version: 1.9.3
119
+ version: 2.3.0
105
120
  required_rubygems_version: !ruby/object:Gem::Requirement
106
121
  requirements:
107
122
  - - ">="
108
123
  - !ruby/object:Gem::Version
109
124
  version: '0'
110
125
  requirements: []
111
- rubyforge_project:
112
- rubygems_version: 2.2.2
113
- signing_key:
126
+ rubygems_version: 3.2.3
127
+ signing_key:
114
128
  specification_version: 4
115
129
  summary: API validator with Cucumber
116
130
  test_files: []