http_stub 0.25.1 → 0.26.0

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 (187) hide show
  1. checksums.yaml +4 -4
  2. data/lib/http_stub.rb +32 -9
  3. data/lib/http_stub/configurer.rb +2 -10
  4. data/lib/http_stub/configurer/dsl/scenario_builder.rb +13 -11
  5. data/lib/http_stub/configurer/dsl/server.rb +32 -43
  6. data/lib/http_stub/configurer/dsl/server_endpoint_template.rb +23 -0
  7. data/lib/http_stub/configurer/dsl/session.rb +55 -0
  8. data/lib/http_stub/configurer/dsl/session_endpoint_template.rb +22 -0
  9. data/lib/http_stub/configurer/dsl/session_factory.rb +34 -0
  10. data/lib/http_stub/configurer/dsl/stub_builder.rb +18 -8
  11. data/lib/http_stub/configurer/dsl/stub_builder_template.rb +26 -0
  12. data/lib/http_stub/configurer/request/http/basic.rb +9 -3
  13. data/lib/http_stub/configurer/request/http/factory.rb +7 -16
  14. data/lib/http_stub/configurer/request/http/multipart.rb +5 -7
  15. data/lib/http_stub/configurer/request/stub.rb +3 -3
  16. data/lib/http_stub/configurer/request/triggers.rb +25 -0
  17. data/lib/http_stub/configurer/server/command_processor.rb +8 -10
  18. data/lib/http_stub/configurer/server/configuration.rb +33 -0
  19. data/lib/http_stub/configurer/server/facade.rb +21 -43
  20. data/lib/http_stub/configurer/server/request_processor.rb +2 -2
  21. data/lib/http_stub/configurer/server/session_facade.rb +64 -0
  22. data/lib/http_stub/extensions/core/uri.rb +28 -0
  23. data/lib/http_stub/extensions/rack/handler.rb +1 -0
  24. data/lib/http_stub/extensions/sinatra/namespace.rb +9 -0
  25. data/lib/http_stub/rake/server_tasks.rb +1 -4
  26. data/lib/http_stub/server/application/application.rb +17 -98
  27. data/lib/http_stub/server/application/configuration.rb +38 -0
  28. data/lib/http_stub/server/application/cross_origin_support.rb +7 -5
  29. data/lib/http_stub/server/application/request_support.rb +38 -0
  30. data/lib/http_stub/server/application/response_support.rb +19 -0
  31. data/lib/http_stub/server/application/routes/memory.rb +37 -0
  32. data/lib/http_stub/server/application/routes/resource.rb +23 -0
  33. data/lib/http_stub/server/application/routes/scenario.rb +52 -0
  34. data/lib/http_stub/server/application/routes/session.rb +65 -0
  35. data/lib/http_stub/server/application/routes/stub.rb +75 -0
  36. data/lib/http_stub/server/application/session_uri_support.rb +15 -0
  37. data/lib/http_stub/server/memory/controller.rb +25 -0
  38. data/lib/http_stub/server/memory/memory.rb +32 -0
  39. data/lib/http_stub/server/registry.rb +25 -8
  40. data/lib/http_stub/server/request/factory.rb +23 -0
  41. data/lib/http_stub/server/request/parameters.rb +2 -2
  42. data/lib/http_stub/server/request/request.rb +6 -11
  43. data/lib/http_stub/server/request/sinatra_request.rb +26 -0
  44. data/lib/http_stub/server/scenario/controller.rb +16 -11
  45. data/lib/http_stub/server/scenario/not_found_error.rb +15 -0
  46. data/lib/http_stub/server/session.rb +14 -0
  47. data/lib/http_stub/server/session/configuration.rb +32 -0
  48. data/lib/http_stub/server/session/controller.rb +40 -0
  49. data/lib/http_stub/server/session/empty.rb +15 -0
  50. data/lib/http_stub/server/session/identifier_strategy.rb +24 -0
  51. data/lib/http_stub/server/session/registry.rb +38 -0
  52. data/lib/http_stub/server/session/session.rb +80 -0
  53. data/lib/http_stub/server/stub/controller.rb +18 -12
  54. data/lib/http_stub/server/stub/empty.rb +1 -1
  55. data/lib/http_stub/server/stub/match/controller.rb +9 -5
  56. data/lib/http_stub/server/stub/payload/response_body_modifier.rb +3 -1
  57. data/lib/http_stub/server/stub/registry.rb +6 -13
  58. data/lib/http_stub/server/stub/triggers.rb +11 -9
  59. data/lib/http_stub/server/views/_home.haml +2 -0
  60. data/lib/http_stub/server/views/_post_link_function.haml +26 -0
  61. data/lib/http_stub/server/views/_session.haml +16 -0
  62. data/lib/http_stub/server/views/_stub.haml +8 -2
  63. data/lib/http_stub/server/views/_stubs.haml +4 -0
  64. data/lib/http_stub/server/views/application.sass +4 -1
  65. data/lib/http_stub/server/views/layout.haml +1 -0
  66. data/lib/http_stub/server/views/scenario.haml +4 -3
  67. data/lib/http_stub/server/views/scenarios.haml +7 -6
  68. data/lib/http_stub/server/views/session.haml +3 -0
  69. data/lib/http_stub/server/views/sessions.haml +6 -0
  70. data/lib/http_stub/server/views/stubs.haml +1 -4
  71. data/lib/http_stub/server/views/transactional_session.haml +2 -0
  72. data/lib/http_stub/version.rb +1 -1
  73. data/spec/acceptance/configurer_initialization_spec.rb +40 -51
  74. data/spec/acceptance/configurer_part_spec.rb +5 -7
  75. data/spec/acceptance/cross_origin_support_spec.rb +7 -13
  76. data/spec/acceptance/endpoint_template_spec.rb +2 -4
  77. data/spec/acceptance/request_reference_spec.rb +1 -3
  78. data/spec/acceptance/scenario_spec.rb +7 -9
  79. data/spec/acceptance/server_defaults_spec.rb +2 -4
  80. data/spec/acceptance/server_memory_spec.rb +20 -0
  81. data/spec/acceptance/session_spec.rb +125 -0
  82. data/spec/acceptance/stub_body_request_matching_spec.rb +2 -4
  83. data/spec/acceptance/stub_control_values_spec.rb +19 -18
  84. data/spec/acceptance/stub_match_last_spec.rb +0 -4
  85. data/spec/acceptance/stub_match_list_spec.rb +0 -4
  86. data/spec/acceptance/stub_miss_list_spec.rb +0 -4
  87. data/spec/acceptance/stub_spec.rb +11 -11
  88. data/spec/acceptance/stub_trigger_spec.rb +60 -13
  89. data/spec/lib/http_stub/configurer/dsl/scenario_builder_spec.rb +83 -30
  90. data/spec/lib/http_stub/configurer/dsl/server_endpoint_template_spec.rb +167 -0
  91. data/spec/lib/http_stub/configurer/dsl/server_spec.rb +306 -176
  92. data/spec/lib/http_stub/configurer/dsl/session_endpoint_template_spec.rb +150 -0
  93. data/spec/lib/http_stub/configurer/dsl/session_factory_spec.rb +97 -0
  94. data/spec/lib/http_stub/configurer/dsl/session_spec.rb +222 -0
  95. data/spec/lib/http_stub/configurer/dsl/stub_builder_spec.rb +209 -48
  96. data/spec/lib/http_stub/configurer/dsl/stub_builder_template_spec.rb +203 -0
  97. data/spec/lib/http_stub/configurer/request/http/basic_spec.rb +80 -4
  98. data/spec/lib/http_stub/configurer/request/http/factory_spec.rb +115 -56
  99. data/spec/lib/http_stub/configurer/request/http/multipart_spec.rb +39 -6
  100. data/spec/lib/http_stub/configurer/request/stub_spec.rb +50 -108
  101. data/spec/lib/http_stub/configurer/request/triggers_spec.rb +101 -0
  102. data/spec/lib/http_stub/configurer/server/command_processor_integration_spec.rb +11 -10
  103. data/spec/lib/http_stub/configurer/server/configuration_spec.rb +139 -0
  104. data/spec/lib/http_stub/configurer/server/facade_spec.rb +65 -142
  105. data/spec/lib/http_stub/configurer/server/request_processor_spec.rb +7 -6
  106. data/spec/lib/http_stub/configurer/server/session_facade_spec.rb +336 -0
  107. data/spec/lib/http_stub/configurer_spec.rb +105 -0
  108. data/spec/lib/http_stub/extensions/core/uri_spec.rb +75 -0
  109. data/spec/lib/http_stub/extensions/rack/handler_spec.rb +1 -1
  110. data/spec/lib/http_stub/extensions/sinatra/namespace_spec.rb +36 -0
  111. data/spec/lib/http_stub/rake/server_tasks_smoke_spec.rb +4 -3
  112. data/spec/lib/http_stub/rake/server_tasks_spec.rb +47 -10
  113. data/spec/lib/http_stub/server/application/application_spec.rb +44 -301
  114. data/spec/lib/http_stub/server/application/configuration_spec.rb +59 -0
  115. data/spec/lib/http_stub/server/application/cross_origin_support_spec.rb +23 -20
  116. data/spec/lib/http_stub/server/application/request_support_integration_spec.rb +93 -0
  117. data/spec/lib/http_stub/server/application/request_support_spec.rb +61 -0
  118. data/spec/lib/http_stub/server/application/response_support_spec.rb +30 -0
  119. data/spec/lib/http_stub/server/application/routes/memory_spec.rb +41 -0
  120. data/spec/lib/http_stub/server/application/routes/resource_spec.rb +16 -0
  121. data/spec/lib/http_stub/server/application/routes/scenario_spec.rb +117 -0
  122. data/spec/lib/http_stub/server/application/routes/session_integration_spec.rb +46 -0
  123. data/spec/lib/http_stub/server/application/routes/session_spec.rb +186 -0
  124. data/spec/lib/http_stub/server/application/{application_integration_spec.rb → routes/stub_integration_spec.rb} +16 -38
  125. data/spec/lib/http_stub/server/application/routes/stub_spec.rb +202 -0
  126. data/spec/lib/http_stub/server/application/session_uri_support_spec.rb +48 -0
  127. data/spec/lib/http_stub/server/application/text_formatting_support_spec.rb +3 -3
  128. data/spec/lib/http_stub/server/memory/controller_spec.rb +47 -0
  129. data/spec/lib/http_stub/server/memory/memory_spec.rb +122 -0
  130. data/spec/lib/http_stub/server/registry_spec.rb +153 -34
  131. data/spec/lib/http_stub/server/request/factory_spec.rb +74 -0
  132. data/spec/lib/http_stub/server/request/parameters_spec.rb +5 -8
  133. data/spec/lib/http_stub/server/request/request_spec.rb +52 -52
  134. data/spec/lib/http_stub/server/request/sinatra_request_spec.rb +132 -0
  135. data/spec/lib/http_stub/server/scenario/controller_spec.rb +121 -35
  136. data/spec/lib/http_stub/server/scenario/not_found_error_spec.rb +25 -0
  137. data/spec/lib/http_stub/server/session/configuration_spec.rb +94 -0
  138. data/spec/lib/http_stub/server/session/controller_spec.rb +106 -0
  139. data/spec/lib/http_stub/server/session/empty_spec.rb +13 -0
  140. data/spec/lib/http_stub/server/session/identifier_strategy_spec.rb +126 -0
  141. data/spec/lib/http_stub/server/session/registry_spec.rb +214 -0
  142. data/spec/lib/http_stub/server/session/session_spec.rb +444 -0
  143. data/spec/lib/http_stub/server/stub/controller_spec.rb +89 -37
  144. data/spec/lib/http_stub/server/stub/empty_spec.rb +2 -2
  145. data/spec/lib/http_stub/server/stub/match/controller_spec.rb +59 -16
  146. data/spec/lib/http_stub/server/stub/payload/response_body_modifier_spec.rb +7 -8
  147. data/spec/lib/http_stub/server/stub/registry_integration_spec.rb +42 -15
  148. data/spec/lib/http_stub/server/stub/registry_spec.rb +38 -59
  149. data/spec/lib/http_stub/server/stub/triggers_spec.rb +93 -34
  150. data/spec/spec_helper.rb +13 -1
  151. data/spec/support/contain_file.rb +23 -0
  152. data/spec/support/cross_origin_server/application.rb +1 -1
  153. data/spec/support/cross_origin_server/index_page.rb +2 -2
  154. data/spec/support/cross_origin_server/integration.rb +3 -2
  155. data/spec/support/cross_origin_server/public/index.html +2 -1
  156. data/spec/support/http_stub/configurer_integration.rb +12 -14
  157. data/spec/support/http_stub/server/application/http_stub_rack_application_test.rb +47 -0
  158. data/spec/support/http_stub/server/driver.rb +56 -0
  159. data/spec/support/http_stub/server/memory_fixture.rb +17 -0
  160. data/spec/support/http_stub/server/request_fixture.rb +7 -6
  161. data/spec/support/http_stub/server/scenario_fixture.rb +13 -0
  162. data/spec/support/http_stub/server/session_fixture.rb +27 -0
  163. data/spec/support/http_stub/server_integration.rb +12 -17
  164. data/spec/support/http_stub/stub_fixture.rb +19 -6
  165. data/spec/support/include_in_json.rb +4 -4
  166. data/spec/support/rack/rack_application_test.rb +9 -0
  167. data/spec/support/rack/request_fixture.rb +13 -0
  168. data/spec/support/surpressed_output.rb +10 -0
  169. metadata +149 -36
  170. data/lib/http_stub/configurer/dsl/deprecated.rb +0 -60
  171. data/lib/http_stub/configurer/dsl/endpoint_template.rb +0 -38
  172. data/lib/http_stub/configurer/dsl/scenario_activator.rb +0 -15
  173. data/lib/http_stub/configurer/dsl/stub_activator_builder.rb +0 -24
  174. data/lib/http_stub/configurer/dsl/stub_builder_producer.rb +0 -21
  175. data/lib/http_stub/server/request.rb +0 -12
  176. data/lib/http_stub/server/scenario/activator.rb +0 -25
  177. data/lib/http_stub/server/views/_activate_scenario.haml +0 -23
  178. data/lib/http_stub/server/views/index.haml +0 -8
  179. data/spec/acceptance/activator_spec.rb +0 -81
  180. data/spec/lib/http_stub/configurer/dsl/deprecated_spec.rb +0 -240
  181. data/spec/lib/http_stub/configurer/dsl/endpoint_template_spec.rb +0 -255
  182. data/spec/lib/http_stub/configurer/dsl/scenario_activator_spec.rb +0 -62
  183. data/spec/lib/http_stub/configurer/dsl/stub_activator_builder_spec.rb +0 -120
  184. data/spec/lib/http_stub/configurer/dsl/stub_builder_producer_spec.rb +0 -85
  185. data/spec/lib/http_stub/server/request_spec.rb +0 -24
  186. data/spec/lib/http_stub/server/scenario/activator_spec.rb +0 -111
  187. data/spec/support/http_stub/server/scenario/scenario_fixture.rb +0 -15
@@ -0,0 +1,75 @@
1
+ module HttpStub
2
+ module Server
3
+ module Application
4
+ module Routes
5
+
6
+ module Stub
7
+
8
+ def initialize
9
+ super()
10
+ @stub_controller = HttpStub::Server::Stub::Controller.new
11
+ @stub_match_controller = HttpStub::Server::Stub::Match::Controller.new
12
+ end
13
+
14
+ def self.included(application)
15
+ application.instance_eval do
16
+
17
+ namespace "/http_stub/stubs" do
18
+
19
+ post do
20
+ response = @stub_controller.register(http_stub_request, logger)
21
+ @response_pipeline.process(response)
22
+ end
23
+
24
+ get do
25
+ haml :stubs, {}, stubs: @stub_controller.find_all(http_stub_request)
26
+ end
27
+
28
+ post "/reset" do
29
+ @stub_controller.reset(http_stub_request, logger)
30
+ halt 200, "OK"
31
+ end
32
+
33
+ delete do
34
+ @stub_controller.clear(http_stub_request, logger)
35
+ halt 200, "OK"
36
+ end
37
+
38
+ namespace "/matches" do
39
+
40
+ get do
41
+ haml :stub_matches, {}, matches: @stub_match_controller.matches(http_stub_request)
42
+ end
43
+
44
+ get "/last" do
45
+ response = @stub_match_controller.last_match(http_stub_request, logger)
46
+ @response_pipeline.process(response)
47
+ end
48
+
49
+ end
50
+
51
+ get "/misses" do
52
+ haml :stub_misses, {}, misses: @stub_match_controller.misses(http_stub_request)
53
+ end
54
+
55
+ get "/:stub_id" do
56
+ establish_http_stub_request
57
+ haml :stub, {}, the_stub: @stub_controller.find(http_stub_request, logger)
58
+ end
59
+
60
+ end
61
+
62
+ any_request_method "*" do
63
+ response = @stub_controller.match(http_stub_request, logger)
64
+ @response_pipeline.process(response)
65
+ end
66
+
67
+ end
68
+ end
69
+
70
+ end
71
+
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,15 @@
1
+ module HttpStub
2
+ module Server
3
+ module Application
4
+
5
+ module SessionUriSupport
6
+
7
+ def session_uri(uri)
8
+ URI.add_parameters(uri, http_stub_session_id: http_stub_request.session.id)
9
+ end
10
+
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,25 @@
1
+ module HttpStub
2
+ module Server
3
+ module Memory
4
+
5
+ class Controller
6
+
7
+ def initialize(session_configuration, server_memory)
8
+ @session_configuration = session_configuration
9
+ @server_memory = server_memory
10
+ end
11
+
12
+ def find_stubs
13
+ @server_memory.stubs
14
+ end
15
+
16
+ def reset(logger)
17
+ @session_configuration.reset
18
+ @server_memory.reset(logger)
19
+ end
20
+
21
+ end
22
+
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,32 @@
1
+ module HttpStub
2
+ module Server
3
+ module Memory
4
+
5
+ class Memory
6
+
7
+ SESSION_ID = HttpStub::Server::Session::MEMORY_SESSION_ID
8
+
9
+ private_constant :SESSION_ID
10
+
11
+ attr_reader :scenarios, :sessions
12
+
13
+ def initialize(session_configuration)
14
+ @scenarios = HttpStub::Server::Registry.new("scenario")
15
+ @session = HttpStub::Server::Session::Session.new(SESSION_ID, @scenarios, HttpStub::Server::Session::Empty)
16
+ @sessions = HttpStub::Server::Session::Registry.new(session_configuration, @scenarios, @session)
17
+ end
18
+
19
+ def stubs
20
+ @session.stubs
21
+ end
22
+
23
+ def reset(logger)
24
+ @scenarios.clear(logger)
25
+ @sessions.clear(logger)
26
+ end
27
+
28
+ end
29
+
30
+ end
31
+ end
32
+ end
@@ -3,18 +3,25 @@ module HttpStub
3
3
 
4
4
  class Registry
5
5
 
6
- def initialize(model_name)
6
+ def initialize(model_name, models=[])
7
7
  @model_name = model_name
8
- @models = []
8
+ @models = models
9
9
  end
10
10
 
11
11
  def add(model, logger)
12
12
  @models.unshift(model)
13
- logger.info "Registered #{@model_name}: #{model}"
13
+ log_addition_of([ model ], logger)
14
14
  end
15
15
 
16
16
  def concat(models, logger)
17
- models.each { |model| self.add(model, logger) }
17
+ @models.unshift(*models.reverse)
18
+ log_addition_of(models.reverse, logger)
19
+ end
20
+
21
+ def replace(models, logger)
22
+ log_pending_clear(logger)
23
+ @models.replace(models.reverse)
24
+ log_addition_of(models.reverse, logger)
18
25
  end
19
26
 
20
27
  def find(criteria, logger)
@@ -30,16 +37,26 @@ module HttpStub
30
37
  Array.new(@models)
31
38
  end
32
39
 
33
- def rollback_to(model)
34
- starting_index = @models.index(model)
35
- @models = @models.slice(starting_index..-1) if starting_index
40
+ def delete(criteria, logger)
41
+ logger.info "Deleting #{@model_name} matching: #{criteria}"
42
+ @models.delete_if { |model| model.matches?(criteria, logger) }
36
43
  end
37
44
 
38
45
  def clear(logger)
39
- logger.info "Clearing #{@model_name} registry"
46
+ log_pending_clear(logger)
40
47
  @models.clear
41
48
  end
42
49
 
50
+ private
51
+
52
+ def log_pending_clear(logger)
53
+ logger.info "Clearing #{@model_name} registry"
54
+ end
55
+
56
+ def log_addition_of(models, logger)
57
+ models.each { |model| logger.info "Registered #{@model_name}: #{model}" }
58
+ end
59
+
43
60
  end
44
61
 
45
62
  end
@@ -0,0 +1,23 @@
1
+ module HttpStub
2
+ module Server
3
+ module Request
4
+
5
+ class Factory
6
+
7
+ def initialize(session_configuration, server_memory)
8
+ @server_memory = server_memory
9
+ @session_identifier_strategy = HttpStub::Server::Session::IdentifierStrategy.new(session_configuration)
10
+ end
11
+
12
+ def create(rack_request, sinatra_parameters, logger)
13
+ sinatra_request = HttpStub::Server::Request::SinatraRequest.new(rack_request, sinatra_parameters)
14
+ session_id = @session_identifier_strategy.identifier_for(sinatra_request)
15
+ session = @server_memory.sessions.find_or_create(session_id, logger)
16
+ HttpStub::Server::Request::Request.new(sinatra_request, session_id, session)
17
+ end
18
+
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -5,8 +5,8 @@ module HttpStub
5
5
  class Parameters < ::HashWithIndifferentAccess
6
6
  include HttpStub::Extensions::Core::Hash::Formatted
7
7
 
8
- def self.create(rack_request)
9
- self.new(rack_request.params)
8
+ class << self
9
+ alias_method :create, :new
10
10
  end
11
11
 
12
12
  def initialize(parameter_hash={})
@@ -4,19 +4,14 @@ module HttpStub
4
4
 
5
5
  class Request
6
6
 
7
- attr_reader :base_uri, :uri, :method, :headers, :parameters, :body
7
+ delegate :base_uri, :uri, :method, :headers, :parameters, :body, :to_json, to: :@sinatra_request
8
8
 
9
- def initialize(rack_request)
10
- @base_uri = rack_request.base_url
11
- @uri = rack_request.path_info
12
- @method = rack_request.request_method.downcase
13
- @headers = HttpStub::Server::Request::Headers.create(rack_request)
14
- @parameters = HttpStub::Server::Request::Parameters.create(rack_request)
15
- @body = rack_request.body.read
16
- end
9
+ attr_reader :session_id, :session
17
10
 
18
- def to_json(*args)
19
- { uri: @uri, method: @method, headers: @headers, parameters: @parameters, body: @body }.to_json(*args)
11
+ def initialize(sinatra_request, session_id, session)
12
+ @sinatra_request = sinatra_request
13
+ @session_id = session_id
14
+ @session = session
20
15
  end
21
16
 
22
17
  end
@@ -0,0 +1,26 @@
1
+ module HttpStub
2
+ module Server
3
+ module Request
4
+
5
+ class SinatraRequest
6
+
7
+ attr_reader :base_uri, :uri, :method, :headers, :parameters, :body
8
+
9
+ def initialize(rack_request, sinatra_parameters)
10
+ @base_uri = rack_request.base_url
11
+ @uri = rack_request.path_info
12
+ @method = rack_request.request_method.downcase
13
+ @headers = HttpStub::Server::Request::Headers.create(rack_request)
14
+ @parameters = HttpStub::Server::Request::Parameters.create(sinatra_parameters)
15
+ @body = rack_request.body.read.tap { rack_request.body.rewind }
16
+ end
17
+
18
+ def to_json(*args)
19
+ { uri: @uri, method: @method, headers: @headers, parameters: @parameters, body: @body }.to_json(*args)
20
+ end
21
+
22
+ end
23
+
24
+ end
25
+ end
26
+ end
@@ -4,9 +4,8 @@ module HttpStub
4
4
 
5
5
  class Controller
6
6
 
7
- def initialize(scenario_registry, stub_registry)
8
- @scenario_registry = scenario_registry
9
- @scenario_activator = HttpStub::Server::Scenario::Activator.new(scenario_registry, stub_registry)
7
+ def initialize(server_memory)
8
+ @scenario_registry = server_memory.scenarios
10
9
  end
11
10
 
12
11
  def register(request, logger)
@@ -15,14 +14,20 @@ module HttpStub
15
14
  HttpStub::Server::Response::OK
16
15
  end
17
16
 
18
- def activate(name, logger)
19
- scenario = @scenario_registry.find(name, logger)
20
- if scenario
21
- @scenario_activator.activate(scenario, logger)
22
- HttpStub::Server::Response::OK
23
- else
24
- HttpStub::Server::Response::NOT_FOUND
25
- end
17
+ def find(request, logger)
18
+ @scenario_registry.find(URI.decode_www_form_component(request.parameters[:name]), logger)
19
+ end
20
+
21
+ def find_all
22
+ @scenario_registry.all.sort_by(&:name)
23
+ end
24
+
25
+ def activate(request, logger)
26
+ scenario_names = request.parameters[:name] ? [request.parameters[:name] ] : request.parameters[:names]
27
+ scenario_names.each { |name| request.session.activate_scenario!(name, logger) }
28
+ HttpStub::Server::Response::OK
29
+ rescue HttpStub::Server::Scenario::NotFoundError
30
+ HttpStub::Server::Response::NOT_FOUND
26
31
  end
27
32
 
28
33
  def clear(logger)
@@ -0,0 +1,15 @@
1
+ module HttpStub
2
+ module Server
3
+ module Scenario
4
+
5
+ class NotFoundError < ::StandardError
6
+
7
+ def initialize(name)
8
+ super("Scenario '#{name}' not found")
9
+ end
10
+
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+ module HttpStub
2
+ module Server
3
+
4
+ module Session
5
+
6
+ MEMORY_SESSION_ID = "http_stub_memory".freeze
7
+ TRANSACTIONAL_SESSION_ID = "http_stub_transactional".freeze
8
+
9
+ ID_ATTRIBUTE_NAME = :http_stub_session_id
10
+
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,32 @@
1
+ module HttpStub
2
+ module Server
3
+ module Session
4
+
5
+ class Configuration
6
+
7
+ DEFAULT_CONFIGURATION = [
8
+ { parameter: HttpStub::Server::Session::ID_ATTRIBUTE_NAME },
9
+ { header: HttpStub::Server::Session::ID_ATTRIBUTE_NAME }
10
+ ].freeze
11
+ DEFAULT_IDENTIFIER = HttpStub::Server::Session::MEMORY_SESSION_ID
12
+
13
+ private_constant :DEFAULT_CONFIGURATION, :DEFAULT_IDENTIFIER
14
+
15
+ attr_reader :identifier_configuration
16
+
17
+ attr_accessor :default_identifier
18
+
19
+ def initialize(identifier_setting)
20
+ @identifier_configuration = DEFAULT_CONFIGURATION + (identifier_setting ? [ identifier_setting ] : [])
21
+ @default_identifier = DEFAULT_IDENTIFIER
22
+ end
23
+
24
+ def reset
25
+ @default_identifier = DEFAULT_IDENTIFIER
26
+ end
27
+
28
+ end
29
+
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,40 @@
1
+ module HttpStub
2
+ module Server
3
+ module Session
4
+
5
+ class Controller
6
+
7
+ def initialize(session_configuration, server_memory)
8
+ @session_configuration = session_configuration
9
+ @server_memory = server_memory
10
+ end
11
+
12
+ def find(request, logger)
13
+ @server_memory.sessions.find(request.session_id, logger)
14
+ end
15
+
16
+ def find_transactional(logger)
17
+ @server_memory.sessions.find(HttpStub::Server::Session::TRANSACTIONAL_SESSION_ID, logger)
18
+ end
19
+
20
+ def find_all
21
+ @server_memory.sessions.all
22
+ end
23
+
24
+ def mark_default(request)
25
+ @session_configuration.default_identifier = request.session_id
26
+ end
27
+
28
+ def delete(request, logger)
29
+ @server_memory.sessions.delete(request.session_id, logger)
30
+ end
31
+
32
+ def clear(logger)
33
+ @server_memory.sessions.clear(logger)
34
+ end
35
+
36
+ end
37
+
38
+ end
39
+ end
40
+ end