stub_requests 0.1.9 → 0.1.10
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/.reek.yml +5 -9
- data/.rubocop.yml +1 -0
- data/CHANGELOG.md +23 -0
- data/README.md +9 -9
- data/Rakefile +7 -5
- data/lib/stub_requests.rb +30 -16
- data/lib/stub_requests/api.rb +45 -26
- data/lib/stub_requests/callback.rb +3 -1
- data/lib/stub_requests/callback_registry.rb +9 -55
- data/lib/stub_requests/concerns/argument_validation.rb +47 -0
- data/lib/stub_requests/concerns/property.rb +114 -0
- data/lib/stub_requests/concerns/property/validator.rb +137 -0
- data/lib/stub_requests/concerns/register_verb.rb +110 -0
- data/lib/stub_requests/configuration.rb +19 -2
- data/lib/stub_requests/dsl.rb +5 -6
- data/lib/stub_requests/dsl/method_definition.rb +2 -8
- data/lib/stub_requests/endpoint.rb +22 -23
- data/lib/stub_requests/endpoint_registry.rb +157 -0
- data/lib/stub_requests/exceptions.rb +28 -10
- data/lib/stub_requests/request_stub.rb +29 -14
- data/lib/stub_requests/service.rb +55 -7
- data/lib/stub_requests/service_registry.rb +30 -79
- data/lib/stub_requests/stub_registry.rb +22 -80
- data/lib/stub_requests/stub_requests.rb +8 -5
- data/lib/stub_requests/uri.rb +0 -17
- data/lib/stub_requests/utils/fuzzy.rb +70 -0
- data/lib/stub_requests/version.rb +1 -1
- data/lib/stub_requests/webmock/builder.rb +9 -51
- data/lib/stub_requests/webmock/stub_registry_extension.rb +1 -1
- data/lib/tasks/changelog.rake +1 -7
- data/stub_requests.gemspec +1 -0
- data/update_docs.sh +2 -2
- metadata +27 -8
- data/lib/stub_requests/argument_validation.rb +0 -48
- data/lib/stub_requests/endpoint_stub.rb +0 -89
- data/lib/stub_requests/endpoints.rb +0 -246
- data/lib/stub_requests/hash_util.rb +0 -32
- data/lib/stub_requests/observable.rb +0 -18
- data/lib/stub_requests/property.rb +0 -112
- data/lib/stub_requests/property/validator.rb +0 -135
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a536f3b0a7ae3cf0c19b91fd9f3c00ba97990f192c0361a070e993702bc69c5e
|
4
|
+
data.tar.gz: a8bb04de37a709efaf4859a71ac81c9c360109faf392ef0505ebb3e195fb5e68
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 16c128e4b4a894c4478eaa697aafb84aa467d7c51a0d6086340f30dd7f8acf969254cb506d6a52bc19d6c0f148af18492c4461a4b07ba988b0ee01eb223d232e
|
7
|
+
data.tar.gz: c30405764a9064978698b3fdbf6046bd8a01cac0a2ace240b4b7f8092f7e1716f108e0b01a26fef24216ac444c134377a518a4537d97a69b18314d33adf0ee8c
|
data/.reek.yml
CHANGED
@@ -19,6 +19,7 @@ detectors:
|
|
19
19
|
- RSpec::SubjectAsLambda#it!
|
20
20
|
DataClump:
|
21
21
|
exclude:
|
22
|
+
- StubRequests::Concerns::RegisterVerb
|
22
23
|
- StubRequests::API
|
23
24
|
- StubRequests::Endpoints
|
24
25
|
- StubRequests::StubRegistry
|
@@ -27,20 +28,14 @@ detectors:
|
|
27
28
|
- StubRequests::API#register_callback
|
28
29
|
- StubRequests::CallbackRegistry#register
|
29
30
|
- StubRequests::CallbackRegistry#self.register
|
30
|
-
- StubRequests::Property::Validator#self.call
|
31
|
+
- StubRequests::Concerns::Property::Validator#self.call
|
31
32
|
UtilityFunction:
|
32
33
|
exclude:
|
33
|
-
- StubRequests::API
|
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
|
34
|
+
- StubRequests::API
|
40
35
|
ControlParameter:
|
41
36
|
exclude:
|
42
37
|
- StubRequests::CallbackRegistry#find_by
|
43
|
-
- StubRequests::Property::Validator#initialize
|
38
|
+
- StubRequests::Concerns::Property::Validator#initialize
|
44
39
|
FeatureEnvy:
|
45
40
|
exclude:
|
46
41
|
- StubRequests::CallbackRegistry#dispatch_callback
|
@@ -52,4 +47,5 @@ detectors:
|
|
52
47
|
- StubRequests#logger
|
53
48
|
TooManyInstanceVariables:
|
54
49
|
exclude:
|
50
|
+
- StubRequests::Endpoint
|
55
51
|
- StubRequests::URI::Builder
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,28 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## [Unreleased](https://github.com/mhenrixon/stub_requests/tree/HEAD)
|
4
|
+
|
5
|
+
[Full Changelog](https://github.com/mhenrixon/stub_requests/compare/v0.1.9...HEAD)
|
6
|
+
|
7
|
+
**Implemented enhancements:**
|
8
|
+
|
9
|
+
- More helpful stub methods [\#29](https://github.com/mhenrixon/stub_requests/pull/29) ([mhenrixon](https://github.com/mhenrixon))
|
10
|
+
|
11
|
+
**Merged pull requests:**
|
12
|
+
|
13
|
+
- Update Changelog [\#28](https://github.com/mhenrixon/stub_requests/pull/28) ([mhenrixon](https://github.com/mhenrixon))
|
14
|
+
|
15
|
+
## [v0.1.9](https://github.com/mhenrixon/stub_requests/tree/v0.1.9) (2019-02-07)
|
16
|
+
[Full Changelog](https://github.com/mhenrixon/stub_requests/compare/v0.1.8...v0.1.9)
|
17
|
+
|
18
|
+
## [v0.1.8](https://github.com/mhenrixon/stub_requests/tree/v0.1.8) (2019-02-07)
|
19
|
+
[Full Changelog](https://github.com/mhenrixon/stub_requests/compare/v0.1.7...v0.1.8)
|
20
|
+
|
21
|
+
**Merged pull requests:**
|
22
|
+
|
23
|
+
- Reduce number of warnings [\#27](https://github.com/mhenrixon/stub_requests/pull/27) ([mhenrixon](https://github.com/mhenrixon))
|
24
|
+
- Update Changelog [\#26](https://github.com/mhenrixon/stub_requests/pull/26) ([mhenrixon](https://github.com/mhenrixon))
|
25
|
+
|
3
26
|
## [v0.1.7](https://github.com/mhenrixon/stub_requests/tree/v0.1.7) (2019-02-07)
|
4
27
|
[Full Changelog](https://github.com/mhenrixon/stub_requests/compare/v0.1.6...v0.1.7)
|
5
28
|
|
data/README.md
CHANGED
@@ -84,7 +84,7 @@ Now we have a list of endpoints we can stub.
|
|
84
84
|
### Stubbing service endpoints
|
85
85
|
|
86
86
|
```ruby
|
87
|
-
StubRequests.stub_endpoint(:
|
87
|
+
StubRequests.stub_endpoint(:ads_index)
|
88
88
|
.to_return(code: 204, body: "")
|
89
89
|
|
90
90
|
# This is the equivalent of doing the following in WebMock
|
@@ -95,7 +95,7 @@ WebMock.stub_request(:get, "#{Settings.google_ads_base_uri}/ads")
|
|
95
95
|
```
|
96
96
|
|
97
97
|
```ruby
|
98
|
-
StubRequests.stub_endpoint(:
|
98
|
+
StubRequests.stub_endpoint(:ads_update, id: 1) do
|
99
99
|
with(body: request_body.to_json)
|
100
100
|
to_return(code: 200, body: response_body.to_json)
|
101
101
|
end
|
@@ -117,7 +117,7 @@ Metrics collection are by default turned off. It can be turned on by the followi
|
|
117
117
|
|
118
118
|
```ruby
|
119
119
|
StubRequests.configure do |config|
|
120
|
-
config.
|
120
|
+
config.record_stubs = true
|
121
121
|
end
|
122
122
|
```
|
123
123
|
|
@@ -233,32 +233,32 @@ StubRequests.print_stubs(:documents)
|
|
233
233
|
#
|
234
234
|
module DocumentStubs
|
235
235
|
def stub_documents_show(id:, &block)
|
236
|
-
StubRequests.stub_endpoint(:
|
236
|
+
StubRequests.stub_endpoint(:documents_show, id: id, &block)
|
237
237
|
end
|
238
238
|
|
239
239
|
|
240
240
|
def stub_documents_index(&block)
|
241
|
-
StubRequests.stub_endpoint(:
|
241
|
+
StubRequests.stub_endpoint(:documents_index, &block)
|
242
242
|
end
|
243
243
|
|
244
244
|
|
245
245
|
def stub_documents_create(&block)
|
246
|
-
StubRequests.stub_endpoint(:
|
246
|
+
StubRequests.stub_endpoint(:documents_create, &block)
|
247
247
|
end
|
248
248
|
|
249
249
|
|
250
250
|
def stub_documents_update(id:, &block)
|
251
|
-
StubRequests.stub_endpoint(:
|
251
|
+
StubRequests.stub_endpoint(:documents_update, id: id, &block)
|
252
252
|
end
|
253
253
|
|
254
254
|
|
255
255
|
def stub_document_put(id:, &block)
|
256
|
-
StubRequests.stub_endpoint(:
|
256
|
+
StubRequests.stub_endpoint(:document_put, id: id, &block)
|
257
257
|
end
|
258
258
|
|
259
259
|
|
260
260
|
def stub_documents_destroy(id:, &block)
|
261
|
-
StubRequests.stub_endpoint(:
|
261
|
+
StubRequests.stub_endpoint(:documents_destroy, id: id, &block)
|
262
262
|
end
|
263
263
|
end
|
264
264
|
```
|
data/Rakefile
CHANGED
@@ -20,9 +20,11 @@ end
|
|
20
20
|
|
21
21
|
task default: :spec
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
23
|
+
namespace :stub_requests do
|
24
|
+
task :release do
|
25
|
+
sh("./update_docs.sh")
|
26
|
+
Rake::Task["changelog"].invoke
|
27
|
+
sh("gem release --tag --push")
|
28
|
+
sh("gem bump")
|
29
|
+
end
|
28
30
|
end
|
data/lib/stub_requests.rb
CHANGED
@@ -1,24 +1,35 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
#
|
4
|
+
# 1. Require core classes
|
5
|
+
#
|
3
6
|
require "forwardable"
|
4
7
|
require "singleton"
|
5
8
|
|
9
|
+
#
|
10
|
+
# 2. Require from gems
|
11
|
+
#
|
12
|
+
require "addressable/uri"
|
13
|
+
require "jaro_winkler"
|
6
14
|
require "concurrent/array"
|
7
15
|
require "concurrent/map"
|
8
16
|
require "docile"
|
17
|
+
require "public_suffix"
|
9
18
|
require "webmock"
|
10
19
|
require "webmock/api"
|
11
20
|
require "webmock/stub_registry"
|
12
21
|
require "webmock/request_stub"
|
13
22
|
|
14
|
-
|
15
|
-
|
16
|
-
|
23
|
+
#
|
24
|
+
# 3. Require shared functionality
|
25
|
+
#
|
17
26
|
require "stub_requests/core_ext"
|
18
27
|
require "stub_requests/exceptions"
|
19
|
-
require "stub_requests/
|
20
|
-
require "stub_requests/
|
21
|
-
require "stub_requests/property
|
28
|
+
require "stub_requests/utils/fuzzy"
|
29
|
+
require "stub_requests/concerns/argument_validation"
|
30
|
+
require "stub_requests/concerns/property"
|
31
|
+
require "stub_requests/concerns/property/validator"
|
32
|
+
require "stub_requests/concerns/register_verb"
|
22
33
|
require "stub_requests/uri"
|
23
34
|
require "stub_requests/uri/scheme"
|
24
35
|
require "stub_requests/uri/suffix"
|
@@ -26,23 +37,26 @@ require "stub_requests/uri/validator"
|
|
26
37
|
require "stub_requests/uri/builder"
|
27
38
|
require "stub_requests/configuration"
|
28
39
|
|
40
|
+
#
|
41
|
+
# 4. Require core functionality
|
42
|
+
#
|
29
43
|
require "stub_requests/callback"
|
30
44
|
require "stub_requests/callback_registry"
|
31
|
-
|
32
|
-
require "stub_requests/
|
33
|
-
require "stub_requests/
|
34
|
-
require "stub_requests/stub_registry"
|
35
|
-
|
36
|
-
require "stub_requests/endpoints"
|
45
|
+
require "stub_requests/dsl"
|
46
|
+
require "stub_requests/dsl/method_definition"
|
47
|
+
require "stub_requests/dsl/define_method"
|
37
48
|
require "stub_requests/endpoint"
|
49
|
+
require "stub_requests/endpoint_registry"
|
50
|
+
require "stub_requests/request_stub"
|
38
51
|
require "stub_requests/service"
|
39
52
|
require "stub_requests/service_registry"
|
40
|
-
|
53
|
+
require "stub_requests/stub_registry"
|
41
54
|
require "stub_requests/webmock/builder"
|
42
55
|
require "stub_requests/webmock/stub_registry_extension"
|
43
56
|
|
57
|
+
#
|
58
|
+
# 5. Require public API
|
59
|
+
#
|
44
60
|
require "stub_requests/api"
|
61
|
+
require "stub_requests/version"
|
45
62
|
require "stub_requests/stub_requests"
|
46
|
-
require "stub_requests/dsl/method_definition"
|
47
|
-
require "stub_requests/dsl/define_method"
|
48
|
-
require "stub_requests/dsl"
|
data/lib/stub_requests/api.rb
CHANGED
@@ -43,7 +43,49 @@ module StubRequests
|
|
43
43
|
# @return [Service] a new service or a previously registered service
|
44
44
|
#
|
45
45
|
def register_service(service_id, service_uri, &block)
|
46
|
-
|
46
|
+
service = ServiceRegistry.instance.register(service_id, service_uri)
|
47
|
+
Docile.dsl_eval(service, &block) if block.present?
|
48
|
+
service
|
49
|
+
end
|
50
|
+
alias register_service2 register_service
|
51
|
+
|
52
|
+
#
|
53
|
+
# Stub a request to a registered service endpoint
|
54
|
+
#
|
55
|
+
#
|
56
|
+
# @param [Symbol] endpoint_id the id of a registered endpoint
|
57
|
+
# @param [Hash<Symbol>] route_params a map with route parameters
|
58
|
+
#
|
59
|
+
# @note the kind of timeout error raised by webmock is depending on the HTTP client used
|
60
|
+
#
|
61
|
+
# @example Stub a request to a registered service endpoint
|
62
|
+
# stub_endpoint(:get_map_location, id: 1)
|
63
|
+
# .to_return(body: "No content", status: 204)
|
64
|
+
#
|
65
|
+
# @example Stub a request to a registered service endpoint using block
|
66
|
+
# stub_endpoint(:documents_index) do
|
67
|
+
# with(headers: { "Accept" => "application/json" }}})
|
68
|
+
# to_return(body: "No content", status: 204)
|
69
|
+
# end
|
70
|
+
#
|
71
|
+
# @return [WebMock::RequestStub] a mocked request
|
72
|
+
#
|
73
|
+
def stub_endpoint(endpoint_id, route_params = {}, &callback)
|
74
|
+
endpoint = EndpointRegistry.instance.find!(endpoint_id)
|
75
|
+
uri = URI::Builder.build(endpoint.service_uri, endpoint.path, route_params)
|
76
|
+
webmock_stub = WebMock::Builder.build(endpoint.verb, uri, &callback)
|
77
|
+
|
78
|
+
StubRegistry.instance.record(endpoint.id, webmock_stub)
|
79
|
+
::WebMock::StubRegistry.instance.register_request_stub(webmock_stub)
|
80
|
+
end
|
81
|
+
|
82
|
+
# :nodoc:
|
83
|
+
def __stub_endpoint(endpoint_id, route_params = {})
|
84
|
+
endpoint = EndpointRegistry.instance.find!(endpoint_id)
|
85
|
+
uri = URI::Builder.build(endpoint.service_uri, endpoint.path, route_params)
|
86
|
+
endpoint_stub = WebMock::Builder.build(endpoint.verb, uri)
|
87
|
+
|
88
|
+
::WebMock::StubRegistry.instance.register_request_stub(endpoint_stub)
|
47
89
|
end
|
48
90
|
|
49
91
|
#
|
@@ -74,29 +116,6 @@ module StubRequests
|
|
74
116
|
DSL.new(service_id).print_stubs
|
75
117
|
end
|
76
118
|
|
77
|
-
#
|
78
|
-
# Stub a request to a registered service endpoint
|
79
|
-
#
|
80
|
-
#
|
81
|
-
# @param [Symbol] service_id the id of a registered service
|
82
|
-
# @param [Symbol] endpoint_id the id of a registered endpoint
|
83
|
-
# @param [Hash<Symbol>] route_params a map with route parameters
|
84
|
-
#
|
85
|
-
# @note the kind of timeout error raised by webmock is depending on the HTTP client used
|
86
|
-
#
|
87
|
-
# @example Stub a request to a registered service endpoint using block version
|
88
|
-
# stub_endpoint(:documents, :index) do
|
89
|
-
# with(headers: { "Accept" => "application/json" }}})
|
90
|
-
# to_return(body: "No content", status: 204)
|
91
|
-
# end
|
92
|
-
#
|
93
|
-
# @see #stub_http_request
|
94
|
-
# @return [WebMock::RequestStub] a mocked request
|
95
|
-
#
|
96
|
-
def stub_endpoint(service_id, endpoint_id, route_params = {}, &callback)
|
97
|
-
StubRequests::ServiceRegistry.stub_endpoint(service_id, endpoint_id, route_params, &callback)
|
98
|
-
end
|
99
|
-
|
100
119
|
#
|
101
120
|
# Subscribe to notifications for a service endpoint
|
102
121
|
#
|
@@ -108,7 +127,7 @@ module StubRequests
|
|
108
127
|
# @return [void]
|
109
128
|
#
|
110
129
|
def register_callback(service_id, endpoint_id, verb, callback)
|
111
|
-
StubRequests::CallbackRegistry.register(service_id, endpoint_id, verb, callback)
|
130
|
+
StubRequests::CallbackRegistry.instance.register(service_id, endpoint_id, verb, callback)
|
112
131
|
end
|
113
132
|
|
114
133
|
#
|
@@ -120,7 +139,7 @@ module StubRequests
|
|
120
139
|
# @return [void]
|
121
140
|
#
|
122
141
|
def unregister_callback(service_id, endpoint_id, verb)
|
123
|
-
StubRequests::CallbackRegistry.unregister(service_id, endpoint_id, verb)
|
142
|
+
StubRequests::CallbackRegistry.instance.unregister(service_id, endpoint_id, verb)
|
124
143
|
end
|
125
144
|
end
|
126
145
|
end
|
@@ -14,7 +14,9 @@ module StubRequests
|
|
14
14
|
# @since 0.1.3
|
15
15
|
#
|
16
16
|
class Callback
|
17
|
-
|
17
|
+
# includes "Concerns::Property"
|
18
|
+
# @!parse include Concerns::Property
|
19
|
+
include Concerns::Property
|
18
20
|
#
|
19
21
|
# @!attribute [rw] service_id
|
20
22
|
# @return [Symbol] the id of a service
|
@@ -14,52 +14,18 @@ module StubRequests
|
|
14
14
|
# @since 0.1.3
|
15
15
|
#
|
16
16
|
class CallbackRegistry
|
17
|
+
# extend "Forwardable"
|
18
|
+
# @!parse extend Forwardable
|
19
|
+
extend Forwardable
|
20
|
+
|
21
|
+
# includes "Singleton"
|
22
|
+
# @!parse include Singleton
|
17
23
|
include Singleton
|
24
|
+
# includes "Enumerable"
|
25
|
+
# @!parse include Enumerable
|
18
26
|
include Enumerable
|
19
27
|
|
20
|
-
|
21
|
-
# Register to a service endpoint call
|
22
|
-
# @see CallbackRegistry#register
|
23
|
-
#
|
24
|
-
#
|
25
|
-
# @param [Symbol] service_id the id of a service
|
26
|
-
# @param [Symbol] endpoint_id the id of an endpoint
|
27
|
-
# @param [Symbol] verb the HTTP verb to subscribe to
|
28
|
-
# @param [Proc] callback the callback to use for when.a request was made
|
29
|
-
#
|
30
|
-
# @return [Callback]
|
31
|
-
#
|
32
|
-
def self.register(service_id, endpoint_id, verb, callback)
|
33
|
-
instance.register(service_id, endpoint_id, verb, callback)
|
34
|
-
end
|
35
|
-
|
36
|
-
#
|
37
|
-
# Unregister from a service endpoint call
|
38
|
-
# @see CallbackRegistry#unregister
|
39
|
-
#
|
40
|
-
#
|
41
|
-
# @param [Symbol] service_id the id of a service
|
42
|
-
# @param [Symbol] endpoint_id the id of an endpoint
|
43
|
-
# @param [Symbol] verb the HTTP verb to subscribe to
|
44
|
-
#
|
45
|
-
# @return [Callback]
|
46
|
-
#
|
47
|
-
def self.unregister(service_id, endpoint_id, verb)
|
48
|
-
instance.unregister(service_id, endpoint_id, verb)
|
49
|
-
end
|
50
|
-
|
51
|
-
#
|
52
|
-
# Notifies subscribers that a request was made
|
53
|
-
# @see CallbackRegistry#invoke_callbacks
|
54
|
-
#
|
55
|
-
#
|
56
|
-
# @param [RequestStub] request the stubbed request
|
57
|
-
#
|
58
|
-
# @return [RequestStub]
|
59
|
-
#
|
60
|
-
def self.invoke_callbacks(request)
|
61
|
-
instance.invoke_callbacks(request)
|
62
|
-
end
|
28
|
+
delegate [:each] => :callbacks
|
63
29
|
|
64
30
|
#
|
65
31
|
# @!attribute [r] callbacks
|
@@ -83,18 +49,6 @@ module StubRequests
|
|
83
49
|
callbacks.clear
|
84
50
|
end
|
85
51
|
|
86
|
-
#
|
87
|
-
# Required by Enumerable
|
88
|
-
#
|
89
|
-
#
|
90
|
-
# @return [Concurrent::Array<Callback>] a list with callbacks
|
91
|
-
#
|
92
|
-
# @yield used by Enumerable
|
93
|
-
#
|
94
|
-
def each(&block)
|
95
|
-
callbacks.each(&block)
|
96
|
-
end
|
97
|
-
|
98
52
|
#
|
99
53
|
# Register to a service endpoint call
|
100
54
|
#
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Abstraction over WebMock to reduce duplication
|
5
|
+
#
|
6
|
+
# @author Mikael Henriksson <mikael@zoolutions.se>
|
7
|
+
# @since 0.1.0
|
8
|
+
#
|
9
|
+
module StubRequests
|
10
|
+
module Concerns
|
11
|
+
#
|
12
|
+
# Module ArgumentValidation provides validation of method arguments
|
13
|
+
#
|
14
|
+
# @author Mikael Henriksson <mikael@zoolutions.se>
|
15
|
+
#
|
16
|
+
module ArgumentValidation
|
17
|
+
extend self
|
18
|
+
|
19
|
+
#
|
20
|
+
# Require the value to be any of the types past in
|
21
|
+
#
|
22
|
+
#
|
23
|
+
# @param [Symbol] name the name of the argument
|
24
|
+
# @param [Object] value the actual value of the argument
|
25
|
+
# @param [Array, Class, Module] type nil the expected argument value class
|
26
|
+
#
|
27
|
+
# @raise [InvalidArgumentType] when the value is disallowed
|
28
|
+
#
|
29
|
+
# @return [void]
|
30
|
+
#
|
31
|
+
def validate!(name:, value:, type:)
|
32
|
+
validate_type!(:name, name, [Symbol, String]) unless name
|
33
|
+
validate_type!(name, value, type) if type
|
34
|
+
end
|
35
|
+
|
36
|
+
def validate_type!(name, value, type)
|
37
|
+
expected_types = Array(type).flatten
|
38
|
+
return if expected_types.any? { |is_a| value.is_a?(is_a) }
|
39
|
+
|
40
|
+
raise StubRequests::InvalidArgumentType,
|
41
|
+
name: name,
|
42
|
+
actual: value.class,
|
43
|
+
expected: expected_types
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|