sham_rack 1.3.5 → 1.3.6
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 +8 -8
- data/README.markdown +2 -2
- data/Rakefile +1 -1
- data/lib/sham_rack.rb +2 -2
- data/lib/sham_rack/net_http.rb +0 -1
- data/lib/sham_rack/patron.rb +1 -1
- data/lib/sham_rack/registration.rb +82 -0
- data/lib/sham_rack/version.rb +1 -1
- data/spec/sham_rack_spec.rb +55 -10
- data/spec/spec_helper.rb +1 -1
- metadata +3 -3
- data/lib/sham_rack/registry.rb +0 -71
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZmU4NWE2MGVhYjA0ZDE5ODM1NjJiYTlhMzE1MTg5MjMyMTQ4YmExNg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZmEwZDliNjk4MzIxNjdkYWNlZTQzY2ZhOWU2ZDdjMzg1NmZiODk4Yw==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NDI2MTVkYzU3OWI2YTgwYzFkMWEzYzg0NWJlOTM3YzU4NjhmYzk0Mzc1NTUy
|
10
|
+
ZGNhMTY2OGQ1ODA2ODExY2U3OTE3M2VjZjI3MjE0ZjllZDQ5YTE4OGQyNDY3
|
11
|
+
YTEwZTM1OWRjZGZiZjMyM2U2NmVkYjFmN2I2NTA4NzNlNTUxOTc=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZmEyODY4YTVlNGRkNTNmMjE4ODNhZjlhNDUwODU0MjI3ZDFmZGYyYTcwNGJk
|
14
|
+
M2I2NTk0OGU1MDA2NTJiYWUyODczZGZjYTQ2ZjY2YjRmOGYwZDMzZmM4OTU1
|
15
|
+
MDljNjA2OTQ5NWFmNzQxMzAzZWYzZWEzZGZhZDMwZDA1NGI2ZGY=
|
data/README.markdown
CHANGED
data/Rakefile
CHANGED
data/lib/sham_rack.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require "sham_rack/net_http"
|
2
|
-
require "sham_rack/
|
2
|
+
require "sham_rack/registration"
|
3
3
|
require "sham_rack/version"
|
4
4
|
|
5
5
|
# ShamRack allows access to Rack applications using Net::Http, but without network traffic.
|
@@ -7,5 +7,5 @@ require "sham_rack/version"
|
|
7
7
|
# For more detail, see http://github.com/mdub/sham_rack
|
8
8
|
#
|
9
9
|
module ShamRack
|
10
|
-
extend ShamRack::
|
10
|
+
extend ShamRack::Registration
|
11
11
|
end
|
data/lib/sham_rack/net_http.rb
CHANGED
data/lib/sham_rack/patron.rb
CHANGED
@@ -0,0 +1,82 @@
|
|
1
|
+
module ShamRack
|
2
|
+
|
3
|
+
module Registration
|
4
|
+
|
5
|
+
ADDRESS_PATTERN = /^[a-z0-9-]+(\.[a-z0-9-]+)*$/i
|
6
|
+
|
7
|
+
def unmount_all
|
8
|
+
registry.clear
|
9
|
+
end
|
10
|
+
|
11
|
+
def at(address, port = nil, &app_block)
|
12
|
+
mount_point = mount_point_for(address, port)
|
13
|
+
if app_block
|
14
|
+
mount_point.mount(app_block)
|
15
|
+
else
|
16
|
+
mount_point
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def application_for(address, port = nil)
|
21
|
+
mount_point_for(address, port).app
|
22
|
+
end
|
23
|
+
|
24
|
+
def mount(app, address, port = nil)
|
25
|
+
at(address, port).mount(app)
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def mount_point_for(address, port)
|
31
|
+
registry[mount_key(address, port)]
|
32
|
+
end
|
33
|
+
|
34
|
+
def registry
|
35
|
+
@registry ||= Hash.new do |hash, key|
|
36
|
+
hash[key] = MountPoint.new
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def mount_key(address, port)
|
41
|
+
unless address =~ ADDRESS_PATTERN
|
42
|
+
raise ArgumentError, "invalid address"
|
43
|
+
end
|
44
|
+
port ||= Net::HTTP.default_port
|
45
|
+
port = Integer(port)
|
46
|
+
[address, port]
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
class MountPoint
|
52
|
+
|
53
|
+
attr_reader :app
|
54
|
+
|
55
|
+
def mount(app)
|
56
|
+
@app = app
|
57
|
+
end
|
58
|
+
|
59
|
+
def unmount
|
60
|
+
@app = nil
|
61
|
+
end
|
62
|
+
|
63
|
+
def rackup(&block)
|
64
|
+
require "rack"
|
65
|
+
mount(Rack::Builder.new(&block).to_app)
|
66
|
+
end
|
67
|
+
|
68
|
+
def sinatra(&block)
|
69
|
+
require "sinatra/base"
|
70
|
+
sinatra_app = Class.new(Sinatra::Base)
|
71
|
+
sinatra_app.class_eval(&block)
|
72
|
+
mount(sinatra_app.new)
|
73
|
+
end
|
74
|
+
|
75
|
+
def stub
|
76
|
+
require "sham_rack/stub_web_service"
|
77
|
+
mount(StubWebService.new)
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
data/lib/sham_rack/version.rb
CHANGED
data/spec/sham_rack_spec.rb
CHANGED
@@ -9,6 +9,16 @@ require "rack"
|
|
9
9
|
|
10
10
|
describe ShamRack do
|
11
11
|
|
12
|
+
class NetHttpProhibited < StandardError; end
|
13
|
+
|
14
|
+
before do
|
15
|
+
any_instance_of(Net::HTTP) do |http|
|
16
|
+
stub(http).start do
|
17
|
+
raise NetHttpProhibited, "real network calls are not allowed"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
12
22
|
after(:each) do
|
13
23
|
ShamRack.unmount_all
|
14
24
|
end
|
@@ -56,31 +66,54 @@ describe ShamRack do
|
|
56
66
|
|
57
67
|
end
|
58
68
|
|
59
|
-
describe ".
|
69
|
+
describe ".at" do
|
70
|
+
|
71
|
+
context "with a block" do
|
72
|
+
|
73
|
+
it "mounts associated block as an app" do
|
74
|
+
|
75
|
+
ShamRack.at("simple.xyz") do |env|
|
76
|
+
["200 OK", { "Content-type" => "text/plain" }, ["Easy, huh?"]]
|
77
|
+
end
|
78
|
+
|
79
|
+
open("http://simple.xyz").read.should == "Easy, huh?"
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
60
84
|
|
61
85
|
context "with a URL" do
|
62
86
|
|
63
87
|
it "raises an ArgumentError" do
|
64
88
|
lambda do
|
65
|
-
ShamRack.
|
89
|
+
ShamRack.at("http://www.greetings.com")
|
66
90
|
end.should raise_error(ArgumentError, "invalid address")
|
67
91
|
end
|
68
92
|
|
69
93
|
end
|
70
94
|
|
71
|
-
|
95
|
+
describe "#mount" do
|
72
96
|
|
73
|
-
|
97
|
+
it "mounts an app" do
|
74
98
|
|
75
|
-
|
99
|
+
ShamRack.at("hello.xyz").mount(GreetingApp.new)
|
76
100
|
|
77
|
-
|
101
|
+
open("http://hello.xyz").read.should == "Hello, world"
|
78
102
|
|
79
|
-
|
80
|
-
["200 OK", { "Content-type" => "text/plain" }, ["Easy, huh?"]]
|
81
|
-
end
|
103
|
+
end
|
82
104
|
|
83
|
-
|
105
|
+
end
|
106
|
+
|
107
|
+
describe "#unmount" do
|
108
|
+
|
109
|
+
it "deregisters a mounted app" do
|
110
|
+
|
111
|
+
ShamRack.at("gone.xyz").mount(GreetingApp.new)
|
112
|
+
ShamRack.at("gone.xyz").unmount
|
113
|
+
|
114
|
+
lambda do
|
115
|
+
open("http://gone.xyz").read
|
116
|
+
end.should raise_error(NetHttpProhibited)
|
84
117
|
|
85
118
|
end
|
86
119
|
|
@@ -143,6 +176,18 @@ describe ShamRack do
|
|
143
176
|
|
144
177
|
end
|
145
178
|
|
179
|
+
describe ".mount" do
|
180
|
+
|
181
|
+
it "is deprecated, but still works" do
|
182
|
+
|
183
|
+
ShamRack.mount(GreetingApp.new, "hello.xyz")
|
184
|
+
|
185
|
+
open("http://hello.xyz").read.should == "Hello, world"
|
186
|
+
|
187
|
+
end
|
188
|
+
|
189
|
+
end
|
190
|
+
|
146
191
|
describe "response" do
|
147
192
|
|
148
193
|
before(:each) do
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sham_rack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Williams
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-04-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
prerelease: false
|
@@ -33,7 +33,7 @@ extra_rdoc_files: []
|
|
33
33
|
files:
|
34
34
|
- lib/sham_rack/net_http.rb
|
35
35
|
- lib/sham_rack/patron.rb
|
36
|
-
- lib/sham_rack/
|
36
|
+
- lib/sham_rack/registration.rb
|
37
37
|
- lib/sham_rack/stub_web_service.rb
|
38
38
|
- lib/sham_rack/version.rb
|
39
39
|
- lib/sham_rack.rb
|
data/lib/sham_rack/registry.rb
DELETED
@@ -1,71 +0,0 @@
|
|
1
|
-
module ShamRack
|
2
|
-
|
3
|
-
module Registry
|
4
|
-
|
5
|
-
ADDRESS_PATTERN = /^[a-z0-9-]+(\.[a-z0-9-]+)*$/i
|
6
|
-
|
7
|
-
def mount(rack_app, address, port = nil)
|
8
|
-
unless address =~ ADDRESS_PATTERN
|
9
|
-
raise ArgumentError, "invalid address"
|
10
|
-
end
|
11
|
-
if port.nil?
|
12
|
-
port = Net::HTTP.default_port
|
13
|
-
else
|
14
|
-
port = Integer(port)
|
15
|
-
end
|
16
|
-
registry[[address, port]] = rack_app
|
17
|
-
end
|
18
|
-
|
19
|
-
def unmount_all
|
20
|
-
registry.clear
|
21
|
-
end
|
22
|
-
|
23
|
-
def at(address, port = nil, &block)
|
24
|
-
if block
|
25
|
-
mount(block, address, port)
|
26
|
-
else
|
27
|
-
Registrar.new(address, port)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def application_for(address, port = nil)
|
32
|
-
port ||= Net::HTTP.default_port
|
33
|
-
registry[[address, port]]
|
34
|
-
end
|
35
|
-
|
36
|
-
private
|
37
|
-
|
38
|
-
def registry
|
39
|
-
@registry ||= {}
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
|
44
|
-
class Registrar
|
45
|
-
|
46
|
-
def initialize(address, port = nil)
|
47
|
-
@address = address
|
48
|
-
@port = port
|
49
|
-
end
|
50
|
-
|
51
|
-
def rackup(&block)
|
52
|
-
require "rack"
|
53
|
-
app = Rack::Builder.new(&block).to_app
|
54
|
-
ShamRack.mount(app, @address, @port)
|
55
|
-
end
|
56
|
-
|
57
|
-
def sinatra(&block)
|
58
|
-
require "sinatra/base"
|
59
|
-
sinatra_app = Class.new(Sinatra::Base)
|
60
|
-
sinatra_app.class_eval(&block)
|
61
|
-
ShamRack.mount(sinatra_app.new, @address, @port)
|
62
|
-
end
|
63
|
-
|
64
|
-
def stub
|
65
|
-
require "sham_rack/stub_web_service"
|
66
|
-
ShamRack.mount(StubWebService.new, @address, @port)
|
67
|
-
end
|
68
|
-
|
69
|
-
end
|
70
|
-
|
71
|
-
end
|