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.
Files changed (36) hide show
  1. data/Gemfile +5 -4
  2. data/README.md +25 -2
  3. data/examples/debugger.rb +7 -0
  4. data/examples/logging.rb +41 -0
  5. data/lib/webmachine/adapters.rb +1 -1
  6. data/lib/webmachine/adapters/hatetepe.rb +5 -1
  7. data/lib/webmachine/adapters/lazy_request_body.rb +7 -7
  8. data/lib/webmachine/adapters/mongrel.rb +27 -12
  9. data/lib/webmachine/adapters/rack.rb +42 -6
  10. data/lib/webmachine/adapters/reel.rb +91 -23
  11. data/lib/webmachine/adapters/webrick.rb +12 -6
  12. data/lib/webmachine/application.rb +1 -0
  13. data/lib/webmachine/cookie.rb +1 -1
  14. data/lib/webmachine/dispatcher.rb +7 -1
  15. data/lib/webmachine/events.rb +179 -0
  16. data/lib/webmachine/events/instrumented_event.rb +19 -0
  17. data/lib/webmachine/response.rb +1 -1
  18. data/lib/webmachine/streaming/io_encoder.rb +5 -1
  19. data/lib/webmachine/trace.rb +18 -0
  20. data/lib/webmachine/trace/fsm.rb +4 -1
  21. data/lib/webmachine/trace/listener.rb +12 -0
  22. data/lib/webmachine/version.rb +1 -1
  23. data/spec/spec_helper.rb +11 -0
  24. data/spec/support/adapter_lint.rb +125 -0
  25. data/spec/support/test_resource.rb +73 -0
  26. data/spec/webmachine/adapters/hatetepe_spec.rb +2 -2
  27. data/spec/webmachine/adapters/mongrel_spec.rb +6 -51
  28. data/spec/webmachine/adapters/rack_spec.rb +22 -155
  29. data/spec/webmachine/adapters/reel_spec.rb +59 -7
  30. data/spec/webmachine/adapters/webrick_spec.rb +7 -13
  31. data/spec/webmachine/cookie_spec.rb +1 -1
  32. data/spec/webmachine/decision/helpers_spec.rb +10 -0
  33. data/spec/webmachine/events_spec.rb +58 -0
  34. data/spec/webmachine/request_spec.rb +41 -0
  35. data/webmachine.gemspec +1 -1
  36. 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 "MaxAge=60"
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.1.0
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-01-12 00:00:00.000000000 Z
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: rspec
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: 2.12.0
54
- type: :development
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: 2.12.0
61
+ version: '1.0'
62
62
  - !ruby/object:Gem::Dependency
63
- name: yard
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: 0.7.3
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: 0.7.3
77
+ version: 2.12.0
78
78
  - !ruby/object:Gem::Dependency
79
- name: rake
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: '0'
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: '0'
93
+ version: 0.7.3
94
94
  - !ruby/object:Gem::Dependency
95
- name: rack
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-test
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