http_stub 0.22.2 → 0.22.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e4c4645eda720411e136a1e6b217cc9ee3fde9f2
4
- data.tar.gz: 5b6592c82b4e506028076c326b39fc6d0214dbf4
3
+ metadata.gz: 4c80f3899b852c169dc4f860759ae6c096e29fdb
4
+ data.tar.gz: 4a56c16de077939fb79a6152f4d98dcf7ff1c6b7
5
5
  SHA512:
6
- metadata.gz: 0a5971eca0c6d1e0ade4f7963a00f4259e2fd14d3274d5a1af9ef817b2ea597666f84a445b4bfcb584b369987742ec730ac896710af9c695a685d7e0b4de25be
7
- data.tar.gz: 11933cc237590fb5b30e6e1f96eef69461d3f7b8281cb44d1f8756261e944330ab54acbcb9d093f08e62e594c60cc6f78822edf3399c3f4b184b3bfe4bdf8d30
6
+ metadata.gz: 3940ab6caac7e382d473acefc9fa09e8f3232b56ae5430df606bd50761a081c1962d5f1321d2ff8582e027e7e33d588e67eaf67e3b94edac705a4556cb669214
7
+ data.tar.gz: 4aea566a355af20b43c457819319cd22ed412d5555fb7a76d77a5f797857899ce334adfb8d834c576fe6bb5d2e22c5cc3cd9acaacead541cefd67b696aefda35
data/lib/http_stub.rb CHANGED
@@ -59,6 +59,7 @@ require_relative 'http_stub/server/scenario/activator'
59
59
  require_relative 'http_stub/server/scenario/controller'
60
60
  require_relative 'http_stub/server/scenario'
61
61
  require_relative 'http_stub/server/response_pipeline'
62
+ require_relative 'http_stub/server/application_helpers'
62
63
  require_relative 'http_stub/server/application'
63
64
  require_relative 'http_stub/server/daemon'
64
65
  require_relative 'http_stub/configurer/request/http/basic'
@@ -8,7 +8,7 @@ module HttpStub
8
8
  @id = id
9
9
  @status = args[:status] || ""
10
10
  @headers = (args[:headers] || {}).with_indifferent_and_insensitive_access
11
- @body = args[:body]
11
+ @body = args[:json].try(:to_json) || args[:body]
12
12
  @delay_in_seconds = args[:delay_in_seconds] || ""
13
13
  end
14
14
 
@@ -7,7 +7,8 @@ module HttpStub
7
7
 
8
8
  register Sinatra::Partial
9
9
 
10
- enable :dump_errors, :logging, :partial_underscores
10
+ enable :dump_errors, :logging, :partial_underscores
11
+ disable :protection
11
12
 
12
13
  def initialize
13
14
  super()
@@ -102,13 +103,7 @@ module HttpStub
102
103
  @response_pipeline.process(response)
103
104
  end
104
105
 
105
- helpers do
106
-
107
- def h(text)
108
- Rack::Utils.escape_html(text)
109
- end
110
-
111
- end
106
+ helpers { include HttpStub::Server::ApplicationHelpers }
112
107
 
113
108
  end
114
109
 
@@ -0,0 +1,21 @@
1
+ module HttpStub
2
+ module Server
3
+
4
+ module ApplicationHelpers
5
+
6
+ def h(text)
7
+ Rack::Utils.escape_html(text)
8
+ end
9
+
10
+ def pp(text)
11
+ begin
12
+ text ? JSON.pretty_generate(JSON.parse(text)) : ""
13
+ rescue JSON::ParserError
14
+ text
15
+ end
16
+ end
17
+
18
+ end
19
+
20
+ end
21
+ end
@@ -1,16 +1,7 @@
1
- %table{ class: :match }
2
- %tr
3
- %td Type:
4
- %td Match
5
- %tr
6
- %td Request:
7
- %td= partial :request, locals: { request: match.request }
8
- %tr
9
- %td Response:
10
- %td
11
- %table{ class: :response }
12
- = partial :response, locals: { response: match.stub.response }
13
- %tr
14
- %td Stub:
15
- %td
16
- %a{ href: match.stub.stub_uri, class: :stub } Stub
1
+ %article
2
+ %h3 Request
3
+ = partial :request, locals: { request: match.request }
4
+ %h3 Response
5
+ =partial :response, locals: { response: match.stub.response }
6
+ %h3 Matched Stub
7
+ %a{ href: match.stub.stub_uri, class: [:stub, :link] } Match
@@ -1,16 +1,16 @@
1
1
  %table
2
2
  %tr
3
- %td URI:
3
+ %td.title URI:
4
4
  %td=h(request.uri)
5
5
  %tr
6
- %td Method:
6
+ %td.title Method:
7
7
  %td=request.method
8
8
  %tr
9
- %td Headers:
9
+ %td.title Headers:
10
10
  %td=h(request.headers)
11
11
  %tr
12
- %td Parameters:
12
+ %td.title Parameters:
13
13
  %td=h(request.parameters)
14
14
  %tr
15
- %td Body:
15
+ %td.title Body:
16
16
  %td=h(request.body)
@@ -1,9 +1,14 @@
1
- %tr
2
- %td Status:
3
- %td=response.status
1
+ %table
4
2
  %tr
5
- %td Headers:
3
+ %td.title Status:
4
+ %td=response.status
5
+ %tr
6
+ %td.title Headers:
6
7
  %td=h(response.headers)
7
8
  %tr
8
- %td Body:
9
- %td=partial "#{response.type}_response".to_sym, locals: { response: response }
9
+ %td.title Body:
10
+ %td
11
+ %pre=partial "#{response.type}_response".to_sym, locals: { response: response }
12
+ %tr
13
+ %td.title Delay:
14
+ %td=h(response.delay_in_seconds)
@@ -1,18 +1,8 @@
1
- %table
2
- %tr
3
- %td Request:
4
- %td=partial :request, locals: { request: the_stub }
5
- %tr
6
- %td Response:
7
- %td
8
- %table
9
- =partial :response, locals: { response: the_stub.response }
10
- %tr
11
- %td Delay:
12
- %td=h(the_stub.response.delay_in_seconds)
13
- %tr
14
- %td Triggers:
15
- %td
16
- - the_stub.triggers.each do |trigger|
17
- = partial :stub, locals: { the_stub: trigger }
18
- %br
1
+ %article
2
+ %h3 Request
3
+ = partial :request, locals: { request: the_stub }
4
+ %h3 Response
5
+ =partial :response, locals: { response: the_stub.response }
6
+ %h3 Triggers
7
+ - the_stub.triggers.each do |trigger|
8
+ = partial :stub, locals: { the_stub: trigger }
@@ -1 +1 @@
1
- =h(response.body)
1
+ =pp(response.body)
@@ -1,10 +1,54 @@
1
- table
2
- :border 1px solid black
1
+ $color_highlight: #D7B2EA
2
+ $color_background: #EEEEEE
3
+ $color_content_bg: white
4
+ $color_dark_border: grey
5
+ $color_border: lightgrey
6
+ $color_font: black
7
+ $color_peach: #FFF6EF
8
+
9
+ body
10
+ :background $color_background
11
+ :font-family "Helvetica Neue", Helvetica, Arial, sans-serif
12
+ :display flex
13
+ :flex-direction column
14
+ :align-items center
15
+
16
+ header
17
+ :padding-left 1rem
18
+
19
+ section
20
+ :max-width 800px
21
+ :border-radius 10px
22
+ :background white
23
+ :padding 1rem
24
+ :display inline-block
3
25
 
4
26
  table
5
- table
6
- :border 1px solid grey
27
+ :padding 1rem
28
+ :border-collapse collapse
29
+ tr
30
+ :background $color_content_bg
31
+ td
32
+ :padding 1rem
33
+ :max-width 600px
34
+ &.name
35
+ :font-weight bold
36
+ &.title
37
+ :font-weight bold
38
+
39
+ .header-rule
40
+ :border-bottom 1px solid $color_border
41
+
42
+ a.link
43
+ :border 1px solid $color_dark_border
44
+ :border-radius 3px
45
+ :padding 0.5rem
46
+ :text-decoration none
47
+ :color $color_font
48
+ &:hover
49
+ :background $color_highlight
7
50
 
8
- table.scenarios
9
- tr:hover
10
- :background lightgray
51
+ pre
52
+ :white-space pre-wrap !important
53
+ :word-wrap break-word !important
54
+ :max-width 600px
@@ -1,6 +1,6 @@
1
1
  %h1 http_stub diagnostics
2
- %a{ href: "/http_stub/stubs", id: :stubs } List Stubs
2
+ %a{ href: "/http_stub/stubs", id: :stubs, class: :link } List Stubs
3
3
  %br
4
- %a{ href: "/http_stub/scenarios", id: :scenarios } List Scenarios
4
+ %a{ href: "/http_stub/scenarios", id: :scenarios, class: :link } List Scenarios
5
5
  %br
6
- %a{ href: "/http_stub/stubs/matches", id: :stub_matches } List Stub Matches & Misses
6
+ %a{ href: "/http_stub/stubs/matches", id: :stub_matches, class: :link } List Stub Matches & Misses
@@ -0,0 +1,5 @@
1
+ %header
2
+ %h1 Matches
3
+ %section
4
+ - matches.each do |match|
5
+ = partial :match, locals: { match: match }
@@ -1,17 +1,12 @@
1
- %table{ class: :scenario }
2
- %tr
3
- %td Name:
4
- %td
5
- %a{ href: scenario.links.activate, class: :activate_scenario, data: { name: scenario.name } }= scenario.name
6
- %tr
7
- %td Stubs:
8
- %td
9
- - scenario.stubs.each do |the_stub|
10
- = partial :stub, locals: { the_stub: the_stub }
11
- %tr
12
- %td Triggered Scenario's:
13
- %td
14
- - scenario.triggered_scenarios.each do |triggered_scenario|
15
- %a{ href: triggered_scenario.links.detail, class: :triggered_scenario_detail }= triggered_scenario.name
16
- %br
1
+ %header
2
+ %h1= scenario.name
3
+ %section
4
+ %a{ href: scenario.links.activate, class: [:scenario, :link, :activate_scenario], data: { name: scenario.name } } Activate
5
+ %h2 Stubs
6
+ - scenario.stubs.each do |the_stub|
7
+ = partial :stub, locals: { the_stub: the_stub }
8
+ - if scenario.triggered_scenarios.present?
9
+ %h2 Triggered Scenarios
10
+ - scenario.triggered_scenarios.each do |triggered_scenario|
11
+ %a{ href: triggered_scenario.links.detail, class: :triggered_scenario_detail }= triggered_scenario.name
17
12
  = partial :activate_scenario
@@ -1,10 +1,12 @@
1
- %h1 Scenarios
2
- %table{ class: :scenarios }
3
- - scenarios.each do |scenario|
4
- %tr
5
- %td{ class: :scenario_name }= scenario.name
6
- %td
7
- %a{ href: scenario.links.activate, class: :activate_scenario, data: { name: scenario.name } } Activate
8
- %td
9
- %a{ href: scenario.links.detail, class: :view_scenario } View Detail
1
+ %header
2
+ %h1 Scenarios
3
+ %section
4
+ %table{ class: :scenarios }
5
+ - scenarios.each do |scenario|
6
+ %tr
7
+ %td{ class: [:scenario_name, :'header-rule'] }= scenario.name
8
+ %td{ class: :'header-rule' }
9
+ %a{ href: scenario.links.activate, class: [:scenario, :link, :activate_scenario], data: { name: scenario.name } } Activate
10
+ %td{ class: :'header-rule' }
11
+ %a{ href: scenario.links.detail, class: [:scenario, :link, :view_scenario] } View Detail
10
12
  = partial :activate_scenario
@@ -1,4 +1,6 @@
1
- %h1 Stubs
2
- - stubs.each do |the_stub|
3
- = partial :stub, locals: { the_stub: the_stub }
4
- %br
1
+ %header
2
+ %h1 Stubs
3
+ %section
4
+ - stubs.each do |the_stub|
5
+ = partial :stub, locals: { the_stub: the_stub }
6
+ .header-rule
@@ -1,3 +1,3 @@
1
1
  module HttpStub
2
- VERSION = "0.22.2".freeze
2
+ VERSION = "0.22.3".freeze
3
3
  end
@@ -1,7 +1,7 @@
1
1
  describe "Scenario acceptance" do
2
2
  include_context "configurer integration"
3
3
 
4
- context "when a configurer that contains scenario's is initialized" do
4
+ context "when a configurer that contains scenarios is initialized" do
5
5
 
6
6
  let(:configurer) { HttpStub::Examples::ConfigurerWithTrivialScenarios.new }
7
7
 
@@ -45,8 +45,32 @@ describe HttpStub::Configurer::Request::StubResponse do
45
45
 
46
46
  end
47
47
 
48
- it "has an entry for the response body argument" do
49
- expect(subject).to include(body: fixture.body)
48
+ context "when a response body argument is provided" do
49
+
50
+ before(:example) do
51
+ fixture.body = "some body"
52
+ fixture.json = nil
53
+ end
54
+
55
+ it "has a response body entry that contains the body argument" do
56
+ expect(subject).to include(body: fixture.body)
57
+ end
58
+
59
+ end
60
+
61
+ context "when a response json argument is provided" do
62
+
63
+ let(:json_object) { { some_key: "some value" } }
64
+
65
+ before(:example) do
66
+ fixture.body = nil
67
+ fixture.json = json_object
68
+ end
69
+
70
+ it "has a response body entry that contains the json argument converted to JSON" do
71
+ expect(subject).to include(body: json_object.to_json)
72
+ end
73
+
50
74
  end
51
75
 
52
76
  context "when a delay option is provided" do
@@ -0,0 +1,53 @@
1
+ describe HttpStub::Server::ApplicationHelpers do
2
+
3
+ let(:helpers) { Class.new.extend(described_class) }
4
+
5
+ describe "::h" do
6
+
7
+ let(:text) { "<tag>Some text</tag>" }
8
+
9
+ subject { helpers.h(text) }
10
+
11
+ it "should escape the provided HTML" do
12
+ expect(subject).to eq("&lt;tag&gt;Some text&lt;&#x2F;tag&gt;")
13
+ end
14
+
15
+ end
16
+
17
+ describe "::pp" do
18
+
19
+ subject { helpers.pp(text) }
20
+
21
+ context "when the text is JSON" do
22
+
23
+ let(:text) { "{\"key\":\"value\"}" }
24
+
25
+ it "returns a pretty JSON string" do
26
+ expect(subject).to eql("{\n \"key\": \"value\"\n}")
27
+ end
28
+
29
+ end
30
+
31
+ context "when the text is not JSON" do
32
+
33
+ let(:text) { "some text" }
34
+
35
+ it "returns the string unchanged" do
36
+ expect(subject).to eql(text)
37
+ end
38
+
39
+ end
40
+
41
+ context "when the text is nil" do
42
+
43
+ let(:text) { nil }
44
+
45
+ it "returns an empty string" do
46
+ expect(subject).to eql("")
47
+ end
48
+
49
+ end
50
+
51
+ end
52
+
53
+ end
@@ -179,11 +179,11 @@ describe HttpStub::Server::Application, "when the server is running" do
179
179
  end
180
180
 
181
181
  it "returns a response whose body contains the response body of stub returning JSON" do
182
- expect(response.body).to match(/#{escape_html({ "key" => "JSON body" }.to_json)}/)
182
+ expect(response.body).to match(/#{encode_whitespace(JSON.pretty_generate({ key: "JSON body" }))}/)
183
183
  end
184
184
 
185
185
  it "returns a response whose body contains the response body of stub returning HTML" do
186
- expect(response.body).to match(/#{escape_html("<html><body>HTML body</body></html>")}/)
186
+ expect(response.body).to match(/#{encode_whitespace("<html><body>HTML body</body></html>")}/)
187
187
  end
188
188
 
189
189
  it "returns a response whose body contains the response body of a stub returning a file" do
@@ -340,11 +340,11 @@ describe HttpStub::Server::Application, "when the server is running" do
340
340
  end
341
341
 
342
342
  it "returns a response whose body supports JSON responses" do
343
- expect(response.body).to match(/#{escape_html({ "key" => "JSON body" }.to_json)}/)
343
+ expect(response.body).to match(/#{encode_whitespace(JSON.pretty_generate({ "key" => "JSON body" }))}/)
344
344
  end if stub_number == 1
345
345
 
346
346
  it "returns a response whose body supports HTML responses" do
347
- expect(response.body).to match(/#{escape_html("<html><body>HTML body</body></html>")}/)
347
+ expect(response.body).to match(/#{encode_whitespace("<html><body>HTML body</body></html>")}/)
348
348
  end if stub_number == 2
349
349
 
350
350
  it "returns a response whose body supports file responses" do
@@ -298,4 +298,8 @@ describe HttpStub::Server::Application do
298
298
 
299
299
  end
300
300
 
301
+ it "disables all standard HTTP security measures to allow stubs full control of responses" do
302
+ expect(app.settings.protection).to eql(false)
303
+ end
304
+
301
305
  end
@@ -56,7 +56,7 @@ describe HttpStub::Server::Scenario::Activator do
56
56
  subject
57
57
  end
58
58
 
59
- context "when the triggered scenario's are found" do
59
+ context "when the triggered scenarios are found" do
60
60
 
61
61
  class HttpStub::Server::Scenario::ActivatorRetainingActivateArgs < HttpStub::Server::Scenario::Activator
62
62
 
@@ -76,7 +76,7 @@ describe HttpStub::Server::Scenario::Activator do
76
76
 
77
77
  let(:activator_class) { HttpStub::Server::Scenario::ActivatorRetainingActivateArgs }
78
78
 
79
- it "activates the scenario's" do
79
+ it "activates the scenarios" do
80
80
  expected_activate_args = triggered_scenarios.reduce([ [ scenario, logger ] ]) do |result, triggered_scenario|
81
81
  result << [ triggered_scenario, logger ]
82
82
  end
data/spec/spec_helper.rb CHANGED
@@ -50,5 +50,6 @@ require_relative 'support/http_stub/server/stub/match/result_fixture'
50
50
  require_relative 'support/http_stub/stub_fixture'
51
51
  require_relative 'support/http_stub/scenario_fixture'
52
52
  require_relative 'support/http_stub/empty_configurer'
53
+ require_relative 'support/html_helpers'
53
54
  require_relative 'support/server_integration'
54
55
  require_relative 'support/configurer_integration'
@@ -0,0 +1,5 @@
1
+ module HtmlHelpers
2
+ include Haml::Helpers
3
+
4
+ alias_method :encode_whitespace, :preserve
5
+ end
@@ -1,5 +1,6 @@
1
1
  shared_context "server integration" do
2
2
  include Rack::Utils
3
+ include HtmlHelpers
3
4
 
4
5
  before(:context) do
5
6
  @pid = Process.spawn("rake example_server:start:foreground --trace")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: http_stub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.22.2
4
+ version: 0.22.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Ueckerman
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-04-18 00:00:00.000000000 Z
12
+ date: 2016-05-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -137,20 +137,6 @@ dependencies:
137
137
  - - "~>"
138
138
  - !ruby/object:Gem::Version
139
139
  version: '3.4'
140
- - !ruby/object:Gem::Dependency
141
- name: travis-lint
142
- requirement: !ruby/object:Gem::Requirement
143
- requirements:
144
- - - "~>"
145
- - !ruby/object:Gem::Version
146
- version: '2.0'
147
- type: :development
148
- prerelease: false
149
- version_requirements: !ruby/object:Gem::Requirement
150
- requirements:
151
- - - "~>"
152
- - !ruby/object:Gem::Version
153
- version: '2.0'
154
140
  - !ruby/object:Gem::Dependency
155
141
  name: rspec
156
142
  requirement: !ruby/object:Gem::Requirement
@@ -249,20 +235,34 @@ dependencies:
249
235
  - - "~>"
250
236
  - !ruby/object:Gem::Version
251
237
  version: '0.3'
238
+ - !ruby/object:Gem::Dependency
239
+ name: travis-lint
240
+ requirement: !ruby/object:Gem::Requirement
241
+ requirements:
242
+ - - "~>"
243
+ - !ruby/object:Gem::Version
244
+ version: '2.0'
245
+ type: :development
246
+ prerelease: false
247
+ version_requirements: !ruby/object:Gem::Requirement
248
+ requirements:
249
+ - - "~>"
250
+ - !ruby/object:Gem::Version
251
+ version: '2.0'
252
252
  - !ruby/object:Gem::Dependency
253
253
  name: codeclimate-test-reporter
254
254
  requirement: !ruby/object:Gem::Requirement
255
255
  requirements:
256
256
  - - "~>"
257
257
  - !ruby/object:Gem::Version
258
- version: '0.4'
258
+ version: '0.5'
259
259
  type: :development
260
260
  prerelease: false
261
261
  version_requirements: !ruby/object:Gem::Requirement
262
262
  requirements:
263
263
  - - "~>"
264
264
  - !ruby/object:Gem::Version
265
- version: '0.4'
265
+ version: '0.5'
266
266
  description: fakeweb for a HTTP server, informing it to stub / fake responses
267
267
  email: matthew.ueckerman@myob.com
268
268
  executables: []
@@ -302,6 +302,7 @@ files:
302
302
  - "./lib/http_stub/rake/server_tasks.rb"
303
303
  - "./lib/http_stub/rake/task_generators.rb"
304
304
  - "./lib/http_stub/server/application.rb"
305
+ - "./lib/http_stub/server/application_helpers.rb"
305
306
  - "./lib/http_stub/server/daemon.rb"
306
307
  - "./lib/http_stub/server/formatted_hash.rb"
307
308
  - "./lib/http_stub/server/header_parser.rb"
@@ -356,6 +357,7 @@ files:
356
357
  - "./lib/http_stub/server/views/index.haml"
357
358
  - "./lib/http_stub/server/views/layout.haml"
358
359
  - "./lib/http_stub/server/views/match_results.haml"
360
+ - "./lib/http_stub/server/views/matches.haml"
359
361
  - "./lib/http_stub/server/views/scenario.haml"
360
362
  - "./lib/http_stub/server/views/scenarios.haml"
361
363
  - "./lib/http_stub/server/views/stub.haml"
@@ -402,6 +404,7 @@ files:
402
404
  - "./spec/lib/http_stub/rake/server_daemon_tasks_smoke_spec.rb"
403
405
  - "./spec/lib/http_stub/rake/server_tasks_smoke_spec.rb"
404
406
  - "./spec/lib/http_stub/rake/server_tasks_spec.rb"
407
+ - "./spec/lib/http_stub/server/application_helpers_spec.rb"
405
408
  - "./spec/lib/http_stub/server/application_integration_spec.rb"
406
409
  - "./spec/lib/http_stub/server/application_spec.rb"
407
410
  - "./spec/lib/http_stub/server/daemon_integration_spec.rb"
@@ -450,6 +453,7 @@ files:
450
453
  - "./spec/resources/sample.txt"
451
454
  - "./spec/spec_helper.rb"
452
455
  - "./spec/support/configurer_integration.rb"
456
+ - "./spec/support/html_helpers.rb"
453
457
  - "./spec/support/http_stub/empty_configurer.rb"
454
458
  - "./spec/support/http_stub/scenario_fixture.rb"
455
459
  - "./spec/support/http_stub/server/request_fixture.rb"
@@ -523,6 +527,7 @@ test_files:
523
527
  - "./spec/lib/http_stub/rake/server_daemon_tasks_smoke_spec.rb"
524
528
  - "./spec/lib/http_stub/rake/server_tasks_smoke_spec.rb"
525
529
  - "./spec/lib/http_stub/rake/server_tasks_spec.rb"
530
+ - "./spec/lib/http_stub/server/application_helpers_spec.rb"
526
531
  - "./spec/lib/http_stub/server/application_integration_spec.rb"
527
532
  - "./spec/lib/http_stub/server/application_spec.rb"
528
533
  - "./spec/lib/http_stub/server/daemon_integration_spec.rb"
@@ -571,6 +576,7 @@ test_files:
571
576
  - "./spec/resources/sample.txt"
572
577
  - "./spec/spec_helper.rb"
573
578
  - "./spec/support/configurer_integration.rb"
579
+ - "./spec/support/html_helpers.rb"
574
580
  - "./spec/support/http_stub/empty_configurer.rb"
575
581
  - "./spec/support/http_stub/scenario_fixture.rb"
576
582
  - "./spec/support/http_stub/server/request_fixture.rb"