sham_rack 1.3.6 → 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 CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ZmU4NWE2MGVhYjA0ZDE5ODM1NjJiYTlhMzE1MTg5MjMyMTQ4YmExNg==
5
- data.tar.gz: !binary |-
6
- ZmEwZDliNjk4MzIxNjdkYWNlZTQzY2ZhOWU2ZDdjMzg1NmZiODk4Yw==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- NDI2MTVkYzU3OWI2YTgwYzFkMWEzYzg0NWJlOTM3YzU4NjhmYzk0Mzc1NTUy
10
- ZGNhMTY2OGQ1ODA2ODExY2U3OTE3M2VjZjI3MjE0ZjllZDQ5YTE4OGQyNDY3
11
- YTEwZTM1OWRjZGZiZjMyM2U2NmVkYjFmN2I2NTA4NzNlNTUxOTc=
12
- data.tar.gz: !binary |-
13
- ZmEyODY4YTVlNGRkNTNmMjE4ODNhZjlhNDUwODU0MjI3ZDFmZGYyYTcwNGJk
14
- M2I2NTk0OGU1MDA2NTJiYWUyODczZGZjYTQ2ZjY2YjRmOGYwZDMzZmM4OTU1
15
- MDljNjA2OTQ5NWFmNzQxMzAzZWYzZWEzZGZhZDMwZDA1NGI2ZGY=
2
+ SHA1:
3
+ metadata.gz: 887447b8de1ec4acf1dec895fc3f51634cedc2d7
4
+ data.tar.gz: ad8bbd8c761fc122986386bba9907fef7273762e
5
+ SHA512:
6
+ metadata.gz: 4a4bfe421be365279abdb1a5436b04fa08de0c93ca0a524d57767a5fd1fd7f8236b03815f15578c94eb14812de73b93830f4c8d0aad05da2fa08dab2a5112ab8
7
+ data.tar.gz: 56abd422fc06f9ce5eff13bef96b230883ec49c97ec33bff4bb5aa2847f545e6ac6864d04dce3b8884e911e2f7372aa29cd2d3373258b76df69995c6345d6652
data/Rakefile CHANGED
@@ -6,7 +6,7 @@ task "default" => "spec"
6
6
  require "rspec/core/rake_task"
7
7
 
8
8
  RSpec::Core::RakeTask.new do |t|
9
- t.rspec_opts = ["--format", "nested"]
9
+ t.rspec_opts = ["--format", "doc"]
10
10
  end
11
11
 
12
12
  require 'bundler'
@@ -7,5 +7,12 @@ require "sham_rack/version"
7
7
  # For more detail, see http://github.com/mdub/sham_rack
8
8
  #
9
9
  module ShamRack
10
+
10
11
  extend ShamRack::Registration
12
+
13
+ def self.reset
14
+ unmount_all
15
+ allow_network_connections
16
+ end
17
+
11
18
  end
@@ -0,0 +1,24 @@
1
+ module ShamRack
2
+
3
+ class << self
4
+
5
+ def network_connections_allowed?
6
+ @allow_network_connections
7
+ end
8
+
9
+ def allow_network_connections
10
+ @allow_network_connections = true
11
+ end
12
+
13
+ def prevent_network_connections
14
+ @allow_network_connections = false
15
+ end
16
+
17
+ end
18
+
19
+ class NetworkConnectionPrevented < StandardError
20
+ end
21
+
22
+ end
23
+
24
+ ShamRack.allow_network_connections
@@ -1,3 +1,5 @@
1
+ require "sham_rack/allowances"
2
+
1
3
  module ShamRack
2
4
 
3
5
  module Registration
@@ -18,11 +20,13 @@ module ShamRack
18
20
  end
19
21
 
20
22
  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)
23
+ port ||= Net::HTTP.default_port
24
+ mount_point_for(address, port).app.tap do |app|
25
+ return app unless app.nil?
26
+ unless ShamRack.network_connections_allowed?
27
+ raise NetworkConnectionPrevented, "connection to #{address}:#{port} not allowed"
28
+ end
29
+ end
26
30
  end
27
31
 
28
32
  private
@@ -1,3 +1,3 @@
1
1
  module ShamRack
2
- VERSION = "1.3.6"
2
+ VERSION = "1.4.0"
3
3
  end
@@ -3,7 +3,7 @@ require "spec_helper"
3
3
  require "sham_rack/stub_web_service"
4
4
  require "rack/test"
5
5
 
6
- describe ShamRack::StubWebService do
6
+ RSpec.describe ShamRack::StubWebService do
7
7
 
8
8
  include Rack::Test::Methods
9
9
 
@@ -14,14 +14,14 @@ describe ShamRack::StubWebService do
14
14
  end
15
15
 
16
16
  describe "#last_request" do
17
-
17
+
18
18
  it "returns the last request" do
19
19
  get '/foo/bar'
20
- @app.last_request.path_info.should == "/foo/bar"
20
+ expect(@app.last_request.path_info).to eq("/foo/bar")
21
21
  end
22
-
22
+
23
23
  end
24
-
24
+
25
25
  describe "with no handlers registered" do
26
26
 
27
27
  describe "any request" do
@@ -31,7 +31,7 @@ describe ShamRack::StubWebService do
31
31
  end
32
32
 
33
33
  it "returns a 404" do
34
- last_response.status.should == 404
34
+ expect(last_response.status).to eq(404)
35
35
  end
36
36
 
37
37
  end
@@ -39,9 +39,9 @@ describe ShamRack::StubWebService do
39
39
  end
40
40
 
41
41
  describe "with two handlers registered" do
42
-
42
+
43
43
  before(:each) do
44
-
44
+
45
45
  @app.handle do |request|
46
46
  [200, {}, ["response from first handler"]] if request.get?
47
47
  end
@@ -49,9 +49,9 @@ describe ShamRack::StubWebService do
49
49
  @app.handle do |request|
50
50
  [200, {}, ["response from second handler"]] if request.path_info == "/stuff"
51
51
  end
52
-
52
+
53
53
  end
54
-
54
+
55
55
  describe "a request matching the first handler" do
56
56
 
57
57
  before do
@@ -59,11 +59,11 @@ describe ShamRack::StubWebService do
59
59
  end
60
60
 
61
61
  it "receives a response from the first handler" do
62
- last_response.body.should == "response from first handler"
62
+ expect(last_response.body).to eq("response from first handler")
63
63
  end
64
-
64
+
65
65
  end
66
-
66
+
67
67
  describe "a request matching the second handler" do
68
68
 
69
69
  before do
@@ -71,11 +71,11 @@ describe ShamRack::StubWebService do
71
71
  end
72
72
 
73
73
  it "receives a response from the second handler" do
74
- last_response.body.should == "response from second handler"
74
+ expect(last_response.body).to eq("response from second handler")
75
75
  end
76
-
76
+
77
77
  end
78
-
78
+
79
79
  describe "a request matching both handlers" do
80
80
 
81
81
  before do
@@ -83,11 +83,11 @@ describe ShamRack::StubWebService do
83
83
  end
84
84
 
85
85
  it "receives a response from the second handler" do
86
- last_response.body.should == "response from second handler"
86
+ expect(last_response.body).to eq("response from second handler")
87
87
  end
88
-
88
+
89
89
  end
90
-
90
+
91
91
  end
92
92
 
93
93
  describe ".register_resource" do
@@ -96,17 +96,17 @@ describe ShamRack::StubWebService do
96
96
  @app.register_resource("/stuff?foo=bar", "STUFF", "text/plain", 202)
97
97
  get "/stuff?foo=bar"
98
98
  end
99
-
99
+
100
100
  it "sets body" do
101
- last_response.body.should == "STUFF"
101
+ expect(last_response.body).to eq("STUFF")
102
102
  end
103
103
 
104
104
  it "sets content-type" do
105
- last_response.content_type.should == "text/plain"
105
+ expect(last_response.content_type).to eq("text/plain")
106
106
  end
107
-
107
+
108
108
  it "sets status code" do
109
- last_response.status.should == 202
109
+ expect(last_response.status).to eq(202)
110
110
  end
111
111
 
112
112
  end
@@ -7,61 +7,59 @@ require "restclient"
7
7
  require "mechanize"
8
8
  require "rack"
9
9
 
10
- describe ShamRack do
10
+ RSpec.describe ShamRack do
11
11
 
12
12
  class NetHttpProhibited < StandardError; end
13
13
 
14
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
15
+ allow_any_instance_of(Net::HTTP).to receive(:start) do
16
+ raise NetHttpProhibited, "real network calls are not allowed"
19
17
  end
20
18
  end
21
19
 
22
20
  after(:each) do
23
- ShamRack.unmount_all
21
+ ShamRack.reset
24
22
  end
25
23
 
26
24
  describe "mounted Rack application" do
27
25
 
28
26
  before(:each) do
29
- ShamRack.mount(GreetingApp.new, "www.greetings.com")
27
+ ShamRack.at("www.greetings.com").mount(GreetingApp.new)
30
28
  end
31
29
 
32
30
  it "can be accessed using Net::HTTP" do
33
31
  response = Net::HTTP.start("www.greetings.com") do |http|
34
32
  http.request(Net::HTTP::Get.new("/"))
35
33
  end
36
- response.body.should == "Hello, world"
34
+ expect(response.body).to eq("Hello, world")
37
35
  end
38
36
 
39
37
  it "can be accessed using Net::HTTP#get_response" do
40
38
  response = Net::HTTP.get_response(URI.parse("http://www.greetings.com/"))
41
- response.body.should == "Hello, world"
39
+ expect(response.body).to eq("Hello, world")
42
40
  end
43
41
 
44
42
  it "can be accessed using open-uri" do
45
43
  response = open("http://www.greetings.com")
46
- response.status.should == ["200", "OK"]
47
- response.read.should == "Hello, world"
44
+ expect(response.status).to eq(["200", "OK"])
45
+ expect(response.read).to eq("Hello, world")
48
46
  end
49
47
 
50
48
  it "can be accessed using RestClient" do
51
49
  response = RestClient.get("http://www.greetings.com")
52
- response.code.should == 200
53
- response.to_s.should == "Hello, world"
50
+ expect(response.code).to eq(200)
51
+ expect(response.to_s).to eq("Hello, world")
54
52
  end
55
53
 
56
54
  it "can be accessed using Mechanize" do
57
55
  response = Mechanize.new.get("http://www.greetings.com")
58
- response.body.should == "Hello, world"
56
+ expect(response.body).to eq("Hello, world")
59
57
  end
60
58
 
61
59
  it "can be accessed using Patron" do
62
60
  patron = Patron::Session.new
63
61
  response = patron.get("http://www.greetings.com/foo/bar")
64
- response.body.should == "Hello, world"
62
+ expect(response.body).to eq("Hello, world")
65
63
  end
66
64
 
67
65
  end
@@ -76,7 +74,7 @@ describe ShamRack do
76
74
  ["200 OK", { "Content-type" => "text/plain" }, ["Easy, huh?"]]
77
75
  end
78
76
 
79
- open("http://simple.xyz").read.should == "Easy, huh?"
77
+ expect(open("http://simple.xyz").read).to eq("Easy, huh?")
80
78
 
81
79
  end
82
80
 
@@ -85,9 +83,9 @@ describe ShamRack do
85
83
  context "with a URL" do
86
84
 
87
85
  it "raises an ArgumentError" do
88
- lambda do
86
+ expect do
89
87
  ShamRack.at("http://www.greetings.com")
90
- end.should raise_error(ArgumentError, "invalid address")
88
+ end.to raise_error(ArgumentError, "invalid address")
91
89
  end
92
90
 
93
91
  end
@@ -98,7 +96,7 @@ describe ShamRack do
98
96
 
99
97
  ShamRack.at("hello.xyz").mount(GreetingApp.new)
100
98
 
101
- open("http://hello.xyz").read.should == "Hello, world"
99
+ expect(open("http://hello.xyz").read).to eq("Hello, world")
102
100
 
103
101
  end
104
102
 
@@ -111,9 +109,9 @@ describe ShamRack do
111
109
  ShamRack.at("gone.xyz").mount(GreetingApp.new)
112
110
  ShamRack.at("gone.xyz").unmount
113
111
 
114
- lambda do
112
+ expect do
115
113
  open("http://gone.xyz").read
116
- end.should raise_error(NetHttpProhibited)
114
+ end.to raise_error(NetHttpProhibited)
117
115
 
118
116
  end
119
117
 
@@ -129,11 +127,11 @@ describe ShamRack do
129
127
  end
130
128
 
131
129
  it "mounts an app created using Rack::Builder" do
132
- open("http://rackup.xyz").read.should == "HELLO, WORLD"
130
+ expect(open("http://rackup.xyz").read).to eq("HELLO, WORLD")
133
131
  end
134
132
 
135
133
  it "returns the app" do
136
- @return_value.should respond_to(:call)
134
+ expect(@return_value).to respond_to(:call)
137
135
  end
138
136
 
139
137
  end
@@ -149,11 +147,11 @@ describe ShamRack do
149
147
  end
150
148
 
151
149
  it "mounts associated block as a Sinatra app" do
152
- open("http://sinatra.xyz/hello/stranger").read.should == "Hello, stranger"
150
+ expect(open("http://sinatra.xyz/hello/stranger").read).to eq("Hello, stranger")
153
151
  end
154
152
 
155
153
  it "returns the app" do
156
- @return_value.should respond_to(:call)
154
+ expect(@return_value).to respond_to(:call)
157
155
  end
158
156
 
159
157
  end
@@ -165,29 +163,17 @@ describe ShamRack do
165
163
  end
166
164
 
167
165
  it "mounts a StubWebService" do
168
- ShamRack.application_for("stubbed.xyz").should be_kind_of(ShamRack::StubWebService)
166
+ expect(ShamRack.application_for("stubbed.xyz")).to be_kind_of(ShamRack::StubWebService)
169
167
  end
170
168
 
171
169
  it "returns the StubWebService" do
172
- @return_value.should == ShamRack.application_for("stubbed.xyz")
170
+ expect(@return_value).to eq(ShamRack.application_for("stubbed.xyz"))
173
171
  end
174
172
 
175
173
  end
176
174
 
177
175
  end
178
176
 
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
-
191
177
  describe "response" do
192
178
 
193
179
  before(:each) do
@@ -203,23 +189,23 @@ describe ShamRack do
203
189
  let(:response) { Net::HTTP.get_response(URI.parse("http://www.greetings.com/")) }
204
190
 
205
191
  it "has status returned by app" do
206
- response.code.should == "456"
192
+ expect(response.code).to eq("456")
207
193
  end
208
194
 
209
195
  it "has status message returned by app" do
210
- response.message.should == "Foo Bar"
196
+ expect(response.message).to eq("Foo Bar")
211
197
  end
212
198
 
213
199
  it "has body returned by app" do
214
- response.body.should == "BODY"
200
+ expect(response.body).to eq("BODY")
215
201
  end
216
202
 
217
203
  it "has Content-Type returned by app" do
218
- response.content_type.should == "text/plain"
204
+ expect(response.content_type).to eq("text/plain")
219
205
  end
220
206
 
221
207
  it "has other headers returned by app" do
222
- response["x-foo"].should =="bar"
208
+ expect(response["x-foo"]).to eq("bar")
223
209
  end
224
210
 
225
211
  context "when the app returns a numeric status" do
@@ -236,11 +222,53 @@ describe ShamRack do
236
222
  end
237
223
 
238
224
  it "has status returned by app" do
239
- response.code.should == "201"
225
+ expect(response.code).to eq("201")
240
226
  end
241
227
 
242
228
  it "derives a status message" do
243
- response.message.should == "Created"
229
+ expect(response.message).to eq("Created")
230
+ end
231
+
232
+ end
233
+
234
+ end
235
+
236
+ describe ".allow_network_connections" do
237
+
238
+ context "when false" do
239
+
240
+ before do
241
+ ShamRack.prevent_network_connections
242
+ end
243
+
244
+ after do
245
+ ShamRack.allow_network_connections
246
+ end
247
+
248
+ it "prevents Net::HTTP requests" do
249
+ expect {
250
+ Net::HTTP.get_response(URI.parse("http://www.example.com/"))
251
+ }.to raise_error(ShamRack::NetworkConnectionPrevented)
252
+ end
253
+
254
+ it "prevents Patron requests" do
255
+ expect {
256
+ Patron::Session.new.get("http://www.example.com/")
257
+ }.to raise_error(ShamRack::NetworkConnectionPrevented)
258
+ end
259
+
260
+ end
261
+
262
+ context "when true" do
263
+
264
+ before do
265
+ ShamRack.allow_network_connections
266
+ end
267
+
268
+ it "allows Net::HTTP requests" do
269
+ expect {
270
+ Net::HTTP.get_response(URI.parse("http://www.example.com/"))
271
+ }.to raise_error(NetHttpProhibited)
244
272
  end
245
273
 
246
274
  end
@@ -265,19 +293,19 @@ describe ShamRack do
265
293
 
266
294
  open("http://env.xyz/blah?q=abc")
267
295
 
268
- env["REQUEST_METHOD"].should == "GET"
269
- env["SCRIPT_NAME"].should == ""
270
- env["PATH_INFO"].should == "/blah"
271
- env["QUERY_STRING"].should == "q=abc"
272
- env["SERVER_NAME"].should == "env.xyz"
273
- env["SERVER_PORT"].should == "80"
296
+ expect(env["REQUEST_METHOD"]).to eq("GET")
297
+ expect(env["SCRIPT_NAME"]).to eq("")
298
+ expect(env["PATH_INFO"]).to eq("/blah")
299
+ expect(env["QUERY_STRING"]).to eq("q=abc")
300
+ expect(env["SERVER_NAME"]).to eq("env.xyz")
301
+ expect(env["SERVER_PORT"]).to eq("80")
274
302
 
275
- env["rack.version"].should be_kind_of(Array)
276
- env["rack.url_scheme"].should == "http"
303
+ expect(env["rack.version"]).to be_kind_of(Array)
304
+ expect(env["rack.url_scheme"]).to eq("http")
277
305
 
278
- env["rack.multithread"].should == true
279
- env["rack.multiprocess"].should == true
280
- env["rack.run_once"].should == false
306
+ expect(env["rack.multithread"]).to eq(true)
307
+ expect(env["rack.multiprocess"]).to eq(true)
308
+ expect(env["rack.run_once"]).to eq(false)
281
309
 
282
310
  end
283
311
 
@@ -289,7 +317,7 @@ describe ShamRack do
289
317
  http.request(request)
290
318
  end
291
319
 
292
- env["HTTP_FOO_BAR"].should == "baz"
320
+ expect(env["HTTP_FOO_BAR"]).to eq("baz")
293
321
 
294
322
  end
295
323
 
@@ -297,9 +325,9 @@ describe ShamRack do
297
325
 
298
326
  RestClient.post("http://env.xyz/resource", "q" => "rack")
299
327
 
300
- env["REQUEST_METHOD"].should == "POST"
301
- env["CONTENT_TYPE"].should == "application/x-www-form-urlencoded"
302
- env["rack.input"].read.should == "q=rack"
328
+ expect(env["REQUEST_METHOD"]).to eq("POST")
329
+ expect(env["CONTENT_TYPE"]).to eq("application/x-www-form-urlencoded")
330
+ expect(env["rack.input"].read).to eq("q=rack")
303
331
 
304
332
  end
305
333
 
@@ -309,8 +337,8 @@ describe ShamRack do
309
337
  http.post("/resource", "q=rack")
310
338
  end
311
339
 
312
- env["REQUEST_METHOD"].should == "POST"
313
- env["rack.input"].read.should == "q=rack"
340
+ expect(env["REQUEST_METHOD"]).to eq("POST")
341
+ expect(env["rack.input"].read).to eq("q=rack")
314
342
 
315
343
  end
316
344
 
@@ -319,11 +347,11 @@ describe ShamRack do
319
347
  patron = Patron::Session.new
320
348
  response = patron.post("http://env.xyz/resource", "<xml/>", "Content-Type" => "application/xml")
321
349
 
322
- response.status.should == 200
350
+ expect(response.status).to eq(200)
323
351
 
324
- env["REQUEST_METHOD"].should == "POST"
325
- env["rack.input"].read.should == "<xml/>"
326
- env["CONTENT_TYPE"].should == "application/xml"
352
+ expect(env["REQUEST_METHOD"]).to eq("POST")
353
+ expect(env["rack.input"].read).to eq("<xml/>")
354
+ expect(env["CONTENT_TYPE"]).to eq("application/xml")
327
355
 
328
356
  end
329
357
 
@@ -331,9 +359,9 @@ describe ShamRack do
331
359
 
332
360
  RestClient.put("http://env.xyz/thing1", "stuff", :content_type => "text/plain")
333
361
 
334
- env["REQUEST_METHOD"].should == "PUT"
335
- env["CONTENT_TYPE"].should == "text/plain"
336
- env["rack.input"].read.should == "stuff"
362
+ expect(env["REQUEST_METHOD"]).to eq("PUT")
363
+ expect(env["CONTENT_TYPE"]).to eq("text/plain")
364
+ expect(env["rack.input"].read).to eq("stuff")
337
365
 
338
366
  end
339
367
 
@@ -342,9 +370,9 @@ describe ShamRack do
342
370
  patron = Patron::Session.new
343
371
  response = patron.put("http://env.xyz/resource", "stuff", "Content-Type" => "text/plain")
344
372
 
345
- env["REQUEST_METHOD"].should == "PUT"
346
- env["CONTENT_TYPE"].should == "text/plain"
347
- env["rack.input"].read.should == "stuff"
373
+ expect(env["REQUEST_METHOD"]).to eq("PUT")
374
+ expect(env["CONTENT_TYPE"]).to eq("text/plain")
375
+ expect(env["rack.input"].read).to eq("stuff")
348
376
 
349
377
  end
350
378
 
@@ -352,8 +380,8 @@ describe ShamRack do
352
380
 
353
381
  RestClient.delete("http://env.xyz/thing/1")
354
382
 
355
- env["REQUEST_METHOD"].should == "DELETE"
356
- env["PATH_INFO"].should == "/thing/1"
383
+ expect(env["REQUEST_METHOD"]).to eq("DELETE")
384
+ expect(env["PATH_INFO"]).to eq("/thing/1")
357
385
 
358
386
  end
359
387
 
@@ -362,8 +390,8 @@ describe ShamRack do
362
390
  patron = Patron::Session.new
363
391
  response = patron.delete("http://env.xyz/resource")
364
392
 
365
- env["REQUEST_METHOD"].should == "DELETE"
366
- env["PATH_INFO"].should == "/resource"
393
+ expect(env["REQUEST_METHOD"]).to eq("DELETE")
394
+ expect(env["PATH_INFO"]).to eq("/resource")
367
395
 
368
396
  end
369
397
 
@@ -1,9 +1,8 @@
1
1
  require "rubygems"
2
2
  require "rspec"
3
- require "rr"
3
+ require "rspec/mocks"
4
+ require "test_apps"
4
5
 
5
6
  RSpec.configure do |config|
6
- config.mock_with RR::Adapters::RSpec2
7
+ config.raise_errors_for_deprecations!
7
8
  end
8
-
9
- require "test_apps"
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sham_rack
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.6
4
+ version: 1.4.0
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-04-05 00:00:00.000000000 Z
11
+ date: 2017-01-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- prerelease: false
15
- version_requirements: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ! '>='
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
14
  name: rack
21
15
  requirement: !ruby/object:Gem::Requirement
22
16
  requirements:
23
- - - ! '>='
17
+ - - ">="
24
18
  - !ruby/object:Gem::Version
25
19
  version: '0'
26
20
  type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
27
  description: ShamRack plumbs Net::HTTP directly into Rack, for quick and easy HTTP
28
28
  testing.
29
29
  email: mdub@dogbiscuit.org
@@ -31,21 +31,20 @@ executables: []
31
31
  extensions: []
32
32
  extra_rdoc_files: []
33
33
  files:
34
+ - Rakefile
35
+ - benchmark/benchmark.rb
36
+ - benchmark/hello_app.rb
37
+ - lib/sham_rack.rb
38
+ - lib/sham_rack/allowances.rb
34
39
  - lib/sham_rack/net_http.rb
35
40
  - lib/sham_rack/patron.rb
36
41
  - lib/sham_rack/registration.rb
37
42
  - lib/sham_rack/stub_web_service.rb
38
43
  - lib/sham_rack/version.rb
39
- - lib/sham_rack.rb
40
- - README.markdown
41
- - CHANGES.markdown
42
44
  - spec/sham_rack/stub_web_service_spec.rb
43
45
  - spec/sham_rack_spec.rb
44
46
  - spec/spec_helper.rb
45
47
  - spec/test_apps.rb
46
- - Rakefile
47
- - benchmark/benchmark.rb
48
- - benchmark/hello_app.rb
49
48
  homepage: http://github.com/mdub/sham_rack
50
49
  licenses: []
51
50
  metadata: {}
@@ -55,17 +54,17 @@ require_paths:
55
54
  - lib
56
55
  required_ruby_version: !ruby/object:Gem::Requirement
57
56
  requirements:
58
- - - ! '>='
57
+ - - ">="
59
58
  - !ruby/object:Gem::Version
60
59
  version: '0'
61
60
  required_rubygems_version: !ruby/object:Gem::Requirement
62
61
  requirements:
63
- - - ! '>='
62
+ - - ">="
64
63
  - !ruby/object:Gem::Version
65
64
  version: '0'
66
65
  requirements: []
67
66
  rubyforge_project: shamrack
68
- rubygems_version: 2.0.0
67
+ rubygems_version: 2.6.8
69
68
  signing_key:
70
69
  specification_version: 4
71
70
  summary: Net::HTTP-to-Rack plumbing
@@ -1,42 +0,0 @@
1
- ## 1-May-2012 [mdub@dogbiscuit.org]
2
-
3
- * Validate arguments to `ShamRack#mount`.
4
- * Update for compatibility with patron-0.4.x.
5
-
6
- ## 18-Oct-2010 [mdub@dogbiscuit.org]
7
-
8
- * Add support for Patron.
9
-
10
- ## 02-Sep-2010 [mdub@dogbiscuit.org]
11
-
12
- * Fixes to support Ruby-1.9.x.
13
-
14
- ## 08-Jul-2010 [jyurek@thoughtbot.com]
15
-
16
- * Add support for Mechanize.
17
-
18
- ## 11-Mar-2010 [mdub@dogbiscuit.org]
19
-
20
- * Added generic `StubWebService`.
21
-
22
- ## 15-Jan-2010 [jeremy.burks@gmail.com]
23
-
24
- * Fix an incompatibility with rest-client 1.2.0.
25
-
26
- ## 27-Nov-2009 [mdub@dogbiscuit.org]
27
-
28
- * Change of approach: extend rather than reimplement `Net:HTTP`. This should improve coverage of all the weird and wonderful ways of using the `Net:HTTP` API.
29
-
30
- ## 5-Jun-2009 [mdub@dogbiscuit.org]
31
-
32
- * Add support for `Net::HTTP.get_response`.
33
- * Pass back headers provided by Rack app in the `HTTPResponse`.
34
-
35
- ## 3-Jun-2009 [mdub@dogbiscuit.org]
36
-
37
- * Introduced `ShamRack#at` to simplify registration of apps.
38
-
39
- ## 13-May-2009 [mdub@dogbiscuit.org]
40
-
41
- * Added accessors on HTTP object for address, port and rack_app.
42
- * Added accessors to imitate "net/https".
@@ -1,123 +0,0 @@
1
- ShamRack
2
- ========
3
-
4
- ShamRack plumbs HTTP requests into [Rack][rack].
5
-
6
- What's it for, again?
7
- ---------------------
8
-
9
- Well, it makes it easy to _stub out external (HTTP) services_, which is handy in development and testing environments, or when you want to _test your HTTP client code_.
10
-
11
- You can also use it to _test your Rack application_ (or Sinatra, or Rails, or Merb) using a variety of HTTP client libraries, to check interoperability. For instance, you could test your app using:
12
-
13
- * [`rest-client`][rest-client]
14
- * [`httparty`][httparty]
15
- * [`oauth`][oauth]
16
-
17
- all without having to boot it in a server.
18
-
19
- Installing it
20
- -------------
21
-
22
- gem install sham_rack
23
-
24
- Using it
25
- --------
26
-
27
- ### A simple inline application
28
-
29
- require 'sham_rack'
30
-
31
- ShamRack.at("www.greetings.com") do |env|
32
- ["200 OK", { "Content-type" => "text/plain" }, ["Hello, world!"]]
33
- end
34
-
35
- require 'open-uri'
36
- open("http://www.greetings.com/").read #=> "Hello, world!"
37
-
38
- ### Sinatra integration
39
-
40
- ShamRack.at("sinatra.xyz").sinatra do
41
- get "/hello/:subject" do
42
- "Hello, #{params[:subject]}"
43
- end
44
- end
45
-
46
- open("http://sinatra.xyz/hello/stranger").read #=> "Hello, stranger"
47
-
48
- ### Rackup support
49
-
50
- ShamRack.at("rackup.xyz").rackup do
51
- use Some::Middleware
52
- use Some::Other::Middleware
53
- run MyApp.new
54
- end
55
-
56
- ### Any old Rack app
57
-
58
- ShamRack.at("google.com").mount(my_google_stub)
59
-
60
- ### General-purpose stubbing
61
-
62
- @stub_app = ShamRack.at("stubbed.com").stub
63
- @stub_app.register_resource("/greeting", "Hello, world!", "text/plain")
64
-
65
- open("http://stubbed.com/greeting").read #=> "Hello, world!"
66
- @stub_app.last_request.path #=> "/greeting"
67
-
68
- Or, just use Sinatra, as described above ... it's almost as succinct, and heaps more powerful.
69
-
70
- ### When you're done testing
71
-
72
- ShamRack.unmount_all
73
-
74
- open("http://stubbed.com/greeting").read #=> OpenURI::HTTPError
75
-
76
- Supported HTTP client libraries
77
- -------------------------------
78
-
79
- ### Net::HTTP and friends
80
-
81
- ShamRack supports requests made using Net::HTTP, or any of the numerous APIs built on top of it:
82
-
83
- uri = URI.parse("http://www.greetings.com/")
84
- Net::HTTP.get_response(uri).body #=> "Hello, world!"
85
-
86
- require 'open-uri'
87
- open("http://www.greetings.com/").read #=> "Hello, world!"
88
-
89
- require 'restclient'
90
- RestClient.get("http://www.greetings.com/").to_s #=> "Hello, world!"
91
-
92
- require 'mechanize'
93
- Mechanize.new.get("http://www.greetings.com/").body #=> "Hello, world!"
94
-
95
- ### Patron (experimental)
96
-
97
- We've recently added support for [Patron][patron]:
98
-
99
- require 'sham_rack/patron'
100
-
101
- patron = Patron::Session.new
102
- patron.get("http://www.greetings.com/").body #=> "Hello, world!"
103
-
104
- What's the catch?
105
- -----------------
106
-
107
- * Your Rack request-handling code runs in the same Ruby VM, in fact the same Thread, as your request.
108
-
109
- Thanks to
110
- ---------
111
-
112
- * Blaine Cook for [FakeWeb][fakeweb], which was an inspiration for ShamRack.
113
- * Perryn Fowler for his efforts plumbing Net::HTTP into ActionController::TestProcess.
114
- * Christian Neukirchen et al for the chewy goodness that is [Rack][rack].
115
-
116
- [rack]: http://rack.rubyforge.org/
117
- [sinatra]: http://www.sinatrarb.com/
118
- [rest-client]: http://github.com/adamwiggins/rest-client
119
- [httparty]: http://github.com/jnunemaker/httparty
120
- [oauth]: http://oauth.rubyforge.org/
121
- [fakeweb]: http://fakeweb.rubyforge.org/
122
- [mechanize]: http://mechanize.rubyforge.org
123
- [patron]: http://github.com/toland/Patron