webmachine 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
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