stub_requests 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|