http_stub 0.27.0 → 0.28.0.beta1

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 (299) hide show
  1. checksums.yaml +4 -4
  2. data/lib/http_stub/client.rb +18 -0
  3. data/lib/http_stub/client/client.rb +28 -0
  4. data/lib/http_stub/client/request.rb +38 -0
  5. data/lib/http_stub/client/server.rb +20 -0
  6. data/lib/http_stub/client/session.rb +43 -0
  7. data/lib/http_stub/configurator.rb +61 -0
  8. data/lib/http_stub/configurator/endpoint_template.rb +24 -0
  9. data/lib/http_stub/configurator/part.rb +23 -0
  10. data/lib/http_stub/configurator/scenario.rb +42 -0
  11. data/lib/http_stub/configurator/server.rb +53 -0
  12. data/lib/http_stub/configurator/state.rb +41 -0
  13. data/lib/http_stub/configurator/stub.rb +13 -0
  14. data/lib/http_stub/configurator/stub/stub.rb +75 -0
  15. data/lib/http_stub/{configurer/dsl/stub_builder_template.rb → configurator/stub/template.rb} +5 -5
  16. data/lib/http_stub/extensions/core/object.rb +17 -0
  17. data/lib/http_stub/rake/server_tasks.rb +2 -14
  18. data/lib/http_stub/rake/task_generators.rb +3 -3
  19. data/lib/http_stub/server.rb +110 -0
  20. data/lib/http_stub/server/application/application.rb +10 -6
  21. data/lib/http_stub/server/application/request_support.rb +2 -2
  22. data/lib/http_stub/server/application/routes/memory.rb +1 -6
  23. data/lib/http_stub/server/application/routes/scenario.rb +1 -11
  24. data/lib/http_stub/server/application/routes/session.rb +1 -1
  25. data/lib/http_stub/server/application/routes/status.rb +0 -10
  26. data/lib/http_stub/server/application/routes/stub.rb +2 -12
  27. data/lib/http_stub/server/daemon.rb +1 -10
  28. data/lib/http_stub/server/memory/controller.rb +2 -8
  29. data/lib/http_stub/server/memory/initial_state.rb +27 -0
  30. data/lib/http_stub/server/memory/memory.rb +6 -27
  31. data/lib/http_stub/server/registry.rb +3 -1
  32. data/lib/http_stub/server/request/factory.rb +3 -3
  33. data/lib/http_stub/server/response.rb +12 -6
  34. data/lib/http_stub/server/scenario.rb +2 -2
  35. data/lib/http_stub/server/scenario/controller.rb +3 -13
  36. data/lib/http_stub/server/scenario/registry.rb +25 -0
  37. data/lib/http_stub/server/scenario/scenario.rb +13 -8
  38. data/lib/http_stub/server/session.rb +0 -1
  39. data/lib/http_stub/server/session/controller.rb +7 -8
  40. data/lib/http_stub/server/session/identifier_strategy.rb +9 -2
  41. data/lib/http_stub/server/session/registry.rb +7 -13
  42. data/lib/http_stub/server/session/session.rb +4 -8
  43. data/lib/http_stub/server/stdout_logger.rb +13 -0
  44. data/lib/http_stub/server/stub.rb +3 -2
  45. data/lib/http_stub/server/stub/controller.rb +0 -10
  46. data/lib/http_stub/server/stub/empty.rb +2 -1
  47. data/lib/http_stub/server/stub/match/controller.rb +1 -1
  48. data/lib/http_stub/server/stub/match/exact_value_matcher.rb +2 -1
  49. data/lib/http_stub/server/stub/match/omitted_value_matcher.rb +1 -1
  50. data/lib/http_stub/server/stub/match/regexp_value_matcher.rb +1 -2
  51. data/lib/http_stub/server/stub/match/rule/body.rb +7 -29
  52. data/lib/http_stub/server/stub/match/rule/{json_body.rb → json_schema_body.rb} +1 -1
  53. data/lib/http_stub/server/stub/match/rule/method.rb +1 -1
  54. data/lib/http_stub/server/stub/match/rule/schema_body.rb +39 -0
  55. data/lib/http_stub/server/stub/match/rules.rb +6 -6
  56. data/lib/http_stub/server/stub/match/string_value_matcher.rb +1 -2
  57. data/lib/http_stub/server/stub/registry.rb +4 -4
  58. data/lib/http_stub/server/stub/response.rb +2 -6
  59. data/lib/http_stub/server/stub/response/blocks.rb +33 -0
  60. data/lib/http_stub/server/stub/response/body.rb +21 -0
  61. data/lib/http_stub/server/stub/response/file_body.rb +46 -0
  62. data/lib/http_stub/server/stub/response/headers.rb +24 -0
  63. data/lib/http_stub/server/stub/response/response.rb +52 -0
  64. data/lib/http_stub/server/stub/response/text_body.rb +32 -0
  65. data/lib/http_stub/server/stub/stub.rb +17 -11
  66. data/lib/http_stub/server/stub/triggers.rb +16 -5
  67. data/lib/http_stub/server/views/_file_body_response.haml +1 -0
  68. data/lib/http_stub/server/views/_response.haml +6 -1
  69. data/lib/http_stub/server/views/_text_body_response.haml +1 -0
  70. data/lib/http_stub/server/views/application.sass +31 -31
  71. data/lib/http_stub/version.rb +1 -1
  72. data/spec/acceptance/{configurer_part_spec.rb → configurator_part_spec.rb} +8 -8
  73. data/spec/acceptance/cross_origin_support_spec.rb +9 -11
  74. data/spec/acceptance/endpoint_template_spec.rb +5 -5
  75. data/spec/acceptance/scenario_spec.rb +8 -8
  76. data/spec/acceptance/server_defaults_spec.rb +3 -3
  77. data/spec/acceptance/server_memory_spec.rb +13 -5
  78. data/spec/acceptance/server_status_spec.rb +4 -21
  79. data/spec/acceptance/session_spec.rb +8 -11
  80. data/spec/acceptance/stub_body_request_matching_spec.rb +9 -9
  81. data/spec/acceptance/stub_control_values_spec.rb +74 -82
  82. data/spec/acceptance/stub_match_last_spec.rb +60 -80
  83. data/spec/acceptance/stub_match_list_spec.rb +30 -66
  84. data/spec/acceptance/stub_miss_list_spec.rb +19 -27
  85. data/spec/acceptance/stub_response_block_spec.rb +66 -0
  86. data/spec/acceptance/stub_spec.rb +109 -185
  87. data/spec/acceptance/stub_trigger_spec.rb +12 -89
  88. data/spec/helper.rb +32 -10
  89. data/spec/lib/http_stub/client/client_spec.rb +109 -0
  90. data/spec/lib/http_stub/client/request_integration_spec.rb +74 -0
  91. data/spec/lib/http_stub/client/request_spec.rb +32 -0
  92. data/spec/lib/http_stub/client/server_spec.rb +75 -0
  93. data/spec/lib/http_stub/client/session_spec.rb +117 -0
  94. data/spec/lib/http_stub/client_spec.rb +15 -0
  95. data/spec/lib/http_stub/{configurer/dsl/server_endpoint_template_spec.rb → configurator/endpoint_template_spec.rb} +49 -38
  96. data/spec/lib/http_stub/configurator/part_spec.rb +103 -0
  97. data/spec/lib/http_stub/configurator/scenario_spec.rb +162 -0
  98. data/spec/lib/http_stub/configurator/server_spec.rb +344 -0
  99. data/spec/lib/http_stub/configurator/state_spec.rb +113 -0
  100. data/spec/lib/http_stub/configurator/stub/stub_spec.rb +867 -0
  101. data/spec/lib/http_stub/{configurer/dsl/stub_builder_template_spec.rb → configurator/stub/template_spec.rb} +46 -44
  102. data/spec/lib/http_stub/configurator/stub_spec.rb +27 -0
  103. data/spec/lib/http_stub/configurator_spec.rb +113 -0
  104. data/spec/lib/http_stub/extensions/core/hash_spec.rb +3 -3
  105. data/spec/lib/http_stub/extensions/core/object_spec.rb +29 -0
  106. data/spec/lib/http_stub/rake/server_daemon_tasks_smoke_spec.rb +14 -9
  107. data/spec/lib/http_stub/rake/server_tasks_smoke_spec.rb +25 -53
  108. data/spec/lib/http_stub/rake/server_tasks_spec.rb +12 -55
  109. data/spec/lib/http_stub/server/application/application_spec.rb +4 -49
  110. data/spec/lib/http_stub/server/application/cross_origin_support_spec.rb +2 -5
  111. data/spec/lib/http_stub/server/application/request_support_integration_spec.rb +4 -4
  112. data/spec/lib/http_stub/server/application/request_support_spec.rb +16 -11
  113. data/spec/lib/http_stub/server/application/routes/memory_spec.rb +1 -21
  114. data/spec/lib/http_stub/server/application/routes/scenario_spec.rb +4 -56
  115. data/spec/lib/http_stub/server/application/routes/session_integration_spec.rb +1 -1
  116. data/spec/lib/http_stub/server/application/routes/status_spec.rb +2 -36
  117. data/spec/lib/http_stub/server/application/routes/stub_integration_spec.rb +3 -34
  118. data/spec/lib/http_stub/server/application/routes/stub_spec.rb +6 -55
  119. data/spec/lib/http_stub/server/daemon_integration_spec.rb +5 -1
  120. data/spec/lib/http_stub/server/daemon_spec.rb +8 -77
  121. data/spec/lib/http_stub/server/memory/controller_spec.rb +2 -28
  122. data/spec/lib/http_stub/server/memory/initial_state_spec.rb +57 -0
  123. data/spec/lib/http_stub/server/memory/memory_spec.rb +28 -116
  124. data/spec/lib/http_stub/server/registry_spec.rb +57 -2
  125. data/spec/lib/http_stub/server/request/factory_spec.rb +8 -6
  126. data/spec/lib/http_stub/server/response_spec.rb +32 -10
  127. data/spec/lib/http_stub/server/scenario/controller_spec.rb +14 -53
  128. data/spec/lib/http_stub/server/scenario/registry_spec.rb +147 -0
  129. data/spec/lib/http_stub/server/scenario/scenario_spec.rb +8 -10
  130. data/spec/lib/http_stub/server/scenario_spec.rb +1 -1
  131. data/spec/lib/http_stub/server/session/controller_spec.rb +4 -5
  132. data/spec/lib/http_stub/server/session/identifier_strategy_spec.rb +15 -48
  133. data/spec/lib/http_stub/server/session/registry_spec.rb +15 -28
  134. data/spec/lib/http_stub/server/session/session_spec.rb +13 -71
  135. data/spec/lib/http_stub/server/stdout_logger_spec.rb +17 -0
  136. data/spec/lib/http_stub/server/stub/controller_spec.rb +7 -65
  137. data/spec/lib/http_stub/server/stub/empty_spec.rb +8 -0
  138. data/spec/lib/http_stub/server/stub/match/controller_spec.rb +2 -2
  139. data/spec/lib/http_stub/server/stub/match/exact_value_matcher_spec.rb +49 -11
  140. data/spec/lib/http_stub/server/stub/match/hash_matcher_spec.rb +4 -4
  141. data/spec/lib/http_stub/server/stub/match/match_spec.rb +4 -4
  142. data/spec/lib/http_stub/server/stub/match/miss_spec.rb +2 -2
  143. data/spec/lib/http_stub/server/stub/match/omitted_value_matcher_spec.rb +31 -12
  144. data/spec/lib/http_stub/server/stub/match/regexp_value_matcher_spec.rb +20 -11
  145. data/spec/lib/http_stub/server/stub/match/rule/body_spec.rb +3 -3
  146. data/spec/lib/http_stub/server/stub/match/rule/{json_body_spec.rb → json_schema_body_spec.rb} +5 -5
  147. data/spec/lib/http_stub/server/stub/match/rule/method_spec.rb +42 -8
  148. data/spec/lib/http_stub/server/stub/match/rule/schema_body_spec.rb +64 -0
  149. data/spec/lib/http_stub/server/stub/match/rules_spec.rb +18 -18
  150. data/spec/lib/http_stub/server/stub/match/string_value_matcher_spec.rb +10 -63
  151. data/spec/lib/http_stub/server/stub/registry_integration_spec.rb +11 -28
  152. data/spec/lib/http_stub/server/stub/registry_spec.rb +6 -13
  153. data/spec/lib/http_stub/server/stub/response/blocks_spec.rb +64 -0
  154. data/spec/lib/http_stub/server/stub/response/body_spec.rb +52 -0
  155. data/spec/lib/http_stub/server/stub/response/file_body_spec.rb +117 -0
  156. data/spec/lib/http_stub/server/stub/response/headers_spec.rb +89 -0
  157. data/spec/lib/http_stub/server/stub/response/response_spec.rb +342 -0
  158. data/spec/lib/http_stub/server/stub/response/text_body_spec.rb +138 -0
  159. data/spec/lib/http_stub/server/stub/response_spec.rb +23 -32
  160. data/spec/lib/http_stub/server/stub/stub_spec.rb +33 -39
  161. data/spec/lib/http_stub/server/stub/triggers_spec.rb +47 -12
  162. data/spec/lib/http_stub/server/stub_spec.rb +1 -1
  163. data/spec/support/extensions/core/random.rb +23 -0
  164. data/spec/support/http_stub/configurator/scenario_builder.rb +35 -0
  165. data/spec/support/http_stub/configurator/scenario_fixture.rb +39 -0
  166. data/spec/support/http_stub/configurator/stub_builder.rb +112 -0
  167. data/spec/support/http_stub/configurator/stub_fixture.rb +58 -0
  168. data/spec/support/http_stub/configurator_fixture.rb +13 -0
  169. data/spec/support/http_stub/configurator_with_stub_builder_and_requester.rb +14 -0
  170. data/spec/support/http_stub/headers_fixture.rb +11 -0
  171. data/spec/support/http_stub/{html_view_excluding_request_details.rb → html_view_excluding_a_stub_request.rb} +2 -2
  172. data/spec/support/http_stub/{html_view_including_request_details.rb → html_view_including_a_stub_request.rb} +20 -12
  173. data/spec/support/http_stub/port.rb +12 -0
  174. data/spec/support/http_stub/server/application/http_stub_rack_application_test.rb +2 -3
  175. data/spec/support/http_stub/server/driver.rb +20 -15
  176. data/spec/support/http_stub/server/memory_fixture.rb +2 -2
  177. data/spec/support/http_stub/server/request/sinatra_request_fixture.rb +16 -0
  178. data/spec/support/http_stub/server/request_fixture.rb +11 -6
  179. data/spec/support/http_stub/server/scenario_fixture.rb +14 -2
  180. data/spec/support/http_stub/server/session_fixture.rb +2 -16
  181. data/spec/support/http_stub/server/silent_logger.rb +7 -0
  182. data/spec/support/http_stub/server/simple_request.rb +17 -0
  183. data/spec/support/http_stub/server/stub/match/match_fixture.rb +1 -1
  184. data/spec/support/http_stub/server/stub/response/blocks_fixture.rb +54 -0
  185. data/spec/support/http_stub/server/stub/response/file_body_fixture.rb +25 -0
  186. data/spec/support/http_stub/server/stub/response/text_body_fixture.rb +33 -0
  187. data/spec/support/http_stub/server/stub/response_builder.rb +24 -0
  188. data/spec/support/http_stub/server/stub/response_fixture.rb +15 -0
  189. data/spec/support/http_stub/server/stub_fixture.rb +21 -0
  190. data/spec/support/http_stub/server_integration.rb +9 -6
  191. data/spec/support/http_stub/stub_requester.rb +37 -0
  192. data/spec/support/object_convertable_to_json.rb +11 -0
  193. data/spec/support/rack/rack_application_test.rb +1 -1
  194. data/spec/support/rack/request_fixture.rb +22 -4
  195. metadata +166 -207
  196. data/lib/http_stub.rb +0 -131
  197. data/lib/http_stub/configurer.rb +0 -42
  198. data/lib/http_stub/configurer/dsl/request_attribute_referencer.rb +0 -19
  199. data/lib/http_stub/configurer/dsl/request_referencer.rb +0 -24
  200. data/lib/http_stub/configurer/dsl/scenario_builder.rb +0 -39
  201. data/lib/http_stub/configurer/dsl/server.rb +0 -80
  202. data/lib/http_stub/configurer/dsl/server_endpoint_template.rb +0 -23
  203. data/lib/http_stub/configurer/dsl/session.rb +0 -51
  204. data/lib/http_stub/configurer/dsl/session_endpoint_template.rb +0 -22
  205. data/lib/http_stub/configurer/dsl/session_factory.rb +0 -34
  206. data/lib/http_stub/configurer/dsl/stub_builder.rb +0 -65
  207. data/lib/http_stub/configurer/part.rb +0 -23
  208. data/lib/http_stub/configurer/request/controllable_value.rb +0 -19
  209. data/lib/http_stub/configurer/request/http/basic.rb +0 -27
  210. data/lib/http_stub/configurer/request/http/factory.rb +0 -33
  211. data/lib/http_stub/configurer/request/http/multipart.rb +0 -34
  212. data/lib/http_stub/configurer/request/omittable.rb +0 -26
  213. data/lib/http_stub/configurer/request/regexpable.rb +0 -33
  214. data/lib/http_stub/configurer/request/scenario.rb +0 -29
  215. data/lib/http_stub/configurer/request/stub.rb +0 -39
  216. data/lib/http_stub/configurer/request/stub_response.rb +0 -38
  217. data/lib/http_stub/configurer/request/stub_response_file.rb +0 -20
  218. data/lib/http_stub/configurer/request/triggers.rb +0 -25
  219. data/lib/http_stub/configurer/server/buffered_command_processor.rb +0 -24
  220. data/lib/http_stub/configurer/server/command.rb +0 -22
  221. data/lib/http_stub/configurer/server/command_processor.rb +0 -35
  222. data/lib/http_stub/configurer/server/configuration.rb +0 -33
  223. data/lib/http_stub/configurer/server/facade.rb +0 -61
  224. data/lib/http_stub/configurer/server/request_processor.rb +0 -30
  225. data/lib/http_stub/configurer/server/session_facade.rb +0 -57
  226. data/lib/http_stub/server/application/configuration.rb +0 -38
  227. data/lib/http_stub/server/application/response_pipeline.rb +0 -20
  228. data/lib/http_stub/server/application/response_support.rb +0 -19
  229. data/lib/http_stub/server/scenario/parser.rb +0 -17
  230. data/lib/http_stub/server/session/configuration.rb +0 -32
  231. data/lib/http_stub/server/status/controller.rb +0 -25
  232. data/lib/http_stub/server/stub/parser.rb +0 -17
  233. data/lib/http_stub/server/stub/payload.rb +0 -20
  234. data/lib/http_stub/server/stub/payload/base_uri_modifier.rb +0 -17
  235. data/lib/http_stub/server/stub/payload/response_body_modifier.rb +0 -21
  236. data/lib/http_stub/server/stub/response/attribute/body.rb +0 -32
  237. data/lib/http_stub/server/stub/response/attribute/headers.rb +0 -32
  238. data/lib/http_stub/server/stub/response/attribute/interpolator.rb +0 -26
  239. data/lib/http_stub/server/stub/response/attribute/interpolator/headers.rb +0 -27
  240. data/lib/http_stub/server/stub/response/attribute/interpolator/parameters.rb +0 -27
  241. data/lib/http_stub/server/stub/response/base.rb +0 -61
  242. data/lib/http_stub/server/stub/response/file.rb +0 -45
  243. data/lib/http_stub/server/stub/response/text.rb +0 -35
  244. data/lib/http_stub/server/views/_file_response.haml +0 -1
  245. data/lib/http_stub/server/views/_text_response.haml +0 -1
  246. data/spec/acceptance/configurer_initialization_spec.rb +0 -157
  247. data/spec/acceptance/request_reference_spec.rb +0 -42
  248. data/spec/lib/http_stub/configurer/dsl/request_attribute_referencer_spec.rb +0 -37
  249. data/spec/lib/http_stub/configurer/dsl/request_referencer_spec.rb +0 -37
  250. data/spec/lib/http_stub/configurer/dsl/scenario_builder_spec.rb +0 -201
  251. data/spec/lib/http_stub/configurer/dsl/server_spec.rb +0 -575
  252. data/spec/lib/http_stub/configurer/dsl/session_endpoint_template_spec.rb +0 -150
  253. data/spec/lib/http_stub/configurer/dsl/session_factory_spec.rb +0 -97
  254. data/spec/lib/http_stub/configurer/dsl/session_spec.rb +0 -210
  255. data/spec/lib/http_stub/configurer/dsl/stub_builder_spec.rb +0 -747
  256. data/spec/lib/http_stub/configurer/part_spec.rb +0 -103
  257. data/spec/lib/http_stub/configurer/request/controllable_value_spec.rb +0 -34
  258. data/spec/lib/http_stub/configurer/request/http/basic_spec.rb +0 -91
  259. data/spec/lib/http_stub/configurer/request/http/factory_spec.rb +0 -222
  260. data/spec/lib/http_stub/configurer/request/http/multipart_spec.rb +0 -118
  261. data/spec/lib/http_stub/configurer/request/omittable_spec.rb +0 -70
  262. data/spec/lib/http_stub/configurer/request/regexpable_spec.rb +0 -77
  263. data/spec/lib/http_stub/configurer/request/scenario_spec.rb +0 -69
  264. data/spec/lib/http_stub/configurer/request/stub_response_spec.rb +0 -195
  265. data/spec/lib/http_stub/configurer/request/stub_spec.rb +0 -231
  266. data/spec/lib/http_stub/configurer/request/triggers_spec.rb +0 -101
  267. data/spec/lib/http_stub/configurer/server/buffered_command_processor_spec.rb +0 -35
  268. data/spec/lib/http_stub/configurer/server/command_processor_integration_spec.rb +0 -75
  269. data/spec/lib/http_stub/configurer/server/command_spec.rb +0 -26
  270. data/spec/lib/http_stub/configurer/server/configuration_spec.rb +0 -139
  271. data/spec/lib/http_stub/configurer/server/facade_spec.rb +0 -235
  272. data/spec/lib/http_stub/configurer/server/request_processor_spec.rb +0 -100
  273. data/spec/lib/http_stub/configurer/server/session_facade_spec.rb +0 -285
  274. data/spec/lib/http_stub/configurer_spec.rb +0 -105
  275. data/spec/lib/http_stub/server/application/configuration_spec.rb +0 -59
  276. data/spec/lib/http_stub/server/application/response_pipeline_spec.rb +0 -29
  277. data/spec/lib/http_stub/server/application/response_support_spec.rb +0 -30
  278. data/spec/lib/http_stub/server/scenario/parser_spec.rb +0 -64
  279. data/spec/lib/http_stub/server/session/configuration_spec.rb +0 -94
  280. data/spec/lib/http_stub/server/status/controller_spec.rb +0 -47
  281. data/spec/lib/http_stub/server/stub/parser_spec.rb +0 -56
  282. data/spec/lib/http_stub/server/stub/payload/base_uri_modifier_spec.rb +0 -23
  283. data/spec/lib/http_stub/server/stub/payload/response_body_modifier_spec.rb +0 -84
  284. data/spec/lib/http_stub/server/stub/payload_spec.rb +0 -33
  285. data/spec/lib/http_stub/server/stub/response/attribute/body_spec.rb +0 -98
  286. data/spec/lib/http_stub/server/stub/response/attribute/headers_spec.rb +0 -73
  287. data/spec/lib/http_stub/server/stub/response/attribute/interpolator/headers_spec.rb +0 -53
  288. data/spec/lib/http_stub/server/stub/response/attribute/interpolator/parameters_spec.rb +0 -53
  289. data/spec/lib/http_stub/server/stub/response/attribute/interpolator_spec.rb +0 -41
  290. data/spec/lib/http_stub/server/stub/response/base_spec.rb +0 -217
  291. data/spec/lib/http_stub/server/stub/response/file_spec.rb +0 -197
  292. data/spec/lib/http_stub/server/stub/response/text_spec.rb +0 -182
  293. data/spec/resources/sample.pdf +0 -0
  294. data/spec/resources/sample.txt +0 -1
  295. data/spec/support/http_stub/configurer_integration.rb +0 -24
  296. data/spec/support/http_stub/empty_configurer.rb +0 -7
  297. data/spec/support/http_stub/scenario_fixture.rb +0 -33
  298. data/spec/support/http_stub/stub_fixture.rb +0 -125
  299. data/spec/support/http_stub/stub_registrator.rb +0 -83
@@ -6,8 +6,7 @@ module HttpStub
6
6
  class RegexpValueMatcher
7
7
 
8
8
  def self.match?(stub_value, actual_value)
9
- match_data = stub_value.match(/^regexp:(.*)/)
10
- match_data && !!Regexp.new(match_data[1]).match(actual_value)
9
+ stub_value.is_a?(Regexp) && !!stub_value.match(actual_value)
11
10
  end
12
11
 
13
12
  end
@@ -6,36 +6,14 @@ module HttpStub
6
6
 
7
7
  class Body
8
8
 
9
- SCHEMA_PROPERTIES = %w{ type definition }.freeze
10
-
11
- private_constant :SCHEMA_PROPERTIES
12
-
13
- class << self
14
-
15
- def create(body)
16
- matcher = create_schema_body(body["schema"]) if body.is_a?(Hash) && body["schema"]
17
- matcher ||= HttpStub::Server::Stub::Match::Rule::SimpleBody.new(body) if body.present?
18
- matcher || HttpStub::Server::Stub::Match::Rule::Truthy
9
+ def self.create(body)
10
+ if body.is_a?(Hash)
11
+ HttpStub::Server::Stub::Match::Rule::SchemaBody.create(body.with_indifferent_access[:schema])
12
+ elsif body.present?
13
+ HttpStub::Server::Stub::Match::Rule::SimpleBody.new(body)
14
+ else
15
+ HttpStub::Server::Stub::Match::Rule::Truthy
19
16
  end
20
-
21
- private
22
-
23
- def create_schema_body(schema)
24
- validate_schema_properties(schema)
25
- begin
26
- body_class = HttpStub::Server::Stub::Match::Rule.const_get("#{schema["type"].capitalize}Body")
27
- body_class.new(schema["definition"])
28
- rescue NameError
29
- raise "Stub request body schema #{schema} is invalid: #{schema["type"]} schema is not supported"
30
- end
31
- end
32
-
33
- def validate_schema_properties(schema)
34
- SCHEMA_PROPERTIES.each do |property|
35
- raise "Stub request body schema #{schema} is invalid: #{property} expected" unless schema[property]
36
- end
37
- end
38
-
39
17
  end
40
18
 
41
19
  end
@@ -4,7 +4,7 @@ module HttpStub
4
4
  module Match
5
5
  module Rule
6
6
 
7
- class JsonBody
7
+ class JsonSchemaBody
8
8
 
9
9
  def initialize(schema_definition)
10
10
  @schema_definition = schema_definition
@@ -7,7 +7,7 @@ module HttpStub
7
7
  class Method
8
8
 
9
9
  def initialize(method)
10
- @method = method
10
+ @method = method.try(:to_s).try(:upcase)
11
11
  end
12
12
 
13
13
  def matches?(request, _logger)
@@ -0,0 +1,39 @@
1
+ module HttpStub
2
+ module Server
3
+ module Stub
4
+ module Match
5
+ module Rule
6
+
7
+ class SchemaBody
8
+
9
+ MANDATORY_ELEMENT_NAMES = %i{ type definition }.freeze
10
+
11
+ private_constant :MANDATORY_ELEMENT_NAMES
12
+
13
+ class << self
14
+
15
+ def create(schema)
16
+ validate(schema)
17
+ begin
18
+ body_class = HttpStub::Server::Stub::Match::Rule.const_get("#{schema[:type].capitalize}SchemaBody")
19
+ body_class.new(schema[:definition])
20
+ rescue NameError
21
+ raise "Stub request body schema #{schema} is invalid: #{schema[:type]} schema is not supported"
22
+ end
23
+ end
24
+
25
+ def validate(schema)
26
+ MANDATORY_ELEMENT_NAMES.each do |name|
27
+ raise "Stub request body schema #{schema} is invalid: #{name} expected" unless schema[name]
28
+ end
29
+ end
30
+
31
+ end
32
+
33
+ end
34
+
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -8,14 +8,14 @@ module HttpStub
8
8
  attr_reader :uri, :method, :headers, :parameters, :body
9
9
 
10
10
  def initialize(args)
11
- @uri = HttpStub::Server::Stub::Match::Rule::Uri.new(args["uri"])
12
- @method = HttpStub::Server::Stub::Match::Rule::Method.new(args["method"])
13
- @headers = HttpStub::Server::Stub::Match::Rule::Headers.new(args["headers"])
14
- @parameters = HttpStub::Server::Stub::Match::Rule::Parameters.new(args["parameters"])
15
- @body = HttpStub::Server::Stub::Match::Rule::Body.create(args["body"])
11
+ @uri = HttpStub::Server::Stub::Match::Rule::Uri.new(args[:uri])
12
+ @method = HttpStub::Server::Stub::Match::Rule::Method.new(args[:method])
13
+ @headers = HttpStub::Server::Stub::Match::Rule::Headers.new(args[:headers])
14
+ @parameters = HttpStub::Server::Stub::Match::Rule::Parameters.new(args[:parameters])
15
+ @body = HttpStub::Server::Stub::Match::Rule::Body.create(args[:body])
16
16
  end
17
17
 
18
- EMPTY = self.new("uri" => "", "method" => "", "headers" => {}, "parameters" => {}, "body" => "").freeze
18
+ EMPTY = self.new(uri: "", method: "", headers: {}, parameters: {}, body: "").freeze
19
19
 
20
20
  def matches?(request, logger)
21
21
  [ @uri, @method, @headers, @parameters, @body ].all? { |matcher| matcher.matches?(request, logger) }
@@ -12,8 +12,7 @@ module HttpStub
12
12
  private_constant :MATCHERS
13
13
 
14
14
  def self.match?(stub_value, actual_value)
15
- stub_match_value = stub_value ? stub_value.to_s : stub_value
16
- !!MATCHERS.find { |matcher| matcher.match?(stub_match_value, actual_value) }
15
+ !!MATCHERS.find { |matcher| matcher.match?(stub_value, actual_value) }
17
16
  end
18
17
 
19
18
  end
@@ -8,13 +8,13 @@ module HttpStub
8
8
 
9
9
  alias_method :match, :find
10
10
 
11
- def initialize(memory_session)
12
- @memory_session = memory_session
13
- @stub_registry = HttpStub::Server::Registry.new("stub", memory_session.stubs)
11
+ def initialize(initial_stubs)
12
+ @initial_stubs = initial_stubs
13
+ @stub_registry = HttpStub::Server::Registry.new("stub", initial_stubs)
14
14
  end
15
15
 
16
16
  def reset(logger)
17
- @stub_registry.replace(@memory_session.stubs, logger)
17
+ @stub_registry.replace(@initial_stubs, logger)
18
18
  end
19
19
 
20
20
  end
@@ -4,12 +4,8 @@ module HttpStub
4
4
 
5
5
  module Response
6
6
 
7
- def self.create(args)
8
- if args["body"].is_a?(Hash)
9
- HttpStub::Server::Stub::Response::File.new(args)
10
- else
11
- HttpStub::Server::Stub::Response::Text.new(args)
12
- end
7
+ def self.create(args={})
8
+ HttpStub::Server::Stub::Response::Response.new(args)
13
9
  end
14
10
 
15
11
  end
@@ -0,0 +1,33 @@
1
+ module HttpStub
2
+ module Server
3
+ module Stub
4
+ module Response
5
+
6
+ class Blocks
7
+
8
+ delegate :each, to: :@blocks
9
+
10
+ def initialize(blocks)
11
+ @blocks = blocks || []
12
+ end
13
+
14
+ def evaluate_with(request)
15
+ @blocks.reduce({}) { |result, block| result.deep_merge(call_block(block, request)) }
16
+ end
17
+
18
+ def to_array
19
+ @blocks.map(&:source)
20
+ end
21
+
22
+ private
23
+
24
+ def call_block(block, request)
25
+ block.arity.zero? ? block.call : block.call(request)
26
+ end
27
+
28
+ end
29
+
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,21 @@
1
+ module HttpStub
2
+ module Server
3
+ module Stub
4
+ module Response
5
+
6
+ class Body
7
+
8
+ def self.create(args)
9
+ if args[:body].is_a?(Hash)
10
+ HttpStub::Server::Stub::Response::FileBody.new(args[:body])
11
+ else
12
+ HttpStub::Server::Stub::Response::TextBody.new(args)
13
+ end
14
+ end
15
+
16
+ end
17
+
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,46 @@
1
+ module HttpStub
2
+ module Server
3
+ module Stub
4
+ module Response
5
+
6
+ class FileBody
7
+
8
+ DEFAULT_HEADERS = { "content-type" => "application/octet-stream" }.freeze
9
+
10
+ private_constant :DEFAULT_HEADERS
11
+
12
+ attr_reader :uri
13
+
14
+ def initialize(hash)
15
+ @path = hash.dig(:file, :path)
16
+ @uri = "file://#{@path}"
17
+ end
18
+
19
+ def headers
20
+ DEFAULT_HEADERS
21
+ end
22
+
23
+ def serve(application, response)
24
+ application.send_file(@path, send_options(response))
25
+ end
26
+
27
+ def to_s
28
+ @uri
29
+ end
30
+
31
+ private
32
+
33
+ def send_options(response)
34
+ headers = response.headers
35
+ { type: headers["content-type"] }.tap do |options|
36
+ options[:last_modified] = headers["last-modified"] if headers["last-modified"]
37
+ options[:disposition] = headers["content-disposition"] if headers["content-disposition"]
38
+ end
39
+ end
40
+
41
+ end
42
+
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,24 @@
1
+ module HttpStub
2
+ module Server
3
+ module Stub
4
+ module Response
5
+
6
+ class Headers < ::HashWithIndifferentAccess
7
+ include HttpStub::Extensions::Core::Hash::Formatted
8
+
9
+ def self.create(hash, body)
10
+ self.new(body.headers.merge(hash || {}))
11
+ end
12
+
13
+ private
14
+
15
+ def initialize(hash)
16
+ super(hash.stringify_keys, ":")
17
+ end
18
+
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,52 @@
1
+ module HttpStub
2
+ module Server
3
+ module Stub
4
+ module Response
5
+
6
+ class Response
7
+
8
+ DEFAULT_ARGS = { status: 200, delay_in_seconds: 0 }.with_indifferent_access.freeze
9
+
10
+ private_constant :DEFAULT_ARGS
11
+
12
+ attr_reader :status, :body, :headers, :delay_in_seconds, :blocks
13
+
14
+ def initialize(args)
15
+ @original_args = args
16
+ resolved_args = DEFAULT_ARGS.merge(args)
17
+ @status = resolved_args[:status]
18
+ @body = HttpStub::Server::Stub::Response::Body.create(resolved_args)
19
+ @headers = HttpStub::Server::Stub::Response::Headers.create(resolved_args[:headers], @body)
20
+ @delay_in_seconds = resolved_args[:delay_in_seconds]
21
+ @blocks = HttpStub::Server::Stub::Response::Blocks.new(resolved_args[:blocks])
22
+ end
23
+
24
+ def with_values_from(request)
25
+ self.class.new(@original_args.merge(blocks: []).deep_merge(@blocks.evaluate_with(request)))
26
+ end
27
+
28
+ def serve_on(application)
29
+ sleep @delay_in_seconds
30
+ @body.serve(application, self)
31
+ end
32
+
33
+ def to_hash
34
+ {
35
+ status: @status,
36
+ headers: @headers,
37
+ body: @body,
38
+ delay_in_seconds: @delay_in_seconds,
39
+ blocks: @blocks.to_array
40
+ }
41
+ end
42
+
43
+ def to_json(*args)
44
+ self.to_hash.to_json(*args)
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,32 @@
1
+ module HttpStub
2
+ module Server
3
+ module Stub
4
+ module Response
5
+
6
+ class TextBody
7
+
8
+ JSON_HEADERS = { "content-type" => "application/json" }.freeze
9
+
10
+ private_constant :JSON_HEADERS
11
+
12
+ attr_reader :headers, :text
13
+
14
+ def initialize(args={})
15
+ @headers = args[:json] ? JSON_HEADERS : {}
16
+ @text = args[:json].try(:to_json) || args[:body] || ""
17
+ end
18
+
19
+ def serve(application, response)
20
+ application.halt(response.status, response.headers, @text)
21
+ end
22
+
23
+ def to_s
24
+ @text
25
+ end
26
+
27
+ end
28
+
29
+ end
30
+ end
31
+ end
32
+ end
@@ -4,19 +4,19 @@ module HttpStub
4
4
 
5
5
  class Stub
6
6
 
7
- attr_reader :uri, :match_rules, :response, :triggers
8
-
9
- def initialize(args)
10
- @id = args["id"] || SecureRandom.uuid
11
- @uri = "#{args["base_uri"]}/http_stub/stubs/#{@id}"
12
- @match_rules = HttpStub::Server::Stub::Match::Rules.new(args)
13
- @response = HttpStub::Server::Stub::Response.create(args["response"])
14
- @triggers = HttpStub::Server::Stub::Triggers.new(args["triggers"])
15
- @description = args.to_s
7
+ attr_reader :stub_id, :uri, :match_rules, :response, :triggers
8
+
9
+ def initialize(hash)
10
+ @stub_id = hash[:id]
11
+ @uri = "/http_stub/stubs/#{@stub_id}"
12
+ @match_rules = HttpStub::Server::Stub::Match::Rules.new(hash[:match_rules])
13
+ @response = HttpStub::Server::Stub::Response.create(hash[:response])
14
+ @triggers = HttpStub::Server::Stub::Triggers.new(hash[:triggers])
15
+ @description = hash.to_s
16
16
  end
17
17
 
18
18
  def matches?(criteria, logger)
19
- criteria.is_a?(String) ? criteria == @id : @match_rules.matches?(criteria, logger)
19
+ criteria.is_a?(String) ? criteria == @stub_id : @match_rules.matches?(criteria, logger)
20
20
  end
21
21
 
22
22
  def response_for(request)
@@ -24,7 +24,13 @@ module HttpStub
24
24
  end
25
25
 
26
26
  def to_json(*args)
27
- { id: @id, uri: @uri, match_rules: @match_rules, response: @response, triggers: @triggers }.to_json(*args)
27
+ {
28
+ id: @stub_id,
29
+ uri: @uri,
30
+ match_rules: @match_rules,
31
+ response: @response,
32
+ triggers: @triggers
33
+ }.to_json(*args)
28
34
  end
29
35
 
30
36
  def to_s