webmachine 1.1.0 → 1.2.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.
- data/Gemfile +5 -4
- data/README.md +25 -2
- data/examples/debugger.rb +7 -0
- data/examples/logging.rb +41 -0
- data/lib/webmachine/adapters.rb +1 -1
- data/lib/webmachine/adapters/hatetepe.rb +5 -1
- data/lib/webmachine/adapters/lazy_request_body.rb +7 -7
- data/lib/webmachine/adapters/mongrel.rb +27 -12
- data/lib/webmachine/adapters/rack.rb +42 -6
- data/lib/webmachine/adapters/reel.rb +91 -23
- data/lib/webmachine/adapters/webrick.rb +12 -6
- data/lib/webmachine/application.rb +1 -0
- data/lib/webmachine/cookie.rb +1 -1
- data/lib/webmachine/dispatcher.rb +7 -1
- data/lib/webmachine/events.rb +179 -0
- data/lib/webmachine/events/instrumented_event.rb +19 -0
- data/lib/webmachine/response.rb +1 -1
- data/lib/webmachine/streaming/io_encoder.rb +5 -1
- data/lib/webmachine/trace.rb +18 -0
- data/lib/webmachine/trace/fsm.rb +4 -1
- data/lib/webmachine/trace/listener.rb +12 -0
- data/lib/webmachine/version.rb +1 -1
- data/spec/spec_helper.rb +11 -0
- data/spec/support/adapter_lint.rb +125 -0
- data/spec/support/test_resource.rb +73 -0
- data/spec/webmachine/adapters/hatetepe_spec.rb +2 -2
- data/spec/webmachine/adapters/mongrel_spec.rb +6 -51
- data/spec/webmachine/adapters/rack_spec.rb +22 -155
- data/spec/webmachine/adapters/reel_spec.rb +59 -7
- data/spec/webmachine/adapters/webrick_spec.rb +7 -13
- data/spec/webmachine/cookie_spec.rb +1 -1
- data/spec/webmachine/decision/helpers_spec.rb +10 -0
- data/spec/webmachine/events_spec.rb +58 -0
- data/spec/webmachine/request_spec.rb +41 -0
- data/webmachine.gemspec +1 -1
- metadata +63 -24
@@ -59,7 +59,7 @@ describe Webmachine::Cookie do
|
|
59
59
|
str.should include "Domain=www.server.com"
|
60
60
|
str.should include "Path=/"
|
61
61
|
str.should include "Version=1"
|
62
|
-
str.should include "
|
62
|
+
str.should include "Max-Age=60"
|
63
63
|
str.should include "Expires=Sun, 14-Mar-2010 03:14:00 GMT"
|
64
64
|
end
|
65
65
|
end
|
@@ -156,6 +156,16 @@ describe Webmachine::Decision::Helpers do
|
|
156
156
|
response.headers['Content-Length'].should == File.stat('spec/spec_helper.rb').size.to_s
|
157
157
|
end
|
158
158
|
|
159
|
+
it "progressively yields file contents for each enumeration" do
|
160
|
+
subject.encode_body
|
161
|
+
body_size = 0
|
162
|
+
response.body.each do |chunk|
|
163
|
+
chunk.should be_a(String)
|
164
|
+
body_size += chunk.length
|
165
|
+
end
|
166
|
+
body_size.should == File.stat('spec/spec_helper.rb').size
|
167
|
+
end
|
168
|
+
|
159
169
|
context "when the resource provides a non-identity encoding that the client accepts" do
|
160
170
|
let(:resource) do
|
161
171
|
resource_with do
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Webmachine::Events do
|
4
|
+
describe ".backend" do
|
5
|
+
it "defaults to AS::Notifications" do
|
6
|
+
described_class.backend.should be(AS::Notifications)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe ".publish" do
|
11
|
+
it "calls the backend" do
|
12
|
+
described_class.backend.should_receive(:publish).with('test.event', 1, 'two')
|
13
|
+
described_class.publish('test.event', 1, 'two')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe ".instrument" do
|
18
|
+
it "calls the backend" do
|
19
|
+
described_class.backend.should_receive(:instrument).with(
|
20
|
+
'test.event', {}
|
21
|
+
).and_yield
|
22
|
+
|
23
|
+
described_class.instrument('test.event') { }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe ".subscribe" do
|
28
|
+
it "calls the backend" do
|
29
|
+
described_class.backend.should_receive(:subscribe).with(
|
30
|
+
'test.event'
|
31
|
+
).and_yield
|
32
|
+
|
33
|
+
described_class.subscribe('test.event') { }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe ".subscribed" do
|
38
|
+
it "calls the backend" do
|
39
|
+
callback = Proc.new { }
|
40
|
+
|
41
|
+
described_class.backend.should_receive(:subscribed).with(
|
42
|
+
callback, 'test.event'
|
43
|
+
).and_yield
|
44
|
+
|
45
|
+
described_class.subscribed(callback, 'test.event') { }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe ".unsubscribe" do
|
50
|
+
it "calls the backend" do
|
51
|
+
subscriber = described_class.subscribe('test.event') { }
|
52
|
+
|
53
|
+
described_class.backend.should_receive(:unsubscribe).with(subscriber)
|
54
|
+
|
55
|
+
described_class.unsubscribe(subscriber)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -54,6 +54,47 @@ describe Webmachine::Request do
|
|
54
54
|
subject.query.should == {}
|
55
55
|
end
|
56
56
|
|
57
|
+
describe '#has_body?' do
|
58
|
+
let(:wreq) do
|
59
|
+
Class.new {
|
60
|
+
def initialize(body); @body = body; end
|
61
|
+
def body; block_given? ? yield(@body) : @body; end
|
62
|
+
}
|
63
|
+
end
|
64
|
+
|
65
|
+
subject { request.has_body? }
|
66
|
+
|
67
|
+
context "when body is nil" do
|
68
|
+
let(:body) { nil }
|
69
|
+
|
70
|
+
it { should be_false }
|
71
|
+
end
|
72
|
+
|
73
|
+
context "when body is an empty string" do
|
74
|
+
let(:body) { '' }
|
75
|
+
|
76
|
+
it { should be_false }
|
77
|
+
end
|
78
|
+
|
79
|
+
context "when body is not empty" do
|
80
|
+
let(:body) { 'foo' }
|
81
|
+
|
82
|
+
it { should be_true }
|
83
|
+
end
|
84
|
+
|
85
|
+
context "when body is an empty LazyRequestBody" do
|
86
|
+
let(:body) { Webmachine::Adapters::LazyRequestBody.new(wreq.new('')) }
|
87
|
+
|
88
|
+
it { should be_false }
|
89
|
+
end
|
90
|
+
|
91
|
+
context "when body is a LazyRequestBody" do
|
92
|
+
let(:body) { Webmachine::Adapters::LazyRequestBody.new(wreq.new('foo')) }
|
93
|
+
|
94
|
+
it { should be_true }
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
57
98
|
describe '#https?' do
|
58
99
|
subject { request.https? }
|
59
100
|
|
data/webmachine.gemspec
CHANGED
@@ -16,11 +16,11 @@ Gem::Specification.new do |gem|
|
|
16
16
|
|
17
17
|
gem.add_runtime_dependency(%q<i18n>, [">= 0.4.0"])
|
18
18
|
gem.add_runtime_dependency(%q<multi_json>)
|
19
|
+
gem.add_runtime_dependency(%q<as-notifications>, ["~> 1.0"])
|
19
20
|
gem.add_development_dependency(%q<rspec>, ["~> 2.12.0"])
|
20
21
|
gem.add_development_dependency(%q<yard>, ["~> 0.7.3"])
|
21
22
|
gem.add_development_dependency(%q<rake>)
|
22
23
|
gem.add_development_dependency(%q<rack>)
|
23
|
-
gem.add_development_dependency(%q<rack-test>)
|
24
24
|
|
25
25
|
ignores = File.read(".gitignore").split(/\r?\n/).reject{ |f| f =~ /^(#.+|\s*)$/ }.map {|f| Dir[f] }.flatten
|
26
26
|
gem.files = (Dir['**/*','.gitignore'] - ignores).reject {|f| !File.file?(f) }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webmachine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-09-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: i18n
|
@@ -44,29 +44,29 @@ dependencies:
|
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0'
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
47
|
+
name: as-notifications
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
49
49
|
none: false
|
50
50
|
requirements:
|
51
51
|
- - ~>
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
54
|
-
type: :
|
53
|
+
version: '1.0'
|
54
|
+
type: :runtime
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
none: false
|
58
58
|
requirements:
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: '1.0'
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
63
|
+
name: rspec
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
none: false
|
66
66
|
requirements:
|
67
67
|
- - ~>
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
69
|
+
version: 2.12.0
|
70
70
|
type: :development
|
71
71
|
prerelease: false
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -74,25 +74,25 @@ dependencies:
|
|
74
74
|
requirements:
|
75
75
|
- - ~>
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
77
|
+
version: 2.12.0
|
78
78
|
- !ruby/object:Gem::Dependency
|
79
|
-
name:
|
79
|
+
name: yard
|
80
80
|
requirement: !ruby/object:Gem::Requirement
|
81
81
|
none: false
|
82
82
|
requirements:
|
83
|
-
- -
|
83
|
+
- - ~>
|
84
84
|
- !ruby/object:Gem::Version
|
85
|
-
version:
|
85
|
+
version: 0.7.3
|
86
86
|
type: :development
|
87
87
|
prerelease: false
|
88
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
89
|
none: false
|
90
90
|
requirements:
|
91
|
-
- -
|
91
|
+
- - ~>
|
92
92
|
- !ruby/object:Gem::Version
|
93
|
-
version:
|
93
|
+
version: 0.7.3
|
94
94
|
- !ruby/object:Gem::Dependency
|
95
|
-
name:
|
95
|
+
name: rake
|
96
96
|
requirement: !ruby/object:Gem::Requirement
|
97
97
|
none: false
|
98
98
|
requirements:
|
@@ -108,7 +108,7 @@ dependencies:
|
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: '0'
|
110
110
|
- !ruby/object:Gem::Dependency
|
111
|
-
name: rack
|
111
|
+
name: rack
|
112
112
|
requirement: !ruby/object:Gem::Requirement
|
113
113
|
none: false
|
114
114
|
requirements:
|
@@ -129,10 +129,46 @@ description: ! ' webmachine is a toolkit for building HTTP applications in a dec
|
|
129
129
|
its opinionated nature about HTTP. '
|
130
130
|
email:
|
131
131
|
- sean@basho.com
|
132
|
-
executables:
|
132
|
+
executables:
|
133
|
+
- autospec
|
134
|
+
- coderay
|
135
|
+
- gpgen
|
136
|
+
- guard
|
137
|
+
- hatetepe
|
138
|
+
- htmldiff
|
139
|
+
- ldiff
|
140
|
+
- mongrel_rails
|
141
|
+
- pry
|
142
|
+
- rackup
|
143
|
+
- rake
|
144
|
+
- redcarpet
|
145
|
+
- reel
|
146
|
+
- rspec
|
147
|
+
- thor
|
148
|
+
- yard
|
149
|
+
- yardoc
|
150
|
+
- yri
|
133
151
|
extensions: []
|
134
152
|
extra_rdoc_files: []
|
135
153
|
files:
|
154
|
+
- bin/autospec
|
155
|
+
- bin/coderay
|
156
|
+
- bin/gpgen
|
157
|
+
- bin/guard
|
158
|
+
- bin/hatetepe
|
159
|
+
- bin/htmldiff
|
160
|
+
- bin/ldiff
|
161
|
+
- bin/mongrel_rails
|
162
|
+
- bin/pry
|
163
|
+
- bin/rackup
|
164
|
+
- bin/rake
|
165
|
+
- bin/redcarpet
|
166
|
+
- bin/reel
|
167
|
+
- bin/rspec
|
168
|
+
- bin/thor
|
169
|
+
- bin/yard
|
170
|
+
- bin/yardoc
|
171
|
+
- bin/yri
|
136
172
|
- doc/_index.html
|
137
173
|
- doc/class_list.html
|
138
174
|
- doc/css/common.css
|
@@ -212,11 +248,11 @@ files:
|
|
212
248
|
- doc/Webmachine.html
|
213
249
|
- examples/application.rb
|
214
250
|
- examples/debugger.rb
|
251
|
+
- examples/logging.rb
|
215
252
|
- examples/webrick.rb
|
216
253
|
- Gemfile
|
217
254
|
- Guardfile
|
218
255
|
- lib/webmachine/adapter.rb
|
219
|
-
- lib/webmachine/adapters/#reel.rb#
|
220
256
|
- lib/webmachine/adapters/hatetepe.rb
|
221
257
|
- lib/webmachine/adapters/lazy_request_body.rb
|
222
258
|
- lib/webmachine/adapters/mongrel.rb
|
@@ -238,6 +274,8 @@ files:
|
|
238
274
|
- lib/webmachine/dispatcher.rb
|
239
275
|
- lib/webmachine/errors.rb
|
240
276
|
- lib/webmachine/etags.rb
|
277
|
+
- lib/webmachine/events/instrumented_event.rb
|
278
|
+
- lib/webmachine/events.rb
|
241
279
|
- lib/webmachine/fiber18.rb
|
242
280
|
- lib/webmachine/headers.rb
|
243
281
|
- lib/webmachine/locale/en.yml
|
@@ -258,6 +296,7 @@ files:
|
|
258
296
|
- lib/webmachine/streaming/io_encoder.rb
|
259
297
|
- lib/webmachine/streaming.rb
|
260
298
|
- lib/webmachine/trace/fsm.rb
|
299
|
+
- lib/webmachine/trace/listener.rb
|
261
300
|
- lib/webmachine/trace/pstore_trace_store.rb
|
262
301
|
- lib/webmachine/trace/resource_proxy.rb
|
263
302
|
- lib/webmachine/trace/static/http-headers-status-v3.png
|
@@ -274,6 +313,8 @@ files:
|
|
274
313
|
- Rakefile
|
275
314
|
- README.md
|
276
315
|
- spec/spec_helper.rb
|
316
|
+
- spec/support/adapter_lint.rb
|
317
|
+
- spec/support/test_resource.rb
|
277
318
|
- spec/webmachine/adapter_spec.rb
|
278
319
|
- spec/webmachine/adapters/hatetepe_spec.rb
|
279
320
|
- spec/webmachine/adapters/mongrel_spec.rb
|
@@ -293,6 +334,7 @@ files:
|
|
293
334
|
- spec/webmachine/dispatcher_spec.rb
|
294
335
|
- spec/webmachine/errors_spec.rb
|
295
336
|
- spec/webmachine/etags_spec.rb
|
337
|
+
- spec/webmachine/events_spec.rb
|
296
338
|
- spec/webmachine/headers_spec.rb
|
297
339
|
- spec/webmachine/media_type_spec.rb
|
298
340
|
- spec/webmachine/request_spec.rb
|
@@ -316,18 +358,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
316
358
|
- - ! '>='
|
317
359
|
- !ruby/object:Gem::Version
|
318
360
|
version: '0'
|
319
|
-
segments:
|
320
|
-
- 0
|
321
|
-
hash: 2113185395505301122
|
322
361
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
323
362
|
none: false
|
324
363
|
requirements:
|
325
364
|
- - ! '>='
|
326
365
|
- !ruby/object:Gem::Version
|
327
366
|
version: '0'
|
328
|
-
segments:
|
329
|
-
- 0
|
330
|
-
hash: 2113185395505301122
|
331
367
|
requirements: []
|
332
368
|
rubyforge_project:
|
333
369
|
rubygems_version: 1.8.23
|
@@ -336,6 +372,8 @@ specification_version: 3
|
|
336
372
|
summary: webmachine is a toolkit for building HTTP applications,
|
337
373
|
test_files:
|
338
374
|
- spec/spec_helper.rb
|
375
|
+
- spec/support/adapter_lint.rb
|
376
|
+
- spec/support/test_resource.rb
|
339
377
|
- spec/webmachine/adapter_spec.rb
|
340
378
|
- spec/webmachine/adapters/hatetepe_spec.rb
|
341
379
|
- spec/webmachine/adapters/mongrel_spec.rb
|
@@ -355,6 +393,7 @@ test_files:
|
|
355
393
|
- spec/webmachine/dispatcher_spec.rb
|
356
394
|
- spec/webmachine/errors_spec.rb
|
357
395
|
- spec/webmachine/etags_spec.rb
|
396
|
+
- spec/webmachine/events_spec.rb
|
358
397
|
- spec/webmachine/headers_spec.rb
|
359
398
|
- spec/webmachine/media_type_spec.rb
|
360
399
|
- spec/webmachine/request_spec.rb
|