stub_requests 0.1.3 → 0.1.4

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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.reek.yml +1 -0
  3. data/CHANGELOG.md +2 -0
  4. data/README.md +2 -2
  5. data/lib/stub_requests/api.rb +8 -22
  6. data/lib/stub_requests/callback.rb +58 -0
  7. data/lib/stub_requests/callback_registry.rb +188 -0
  8. data/lib/stub_requests/core_ext/all.rb +1 -0
  9. data/lib/stub_requests/core_ext/array/extract_options.rb +4 -6
  10. data/lib/stub_requests/core_ext/class/attribute.rb +2 -3
  11. data/lib/stub_requests/core_ext/kernel/singleton_class.rb +2 -3
  12. data/lib/stub_requests/core_ext/module/redefine_method.rb +6 -0
  13. data/lib/stub_requests/core_ext/object/blank.rb +21 -22
  14. data/lib/stub_requests/core_ext/string/to_route_param.rb +35 -0
  15. data/lib/stub_requests/dsl/define_method.rb +49 -0
  16. data/lib/stub_requests/dsl/method_definition.rb +72 -0
  17. data/lib/stub_requests/dsl.rb +94 -0
  18. data/lib/stub_requests/endpoint.rb +48 -36
  19. data/lib/stub_requests/endpoint_stub.rb +89 -0
  20. data/lib/stub_requests/endpoints.rb +147 -0
  21. data/lib/stub_requests/observable.rb +0 -44
  22. data/lib/stub_requests/request_stub.rb +80 -0
  23. data/lib/stub_requests/service.rb +77 -0
  24. data/lib/stub_requests/service_registry.rb +174 -0
  25. data/lib/stub_requests/stub_registry.rb +159 -0
  26. data/lib/stub_requests/uri/builder.rb +27 -34
  27. data/lib/stub_requests/uri.rb +31 -4
  28. data/lib/stub_requests/version.rb +1 -1
  29. data/lib/stub_requests/webmock/stub_registry_extension.rb +1 -1
  30. data/lib/stub_requests.rb +12 -12
  31. data/lib/tasks/changelog.rake +2 -1
  32. metadata +14 -16
  33. data/gemfiles/webmock_2.3.gemfile.lock +0 -206
  34. data/gemfiles/webmock_3.5.gemfile.lock +0 -206
  35. data/gemfiles/webmock_develop.gemfile.lock +0 -211
  36. data/lib/stub_requests/metrics/endpoint.rb +0 -98
  37. data/lib/stub_requests/metrics/registry.rb +0 -132
  38. data/lib/stub_requests/metrics/request.rb +0 -89
  39. data/lib/stub_requests/metrics.rb +0 -33
  40. data/lib/stub_requests/observable/registry.rb +0 -152
  41. data/lib/stub_requests/observable/subscription.rb +0 -58
  42. data/lib/stub_requests/registration/endpoint.rb +0 -107
  43. data/lib/stub_requests/registration/endpoints.rb +0 -156
  44. data/lib/stub_requests/registration/registry.rb +0 -112
  45. data/lib/stub_requests/registration/service.rb +0 -85
  46. data/lib/stub_requests/registration.rb +0 -87
@@ -0,0 +1,77 @@
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
+ #
11
+ # Class Service provides details for a registered service
12
+ #
13
+ # @author Mikael Henriksson <mikael@zoolutions.se>
14
+ #
15
+ class Service
16
+ include Comparable
17
+ include Property
18
+
19
+ # @!attribute [rw] id
20
+ # @return [Symbol] the id of the service
21
+ property :id, type: Symbol
22
+
23
+ # @!attribute [rw] uri
24
+ # @return [String] the base uri to the service
25
+ property :uri, type: String
26
+
27
+ # @!attribute [rw] endpoints
28
+ # @return [Endpoints] a list with defined endpoints
29
+ attr_reader :endpoints
30
+
31
+ #
32
+ # Initializes a new instance of a Service
33
+ #
34
+ # @param [Symbol] service_id the id of this service
35
+ # @param [String] service_uri the base uri to reach the service
36
+ #
37
+ def initialize(service_id, service_uri)
38
+ self.id = service_id
39
+ self.uri = service_uri
40
+ @endpoints = Endpoints.new(self)
41
+ end
42
+
43
+ #
44
+ # Check if the endpoint registry has endpoints
45
+ #
46
+ # @return [true,false]
47
+ #
48
+ def endpoints?
49
+ endpoints.any?
50
+ end
51
+
52
+ #
53
+ # Returns a nicely formatted string with this service
54
+ #
55
+ # @return [String]
56
+ #
57
+ def to_s
58
+ [
59
+ +"#<#{self.class}",
60
+ +" id=#{id}",
61
+ +" uri=#{uri}",
62
+ +" endpoints=#{endpoints.endpoints_string}",
63
+ +">",
64
+ ].join("")
65
+ end
66
+
67
+ def <=>(other)
68
+ id <=> other.id
69
+ end
70
+
71
+ def hash
72
+ [id, self.class].hash
73
+ end
74
+
75
+ alias eql? ==
76
+ end
77
+ end
@@ -0,0 +1,174 @@
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
+ #
11
+ # Class Registry provides registration of services
12
+ #
13
+ # @author Mikael Henriksson <mikael@zoolutions.se>
14
+ #
15
+ class ServiceRegistry
16
+ include Singleton
17
+ include Enumerable
18
+
19
+ # Register a service in the service registry
20
+ #
21
+ #
22
+ # @param [Symbol] service_id a descriptive id for the service
23
+ # @param [Symbol] service_uri the uri used to call the service
24
+ #
25
+ # @example Register a service with endpoints
26
+ # register_service(:documents, "https://company.com/api/v1") do
27
+ # register(:show, :get, "documents/:id")
28
+ # register(:index, :get, "documents")
29
+ # register(:create, :post, "documents")
30
+ # register(:update, :patch, "documents/:id")
31
+ # register(:destroy, :delete, "documents/:id")
32
+ # end
33
+ #
34
+ # @return [Service] a new service or a previously registered service
35
+ #
36
+ def self.register_service(service_id, service_uri, &block)
37
+ service = instance.register(service_id, service_uri)
38
+ Docile.dsl_eval(service.endpoints, &block) if block.present?
39
+ service
40
+ end
41
+
42
+ #
43
+ # Stub a request to a registered service endpoint
44
+ #
45
+ #
46
+ # @param [Symbol] service_id the id of a registered service
47
+ # @param [Symbol] endpoint_id the id of a registered endpoint
48
+ # @param [Hash<Symbol>] route_params a map with route parameters
49
+ #
50
+ # @note the kind of timeout error raised by webmock is depending on the HTTP client used
51
+ #
52
+ # @example Stub a request to a registered service endpoint
53
+ # register_stub(
54
+ # :google_api,
55
+ # :get_map_location,
56
+ # {}, # No URI replacements needed for this endpoint
57
+ # )
58
+ # .to_return(body: "No content", status: 204)
59
+ #
60
+ # @example Stub a request to a registered service endpoint using block
61
+ # register_stub(:documents, :index) do
62
+ # with(headers: { "Accept" => "application/json" }}})
63
+ # to_return(body: "No content", status: 204)
64
+ # end
65
+ #
66
+ # @see #stub_http_request
67
+ # @return [WebMock::RequestStub] a mocked request
68
+ #
69
+ # :reek:UtilityFunction
70
+ # :reek:LongParameterList { max_params: 5 }
71
+ def self.stub_endpoint(service_id, endpoint_id, route_params = {}, &callback)
72
+ service, endpoint, uri = StubRequests::URI.for_service_endpoint(service_id, endpoint_id, route_params)
73
+ endpoint_stub = WebMock::Builder.build(endpoint.verb, uri, {}, &callback)
74
+
75
+ StubRegistry.record(service, endpoint, endpoint_stub)
76
+ ::WebMock::StubRegistry.instance.register_request_stub(endpoint_stub)
77
+ end
78
+
79
+ # @api private
80
+ # Used only for testing purposes
81
+ # :reek:LongParameterList { max_params: 4 }
82
+ def self.__stub_endpoint(service_id, endpoint_id, route_params = {})
83
+ _service, endpoint, uri = StubRequests::URI.for_service_endpoint(service_id, endpoint_id, route_params)
84
+ endpoint_stub = WebMock::Builder.build(endpoint.verb, uri)
85
+
86
+ ::WebMock::StubRegistry.instance.register_request_stub(endpoint_stub)
87
+ end
88
+
89
+ #
90
+ # @!attribute [rw] services
91
+ # @return [Concurrent::Map<Symbol, Service>] a map with services
92
+ attr_reader :services
93
+
94
+ def initialize
95
+ @services = Concurrent::Map.new
96
+ end
97
+
98
+ #
99
+ # Resets the map with registered services
100
+ #
101
+ #
102
+ # @api private
103
+ def reset
104
+ services.clear
105
+ end
106
+
107
+ #
108
+ # Required by Enumerable
109
+ #
110
+ #
111
+ # @return [Concurrent::Map<Symbol, Service>] an map with services
112
+ #
113
+ # @yield used by Enumerable
114
+ #
115
+ def each(&block)
116
+ services.each(&block)
117
+ end
118
+
119
+ #
120
+ # Registers a service in the registry
121
+ #
122
+ #
123
+ # @param [Symbol] service_id a symbolic id of the service
124
+ # @param [String] service_uri a string with a base_uri to the service
125
+ #
126
+ # @return [Service] the service that was just registered
127
+ #
128
+ def register(service_id, service_uri)
129
+ if (service = find(service_id))
130
+ StubRequests.logger.warn("Service already registered #{service}")
131
+ raise ServiceHaveEndpoints, service if service.endpoints?
132
+ end
133
+ services[service_id] = Service.new(service_id, service_uri)
134
+ end
135
+
136
+ #
137
+ # Removes a service from the registry
138
+ #
139
+ #
140
+ # @param [Symbol] service_id the service_id to remove
141
+ #
142
+ # @raise [ServiceNotFound] when the service was not removed
143
+ #
144
+ def remove(service_id)
145
+ services.delete(service_id) || raise(ServiceNotFound, service_id)
146
+ end
147
+
148
+ #
149
+ # Fetches a service from the registry
150
+ #
151
+ #
152
+ # @param [Symbol] service_id id of the service to remove
153
+ #
154
+ # @return [Service] the found service
155
+ #
156
+ def find(service_id)
157
+ services[service_id]
158
+ end
159
+
160
+ #
161
+ # Fetches a service from the registry or raises {ServiceNotFound}
162
+ #
163
+ #
164
+ # @param [Symbol] service_id the id of a service
165
+ #
166
+ # @raise [ServiceNotFound] when an endpoint couldn't be found
167
+ #
168
+ # @return [Service]
169
+ #
170
+ def find!(service_id)
171
+ find(service_id) || raise(ServiceNotFound, service_id)
172
+ end
173
+ end
174
+ end
@@ -0,0 +1,159 @@
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
+ #
11
+ # Class Registry maintains a registry of stubbed endpoints.
12
+ # Also allows provides querying capabilities for said entities.
13
+ #
14
+ # @author Mikael Henriksson <mikael@zoolutions.se>
15
+ # @since 0.1.2
16
+ #
17
+ # :reek:DataClump
18
+ class StubRegistry
19
+ # includes "Singleton"
20
+ # @!parse include Singleton
21
+ include Singleton
22
+ # includes "Enumerable"
23
+ # @!parse include Enumerable
24
+ include Enumerable
25
+
26
+ #
27
+ # Records metrics about stubbed endpoints
28
+ #
29
+ #
30
+ # @param [Service] service a Service
31
+ # @param [Endpoint] endpoint an Endpoint
32
+ # @param [WebMock::RequestStub] webmock_stub the stubbed webmock request
33
+ #
34
+ # @note the class method of record validates that
35
+ # configuration option :collect_metrics is true.
36
+ #
37
+ # @return [EndpointStub] the stub that was recorded
38
+ #
39
+ def self.record(service, endpoint, webmock_stub)
40
+ # Note: The class method v
41
+ return unless StubRequests.config.record_metrics?
42
+
43
+ instance.record(service, endpoint, webmock_stub)
44
+ end
45
+
46
+ #
47
+ # Mark a {RequestStub} as having responded
48
+ #
49
+ # @note Called when webmock responds successfully
50
+ #
51
+ # @param [WebMock::RequestStub] webmock_stub the stubbed webmock request
52
+ #
53
+ # @return [void]
54
+ #
55
+ def self.mark_as_responded(webmock_stub)
56
+ instance.mark_as_responded(webmock_stub)
57
+ end
58
+
59
+ #
60
+ # @!attribute [rw] services
61
+ # @return [Concurrent::Array<Endpoint>] a map with stubbed endpoints
62
+ attr_reader :endpoints
63
+
64
+ #
65
+ # Initialize a new registry
66
+ #
67
+ #
68
+ def initialize
69
+ @endpoints = Concurrent::Array.new
70
+ end
71
+
72
+ #
73
+ # Resets the map with stubbed endpoints
74
+ #
75
+ #
76
+ # @api private
77
+ def reset
78
+ endpoints.clear
79
+ end
80
+
81
+ #
82
+ # Required by Enumerable
83
+ #
84
+ #
85
+ # @return [Concurrent::Array<Endpoint>] an array with stubbed endpoints
86
+ #
87
+ # @yield used by Enumerable
88
+ #
89
+ def each(&block)
90
+ endpoints.each(&block)
91
+ end
92
+
93
+ #
94
+ # Records metrics about stubbed endpoints
95
+ #
96
+ #
97
+ # @param [Service] service a symbolic id of the service
98
+ # @param [Endpoint] endpoint a string with a base_uri to the service
99
+ # @param [WebMock::RequestStub] webmock_stub the stubbed request
100
+ #
101
+ # @return [Service] the service that was just registered
102
+ #
103
+ def record(service, endpoint, webmock_stub)
104
+ endpoint = find_or_initialize_endpoint_stub(service, endpoint)
105
+ endpoint.record(webmock_stub)
106
+
107
+ endpoints.push(endpoint)
108
+ endpoint
109
+ end
110
+
111
+ #
112
+ # Mark a {RequestStub} as having responded
113
+ #
114
+ # @note Called when webmock responds successfully
115
+ #
116
+ # @param [WebMock::RequestStub] webmock_stub the stubbed webmock request
117
+ #
118
+ # @return [void]
119
+ #
120
+ def mark_as_responded(webmock_stub)
121
+ return unless (request_stub = find_request_stub(webmock_stub))
122
+
123
+ request_stub.mark_as_responded
124
+ CallbackRegistry.invoke_callbacks(request_stub)
125
+ request_stub
126
+ end
127
+
128
+ #
129
+ # Finds a {RequestStub} amongst the endpoint stubs
130
+ #
131
+ #
132
+ # @param [WebMock::RequestStub] webmock_stub a stubbed webmock response
133
+ #
134
+ # @return [RequestStub] the request_stubbed matching the request stub
135
+ #
136
+ def find_request_stub(webmock_stub)
137
+ map do |endpoint|
138
+ endpoint.find_by(attribute: :request_stub, value: webmock_stub)
139
+ end.compact.first
140
+ end
141
+
142
+ private
143
+
144
+ def find_or_initialize_endpoint_stub(service, endpoint)
145
+ find_endpoint_stub(service, endpoint) || initialize_endpoint_stub(service, endpoint)
146
+ end
147
+
148
+ # :reek:UtilityFunction
149
+ # :reek:FeatureEnvy
150
+ def find_endpoint_stub(service, endpoint)
151
+ find { |ep| ep.service_id == service.id && ep.endpoint_id == endpoint.id }
152
+ end
153
+
154
+ # :reek:UtilityFunction
155
+ def initialize_endpoint_stub(service, endpoint)
156
+ EndpointStub.new(service, endpoint)
157
+ end
158
+ end
159
+ end
@@ -33,12 +33,12 @@ module StubRequests
33
33
  #
34
34
  # @param [String] host the URI used to reach the service
35
35
  # @param [String] template the endpoint template
36
- # @param [Hash<Symbol>] replacements a list of uri_replacement keys
36
+ # @param [Hash<Symbol>] route_params a list of uri_replacement keys
37
37
  #
38
38
  # @return [String] a validated URI string
39
39
  #
40
- def self.build(host, template, replacements = {})
41
- new(host, template, replacements).build
40
+ def self.build(host, template, route_params = {})
41
+ new(host, template, route_params).build
42
42
  end
43
43
 
44
44
  #
@@ -54,12 +54,12 @@ module StubRequests
54
54
  # @return [String] a valid URI path
55
55
  attr_reader :path
56
56
  #
57
- # @!attribute [r] replacements
57
+ # @!attribute [r] route_params
58
58
  # @return [Hash<Symbol] a hash with keys matching the {#template}
59
- attr_reader :replacements
59
+ attr_reader :route_params
60
60
  #
61
61
  # @!attribute [r] unused
62
- # @return [Array<String>] a list with unused {#replacements}
62
+ # @return [Array<String>] a list with unused {#route_params}
63
63
  attr_reader :unused
64
64
  #
65
65
  # @!attribute [r] unreplaced
@@ -72,13 +72,13 @@ module StubRequests
72
72
  #
73
73
  # @param [String] host the URI used to reach the service
74
74
  # @param [String] template the endpoint template
75
- # @param [Hash<Symbol>] replacements a list of uri_replacement keys
75
+ # @param [Hash<Symbol>] route_params a list of uri_replacement keys
76
76
  #
77
- def initialize(host, template, replacements = {})
77
+ def initialize(host, template, route_params = {})
78
78
  @host = +host
79
79
  @template = +template
80
80
  @path = +@template.dup
81
- @replacements = replacements
81
+ @route_params = route_params.to_route_param
82
82
  end
83
83
 
84
84
  #
@@ -109,38 +109,35 @@ module StubRequests
109
109
  end
110
110
 
111
111
  def run_validations
112
- validate_replacements_used
113
- validate_segments_replaced
112
+ validate_route_params_used
113
+ validate_route_keys_replaced
114
114
  validate_uri
115
115
  end
116
116
 
117
117
  #
118
- # Replaces the URI segments with the arguments in replacements
118
+ # Replaces the URI segments with the arguments in route_params
119
119
  #
120
120
  #
121
- # @return [Array] an list with unused replacements
121
+ # @return [Array] an list with unused route_params
122
122
  #
123
123
  def replace_segments
124
- @unused = replacements.map do |key, value|
125
- uri_segment = ":#{key}"
126
- if path.include?(uri_segment)
127
- path.gsub!(uri_segment.to_s, value.to_s)
128
- next
129
- else
130
- uri_segment
131
- end
124
+ @unused = route_params.map do |key, value|
125
+ next key unless path.include?(key)
126
+
127
+ path.gsub!(key, value.to_s)
128
+ next
132
129
  end.compact
133
130
  end
134
131
 
135
132
  #
136
- # Validates that all replacements have been used
133
+ # Validates that all route_params have been used
137
134
  #
138
135
  #
139
- # @raise [UriSegmentMismatch] when there are unused replacements
136
+ # @raise [UriSegmentMismatch] when there are unused route_params
140
137
  #
141
138
  # @return [void]
142
139
  #
143
- def validate_replacements_used
140
+ def validate_route_params_used
144
141
  return if replacents_used?
145
142
 
146
143
  raise UriSegmentMismatch,
@@ -148,7 +145,7 @@ module StubRequests
148
145
  end
149
146
 
150
147
  #
151
- # Checks that no replacements are left
148
+ # Checks that no route_params are left
152
149
  #
153
150
  #
154
151
  # @return [true,false]
@@ -165,26 +162,22 @@ module StubRequests
165
162
  #
166
163
  # @return [void]
167
164
  #
168
- def validate_segments_replaced
169
- return if segments_replaced?
165
+ def validate_route_keys_replaced
166
+ return if route_keys_replaced?
170
167
 
171
168
  raise UriSegmentMismatch,
172
169
  "The URI segment(s) [#{unreplaced.join(',')}]" \
173
170
  " were not replaced in template (#{path})." \
174
- " Given replacements=[#{segment_keys.join(',')}]"
175
- end
176
-
177
- def segment_keys
178
- @segment_keys ||= replacements.keys.map { |segment_key| ":#{segment_key}" }
171
+ " Given route_params=[#{route_params.keys.join(',')}]"
179
172
  end
180
173
 
181
174
  #
182
- # Checks that all URI segments were replaced
175
+ # Checks that all URI keys were replaced
183
176
  #
184
177
  #
185
178
  # @return [true,false]
186
179
  #
187
- def segments_replaced?
180
+ def route_keys_replaced?
188
181
  unreplaced.none?
189
182
  end
190
183
 
@@ -14,19 +14,46 @@ module StubRequests
14
14
  # @since 0.1.2
15
15
  #
16
16
  module URI
17
+ #
18
+ # @return [Regexp] A pattern for matching route parameters
19
+ ROUTE_PARAM = %r{/:(\w+)/?}.freeze
20
+
21
+ #
22
+ # Extracts route parameters from a string
23
+ #
24
+ # @param [String] string a regular string to scan for route parameters
25
+ #
26
+ # @return [Array<Symbol>] an array with all route parameter keys
27
+ #
28
+ def self.route_params(string)
29
+ string.scan(ROUTE_PARAM).flatten.map(&:to_sym)
30
+ end
31
+
32
+ #
33
+ # Safely joins two string without any extra ///
34
+ #
35
+ # @param [String] host the host of the URI
36
+ # @param [String] path the path of the URI
37
+ #
38
+ # @return [String] the full URI
39
+ #
40
+ def self.safe_join(host, path)
41
+ [host.chomp("/"), path.sub(%r{\A/}, "")].join("/")
42
+ end
43
+
17
44
  #
18
45
  # UtilityFunction to construct the full URI for a service endpoint
19
46
  #
20
47
  # @param [Symbol] service_id the id of a service
21
48
  # @param [Symbol] endpoint_id the id of an endpoint
22
- # @param [Hash<Symbol>] replacements hash with replacements
49
+ # @param [Hash<Symbol>] route_params hash with route_params
23
50
  #
24
51
  # @return [Array<Service, Endpoint, String] the service, endpoint and full URI
25
52
  #
26
- def self.for_service_endpoint(service_id, endpoint_id, replacements)
27
- service = Registration::Registry.instance.find!(service_id)
53
+ def self.for_service_endpoint(service_id, endpoint_id, route_params)
54
+ service = ServiceRegistry.instance.find!(service_id)
28
55
  endpoint = service.endpoints.find!(endpoint_id)
29
- uri = URI::Builder.build(service.uri, endpoint.uri_template, replacements)
56
+ uri = URI::Builder.build(service.uri, endpoint.path, route_params)
30
57
 
31
58
  [service, endpoint, uri]
32
59
  end
@@ -9,5 +9,5 @@
9
9
  module StubRequests
10
10
  #
11
11
  # @return [String] a version string
12
- VERSION = "0.1.3"
12
+ VERSION = "0.1.4"
13
13
  end
@@ -36,7 +36,7 @@ module StubRequests
36
36
  request_stub = request_stub_for_orig(request_signature)
37
37
  return request_stub unless request_stub
38
38
 
39
- Metrics::Registry.instance.mark_as_responded(request_stub)
39
+ StubRequests::StubRegistry.mark_as_responded(request_stub)
40
40
  request_stub
41
41
  end
42
42
  end
data/lib/stub_requests.rb CHANGED
@@ -26,23 +26,23 @@ require "stub_requests/uri/validator"
26
26
  require "stub_requests/uri/builder"
27
27
  require "stub_requests/configuration"
28
28
 
29
- require "stub_requests/observable"
30
- require "stub_requests/observable/subscription"
31
- require "stub_requests/observable/registry"
29
+ require "stub_requests/callback"
30
+ require "stub_requests/callback_registry"
32
31
 
33
- require "stub_requests/metrics"
34
- require "stub_requests/metrics/endpoint"
35
- require "stub_requests/metrics/request"
36
- require "stub_requests/metrics/registry"
32
+ require "stub_requests/endpoint_stub"
33
+ require "stub_requests/request_stub"
34
+ require "stub_requests/stub_registry"
37
35
 
38
- require "stub_requests/registration"
39
- require "stub_requests/registration/endpoint"
40
- require "stub_requests/registration/endpoints"
41
- require "stub_requests/registration/service"
42
- require "stub_requests/registration/registry"
36
+ require "stub_requests/endpoints"
37
+ require "stub_requests/endpoint"
38
+ require "stub_requests/service"
39
+ require "stub_requests/service_registry"
43
40
 
44
41
  require "stub_requests/webmock/builder"
45
42
  require "stub_requests/webmock/stub_registry_extension"
46
43
 
47
44
  require "stub_requests/api"
48
45
  require "stub_requests/stub_requests"
46
+ require "stub_requests/dsl/method_definition"
47
+ require "stub_requests/dsl/define_method"
48
+ require "stub_requests/dsl"
@@ -13,7 +13,7 @@ task :changelog do
13
13
  --token
14
14
  ]
15
15
  CHECKOUT_CHANGELOG_CMD ||= "git checkout -B update-changelog"
16
- COMMIT_CHANGELOG_CMD ||= "git add --all"
16
+ ADD_CHANGELOG_CMD ||= "git add --all"
17
17
  COMMIT_CHANGELOG_CMD ||= "git commit -a -m 'Update changelog'"
18
18
  GIT_PUSH_CMD ||= "git push -u origin update-changelog"
19
19
  OPEN_PR_CMD ||= "hub pull-request -b master -m 'Update Changelog' -a mhenrixon -l changelog"
@@ -21,6 +21,7 @@ task :changelog do
21
21
 
22
22
  sh(*CHANGELOG_CMD.push(ENV["CHANGELOG_GITHUB_TOKEN"]))
23
23
  sh(CHECKOUT_CHANGELOG_CMD)
24
+ sh(ADD_CHANGELOG_CMD)
24
25
  sh(COMMIT_CHANGELOG_CMD)
25
26
  sh(GIT_PUSH_CMD)
26
27
  sh(OPEN_PR_CMD)