webmachine 1.3.1 → 1.4.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +1 -1
- data/documentation/adapters.md +6 -4
- data/lib/webmachine/adapters/rack.rb +24 -5
- data/lib/webmachine/adapters/rack_mapped.rb +42 -0
- data/lib/webmachine/dispatcher/route.rb +3 -5
- data/lib/webmachine/request.rb +8 -12
- data/lib/webmachine/version.rb +1 -1
- data/spec/webmachine/adapters/rack_mapped_spec.rb +71 -0
- data/spec/webmachine/dispatcher/route_spec.rb +21 -7
- data/spec/webmachine/request_spec.rb +38 -7
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 76f443d8e22ccb13b371b7aedfd2d02204653d89
|
4
|
+
data.tar.gz: d2b04ca2adc316e74903f02696bd55ae6bc1a900
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea9cdbfdf582062d7c5eea818816482f99bb75e915625b62263b62936c79b5126c5f046cab13bc72524caf97c1e0cf031551e445b0f10d9d0b0714377e556e7f
|
7
|
+
data.tar.gz: 26575bcdc2c324d42c2af0cb1029654a4c4c92003a17738c12036f55908c97d94f8a461e79f24df3700040c480937568a03f55f9c2c21c1dd40ca1fae2cc980a
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
### HEAD
|
2
2
|
|
3
|
+
### 1.4.0 March 20, 2015
|
4
|
+
|
5
|
+
* Added RackMapped adapter which allows Webmachine apps to be mounted
|
6
|
+
at a non-root path using Rack::Map.
|
7
|
+
Thanks to [Julian Doherty](https://github.com/madlep) for writing this.
|
8
|
+
|
3
9
|
### 1.3.1 January 15, 2015
|
4
10
|
|
5
11
|
* Fixed URI construction, including handling IPv6 addresses, when the
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# webmachine for Ruby [](https://travis-ci.org/seancribbs/webmachine-ruby)
|
2
2
|
|
3
3
|
webmachine-ruby is a port of
|
4
4
|
[Webmachine](https://github.com/basho/webmachine), which is written in
|
data/documentation/adapters.md
CHANGED
@@ -10,14 +10,16 @@ run on any webserver that provides a Rack interface. It also lets it run on
|
|
10
10
|
In order to be compatible with popular deployment stacks,
|
11
11
|
Webmachine has a [Rack](https://github.com/rack/rack) adapter (thanks to Jamis Buck).
|
12
12
|
|
13
|
-
Webmachine can be used with Rack middlware features such as Rack::Map and Rack::Cascade as long as
|
14
|
-
|
15
|
-
1. The Webmachine app is mounted at the root directory.
|
16
|
-
2. Any requests/responses that are handled by the Webmachine app are not modified by the middleware. The behaviours that are encapsulated in Webmachine assume that no modifications
|
13
|
+
Webmachine can be used with Rack middlware features such as Rack::Map and Rack::Cascade as long as any requests/responses that are handled by the Webmachine app are **not** modified by the middleware. The behaviours that are encapsulated in Webmachine assume that no modifications
|
17
14
|
are done to requests or response outside of Webmachine.
|
18
15
|
|
19
16
|
Keep in mind that Webmachine already supports many things that Rack middleware is used for with other HTTP frameworks (eg. etags, specifying supported/preferred Accept and Content-Types).
|
20
17
|
|
18
|
+
The base `Webmachine::Adapters::Rack` class assumes the Webmachine application
|
19
|
+
is mounted at the route path `/` (i.e. not using `Rack::Builder#map` or Rails
|
20
|
+
`ActionDispatch::Routing::Mapper::Base#mount`). In order to
|
21
|
+
map to a subpath, use the `Webmachine::Adapters::RackMapped` adapter instead.
|
22
|
+
|
21
23
|
For an example of using Webmachine with Rack middleware, see the [Pact Broker][middleware-example].
|
22
24
|
|
23
25
|
See the [Rack Adapter API docs][rack-adapter-api-docs] for more information.
|
@@ -12,9 +12,12 @@ module Webmachine
|
|
12
12
|
# A minimal "shim" adapter to allow Webmachine to interface with Rack. The
|
13
13
|
# intention here is to allow Webmachine to run under Rack-compatible
|
14
14
|
# web-servers, like unicorn and pow.
|
15
|
+
#
|
15
16
|
# The adapter expects your Webmachine application to be mounted at the root path -
|
16
17
|
# it will NOT allow you to nest your Webmachine application at an arbitrary path
|
17
18
|
# eg. map "/api" { run MyWebmachineAPI }
|
19
|
+
# To use map your Webmachine application at an arbitrary path, use the
|
20
|
+
# `Webmachine::Adapters::RackMapped` subclass instead.
|
18
21
|
#
|
19
22
|
# To use this adapter, create a config.ru file and populate it like so:
|
20
23
|
#
|
@@ -59,10 +62,7 @@ module Webmachine
|
|
59
62
|
headers = Webmachine::Headers.from_cgi(env)
|
60
63
|
|
61
64
|
rack_req = ::Rack::Request.new env
|
62
|
-
request =
|
63
|
-
rack_req.url,
|
64
|
-
headers,
|
65
|
-
RequestBody.new(rack_req))
|
65
|
+
request = build_webmachine_request(rack_req, headers)
|
66
66
|
|
67
67
|
response = Webmachine::Response.new
|
68
68
|
application.dispatcher.dispatch(request, response)
|
@@ -95,6 +95,26 @@ module Webmachine
|
|
95
95
|
rack_res.finish
|
96
96
|
end
|
97
97
|
|
98
|
+
protected
|
99
|
+
def routing_tokens(rack_req)
|
100
|
+
nil # no-op for default, un-mapped rack adapter
|
101
|
+
end
|
102
|
+
|
103
|
+
def base_uri(rack_req)
|
104
|
+
nil # no-op for default, un-mapped rack adapter
|
105
|
+
end
|
106
|
+
|
107
|
+
private
|
108
|
+
def build_webmachine_request(rack_req, headers)
|
109
|
+
Webmachine::Request.new(rack_req.request_method,
|
110
|
+
rack_req.url,
|
111
|
+
headers,
|
112
|
+
RequestBody.new(rack_req),
|
113
|
+
routing_tokens(rack_req),
|
114
|
+
base_uri(rack_req)
|
115
|
+
)
|
116
|
+
end
|
117
|
+
|
98
118
|
class RackResponse
|
99
119
|
ONE_FIVE = '1.5'.freeze
|
100
120
|
|
@@ -166,6 +186,5 @@ module Webmachine
|
|
166
186
|
end
|
167
187
|
end # class RequestBody
|
168
188
|
end # class Rack
|
169
|
-
|
170
189
|
end # module Adapters
|
171
190
|
end # module Webmachine
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'webmachine/adapters/rack'
|
2
|
+
|
3
|
+
module Webmachine
|
4
|
+
module Adapters
|
5
|
+
# Provides the same functionality as the parent Webmachine::Adapters::Rack
|
6
|
+
# adapter, but allows the Webmachine application to be hosted at an
|
7
|
+
# arbitrary path in a parent Rack application (as in Rack `map` or Rails
|
8
|
+
# routing `mount`)
|
9
|
+
#
|
10
|
+
# This functionality is separated out from the parent class to preserve
|
11
|
+
# backward compatibility in the behaviour of the parent Rack adpater.
|
12
|
+
#
|
13
|
+
# To use the adapter in a parent Rack application, map the Webmachine
|
14
|
+
# application as follows in a rackup file or Rack::Builder:
|
15
|
+
#
|
16
|
+
# map '/foo' do
|
17
|
+
# run SomeotherRackApp
|
18
|
+
#
|
19
|
+
# map '/bar' do
|
20
|
+
# run MyWebmachineApp.adapter
|
21
|
+
# end
|
22
|
+
# end
|
23
|
+
class RackMapped < Rack
|
24
|
+
|
25
|
+
protected
|
26
|
+
|
27
|
+
def routing_tokens(rack_req)
|
28
|
+
routing_match = rack_req.path_info.match(Webmachine::Request::ROUTING_PATH_MATCH)
|
29
|
+
routing_path = routing_match ? routing_match[1] : ""
|
30
|
+
routing_path.split(SLASH)
|
31
|
+
end
|
32
|
+
|
33
|
+
def base_uri(rack_req)
|
34
|
+
# rack SCRIPT_NAME env var doesn't end with "/". This causes weird
|
35
|
+
# behavour when URI.join concatenates URI components in
|
36
|
+
# Webmachine::Decision::Flow#n11
|
37
|
+
script_name = rack_req.script_name + SLASH
|
38
|
+
URI.join(rack_req.base_url, script_name)
|
39
|
+
end
|
40
|
+
end # class RackMapped
|
41
|
+
end # module Adapters
|
42
|
+
end # module Webmachine
|
@@ -79,13 +79,11 @@ module Webmachine
|
|
79
79
|
raise ArgumentError, t('not_resource_class', :class => resource.name) unless resource < Resource
|
80
80
|
end
|
81
81
|
|
82
|
-
PATH_MATCH = /^\/(.*)/.freeze
|
83
|
-
|
84
82
|
# Determines whether the given request matches this route and
|
85
83
|
# should be dispatched to the {#resource}.
|
86
84
|
# @param [Reqeust] request the request object
|
87
85
|
def match?(request)
|
88
|
-
tokens = request.
|
86
|
+
tokens = request.routing_tokens
|
89
87
|
bind(tokens, {}) && guards.all? { |guard| guard.call(request) }
|
90
88
|
end
|
91
89
|
|
@@ -93,9 +91,9 @@ module Webmachine
|
|
93
91
|
# route, including path bindings.
|
94
92
|
# @param [Request] request the request object
|
95
93
|
def apply(request)
|
96
|
-
request.disp_path = request.
|
94
|
+
request.disp_path = request.routing_tokens.join(SLASH)
|
97
95
|
request.path_info = @bindings.dup
|
98
|
-
tokens = request.
|
96
|
+
tokens = request.routing_tokens
|
99
97
|
depth, trailing = bind(tokens, request.path_info)
|
100
98
|
request.path_tokens = trailing || []
|
101
99
|
end
|
data/lib/webmachine/request.rb
CHANGED
@@ -8,10 +8,11 @@ module Webmachine
|
|
8
8
|
# should be instantiated by {Adapters} when a request is received
|
9
9
|
class Request
|
10
10
|
HTTP_HEADERS_MATCH = /^(?:[a-z0-9])+(?:_[a-z0-9]+)*$/i.freeze
|
11
|
+
ROUTING_PATH_MATCH = /^\/(.*)/.freeze
|
11
12
|
|
12
13
|
extend Forwardable
|
13
14
|
|
14
|
-
attr_reader :method, :uri, :headers, :body
|
15
|
+
attr_reader :method, :uri, :headers, :body, :routing_tokens, :base_uri
|
15
16
|
attr_accessor :disp_path, :path_info, :path_tokens
|
16
17
|
|
17
18
|
# @param [String] method the HTTP request method
|
@@ -20,9 +21,14 @@ module Webmachine
|
|
20
21
|
# @param [Headers] headers the HTTP request headers
|
21
22
|
# @param [String,#to_s,#each,nil] body the entity included in the
|
22
23
|
# request, if present
|
23
|
-
def initialize(method, uri, headers, body)
|
24
|
+
def initialize(method, uri, headers, body, routing_tokens=nil, base_uri=nil)
|
24
25
|
@method, @headers, @body = method, headers, body
|
25
26
|
@uri = build_uri(uri, headers)
|
27
|
+
@routing_tokens = routing_tokens || @uri.path.match(ROUTING_PATH_MATCH)[1].split(SLASH)
|
28
|
+
@base_uri = base_uri || @uri.dup.tap do |u|
|
29
|
+
u.path = SLASH
|
30
|
+
u.query = nil
|
31
|
+
end
|
26
32
|
end
|
27
33
|
|
28
34
|
def_delegators :headers, :[]
|
@@ -53,16 +59,6 @@ module Webmachine
|
|
53
59
|
!(body.nil? || body.empty?)
|
54
60
|
end
|
55
61
|
|
56
|
-
# The root URI for the request, ignoring path and query. This is
|
57
|
-
# useful for calculating relative paths to resources.
|
58
|
-
# @return [URI]
|
59
|
-
def base_uri
|
60
|
-
@base_uri ||= uri.dup.tap do |u|
|
61
|
-
u.path = SLASH
|
62
|
-
u.query = nil
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
62
|
# Returns a hash of query parameters (they come after the ? in the
|
67
63
|
# URI). Note that this does NOT work in the same way as Rails,
|
68
64
|
# i.e. it does not support nested arrays and hashes.
|
data/lib/webmachine/version.rb
CHANGED
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'webmachine/adapter'
|
2
|
+
require 'webmachine/adapters/rack_mapped'
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'webmachine/spec/adapter_lint'
|
5
|
+
require 'rack/test'
|
6
|
+
|
7
|
+
describe Webmachine::Adapters::RackMapped do
|
8
|
+
it_should_behave_like :adapter_lint do
|
9
|
+
it "should set Server header" do
|
10
|
+
response = client.request(Net::HTTP::Get.new("/test"))
|
11
|
+
expect(response["Server"]).to match(/Webmachine/)
|
12
|
+
expect(response["Server"]).to match(/Rack/)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe Webmachine::Adapters::RackMapped do
|
18
|
+
class CreateResource < Webmachine::Resource
|
19
|
+
def allowed_methods
|
20
|
+
["POST"]
|
21
|
+
end
|
22
|
+
|
23
|
+
def content_types_accepted
|
24
|
+
[["application/json", :from_json]]
|
25
|
+
end
|
26
|
+
|
27
|
+
def content_types_provided
|
28
|
+
[["application/json", :to_json]]
|
29
|
+
end
|
30
|
+
|
31
|
+
def post_is_create?
|
32
|
+
true
|
33
|
+
end
|
34
|
+
|
35
|
+
def create_path
|
36
|
+
"created_path_here/123"
|
37
|
+
end
|
38
|
+
|
39
|
+
def from_json
|
40
|
+
response.body = %{ {"foo": "bar"} }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
let(:app) do
|
45
|
+
Rack::Builder.new do
|
46
|
+
map '/some/route' do
|
47
|
+
run(Webmachine::Application.new do |app|
|
48
|
+
app.add_route(["test"], Test::Resource)
|
49
|
+
app.add_route(["create_test"], CreateResource)
|
50
|
+
app.configure do | config |
|
51
|
+
config.adapter = :RackMapped
|
52
|
+
end
|
53
|
+
end.adapter)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context "using Rack::Test" do
|
59
|
+
include Rack::Test::Methods
|
60
|
+
|
61
|
+
it "provides the full request URI" do
|
62
|
+
rack_response = get "some/route/test", nil, {"HTTP_ACCEPT" => "test/response.request_uri"}
|
63
|
+
expect(rack_response.body).to eq "http://example.org/some/route/test"
|
64
|
+
end
|
65
|
+
|
66
|
+
it "provides LOCATION header using custom base_uri when creating from POST request" do
|
67
|
+
rack_response = post "/some/route/create_test", %{{"foo": "bar"}}, {"HTTP_ACCEPT" => "application/json", "CONTENT_TYPE" => "application/json"}
|
68
|
+
expect(rack_response.headers["Location"]).to eq("http://example.org/some/route/created_path_here/123")
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -7,7 +7,8 @@ end
|
|
7
7
|
describe Webmachine::Dispatcher::Route do
|
8
8
|
let(:method) { "GET" }
|
9
9
|
let(:uri) { URI.parse("http://localhost:8080/") }
|
10
|
-
let(:
|
10
|
+
let(:routing_tokens) { nil }
|
11
|
+
let(:request){ Webmachine::Request.new(method, uri, Webmachine::Headers.new, "", routing_tokens) }
|
11
12
|
let(:resource){ Class.new(Webmachine::Resource) }
|
12
13
|
|
13
14
|
describe '#apply' do
|
@@ -16,9 +17,7 @@ describe Webmachine::Dispatcher::Route do
|
|
16
17
|
}
|
17
18
|
|
18
19
|
describe 'a path_info fragment' do
|
19
|
-
|
20
|
-
uri.path = '/hello/planet%20earth%20++'
|
21
|
-
end
|
20
|
+
let(:uri) { URI.parse("http://localhost:8080/hello/planet%20earth%20++") }
|
22
21
|
|
23
22
|
it 'should decode the value' do
|
24
23
|
route.apply(request)
|
@@ -30,8 +29,10 @@ describe Webmachine::Dispatcher::Route do
|
|
30
29
|
matcher :match_route do |*expected|
|
31
30
|
route = Webmachine::Dispatcher::Route.new(expected[0], Class.new(Webmachine::Resource), expected[1] || {})
|
32
31
|
match do |actual|
|
33
|
-
|
34
|
-
|
32
|
+
uri = URI.parse("http://localhost:8080")
|
33
|
+
uri.path = actual
|
34
|
+
req = Webmachine::Request.new("GET", uri, Webmachine::Headers.new, "", routing_tokens)
|
35
|
+
route.match?(req)
|
35
36
|
end
|
36
37
|
|
37
38
|
failure_message do |_|
|
@@ -124,6 +125,18 @@ describe Webmachine::Dispatcher::Route do
|
|
124
125
|
end
|
125
126
|
end
|
126
127
|
end
|
128
|
+
|
129
|
+
context "with a request with explicitly specified routing tokens" do
|
130
|
+
subject { "/some/route/foo/bar" }
|
131
|
+
let(:routing_tokens) { ["foo", "bar"] }
|
132
|
+
it { is_expected.to match_route(["foo", "bar"]) }
|
133
|
+
it { is_expected.to match_route(["foo", :id]) }
|
134
|
+
it { is_expected.to match_route ['*'] }
|
135
|
+
it { is_expected.to match_route [:*] }
|
136
|
+
it { is_expected.not_to match_route(["some", "route", "foo", "bar"]) }
|
137
|
+
it { is_expected.not_to match_route %w{foo} }
|
138
|
+
it { is_expected.not_to match_route [:id] }
|
139
|
+
end
|
127
140
|
end
|
128
141
|
|
129
142
|
context "applying bindings" do
|
@@ -170,7 +183,8 @@ describe Webmachine::Dispatcher::Route do
|
|
170
183
|
|
171
184
|
context "on a deep path" do
|
172
185
|
subject { described_class.new(%w{foo bar baz}, resource) }
|
173
|
-
|
186
|
+
let(:uri) { URI.parse("http://localhost:8080/foo/bar/baz") }
|
187
|
+
before { subject.apply(request) }
|
174
188
|
|
175
189
|
it "should assign the dispatched path as the path past the initial slash" do
|
176
190
|
expect(request.disp_path).to eq("foo/bar/baz")
|
@@ -3,11 +3,13 @@ require 'spec_helper'
|
|
3
3
|
describe Webmachine::Request do
|
4
4
|
subject { request }
|
5
5
|
|
6
|
-
let(:uri)
|
7
|
-
let(:http_method)
|
8
|
-
let(:headers)
|
9
|
-
let(:body)
|
10
|
-
let(:
|
6
|
+
let(:uri) { URI.parse("http://localhost:8080/some/resource") }
|
7
|
+
let(:http_method) { "GET" }
|
8
|
+
let(:headers) { Webmachine::Headers.new }
|
9
|
+
let(:body) { "" }
|
10
|
+
let(:routing_tokens) { nil }
|
11
|
+
let(:base_uri) { nil }
|
12
|
+
let(:request) { Webmachine::Request.new(http_method, uri, headers, body, routing_tokens, base_uri) }
|
11
13
|
|
12
14
|
it "should provide access to the headers via brackets" do
|
13
15
|
subject.headers['Accept'] = "*/*"
|
@@ -30,8 +32,17 @@ describe Webmachine::Request do
|
|
30
32
|
expect(subject.content_md5).to be_nil
|
31
33
|
end
|
32
34
|
|
33
|
-
|
34
|
-
|
35
|
+
context "base_uri" do
|
36
|
+
it "should calculate a base URI" do
|
37
|
+
expect(subject.base_uri).to eq(URI.parse("http://localhost:8080/"))
|
38
|
+
end
|
39
|
+
|
40
|
+
context "when base_uri has been explicitly set" do
|
41
|
+
let(:base_uri) { URI.parse("http://localhost:8080/some_base_uri/here") }
|
42
|
+
it "should use the provided base_uri" do
|
43
|
+
expect(subject.base_uri).to eq(URI.parse("http://localhost:8080/some_base_uri/here"))
|
44
|
+
end
|
45
|
+
end
|
35
46
|
end
|
36
47
|
|
37
48
|
it "should provide a hash of query parameters" do
|
@@ -239,4 +250,24 @@ describe Webmachine::Request do
|
|
239
250
|
end
|
240
251
|
end
|
241
252
|
|
253
|
+
describe '#routing_tokens' do
|
254
|
+
subject { request.routing_tokens }
|
255
|
+
|
256
|
+
context "haven't been explicitly set" do
|
257
|
+
let(:routing_tokens) { nil }
|
258
|
+
it "extracts the routing tokens from the path portion of the uri" do
|
259
|
+
expect(subject).to eq(["some", "resource"])
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
context "have been explicitly set" do
|
264
|
+
let(:routing_tokens) { ["foo", "bar"] }
|
265
|
+
|
266
|
+
it "uses the specified routing_tokens" do
|
267
|
+
expect(subject).to eq(["foo", "bar"])
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
end
|
272
|
+
|
242
273
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webmachine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Cribbs
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: i18n
|
@@ -89,6 +89,7 @@ files:
|
|
89
89
|
- lib/webmachine/adapters/httpkit.rb
|
90
90
|
- lib/webmachine/adapters/lazy_request_body.rb
|
91
91
|
- lib/webmachine/adapters/rack.rb
|
92
|
+
- lib/webmachine/adapters/rack_mapped.rb
|
92
93
|
- lib/webmachine/adapters/reel.rb
|
93
94
|
- lib/webmachine/adapters/webrick.rb
|
94
95
|
- lib/webmachine/application.rb
|
@@ -147,6 +148,7 @@ files:
|
|
147
148
|
- spec/spec_helper.rb
|
148
149
|
- spec/webmachine/adapter_spec.rb
|
149
150
|
- spec/webmachine/adapters/httpkit_spec.rb
|
151
|
+
- spec/webmachine/adapters/rack_mapped_spec.rb
|
150
152
|
- spec/webmachine/adapters/rack_spec.rb
|
151
153
|
- spec/webmachine/adapters/reel_spec.rb
|
152
154
|
- spec/webmachine/adapters/webrick_spec.rb
|
@@ -202,6 +204,7 @@ test_files:
|
|
202
204
|
- spec/spec_helper.rb
|
203
205
|
- spec/webmachine/adapter_spec.rb
|
204
206
|
- spec/webmachine/adapters/httpkit_spec.rb
|
207
|
+
- spec/webmachine/adapters/rack_mapped_spec.rb
|
205
208
|
- spec/webmachine/adapters/rack_spec.rb
|
206
209
|
- spec/webmachine/adapters/reel_spec.rb
|
207
210
|
- spec/webmachine/adapters/webrick_spec.rb
|