stub_requests 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.reek.yml +48 -8
- data/.rspec +2 -1
- data/CHANGELOG.md +41 -2
- data/README.md +138 -10
- data/bin/console +7 -9
- data/lib/rspec/subject_as_lambda.rb +1 -2
- data/lib/stub_requests/api.rb +34 -15
- data/lib/stub_requests/argument_validation.rb +0 -2
- data/lib/stub_requests/callback.rb +9 -2
- data/lib/stub_requests/callback_registry.rb +4 -25
- data/lib/stub_requests/dsl/method_definition.rb +1 -1
- data/lib/stub_requests/dsl.rb +60 -24
- data/lib/stub_requests/endpoints.rb +101 -2
- data/lib/stub_requests/property/validator.rb +2 -3
- data/lib/stub_requests/property.rb +12 -5
- data/lib/stub_requests/request_stub.rb +0 -1
- data/lib/stub_requests/service_registry.rb +11 -19
- data/lib/stub_requests/stub_registry.rb +0 -4
- data/lib/stub_requests/uri/builder.rb +0 -1
- data/lib/stub_requests/version.rb +1 -1
- data/stub_requests.gemspec +1 -0
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fb6e6aa72e0616a2a89284efa00ae33420dcf6cf3247e069af90fda69c769733
|
4
|
+
data.tar.gz: f7c963fcc527dce3e5979890b908d9a9a8acd31d676e5a91353180ea8ba55612
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d6cc37d6d92dec8aeacee90ff793f12db37deef28a4b735854fd34d6838ac47952a39e75f190e3488613a67fb9e475be952da5a4c9d3ec865bd1ed30cd68f5e2
|
7
|
+
data.tar.gz: 9db50e02b973429d74fa989baa0212d78b1c6df34e5aca7b556573bdf8bdff25aa689a0b21d053b4308fe8faefbb3826f277686d217687b147d9e9f44dbb0232
|
data/.gitignore
CHANGED
data/.reek.yml
CHANGED
@@ -1,15 +1,55 @@
|
|
1
1
|
# Auto generated by Reeks --todo flag
|
2
2
|
---
|
3
|
-
detectors:
|
4
|
-
ManualDispatch:
|
5
|
-
exclude:
|
6
|
-
- Object#blank?
|
7
|
-
Attribute:
|
8
|
-
exclude:
|
9
|
-
- StubRequests#logger
|
10
|
-
|
11
3
|
exclude_paths:
|
12
4
|
- vendor/bundle
|
13
5
|
- gemfiles
|
14
6
|
- lib/stub_requests/core_ext/
|
15
7
|
- spec/
|
8
|
+
detectors:
|
9
|
+
DuplicateMethodCall:
|
10
|
+
exclude:
|
11
|
+
- RSpec::SubjectAsLambda#it!
|
12
|
+
- StubRequests::CallbackRegistry#find_by
|
13
|
+
TooManyMethods:
|
14
|
+
exclude:
|
15
|
+
- StubRequests::Endpoints
|
16
|
+
TooManyStatements:
|
17
|
+
exclude:
|
18
|
+
- initialize
|
19
|
+
- RSpec::SubjectAsLambda#it!
|
20
|
+
DataClump:
|
21
|
+
exclude:
|
22
|
+
- StubRequests::API
|
23
|
+
- StubRequests::Endpoints
|
24
|
+
- StubRequests::StubRegistry
|
25
|
+
LongParameterList:
|
26
|
+
exclude:
|
27
|
+
- StubRequests::API#register_callback
|
28
|
+
- StubRequests::CallbackRegistry#register
|
29
|
+
- StubRequests::CallbackRegistry#self.register
|
30
|
+
- StubRequests::Property::Validator#self.call
|
31
|
+
UtilityFunction:
|
32
|
+
exclude:
|
33
|
+
- StubRequests::API#define_stubs
|
34
|
+
- StubRequests::API#print_stubs
|
35
|
+
- StubRequests::API#register_callback
|
36
|
+
- StubRequests::API#register_service
|
37
|
+
- StubRequests::API#stub_endpoint
|
38
|
+
- StubRequests::API#unregister_callback
|
39
|
+
- StubRequests::StubRegistry#initialize_endpoint_stub
|
40
|
+
ControlParameter:
|
41
|
+
exclude:
|
42
|
+
- StubRequests::CallbackRegistry#find_by
|
43
|
+
- StubRequests::Property::Validator#initialize
|
44
|
+
FeatureEnvy:
|
45
|
+
exclude:
|
46
|
+
- StubRequests::CallbackRegistry#dispatch_callback
|
47
|
+
- StubRequests::CallbackRegistry#find_by
|
48
|
+
- StubRequests::CallbackRegistry#invoke_callbacks
|
49
|
+
- StubRequests::StubRegistry#find_endpoint_stub
|
50
|
+
Attribute:
|
51
|
+
exclude:
|
52
|
+
- StubRequests#logger
|
53
|
+
TooManyInstanceVariables:
|
54
|
+
exclude:
|
55
|
+
- StubRequests::URI::Builder
|
data/.rspec
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,20 +2,59 @@
|
|
2
2
|
|
3
3
|
## [Unreleased](https://github.com/mhenrixon/stub_requests/tree/HEAD)
|
4
4
|
|
5
|
-
[Full Changelog](https://github.com/mhenrixon/stub_requests/compare/v0.1.
|
5
|
+
[Full Changelog](https://github.com/mhenrixon/stub_requests/compare/v0.1.4...HEAD)
|
6
|
+
|
7
|
+
**Implemented enhancements:**
|
8
|
+
|
9
|
+
- Use fuubar for spec formatting [\#19](https://github.com/mhenrixon/stub_requests/pull/19) ([mhenrixon](https://github.com/mhenrixon))
|
10
|
+
- Adds print stub definitions [\#18](https://github.com/mhenrixon/stub_requests/pull/18) ([mhenrixon](https://github.com/mhenrixon))
|
11
|
+
|
12
|
+
**Fixed bugs:**
|
13
|
+
|
14
|
+
- Fix bug with defining properties [\#17](https://github.com/mhenrixon/stub_requests/pull/17) ([mhenrixon](https://github.com/mhenrixon))
|
15
|
+
|
16
|
+
**Merged pull requests:**
|
17
|
+
|
18
|
+
- Update Changelog [\#16](https://github.com/mhenrixon/stub_requests/pull/16) ([mhenrixon](https://github.com/mhenrixon))
|
19
|
+
|
20
|
+
## [v0.1.4](https://github.com/mhenrixon/stub_requests/tree/v0.1.4) (2019-02-06)
|
21
|
+
[Full Changelog](https://github.com/mhenrixon/stub_requests/compare/v0.1.3...v0.1.4)
|
22
|
+
|
23
|
+
**Implemented enhancements:**
|
24
|
+
|
25
|
+
- DSL for building stub methods [\#15](https://github.com/mhenrixon/stub_requests/pull/15) ([mhenrixon](https://github.com/mhenrixon))
|
26
|
+
|
27
|
+
**Merged pull requests:**
|
28
|
+
|
29
|
+
- Update Changelog [\#13](https://github.com/mhenrixon/stub_requests/pull/13) ([mhenrixon](https://github.com/mhenrixon))
|
30
|
+
|
31
|
+
## [v0.1.3](https://github.com/mhenrixon/stub_requests/tree/v0.1.3) (2019-02-04)
|
32
|
+
[Full Changelog](https://github.com/mhenrixon/stub_requests/compare/v0.1.2...v0.1.3)
|
6
33
|
|
7
34
|
**Implemented enhancements:**
|
8
35
|
|
9
36
|
- Add rough initial implementation of subscriptions [\#12](https://github.com/mhenrixon/stub_requests/pull/12) ([mhenrixon](https://github.com/mhenrixon))
|
37
|
+
|
38
|
+
**Merged pull requests:**
|
39
|
+
|
40
|
+
- Update Changelog [\#11](https://github.com/mhenrixon/stub_requests/pull/11) ([mhenrixon](https://github.com/mhenrixon))
|
41
|
+
|
42
|
+
## [v0.1.2](https://github.com/mhenrixon/stub_requests/tree/v0.1.2) (2019-02-03)
|
43
|
+
[Full Changelog](https://github.com/mhenrixon/stub_requests/compare/v0.1.1...v0.1.2)
|
44
|
+
|
45
|
+
**Implemented enhancements:**
|
46
|
+
|
10
47
|
- Script updating documentation [\#9](https://github.com/mhenrixon/stub_requests/pull/9) ([mhenrixon](https://github.com/mhenrixon))
|
11
48
|
- Add a simple script to update documentation [\#8](https://github.com/mhenrixon/stub_requests/pull/8) ([mhenrixon](https://github.com/mhenrixon))
|
12
49
|
- Improve documentation [\#7](https://github.com/mhenrixon/stub_requests/pull/7) ([mhenrixon](https://github.com/mhenrixon))
|
13
50
|
- Initial metrics implementation [\#6](https://github.com/mhenrixon/stub_requests/pull/6) ([mhenrixon](https://github.com/mhenrixon))
|
14
51
|
- Remove the docs folder in preference of a branch [\#5](https://github.com/mhenrixon/stub_requests/pull/5) ([mhenrixon](https://github.com/mhenrixon))
|
15
52
|
|
53
|
+
## [v0.1.1](https://github.com/mhenrixon/stub_requests/tree/v0.1.1) (2019-02-01)
|
54
|
+
[Full Changelog](https://github.com/mhenrixon/stub_requests/compare/v0.1.0...v0.1.1)
|
55
|
+
|
16
56
|
**Merged pull requests:**
|
17
57
|
|
18
|
-
- Update Changelog [\#11](https://github.com/mhenrixon/stub_requests/pull/11) ([mhenrixon](https://github.com/mhenrixon))
|
19
58
|
- Allow older webmock versions [\#4](https://github.com/mhenrixon/stub_requests/pull/4) ([mhenrixon](https://github.com/mhenrixon))
|
20
59
|
- Add docs folder [\#3](https://github.com/mhenrixon/stub_requests/pull/3) ([mhenrixon](https://github.com/mhenrixon))
|
21
60
|
- Add docs folder and CHANGELOG.md [\#2](https://github.com/mhenrixon/stub_requests/pull/2) ([mhenrixon](https://github.com/mhenrixon))
|
data/README.md
CHANGED
@@ -20,7 +20,8 @@ This is achieve by keeping a registry over the service endpoints.
|
|
20
20
|
- [Register service endpoints](#register-service-endpoints)
|
21
21
|
- [Stubbing service endpoints](#stubbing-service-endpoints)
|
22
22
|
- [Metrics](#metrics)
|
23
|
-
- [
|
23
|
+
- [Endpoint invocation callbacks](#endpoint-invocation-callbacks)
|
24
|
+
- [Using Method Stubs](#using-method-stubs)
|
24
25
|
- [Future Improvements](#future-improvements)
|
25
26
|
- [API Client Gem](#api-client-gem)
|
26
27
|
- [Development](#development)
|
@@ -68,11 +69,12 @@ The naming of the `service_id` and `endpoint_id`'s is irrelevant. This is just h
|
|
68
69
|
|
69
70
|
```ruby
|
70
71
|
StubRequests.register_service(:google_ads, "https://api.google.com/v5") do
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
72
|
+
get "ads", as: :ads_index
|
73
|
+
get "ads/:id", as: :ads_show
|
74
|
+
patch "ads/:id", as: :ads_update
|
75
|
+
put "ads/:id", as: :ads_update
|
76
|
+
post "ads", as: :ads_create
|
77
|
+
delete "ads/:id", as: :ads_destroy
|
76
78
|
end
|
77
79
|
```
|
78
80
|
|
@@ -119,8 +121,8 @@ StubRequests.configure do |config|
|
|
119
121
|
end
|
120
122
|
```
|
121
123
|
|
122
|
-
<a id="
|
123
|
-
###
|
124
|
+
<a id="endpoint-invocation-callbacks"></a>
|
125
|
+
### Endpoint invocation callbacks
|
124
126
|
|
125
127
|
```ruby
|
126
128
|
# To jump into pry when a request is called
|
@@ -131,14 +133,140 @@ end
|
|
131
133
|
|
132
134
|
callback = ->(request) { p request; binding.pry }
|
133
135
|
|
134
|
-
StubRequests.
|
136
|
+
StubRequests.register_callback(:document_service, :show, :get, callback)
|
135
137
|
```
|
136
138
|
|
137
139
|
```ruby
|
138
140
|
# To unsubscribe from notifications
|
139
|
-
StubRequests.
|
141
|
+
StubRequests.unregister_callback(:document_service, :show, :get)
|
140
142
|
```
|
141
143
|
|
144
|
+
<a id="using-method-stubs"></a>
|
145
|
+
### Using Method Stubs
|
146
|
+
|
147
|
+
```ruby
|
148
|
+
#
|
149
|
+
# 1. Register some service endpoints
|
150
|
+
#
|
151
|
+
StubRequests.register_service(:documents, "https://company.com/api/v1") do
|
152
|
+
get "documents/:id", as: :documents_show
|
153
|
+
get "documents", as: :documents_index
|
154
|
+
post "documents", as: :documents_create
|
155
|
+
patch "documents/:id", as: :documents_update
|
156
|
+
put "documents/:id", as: :document_put
|
157
|
+
delete "documents/:id" as: :documents_destroy
|
158
|
+
end
|
159
|
+
|
160
|
+
#
|
161
|
+
# 2. Create a module where the methods should be defined
|
162
|
+
#
|
163
|
+
module Stubs
|
164
|
+
module Documents
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
#
|
169
|
+
# 3. Define the stubs for the registered endpoints
|
170
|
+
#
|
171
|
+
StubRequests::DSL.define_stubs(:documents, Stubs::Documents)
|
172
|
+
|
173
|
+
Documents.instance_methods #=>
|
174
|
+
[
|
175
|
+
:stub_documents_show
|
176
|
+
:stub_documents_index
|
177
|
+
:stub_documents_create
|
178
|
+
:stub_documents_update
|
179
|
+
:stub_document_put
|
180
|
+
:stub_documents_destroy
|
181
|
+
]
|
182
|
+
|
183
|
+
#
|
184
|
+
# 4. Use the module in our tests
|
185
|
+
#
|
186
|
+
RSpec.describe ClassThatCallsTheDocumentService do
|
187
|
+
include Stubs::Documents
|
188
|
+
|
189
|
+
let(:document_id) { 123455 }
|
190
|
+
let(:documents_show_body) do
|
191
|
+
{
|
192
|
+
id: document_id,
|
193
|
+
status: "draft",
|
194
|
+
}
|
195
|
+
end
|
196
|
+
|
197
|
+
before do
|
198
|
+
stub_documents_show(id: document_id)
|
199
|
+
.to_return(status: 200, body: documents_show_body.to_json)
|
200
|
+
end
|
201
|
+
|
202
|
+
it "stubs the request nicely" do
|
203
|
+
# execute code that calls the service
|
204
|
+
uri = URI("https://company.com/api/v1/documents/#{document_id}")
|
205
|
+
response = Net::HTTP.get(uri)
|
206
|
+
|
207
|
+
expect(response).to be_json_eql(example_api_list_task_response.to_json)
|
208
|
+
end
|
209
|
+
end
|
210
|
+
```
|
211
|
+
|
212
|
+
If you prefer to keep a hard copy of the methods in your project then you can print the method definitions to the console and copy paste.
|
213
|
+
|
214
|
+
This puts the user in charge of keeping them up to date with the gem.
|
215
|
+
|
216
|
+
```ruby
|
217
|
+
#
|
218
|
+
# 1. Register some service endpoints
|
219
|
+
#
|
220
|
+
StubRequests.register_service(:documents, "https://company.com/api/v1") do
|
221
|
+
get "documents/:id", as: :documents_show
|
222
|
+
get "documents", as: :documents_index
|
223
|
+
post "documents", as: :documents_create
|
224
|
+
patch "documents/:id", as: :documents_update
|
225
|
+
put "documents/:id", as: :document_put
|
226
|
+
delete "documents/:id", as: :documents_destroy
|
227
|
+
end
|
228
|
+
|
229
|
+
#
|
230
|
+
# 2. Print the stub definitions to STDOUT
|
231
|
+
#
|
232
|
+
StubRequests.print_stubs(:documents) #=>
|
233
|
+
|
234
|
+
#
|
235
|
+
# 3. Copy the stubs into a module
|
236
|
+
#
|
237
|
+
module DocumentStubs
|
238
|
+
def stub_documents_show(id:, &block)
|
239
|
+
StubRequests.stub_endpoint(:documents, :documents_show, id: id, &block)
|
240
|
+
end
|
241
|
+
|
242
|
+
|
243
|
+
def stub_documents_index(&block)
|
244
|
+
StubRequests.stub_endpoint(:documents, :documents_index, &block)
|
245
|
+
end
|
246
|
+
|
247
|
+
|
248
|
+
def stub_documents_create(&block)
|
249
|
+
StubRequests.stub_endpoint(:documents, :documents_create, &block)
|
250
|
+
end
|
251
|
+
|
252
|
+
|
253
|
+
def stub_documents_update(id:, &block)
|
254
|
+
StubRequests.stub_endpoint(:documents, :documents_update, id: id, &block)
|
255
|
+
end
|
256
|
+
|
257
|
+
|
258
|
+
def stub_document_put(id:, &block)
|
259
|
+
StubRequests.stub_endpoint(:documents, :document_put, id: id, &block)
|
260
|
+
end
|
261
|
+
|
262
|
+
|
263
|
+
def stub_documents_destroy(id:, &block)
|
264
|
+
StubRequests.stub_endpoint(:documents, :documents_destroy, id: id, &block)
|
265
|
+
end
|
266
|
+
end
|
267
|
+
```
|
268
|
+
|
269
|
+
|
142
270
|
<a id="future-improvements"></a>
|
143
271
|
## Future Improvements
|
144
272
|
|
data/bin/console
CHANGED
@@ -4,12 +4,10 @@
|
|
4
4
|
require "bundler/setup"
|
5
5
|
require "stub_requests"
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
require "irb"
|
15
|
-
IRB.start(__FILE__)
|
7
|
+
begin
|
8
|
+
require "pry"
|
9
|
+
Pry.start(__FILE__)
|
10
|
+
rescue LoadError, NameError
|
11
|
+
require "irb"
|
12
|
+
IRB.start(__FILE__)
|
13
|
+
end
|
@@ -105,8 +105,7 @@ module RSpec
|
|
105
105
|
# before { subject.age = 25 }
|
106
106
|
# its(:age) { should eq(25) }
|
107
107
|
# end
|
108
|
-
#
|
109
|
-
# :reek:TooManyStatements
|
108
|
+
#
|
110
109
|
def it!(*options, &block)
|
111
110
|
it_lambda_caller = caller.reject { |file_line| file_line =~ %r{/rspec/subject_as_lambda} }
|
112
111
|
describe(nil, caller: it_lambda_caller) do
|
data/lib/stub_requests/api.rb
CHANGED
@@ -15,7 +15,6 @@ module StubRequests
|
|
15
15
|
#
|
16
16
|
# @author Mikael Henriksson <mikael@zoolutions.se>
|
17
17
|
#
|
18
|
-
# :reek:DataClump
|
19
18
|
module API
|
20
19
|
# extends "self"
|
21
20
|
# @!parse extend self
|
@@ -34,22 +33,47 @@ module StubRequests
|
|
34
33
|
#
|
35
34
|
# @example Register a service with endpoints
|
36
35
|
# register_service(:documents, "https://company.com/api/v1") do
|
37
|
-
#
|
38
|
-
#
|
39
|
-
#
|
40
|
-
#
|
41
|
-
#
|
42
|
-
# register(:destroy, :delete, "documents/:id")
|
43
|
-
# end
|
36
|
+
# get "documents/:id", as: :show
|
37
|
+
# get "documents", as: :index
|
38
|
+
# post "documents", as: :create
|
39
|
+
# patch "documents/:id", as: :update
|
40
|
+
# delete "documents/:id", as: :destroy
|
44
41
|
# end
|
45
42
|
#
|
46
43
|
# @return [Service] a new service or a previously registered service
|
47
44
|
#
|
48
|
-
# :reek:UtilityFunction
|
49
45
|
def register_service(service_id, service_uri, &block)
|
50
46
|
StubRequests::ServiceRegistry.register_service(service_id, service_uri, &block)
|
51
47
|
end
|
52
48
|
|
49
|
+
#
|
50
|
+
# Define stub methods for service in the receiver
|
51
|
+
#
|
52
|
+
#
|
53
|
+
# @see DSL#define_stubs
|
54
|
+
#
|
55
|
+
# @param [Symbol] service_id the id of a registered service
|
56
|
+
# @param [Module] receiver the receiver of the stub methods
|
57
|
+
#
|
58
|
+
# @return [void] outputs a list of methods to the console
|
59
|
+
#
|
60
|
+
def define_stubs(service_id, receiver:)
|
61
|
+
DSL.new(service_id, receiver: receiver).define_stubs
|
62
|
+
end
|
63
|
+
|
64
|
+
#
|
65
|
+
# Print stub method definitions to manually add to a module or class
|
66
|
+
#
|
67
|
+
# @see DSL#print_stubs
|
68
|
+
#
|
69
|
+
# @param [Symbol] service_id the id of a registered service
|
70
|
+
#
|
71
|
+
# @return [void] prints to STDOUT
|
72
|
+
#
|
73
|
+
def print_stubs(service_id)
|
74
|
+
DSL.new(service_id).print_stubs
|
75
|
+
end
|
76
|
+
|
53
77
|
#
|
54
78
|
# Stub a request to a registered service endpoint
|
55
79
|
#
|
@@ -61,7 +85,7 @@ module StubRequests
|
|
61
85
|
# @note the kind of timeout error raised by webmock is depending on the HTTP client used
|
62
86
|
#
|
63
87
|
# @example Stub a request to a registered service endpoint using block version
|
64
|
-
#
|
88
|
+
# stub_endpoint(:documents, :index) do
|
65
89
|
# with(headers: { "Accept" => "application/json" }}})
|
66
90
|
# to_return(body: "No content", status: 204)
|
67
91
|
# end
|
@@ -69,8 +93,6 @@ module StubRequests
|
|
69
93
|
# @see #stub_http_request
|
70
94
|
# @return [WebMock::RequestStub] a mocked request
|
71
95
|
#
|
72
|
-
# :reek:UtilityFunction
|
73
|
-
# :reek:LongParameterList { max_params: 5 }
|
74
96
|
def stub_endpoint(service_id, endpoint_id, route_params = {}, &callback)
|
75
97
|
StubRequests::ServiceRegistry.stub_endpoint(service_id, endpoint_id, route_params, &callback)
|
76
98
|
end
|
@@ -85,8 +107,6 @@ module StubRequests
|
|
85
107
|
#
|
86
108
|
# @return [void]
|
87
109
|
#
|
88
|
-
# :reek:UtilityFunction
|
89
|
-
# :reek:LongParameterList
|
90
110
|
def register_callback(service_id, endpoint_id, verb, callback)
|
91
111
|
StubRequests::CallbackRegistry.register(service_id, endpoint_id, verb, callback)
|
92
112
|
end
|
@@ -99,7 +119,6 @@ module StubRequests
|
|
99
119
|
#
|
100
120
|
# @return [void]
|
101
121
|
#
|
102
|
-
# :reek:UtilityFunction
|
103
122
|
def unregister_callback(service_id, endpoint_id, verb)
|
104
123
|
StubRequests::CallbackRegistry.unregister(service_id, endpoint_id, verb)
|
105
124
|
end
|
@@ -30,13 +30,11 @@ module StubRequests
|
|
30
30
|
#
|
31
31
|
# @return [void]
|
32
32
|
#
|
33
|
-
# :reek:UtilityFunction
|
34
33
|
def validate!(name:, value:, type:)
|
35
34
|
validate_type!(:name, name, [Symbol, String]) unless name
|
36
35
|
validate_type!(name, value, type) if type
|
37
36
|
end
|
38
37
|
|
39
|
-
# :reek:UtilityFunction
|
40
38
|
def validate_type!(name, value, type)
|
41
39
|
expected_types = Array(type).flatten
|
42
40
|
return if expected_types.any? { |is_a| value.is_a?(is_a) }
|
@@ -47,8 +47,15 @@ module StubRequests
|
|
47
47
|
self.callback = callback
|
48
48
|
end
|
49
49
|
|
50
|
-
def call(
|
51
|
-
|
50
|
+
def call(request_stub)
|
51
|
+
case arity
|
52
|
+
when 0
|
53
|
+
callback.call
|
54
|
+
when 1
|
55
|
+
callback.call(request_stub)
|
56
|
+
else
|
57
|
+
raise InvalidCallback, "The callback for a callback can either take 0 or 1 arguments (was #{arity})"
|
58
|
+
end
|
52
59
|
end
|
53
60
|
|
54
61
|
def arity
|
@@ -13,9 +13,6 @@ module StubRequests
|
|
13
13
|
# @author Mikael Henriksson <mikael@zoolutions.se>
|
14
14
|
# @since 0.1.3
|
15
15
|
#
|
16
|
-
# :reek:UtilityFunction
|
17
|
-
# :reek:DataClump
|
18
|
-
# :reek:FeatureEnvy
|
19
16
|
class CallbackRegistry
|
20
17
|
include Singleton
|
21
18
|
include Enumerable
|
@@ -32,7 +29,6 @@ module StubRequests
|
|
32
29
|
#
|
33
30
|
# @return [Callback]
|
34
31
|
#
|
35
|
-
# :reek:LongParameterList
|
36
32
|
def self.register(service_id, endpoint_id, verb, callback)
|
37
33
|
instance.register(service_id, endpoint_id, verb, callback)
|
38
34
|
end
|
@@ -110,7 +106,6 @@ module StubRequests
|
|
110
106
|
#
|
111
107
|
# @return [Callback] the added callback
|
112
108
|
#
|
113
|
-
# :reek:LongParameterList
|
114
109
|
def register(service_id, endpoint_id, verb, block)
|
115
110
|
callback = find_by(service_id, endpoint_id, verb)
|
116
111
|
return callback if callback
|
@@ -130,7 +125,6 @@ module StubRequests
|
|
130
125
|
#
|
131
126
|
# @return [Callback] the deleted callback
|
132
127
|
#
|
133
|
-
# :reek:ControlParameter
|
134
128
|
def unregister(service_id, endpoint_id, verb)
|
135
129
|
return unless (callback = find_by(service_id, endpoint_id, verb))
|
136
130
|
|
@@ -140,14 +134,14 @@ module StubRequests
|
|
140
134
|
#
|
141
135
|
# Notifies subscribers that a request was made
|
142
136
|
#
|
143
|
-
# @param [RequestStub]
|
137
|
+
# @param [RequestStub] request_stub the stubbed request
|
144
138
|
#
|
145
139
|
# @return [void]
|
146
140
|
#
|
147
|
-
def invoke_callbacks(
|
148
|
-
return unless (callback = find_by(
|
141
|
+
def invoke_callbacks(request_stub)
|
142
|
+
return unless (callback = find_by(request_stub.service_id, request_stub.endpoint_id, request_stub.verb))
|
149
143
|
|
150
|
-
|
144
|
+
callback.call(request_stub)
|
151
145
|
end
|
152
146
|
|
153
147
|
private
|
@@ -162,8 +156,6 @@ module StubRequests
|
|
162
156
|
#
|
163
157
|
# @return [Callback]
|
164
158
|
#
|
165
|
-
# :reek:ControlParameter
|
166
|
-
# :reek:DuplicateMethodCall
|
167
159
|
def find_by(service_id, endpoint_id, verb)
|
168
160
|
find do |sub|
|
169
161
|
sub.service_id == service_id &&
|
@@ -171,18 +163,5 @@ module StubRequests
|
|
171
163
|
([sub.verb, verb].include?(:any) || sub.verb == verb)
|
172
164
|
end
|
173
165
|
end
|
174
|
-
|
175
|
-
def dispatch_callback(request_stub, callback)
|
176
|
-
arity = callback.arity
|
177
|
-
|
178
|
-
case arity
|
179
|
-
when 0
|
180
|
-
callback.call
|
181
|
-
when 1
|
182
|
-
callback.call(request_stub)
|
183
|
-
else
|
184
|
-
raise InvalidCallback, "The callback for a callback can either take 0 or 1 arguments (was #{arity})"
|
185
|
-
end
|
186
|
-
end
|
187
166
|
end
|
188
167
|
end
|
data/lib/stub_requests/dsl.rb
CHANGED
@@ -10,9 +10,9 @@ module StubRequests
|
|
10
10
|
# @example **Register service with endpoints**
|
11
11
|
# StubRequests.register_service(:documents, "https://company.com/api/v1") do
|
12
12
|
# register_endpoints do
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
13
|
+
# get "documents/:id", as: :documents_show
|
14
|
+
# get "documents", as: :documents_index
|
15
|
+
# post "documents", as: :documents_create
|
16
16
|
# end
|
17
17
|
# end
|
18
18
|
# @example **Create a receiver module for the stub methods**
|
@@ -20,7 +20,7 @@ module StubRequests
|
|
20
20
|
#
|
21
21
|
# Stubs.instance_methods #=> []
|
22
22
|
# @example **Define the endpoint methods using the DSL**
|
23
|
-
# StubRequests::DSL.
|
23
|
+
# StubRequests::DSL.define_stubs(
|
24
24
|
# :documents, receiver: Stubs
|
25
25
|
# )
|
26
26
|
#
|
@@ -28,17 +28,17 @@ module StubRequests
|
|
28
28
|
#
|
29
29
|
# Stubs.instance_methods #=> [:stub_documents_show, :stub_documents_index, :stub_documents_create]
|
30
30
|
# module Stubs
|
31
|
-
#
|
32
|
-
#
|
33
|
-
#
|
31
|
+
# def stub_documents_show(id:, &block)
|
32
|
+
# stub_endpoint(:documents, :show, id: id, &block)
|
33
|
+
# end
|
34
34
|
#
|
35
|
-
#
|
36
|
-
#
|
37
|
-
#
|
35
|
+
# def stub_documents_index(&block)
|
36
|
+
# stub_endpoint(:documents, :index, &block)
|
37
|
+
# end
|
38
38
|
#
|
39
|
-
#
|
40
|
-
#
|
41
|
-
#
|
39
|
+
# def stub_documents_create(&block)
|
40
|
+
# stub_endpoint(:documents, :create, &block)
|
41
|
+
# end
|
42
42
|
# end
|
43
43
|
#
|
44
44
|
# @example **Use the helper methods in your tests**
|
@@ -70,24 +70,60 @@ module StubRequests
|
|
70
70
|
# expect(response).to be_json_eql(response_body.to_json)
|
71
71
|
# end
|
72
72
|
class DSL
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
73
|
+
#
|
74
|
+
# @!attribute [r] service
|
75
|
+
# @return [Service] an instance of a service
|
76
|
+
attr_reader :service
|
77
|
+
#
|
78
|
+
# @!attribute [r] receiver
|
79
|
+
# @return [Module, nil] the receiver module
|
80
|
+
attr_reader :receiver
|
81
|
+
#
|
82
|
+
# @!attribute [r] endpoints
|
83
|
+
# @return [Array<Endpoint>] a collection of endpoints
|
84
|
+
attr_reader :endpoints
|
78
85
|
|
79
|
-
|
80
|
-
|
86
|
+
#
|
87
|
+
# Initialize a new instance of DSL
|
88
|
+
#
|
89
|
+
# @param [Symbol] service_id the id of a registered service
|
90
|
+
# @param [Module] receiver the receiver of the stub methods
|
91
|
+
#
|
92
|
+
def initialize(service_id, receiver: nil)
|
93
|
+
@service = StubRequests::ServiceRegistry.instance.find!(service_id)
|
81
94
|
@receiver = receiver
|
82
95
|
@endpoints = service.endpoints.endpoints.values
|
83
96
|
end
|
84
97
|
|
85
|
-
|
98
|
+
#
|
99
|
+
# Defines stub methods for #endpoints in the #receiver
|
100
|
+
#
|
101
|
+
#
|
102
|
+
# @return [void]
|
103
|
+
#
|
104
|
+
def define_stubs
|
86
105
|
receiver.send(:include, StubRequests::API)
|
87
106
|
|
88
|
-
|
89
|
-
|
90
|
-
|
107
|
+
method_definitions.each do |method_definition|
|
108
|
+
DefineMethod.new(method_definition, receiver).define
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
#
|
113
|
+
# Prints stub methods for #endpoints to STDOUT
|
114
|
+
#
|
115
|
+
#
|
116
|
+
# @return [void]
|
117
|
+
#
|
118
|
+
def print_stubs
|
119
|
+
method_definitions.each do |method_definition|
|
120
|
+
puts("#{method_definition}\n\n")
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def method_definitions
|
125
|
+
@method_definitions ||= endpoints.map do |endpoint|
|
126
|
+
MethodDefinition.new(service.id, endpoint.id, endpoint.route_params)
|
91
127
|
end
|
92
128
|
end
|
93
129
|
end
|
@@ -49,7 +49,6 @@ module StubRequests
|
|
49
49
|
#
|
50
50
|
# @return [Endpoint]
|
51
51
|
#
|
52
|
-
# :reek:LongParameterList { max_params: 4 }
|
53
52
|
def register(endpoint_id, verb, path)
|
54
53
|
endpoint =
|
55
54
|
if (endpoint = find(endpoint_id))
|
@@ -63,9 +62,106 @@ module StubRequests
|
|
63
62
|
endpoint
|
64
63
|
end
|
65
64
|
|
65
|
+
#
|
66
|
+
# Convenience wrapper for register
|
67
|
+
#
|
68
|
+
#
|
69
|
+
# @example **Register a get endpoint**
|
70
|
+
# . get("documents/:id", as: :documents_show)
|
71
|
+
#
|
72
|
+
# @param [String] path the path to the endpoint
|
73
|
+
# @param [Symbol] as the id of the endpoint
|
74
|
+
#
|
75
|
+
# @return [Endpoint] the registered endpoint
|
76
|
+
#
|
77
|
+
def any(path, as:) # rubocop:disable Naming/UncommunicativeMethodParamName
|
78
|
+
register(as, __method__, path)
|
79
|
+
end
|
80
|
+
|
81
|
+
#
|
82
|
+
# Convenience wrapper for register
|
83
|
+
#
|
84
|
+
#
|
85
|
+
# @example **Register a get endpoint**
|
86
|
+
# . get("documents/:id", as: :documents_show)
|
87
|
+
#
|
88
|
+
# @param [String] path the path to the endpoint
|
89
|
+
# @param [Symbol] as the id of the endpoint
|
90
|
+
#
|
91
|
+
# @return [Endpoint] the registered endpoint
|
92
|
+
#
|
93
|
+
def get(path, as:) # rubocop:disable Naming/UncommunicativeMethodParamName
|
94
|
+
register(as, __method__, path)
|
95
|
+
end
|
96
|
+
|
97
|
+
#
|
98
|
+
# Register a :post endpoint
|
99
|
+
#
|
100
|
+
#
|
101
|
+
# @example **Register a post endpoint**
|
102
|
+
# . post("documents", as: :documents_create)
|
103
|
+
#
|
104
|
+
# @param [String] path the path to the endpoint
|
105
|
+
# @param [Symbol] as the id of the endpoint
|
106
|
+
#
|
107
|
+
# @return [Endpoint] the registered endpoint
|
108
|
+
#
|
109
|
+
def post(path, as:) # rubocop:disable Naming/UncommunicativeMethodParamName
|
110
|
+
register(as, __method__, path)
|
111
|
+
end
|
112
|
+
|
113
|
+
#
|
114
|
+
# Register a :patch endpoint
|
115
|
+
#
|
116
|
+
#
|
117
|
+
# @example **Register a patch endpoint**
|
118
|
+
# . patch("documents/:id", as: :documents_update)
|
119
|
+
#
|
120
|
+
# @param [String] path the path to the endpoint
|
121
|
+
# @param [Symbol] as the id of the endpoint
|
122
|
+
#
|
123
|
+
# @return [Endpoint] the registered endpoint
|
124
|
+
#
|
125
|
+
def patch(path, as:) # rubocop:disable Naming/UncommunicativeMethodParamName
|
126
|
+
register(as, __method__, path)
|
127
|
+
end
|
128
|
+
|
129
|
+
#
|
130
|
+
# Register a :put endpoint
|
131
|
+
#
|
132
|
+
#
|
133
|
+
# @example **Register a put endpoint**
|
134
|
+
# . put("documents/:id", as: :documents_update)
|
135
|
+
#
|
136
|
+
# @param [String] path the path to the endpoint
|
137
|
+
# @param [Symbol] as the id of the endpoint
|
138
|
+
#
|
139
|
+
# @return [Endpoint] the registered endpoint
|
140
|
+
#
|
141
|
+
def put(path, as:) # rubocop:disable Naming/UncommunicativeMethodParamName
|
142
|
+
register(as, __method__, path)
|
143
|
+
end
|
144
|
+
|
145
|
+
#
|
146
|
+
# Register a :delete endpoint
|
147
|
+
#
|
148
|
+
#
|
149
|
+
# @example **Register a delete endpoint**
|
150
|
+
# . delete("documents/:id", as: :documents_destroy)
|
151
|
+
#
|
152
|
+
# @param [String] path the path to the endpoint
|
153
|
+
# @param [Symbol] as the id of the endpoint
|
154
|
+
#
|
155
|
+
# @return [Endpoint] the registered endpoint
|
156
|
+
#
|
157
|
+
def delete(path, as:) # rubocop:disable Naming/UncommunicativeMethodParamName
|
158
|
+
register(as, __method__, path)
|
159
|
+
end
|
160
|
+
|
66
161
|
#
|
67
162
|
# Updates an endpoint
|
68
163
|
#
|
164
|
+
#
|
69
165
|
# @param [Symbol] endpoint_id the id of the endpoint
|
70
166
|
# @param [Symbol] verb a HTTP verb
|
71
167
|
# @param [String] path the path to the endpoint
|
@@ -74,7 +170,6 @@ module StubRequests
|
|
74
170
|
#
|
75
171
|
# @return [Endpoint] returns the updated endpoint
|
76
172
|
#
|
77
|
-
# :reek:LongParameterList { max_params: 4 }
|
78
173
|
def update(endpoint_id, verb, path)
|
79
174
|
endpoint = find!(endpoint_id)
|
80
175
|
endpoint.update(verb, path)
|
@@ -83,6 +178,7 @@ module StubRequests
|
|
83
178
|
#
|
84
179
|
# Removes an endpoint from the collection
|
85
180
|
#
|
181
|
+
#
|
86
182
|
# @param [Symbol] endpoint_id the id of the endpoint, `:file_service`
|
87
183
|
#
|
88
184
|
# @return [Endpoint] the endpoint that was removed
|
@@ -94,6 +190,7 @@ module StubRequests
|
|
94
190
|
#
|
95
191
|
# Fetches an endpoint from the collection
|
96
192
|
#
|
193
|
+
#
|
97
194
|
# @param [<type>] endpoint_id <description>
|
98
195
|
#
|
99
196
|
# @return [Endpoint]
|
@@ -105,6 +202,7 @@ module StubRequests
|
|
105
202
|
#
|
106
203
|
# Fetches an endpoint from the collection or raises an error
|
107
204
|
#
|
205
|
+
#
|
108
206
|
# @param [Symbol] endpoint_id the id of the endpoint
|
109
207
|
#
|
110
208
|
# @raise [EndpointNotFound] when an endpoint couldn't be found
|
@@ -118,6 +216,7 @@ module StubRequests
|
|
118
216
|
#
|
119
217
|
# Returns a descriptive string with all endpoints in the collection
|
120
218
|
#
|
219
|
+
#
|
121
220
|
# @return [String]
|
122
221
|
#
|
123
222
|
def to_s
|
@@ -38,7 +38,6 @@ module StubRequests
|
|
38
38
|
#
|
39
39
|
# @return [void]
|
40
40
|
#
|
41
|
-
# :reek:LongParameterList
|
42
41
|
def self.call(name, type, default, properties)
|
43
42
|
new(name, type, default, properties).run_validations
|
44
43
|
end
|
@@ -67,12 +66,11 @@ module StubRequests
|
|
67
66
|
# @param [Object] default the default value of the property
|
68
67
|
# @param [Hash] properties the list of currently defined properties
|
69
68
|
#
|
70
|
-
# :reek:LongParameterList
|
71
69
|
def initialize(name, type, default = nil, properties = {})
|
72
70
|
@type = Array(type).flatten
|
73
71
|
@default = default
|
74
72
|
@name = name
|
75
|
-
@properties = properties
|
73
|
+
@properties = properties || {}
|
76
74
|
end
|
77
75
|
|
78
76
|
#
|
@@ -127,6 +125,7 @@ module StubRequests
|
|
127
125
|
# @return [void]
|
128
126
|
#
|
129
127
|
def validate_undefined
|
128
|
+
return unless properties
|
130
129
|
return unless (prop = properties[name])
|
131
130
|
|
132
131
|
raise PropertyDefined, name: name, type: prop[:type], default: prop[:default]
|
@@ -33,7 +33,6 @@ module StubRequests
|
|
33
33
|
#
|
34
34
|
# @author Mikael Henriksson <mikael@zoolutions.se>
|
35
35
|
#
|
36
|
-
# :reek:DataClump
|
37
36
|
module ClassMethods
|
38
37
|
#
|
39
38
|
# Define property methods for the name
|
@@ -43,7 +42,7 @@ module StubRequests
|
|
43
42
|
# @param [Hash<Symbol>] options a hash with options
|
44
43
|
# @option options [Object] :default a default value for the property
|
45
44
|
#
|
46
|
-
# @return [
|
45
|
+
# @return [void]
|
47
46
|
#
|
48
47
|
def property(name, type:, **options)
|
49
48
|
type = normalize_type(type, options)
|
@@ -65,18 +64,21 @@ module StubRequests
|
|
65
64
|
|
66
65
|
# @api private
|
67
66
|
def define_property(name, type, default)
|
68
|
-
property_reader(name)
|
67
|
+
property_reader(name, default)
|
69
68
|
property_predicate(name)
|
70
69
|
property_writer(name, type)
|
71
70
|
|
71
|
+
set_property_default(name, default)
|
72
72
|
set_property_defined(name, type, default)
|
73
73
|
end
|
74
74
|
|
75
75
|
# @api private
|
76
|
-
def property_reader(name)
|
76
|
+
def property_reader(name, default)
|
77
|
+
invar = "@#{name}"
|
77
78
|
silence_redefinition_of_method(name.to_s)
|
78
79
|
redefine_method(name) do
|
79
|
-
|
80
|
+
instance_variable_set(invar, default) unless instance_variable_defined?(invar)
|
81
|
+
instance_variable_get(invar)
|
80
82
|
end
|
81
83
|
end
|
82
84
|
|
@@ -96,8 +98,13 @@ module StubRequests
|
|
96
98
|
end
|
97
99
|
end
|
98
100
|
|
101
|
+
def set_property_default(name, default)
|
102
|
+
instance_variable_set("@#{name}", default)
|
103
|
+
end
|
104
|
+
|
99
105
|
# @api private
|
100
106
|
def set_property_defined(name, type, default)
|
107
|
+
self.properties ||= {}
|
101
108
|
properties[name] = { type: type, default: default }
|
102
109
|
end
|
103
110
|
end
|
@@ -24,11 +24,11 @@ module StubRequests
|
|
24
24
|
#
|
25
25
|
# @example Register a service with endpoints
|
26
26
|
# register_service(:documents, "https://company.com/api/v1") do
|
27
|
-
#
|
28
|
-
#
|
29
|
-
#
|
30
|
-
#
|
31
|
-
#
|
27
|
+
# get "documents/:id", as: :show
|
28
|
+
# get "documents", as: :index
|
29
|
+
# post "documents", as: :create
|
30
|
+
# patch "documents/:id", as: :update
|
31
|
+
# delete "documents/:id", as: :destroy
|
32
32
|
# end
|
33
33
|
#
|
34
34
|
# @return [Service] a new service or a previously registered service
|
@@ -50,35 +50,27 @@ module StubRequests
|
|
50
50
|
# @note the kind of timeout error raised by webmock is depending on the HTTP client used
|
51
51
|
#
|
52
52
|
# @example Stub a request to a registered service endpoint
|
53
|
-
#
|
54
|
-
#
|
55
|
-
# :get_map_location,
|
56
|
-
# {}, # No URI replacements needed for this endpoint
|
57
|
-
# )
|
58
|
-
# .to_return(body: "No content", status: 204)
|
53
|
+
# stub_endpoint(:google_api, :get_map_location)
|
54
|
+
# .to_return(body: "No content", status: 204)
|
59
55
|
#
|
60
56
|
# @example Stub a request to a registered service endpoint using block
|
61
|
-
#
|
57
|
+
# stub_endpoint(:documents, :index) do
|
62
58
|
# with(headers: { "Accept" => "application/json" }}})
|
63
59
|
# to_return(body: "No content", status: 204)
|
64
60
|
# end
|
65
61
|
#
|
66
|
-
# @see #stub_http_request
|
67
62
|
# @return [WebMock::RequestStub] a mocked request
|
68
63
|
#
|
69
|
-
# :reek:UtilityFunction
|
70
|
-
# :reek:LongParameterList { max_params: 5 }
|
71
64
|
def self.stub_endpoint(service_id, endpoint_id, route_params = {}, &callback)
|
72
65
|
service, endpoint, uri = StubRequests::URI.for_service_endpoint(service_id, endpoint_id, route_params)
|
73
|
-
|
66
|
+
webmock_stub = WebMock::Builder.build(endpoint.verb, uri, {}, &callback)
|
74
67
|
|
75
|
-
StubRegistry.record(service, endpoint,
|
76
|
-
::WebMock::StubRegistry.instance.register_request_stub(
|
68
|
+
StubRegistry.record(service, endpoint, webmock_stub)
|
69
|
+
::WebMock::StubRegistry.instance.register_request_stub(webmock_stub)
|
77
70
|
end
|
78
71
|
|
79
72
|
# @api private
|
80
73
|
# Used only for testing purposes
|
81
|
-
# :reek:LongParameterList { max_params: 4 }
|
82
74
|
def self.__stub_endpoint(service_id, endpoint_id, route_params = {})
|
83
75
|
_service, endpoint, uri = StubRequests::URI.for_service_endpoint(service_id, endpoint_id, route_params)
|
84
76
|
endpoint_stub = WebMock::Builder.build(endpoint.verb, uri)
|
@@ -14,7 +14,6 @@ module StubRequests
|
|
14
14
|
# @author Mikael Henriksson <mikael@zoolutions.se>
|
15
15
|
# @since 0.1.2
|
16
16
|
#
|
17
|
-
# :reek:DataClump
|
18
17
|
class StubRegistry
|
19
18
|
# includes "Singleton"
|
20
19
|
# @!parse include Singleton
|
@@ -145,13 +144,10 @@ module StubRequests
|
|
145
144
|
find_endpoint_stub(service, endpoint) || initialize_endpoint_stub(service, endpoint)
|
146
145
|
end
|
147
146
|
|
148
|
-
# :reek:UtilityFunction
|
149
|
-
# :reek:FeatureEnvy
|
150
147
|
def find_endpoint_stub(service, endpoint)
|
151
148
|
find { |ep| ep.service_id == service.id && ep.endpoint_id == endpoint.id }
|
152
149
|
end
|
153
150
|
|
154
|
-
# :reek:UtilityFunction
|
155
151
|
def initialize_endpoint_stub(service, endpoint)
|
156
152
|
EndpointStub.new(service, endpoint)
|
157
153
|
end
|
data/stub_requests.gemspec
CHANGED
@@ -42,6 +42,7 @@ Gem::Specification.new do |spec|
|
|
42
42
|
# ===== Testing =====
|
43
43
|
spec.add_development_dependency "appraisal", ">= 2.2.0"
|
44
44
|
spec.add_development_dependency "json_spec", ">= 1.1.5"
|
45
|
+
spec.add_development_dependency "fuubar", ">= 2.3"
|
45
46
|
spec.add_development_dependency "rspec", ">= 3.8"
|
46
47
|
spec.add_development_dependency "rspec-its", ">= 1.2"
|
47
48
|
spec.add_development_dependency "rubocop", "~> 0.63.1"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stub_requests
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mikael Henriksson
|
@@ -146,6 +146,20 @@ dependencies:
|
|
146
146
|
- - ">="
|
147
147
|
- !ruby/object:Gem::Version
|
148
148
|
version: 1.1.5
|
149
|
+
- !ruby/object:Gem::Dependency
|
150
|
+
name: fuubar
|
151
|
+
requirement: !ruby/object:Gem::Requirement
|
152
|
+
requirements:
|
153
|
+
- - ">="
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
version: '2.3'
|
156
|
+
type: :development
|
157
|
+
prerelease: false
|
158
|
+
version_requirements: !ruby/object:Gem::Requirement
|
159
|
+
requirements:
|
160
|
+
- - ">="
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: '2.3'
|
149
163
|
- !ruby/object:Gem::Dependency
|
150
164
|
name: rspec
|
151
165
|
requirement: !ruby/object:Gem::Requirement
|