http_stub 0.19.1 → 0.20.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +13 -5
- data/lib/http_stub.rb +26 -21
- data/lib/http_stub/configurer/server/command_processor.rb +1 -0
- data/lib/http_stub/server/application.rb +24 -46
- data/lib/http_stub/server/formatted_hash.rb +18 -0
- data/lib/http_stub/server/header_parser.rb +17 -0
- data/lib/http_stub/server/registry.rb +9 -9
- data/lib/http_stub/server/request.rb +19 -0
- data/lib/http_stub/server/request_pipeline.rb +27 -0
- data/lib/http_stub/server/response.rb +7 -3
- data/lib/http_stub/server/scenario.rb +1 -1
- data/lib/http_stub/server/scenario/activator.rb +4 -4
- data/lib/http_stub/server/scenario/controller.rb +8 -8
- data/lib/http_stub/server/scenario/{request_parser.rb → parser.rb} +2 -2
- data/lib/http_stub/server/scenario/{instance.rb → scenario.rb} +2 -2
- data/lib/http_stub/server/stub.rb +1 -1
- data/lib/http_stub/server/stub/controller.rb +8 -8
- data/lib/http_stub/server/stub/empty.rb +34 -0
- data/lib/http_stub/server/stub/match/exact_value_matcher.rb +17 -0
- data/lib/http_stub/server/stub/match/hash_with_string_value_matchers.rb +26 -0
- data/lib/http_stub/server/stub/match/match.rb +20 -0
- data/lib/http_stub/server/stub/match/omitted_value_matcher.rb +23 -0
- data/lib/http_stub/server/stub/match/regexp_value_matcher.rb +18 -0
- data/lib/http_stub/server/stub/match/rule/body.rb +49 -0
- data/lib/http_stub/server/stub/match/rule/headers.rb +31 -0
- data/lib/http_stub/server/stub/match/rule/json_body.rb +39 -0
- data/lib/http_stub/server/stub/match/rule/method.rb +27 -0
- data/lib/http_stub/server/stub/match/rule/parameters.rb +27 -0
- data/lib/http_stub/server/stub/match/rule/simple_body.rb +27 -0
- data/lib/http_stub/server/stub/match/rule/uri.rb +27 -0
- data/lib/http_stub/server/stub/match/string_value_matcher.rb +33 -0
- data/lib/http_stub/server/stub/match/truthy_matcher.rb +25 -0
- data/lib/http_stub/server/stub/{request_parser.rb → parser.rb} +2 -2
- data/lib/http_stub/server/stub/payload_file_consolidator.rb +1 -1
- data/lib/http_stub/server/stub/registry.rb +16 -8
- data/lib/http_stub/server/stub/response/base.rb +2 -2
- data/lib/http_stub/server/stub/stub.rb +44 -0
- data/lib/http_stub/server/stub/triggers.rb +2 -2
- data/lib/http_stub/server/views/_match.haml +20 -0
- data/lib/http_stub/server/views/matches.haml +3 -0
- data/lib/http_stub/server/views/stub.haml +1 -0
- data/lib/http_stub/version.rb +1 -1
- data/spec/acceptance/stub_control_values_spec.rb +6 -3
- data/spec/acceptance/stub_match_spec.rb +142 -0
- data/spec/lib/http_stub/configurer/server/command_processor_integration_spec.rb +4 -0
- data/spec/lib/http_stub/server/application_integration_spec.rb +17 -18
- data/spec/lib/http_stub/server/application_spec.rb +81 -53
- data/spec/lib/http_stub/server/formatted_hash_spec.rb +54 -0
- data/spec/lib/http_stub/server/{stub/request_header_parser_spec.rb → header_parser_spec.rb} +9 -9
- data/spec/lib/http_stub/server/{request_file_consolidator_spec.rb → payload_file_consolidator_spec.rb} +4 -4
- data/spec/lib/http_stub/server/registry_spec.rb +13 -14
- data/spec/lib/http_stub/server/request_pipeline_spec.rb +80 -0
- data/spec/lib/http_stub/server/request_spec.rb +113 -0
- data/spec/lib/http_stub/server/response_spec.rb +46 -12
- data/spec/lib/http_stub/server/scenario/activator_spec.rb +18 -18
- data/spec/lib/http_stub/server/scenario/controller_spec.rb +18 -15
- data/spec/lib/http_stub/server/scenario/{request_parser_spec.rb → parser_spec.rb} +8 -8
- data/spec/lib/http_stub/server/scenario/{instance_spec.rb → scenario_spec.rb} +7 -5
- data/spec/lib/http_stub/server/scenario_spec.rb +3 -3
- data/spec/lib/http_stub/server/stub/controller_spec.rb +29 -14
- data/spec/lib/http_stub/server/stub/empty_spec.rb +68 -0
- data/spec/lib/http_stub/server/stub/{exact_value_matcher_spec.rb → match/exact_value_matcher_spec.rb} +2 -2
- data/spec/lib/http_stub/server/stub/{hash_with_string_value_matchers_spec.rb → match/hash_with_string_value_matchers_spec.rb} +27 -19
- data/spec/lib/http_stub/server/stub/match/match_spec.rb +40 -0
- data/spec/lib/http_stub/server/stub/{omitted_value_matcher_spec.rb → match/omitted_value_matcher_spec.rb} +2 -2
- data/spec/lib/http_stub/server/stub/{regexp_value_matcher_spec.rb → match/regexp_value_matcher_spec.rb} +2 -2
- data/spec/lib/http_stub/server/stub/{request_body_spec.rb → match/rule/body_spec.rb} +12 -12
- data/spec/lib/http_stub/server/stub/match/rule/headers_spec.rb +90 -0
- data/spec/lib/http_stub/server/stub/{json_request_body_spec.rb → match/rule/json_body_spec.rb} +9 -10
- data/spec/lib/http_stub/server/stub/{method_spec.rb → match/rule/method_spec.rb} +6 -5
- data/spec/lib/http_stub/server/stub/{request_parameters_spec.rb → match/rule/parameters_spec.rb} +16 -10
- data/spec/lib/http_stub/server/stub/match/rule/simple_body_spec.rb +46 -0
- data/spec/lib/http_stub/server/stub/match/rule/uri_spec.rb +46 -0
- data/spec/lib/http_stub/server/stub/{string_value_matcher_spec.rb → match/string_value_matcher_spec.rb} +30 -26
- data/spec/lib/http_stub/server/stub/match/truthy_matcher_spec.rb +24 -0
- data/spec/lib/http_stub/server/stub/{request_parser_spec.rb → parser_spec.rb} +7 -7
- data/spec/lib/http_stub/server/stub/registry_integration_spec.rb +5 -5
- data/spec/lib/http_stub/server/stub/registry_spec.rb +114 -43
- data/spec/lib/http_stub/server/stub/response/base_spec.rb +8 -2
- data/spec/lib/http_stub/server/stub/stub_spec.rb +294 -0
- data/spec/lib/http_stub/server/stub/triggers_spec.rb +4 -4
- data/spec/lib/http_stub/server/stub_spec.rb +3 -3
- data/spec/spec_helper.rb +7 -3
- data/spec/support/configurer_integration.rb +1 -0
- data/spec/support/http_stub/empty_configurer.rb +7 -0
- data/spec/support/{scenario_fixture.rb → http_stub/scenario_fixture.rb} +0 -0
- data/spec/support/http_stub/server/request_fixture.rb +25 -0
- data/spec/support/http_stub/server/scenario/scenario_fixture.rb +15 -0
- data/spec/support/http_stub/server/stub/match/match_fixture.rb +17 -0
- data/spec/support/{stub_fixture.rb → http_stub/stub_fixture.rb} +0 -0
- data/spec/support/server_integration.rb +1 -0
- metadata +315 -290
- data/lib/http_stub/server/stub/exact_value_matcher.rb +0 -15
- data/lib/http_stub/server/stub/hash_with_string_value_matchers.rb +0 -22
- data/lib/http_stub/server/stub/headers.rb +0 -19
- data/lib/http_stub/server/stub/instance.rb +0 -32
- data/lib/http_stub/server/stub/json_request_body.rb +0 -35
- data/lib/http_stub/server/stub/method.rb +0 -23
- data/lib/http_stub/server/stub/omitted_value_matcher.rb +0 -21
- data/lib/http_stub/server/stub/regexp_value_matcher.rb +0 -16
- data/lib/http_stub/server/stub/request_body.rb +0 -44
- data/lib/http_stub/server/stub/request_header_parser.rb +0 -19
- data/lib/http_stub/server/stub/request_headers.rb +0 -28
- data/lib/http_stub/server/stub/request_parameters.rb +0 -23
- data/lib/http_stub/server/stub/simple_request_body.rb +0 -23
- data/lib/http_stub/server/stub/string_value_matcher.rb +0 -31
- data/lib/http_stub/server/stub/truthy_request_matcher.rb +0 -23
- data/lib/http_stub/server/stub/uri.rb +0 -23
- data/spec/lib/http_stub/server/stub/headers_spec.rb +0 -51
- data/spec/lib/http_stub/server/stub/instance_spec.rb +0 -235
- data/spec/lib/http_stub/server/stub/request_headers_spec.rb +0 -68
- data/spec/lib/http_stub/server/stub/simple_request_body_spec.rb +0 -43
- data/spec/lib/http_stub/server/stub/truthy_request_matcher_spec.rb +0 -23
- data/spec/lib/http_stub/server/stub/uri_spec.rb +0 -43
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YzEzZTE3NjYzODQyZTFjMTU1NzdjNDk1YmE3MDBmYWVlYjQzNTRlMQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YzI4MjA5ZjI5NzI1NmYyNDEzMGI4OWM0MDhmYjg5NTcyNGJlNTk3NQ==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ODkwODg5NzU4Yzk0MjdhZjJlMmE1Nzg5ZjFmMmRlZGM2MmI4ZmZlZWJmZTE2
|
10
|
+
MzViMTBmMmY1NWE4MGMxOTBiOWMwYmExMTVmNDQ5ZWM5NzQyMWU1MjA1YzAw
|
11
|
+
MjlkMDBjYTJjNDI0NDRmNTgzMDhkYzU4ODI3OTEwMDYyOGY4MjA=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ODk0MTQ5YmNjN2I0YjZkYmRjZDc0ZDU2NWNlMWUzZTU3NGRhMmRjOTZkMDUy
|
14
|
+
NjEwYzIzZGNiMDg4MTMxMDc0N2RjOTIwNDY4OTcwMjRmMThhMjk0NzNlYmY4
|
15
|
+
ZTUxOWIyMTAyODY5NDIxMWIxNTdhZThhNzM0MWM5NzQyNzFjNGY=
|
data/lib/http_stub.rb
CHANGED
@@ -20,39 +20,43 @@ require 'active_support/core_ext/hash/indifferent_access'
|
|
20
20
|
require_relative 'http_stub/hash_with_indifferent_and_insensitive_access'
|
21
21
|
require_relative 'http_stub/extensions/core/hash'
|
22
22
|
require_relative 'http_stub/extensions/rack/handler'
|
23
|
+
require_relative 'http_stub/server/formatted_hash'
|
24
|
+
require_relative 'http_stub/server/header_parser'
|
25
|
+
require_relative 'http_stub/server/request'
|
23
26
|
require_relative 'http_stub/server/registry'
|
24
|
-
require_relative 'http_stub/server/stub/omitted_value_matcher'
|
25
|
-
require_relative 'http_stub/server/stub/regexp_value_matcher'
|
26
|
-
require_relative 'http_stub/server/stub/exact_value_matcher'
|
27
|
-
require_relative 'http_stub/server/stub/string_value_matcher'
|
28
|
-
require_relative 'http_stub/server/stub/hash_with_string_value_matchers'
|
29
|
-
require_relative 'http_stub/server/stub/
|
30
|
-
require_relative 'http_stub/server/stub/
|
31
|
-
require_relative 'http_stub/server/stub/
|
32
|
-
require_relative 'http_stub/server/stub/
|
33
|
-
require_relative 'http_stub/server/stub/
|
34
|
-
require_relative 'http_stub/server/stub/
|
35
|
-
require_relative 'http_stub/server/stub/
|
36
|
-
require_relative 'http_stub/server/stub/
|
37
|
-
require_relative 'http_stub/server/stub/request_parameters'
|
38
|
-
require_relative 'http_stub/server/stub/simple_request_body'
|
39
|
-
require_relative 'http_stub/server/stub/json_request_body'
|
40
|
-
require_relative 'http_stub/server/stub/request_body'
|
27
|
+
require_relative 'http_stub/server/stub/match/omitted_value_matcher'
|
28
|
+
require_relative 'http_stub/server/stub/match/regexp_value_matcher'
|
29
|
+
require_relative 'http_stub/server/stub/match/exact_value_matcher'
|
30
|
+
require_relative 'http_stub/server/stub/match/string_value_matcher'
|
31
|
+
require_relative 'http_stub/server/stub/match/hash_with_string_value_matchers'
|
32
|
+
require_relative 'http_stub/server/stub/match/truthy_matcher'
|
33
|
+
require_relative 'http_stub/server/stub/match/rule/uri'
|
34
|
+
require_relative 'http_stub/server/stub/match/rule/method'
|
35
|
+
require_relative 'http_stub/server/stub/match/rule/headers'
|
36
|
+
require_relative 'http_stub/server/stub/match/rule/parameters'
|
37
|
+
require_relative 'http_stub/server/stub/match/rule/simple_body'
|
38
|
+
require_relative 'http_stub/server/stub/match/rule/json_body'
|
39
|
+
require_relative 'http_stub/server/stub/match/rule/body'
|
41
40
|
require_relative 'http_stub/server/stub/response/base'
|
42
41
|
require_relative 'http_stub/server/stub/response/text'
|
43
42
|
require_relative 'http_stub/server/stub/response/file'
|
44
43
|
require_relative 'http_stub/server/stub/response'
|
44
|
+
require_relative 'http_stub/server/response'
|
45
45
|
require_relative 'http_stub/server/stub/triggers'
|
46
|
-
require_relative 'http_stub/server/stub/
|
46
|
+
require_relative 'http_stub/server/stub/payload_file_consolidator'
|
47
|
+
require_relative 'http_stub/server/stub/parser'
|
48
|
+
require_relative 'http_stub/server/stub/stub'
|
49
|
+
require_relative 'http_stub/server/stub/empty'
|
50
|
+
require_relative 'http_stub/server/stub/match/match'
|
47
51
|
require_relative 'http_stub/server/stub/registry'
|
48
52
|
require_relative 'http_stub/server/stub/controller'
|
49
53
|
require_relative 'http_stub/server/stub'
|
50
|
-
require_relative 'http_stub/server/scenario/
|
51
|
-
require_relative 'http_stub/server/scenario/
|
54
|
+
require_relative 'http_stub/server/scenario/parser'
|
55
|
+
require_relative 'http_stub/server/scenario/scenario'
|
52
56
|
require_relative 'http_stub/server/scenario/activator'
|
53
57
|
require_relative 'http_stub/server/scenario/controller'
|
54
58
|
require_relative 'http_stub/server/scenario'
|
55
|
-
require_relative 'http_stub/server/
|
59
|
+
require_relative 'http_stub/server/request_pipeline'
|
56
60
|
require_relative 'http_stub/server/response_pipeline'
|
57
61
|
require_relative 'http_stub/server/application'
|
58
62
|
require_relative 'http_stub/server/daemon'
|
@@ -79,5 +83,6 @@ require_relative 'http_stub/configurer/dsl/endpoint_template'
|
|
79
83
|
require_relative 'http_stub/configurer/dsl/stub_activator_builder'
|
80
84
|
require_relative 'http_stub/configurer/dsl/server'
|
81
85
|
require_relative 'http_stub/configurer/dsl/deprecated'
|
86
|
+
require_relative 'http_stub/configurer/dsl/deprecated'
|
82
87
|
require_relative 'http_stub/configurer/part'
|
83
88
|
require_relative 'http_stub/configurer'
|
@@ -12,6 +12,7 @@ module HttpStub
|
|
12
12
|
begin
|
13
13
|
response = Net::HTTP.start(host, port) { |http| http.request(command.http_request) }
|
14
14
|
raise "#{error_message_prefix(command)}: #{response.code} #{response.message}" unless response.code == "200"
|
15
|
+
response
|
15
16
|
rescue Exception => exc
|
16
17
|
raise "#{error_message_prefix(command)}: #{exc}"
|
17
18
|
end
|
@@ -9,10 +9,13 @@ module HttpStub
|
|
9
9
|
|
10
10
|
def initialize
|
11
11
|
super()
|
12
|
-
@
|
12
|
+
@match_registry = HttpStub::Server::Registry.new("match")
|
13
|
+
@stub_registry = HttpStub::Server::Stub::Registry.new(@match_registry)
|
13
14
|
@scenario_registry = HttpStub::Server::Registry.new("scenario")
|
14
15
|
@stub_controller = HttpStub::Server::Stub::Controller.new(@stub_registry)
|
15
16
|
@scenario_controller = HttpStub::Server::Scenario::Controller.new(@scenario_registry, @stub_registry)
|
17
|
+
@request_pipeline =
|
18
|
+
HttpStub::Server::RequestPipeline.new(@stub_controller, @scenario_controller, @match_registry)
|
16
19
|
end
|
17
20
|
|
18
21
|
private
|
@@ -23,29 +26,15 @@ module HttpStub
|
|
23
26
|
SUPPORTED_REQUEST_TYPES.each { |type| self.send(type, path, opts, &block) }
|
24
27
|
end
|
25
28
|
|
26
|
-
before
|
29
|
+
before do
|
30
|
+
@response_pipeline = HttpStub::Server::ResponsePipeline.new(self)
|
31
|
+
@http_stub_request = HttpStub::Server::Request.new(request)
|
32
|
+
end
|
27
33
|
|
28
34
|
public
|
29
35
|
|
30
|
-
# Sample request body:
|
31
|
-
# {
|
32
|
-
# "uri": "/some/path",
|
33
|
-
# "method": "get",
|
34
|
-
# "headers": {
|
35
|
-
# "key": "value",
|
36
|
-
# ...
|
37
|
-
# },
|
38
|
-
# "parameters": {
|
39
|
-
# "key": "value",
|
40
|
-
# ...
|
41
|
-
# },
|
42
|
-
# "response": {
|
43
|
-
# "status": "200",
|
44
|
-
# "body": "Hello World"
|
45
|
-
# }
|
46
|
-
# }
|
47
36
|
post "/stubs" do
|
48
|
-
response = @stub_controller.register(
|
37
|
+
response = @stub_controller.register(@http_stub_request, logger)
|
49
38
|
@response_pipeline.process(response)
|
50
39
|
end
|
51
40
|
|
@@ -54,7 +43,7 @@ module HttpStub
|
|
54
43
|
end
|
55
44
|
|
56
45
|
delete "/stubs" do
|
57
|
-
@stub_controller.clear(
|
46
|
+
@stub_controller.clear(logger)
|
58
47
|
halt 200, "OK"
|
59
48
|
end
|
60
49
|
|
@@ -68,21 +57,12 @@ module HttpStub
|
|
68
57
|
halt 200, "OK"
|
69
58
|
end
|
70
59
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
# {
|
76
|
-
# ... see /stub ...
|
77
|
-
# },
|
78
|
-
# ],
|
79
|
-
# "triggered_scenario_names": [
|
80
|
-
# "some_other_scenario_name",
|
81
|
-
# ...
|
82
|
-
# ]
|
83
|
-
# }
|
60
|
+
get "/stubs/matches" do
|
61
|
+
haml :matches, {}, matches: @match_registry.all
|
62
|
+
end
|
63
|
+
|
84
64
|
post "/stubs/scenarios" do
|
85
|
-
response = @scenario_controller.register(
|
65
|
+
response = @scenario_controller.register(@http_stub_request, logger)
|
86
66
|
@response_pipeline.process(response)
|
87
67
|
end
|
88
68
|
|
@@ -91,15 +71,22 @@ module HttpStub
|
|
91
71
|
end
|
92
72
|
|
93
73
|
delete "/stubs/scenarios" do
|
94
|
-
@scenario_controller.clear(
|
74
|
+
@scenario_controller.clear(logger)
|
95
75
|
halt 200, "OK"
|
96
76
|
end
|
97
77
|
|
78
|
+
get "/stubs/:id" do
|
79
|
+
haml :stub, {}, the_stub: @stub_registry.find(params[:id], logger)
|
80
|
+
end
|
81
|
+
|
98
82
|
get "/application.css" do
|
99
83
|
sass :application
|
100
84
|
end
|
101
85
|
|
102
|
-
any_request_type(//)
|
86
|
+
any_request_type(//) do
|
87
|
+
response = @request_pipeline.process(@http_stub_request, logger)
|
88
|
+
@response_pipeline.process(response)
|
89
|
+
end
|
103
90
|
|
104
91
|
helpers do
|
105
92
|
|
@@ -109,15 +96,6 @@ module HttpStub
|
|
109
96
|
|
110
97
|
end
|
111
98
|
|
112
|
-
private
|
113
|
-
|
114
|
-
def handle_request
|
115
|
-
response = @stub_controller.replay(request)
|
116
|
-
response = @scenario_controller.activate(request) if response.empty?
|
117
|
-
response = HttpStub::Server::Response::ERROR if response.empty?
|
118
|
-
@response_pipeline.process(response)
|
119
|
-
end
|
120
|
-
|
121
99
|
end
|
122
100
|
|
123
101
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module HttpStub
|
2
|
+
module Server
|
3
|
+
|
4
|
+
class FormattedHash < Hash
|
5
|
+
|
6
|
+
def initialize(hash, key_value_delimiter)
|
7
|
+
self.merge!(hash || {})
|
8
|
+
@key_value_delimiter = key_value_delimiter
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_s
|
12
|
+
self.map { |key_and_value| key_and_value.map(&:to_s).join(@key_value_delimiter) }.join(", ")
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module HttpStub
|
2
|
+
module Server
|
3
|
+
|
4
|
+
class HeaderParser
|
5
|
+
|
6
|
+
def self.parse(request)
|
7
|
+
request.env.reduce(HttpStub::Server::FormattedHash.new({}, ":")) do |result, element|
|
8
|
+
match = element[0].match(/^(?:HTTP_)?([A-Z0-9_]+)$/)
|
9
|
+
result[match[1]] = element[1] if match
|
10
|
+
result
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
@@ -8,18 +8,18 @@ module HttpStub
|
|
8
8
|
@models = []
|
9
9
|
end
|
10
10
|
|
11
|
-
def add(model,
|
11
|
+
def add(model, logger)
|
12
12
|
@models.unshift(model)
|
13
|
-
|
13
|
+
logger.info "Registered #{@model_name}: #{model}"
|
14
14
|
end
|
15
15
|
|
16
|
-
def concat(models,
|
17
|
-
models.each { |model| self.add(model,
|
16
|
+
def concat(models, logger)
|
17
|
+
models.each { |model| self.add(model, logger) }
|
18
18
|
end
|
19
19
|
|
20
|
-
def find(
|
21
|
-
|
22
|
-
@models.find { |model| model.
|
20
|
+
def find(criteria, logger)
|
21
|
+
logger.info "Finding #{@model_name} matching: #{criteria}"
|
22
|
+
@models.find { |model| model.matches?(criteria, logger) }
|
23
23
|
end
|
24
24
|
|
25
25
|
def last
|
@@ -35,8 +35,8 @@ module HttpStub
|
|
35
35
|
@models = @models.slice(starting_index..-1) if starting_index
|
36
36
|
end
|
37
37
|
|
38
|
-
def clear(
|
39
|
-
|
38
|
+
def clear(logger)
|
39
|
+
logger.info "Clearing #{@model_name} registry"
|
40
40
|
@models.clear
|
41
41
|
end
|
42
42
|
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module HttpStub
|
2
|
+
module Server
|
3
|
+
|
4
|
+
class Request
|
5
|
+
|
6
|
+
attr_reader :uri, :method, :headers, :parameters, :body
|
7
|
+
|
8
|
+
def initialize(request)
|
9
|
+
@uri = request.path_info
|
10
|
+
@method = request.request_method.downcase
|
11
|
+
@headers = HttpStub::Server::FormattedHash.new(HttpStub::Server::HeaderParser.parse(request), ":")
|
12
|
+
@parameters = HttpStub::Server::FormattedHash.new(request.params, "=")
|
13
|
+
@body = request.body.read
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module HttpStub
|
2
|
+
module Server
|
3
|
+
|
4
|
+
class RequestPipeline
|
5
|
+
|
6
|
+
def initialize(stub_controller, scenario_controller, match_registry)
|
7
|
+
@stub_controller = stub_controller
|
8
|
+
@scenario_controller = scenario_controller
|
9
|
+
@match_registry = match_registry
|
10
|
+
end
|
11
|
+
|
12
|
+
def process(request, logger)
|
13
|
+
response = @stub_controller.replay(request, logger)
|
14
|
+
response = @scenario_controller.activate(request, logger) if response.empty?
|
15
|
+
response.empty? ? process_unmatched(request, logger) : response
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def process_unmatched(request, logger)
|
21
|
+
@match_registry.add(HttpStub::Server::Stub::Match::Match.new(nil, request), logger)
|
22
|
+
HttpStub::Server::Response::NOT_FOUND
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -3,9 +3,13 @@ module HttpStub
|
|
3
3
|
|
4
4
|
class Response
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
def self.success(headers={})
|
7
|
+
HttpStub::Server::Stub::Response::Text.new("status" => 200, "headers" => headers, "body" => "OK")
|
8
|
+
end
|
9
|
+
|
10
|
+
SUCCESS = success.freeze
|
11
|
+
NOT_FOUND = HttpStub::Server::Stub::Response::Text.new("status" => 404, "body" => "NOT FOUND").freeze
|
12
|
+
EMPTY = HttpStub::Server::Stub::Response::Text.new.freeze
|
9
13
|
|
10
14
|
end
|
11
15
|
|
@@ -9,12 +9,12 @@ module HttpStub
|
|
9
9
|
@stub_registry = stub_registry
|
10
10
|
end
|
11
11
|
|
12
|
-
def activate(scenario,
|
13
|
-
@stub_registry.concat(scenario.stubs,
|
12
|
+
def activate(scenario, logger)
|
13
|
+
@stub_registry.concat(scenario.stubs, logger)
|
14
14
|
scenario.triggered_scenario_names.each do |triggered_scenario_name|
|
15
|
-
scenario_to_activate = @scenario_registry.find(
|
15
|
+
scenario_to_activate = @scenario_registry.find(triggered_scenario_name, logger)
|
16
16
|
raise "Scenario not found with name '#{triggered_scenario_name}'" unless scenario_to_activate
|
17
|
-
activate(scenario_to_activate,
|
17
|
+
activate(scenario_to_activate, logger)
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -9,24 +9,24 @@ module HttpStub
|
|
9
9
|
@scenario_activator = HttpStub::Server::Scenario::Activator.new(scenario_registry, stub_registry)
|
10
10
|
end
|
11
11
|
|
12
|
-
def register(request)
|
13
|
-
scenario = HttpStub::Server::Scenario.create(HttpStub::Server::Scenario::
|
14
|
-
@scenario_registry.add(scenario,
|
12
|
+
def register(request, logger)
|
13
|
+
scenario = HttpStub::Server::Scenario.create(HttpStub::Server::Scenario::Parser.parse(request))
|
14
|
+
@scenario_registry.add(scenario, logger)
|
15
15
|
HttpStub::Server::Response::SUCCESS
|
16
16
|
end
|
17
17
|
|
18
|
-
def activate(request)
|
19
|
-
scenario = @scenario_registry.find(
|
18
|
+
def activate(request, logger)
|
19
|
+
scenario = @scenario_registry.find(request.uri.gsub(/^\//, ""), logger)
|
20
20
|
if scenario
|
21
|
-
@scenario_activator.activate(scenario,
|
21
|
+
@scenario_activator.activate(scenario, logger)
|
22
22
|
HttpStub::Server::Response::SUCCESS
|
23
23
|
else
|
24
24
|
HttpStub::Server::Response::EMPTY
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
def clear(
|
29
|
-
@scenario_registry.clear(
|
28
|
+
def clear(logger)
|
29
|
+
@scenario_registry.clear(logger)
|
30
30
|
end
|
31
31
|
|
32
32
|
end
|
@@ -2,10 +2,10 @@ module HttpStub
|
|
2
2
|
module Server
|
3
3
|
module Scenario
|
4
4
|
|
5
|
-
class
|
5
|
+
class Parser
|
6
6
|
|
7
7
|
def self.parse(request)
|
8
|
-
JSON.parse(request.
|
8
|
+
JSON.parse(request.parameters["payload"]).tap do |payload|
|
9
9
|
payload["stubs"].each do |stub_payload|
|
10
10
|
HttpStub::Server::Stub::PayloadFileConsolidator.consolidate!(stub_payload, request)
|
11
11
|
end
|