webmachine 0.1.0 → 0.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 (63) hide show
  1. data/Gemfile +11 -3
  2. data/README.md +55 -27
  3. data/lib/webmachine/adapters/mongrel.rb +84 -0
  4. data/lib/webmachine/adapters/webrick.rb +12 -3
  5. data/lib/webmachine/adapters.rb +1 -7
  6. data/lib/webmachine/configuration.rb +30 -0
  7. data/lib/webmachine/decision/conneg.rb +7 -72
  8. data/lib/webmachine/decision/flow.rb +13 -11
  9. data/lib/webmachine/decision/fsm.rb +1 -9
  10. data/lib/webmachine/decision/helpers.rb +27 -7
  11. data/lib/webmachine/errors.rb +1 -0
  12. data/lib/webmachine/headers.rb +12 -3
  13. data/lib/webmachine/locale/en.yml +2 -2
  14. data/lib/webmachine/media_type.rb +117 -0
  15. data/lib/webmachine/resource/callbacks.rb +9 -0
  16. data/lib/webmachine/streaming.rb +3 -3
  17. data/lib/webmachine/version.rb +1 -1
  18. data/lib/webmachine.rb +3 -1
  19. data/pkg/webmachine-0.1.0/Gemfile +16 -0
  20. data/pkg/webmachine-0.1.0/Guardfile +11 -0
  21. data/pkg/webmachine-0.1.0/README.md +90 -0
  22. data/pkg/webmachine-0.1.0/Rakefile +31 -0
  23. data/pkg/webmachine-0.1.0/examples/webrick.rb +19 -0
  24. data/pkg/webmachine-0.1.0/lib/webmachine/adapters/webrick.rb +74 -0
  25. data/pkg/webmachine-0.1.0/lib/webmachine/adapters.rb +15 -0
  26. data/pkg/webmachine-0.1.0/lib/webmachine/decision/conneg.rb +304 -0
  27. data/pkg/webmachine-0.1.0/lib/webmachine/decision/flow.rb +502 -0
  28. data/pkg/webmachine-0.1.0/lib/webmachine/decision/fsm.rb +79 -0
  29. data/pkg/webmachine-0.1.0/lib/webmachine/decision/helpers.rb +80 -0
  30. data/pkg/webmachine-0.1.0/lib/webmachine/decision.rb +12 -0
  31. data/pkg/webmachine-0.1.0/lib/webmachine/dispatcher/route.rb +85 -0
  32. data/pkg/webmachine-0.1.0/lib/webmachine/dispatcher.rb +40 -0
  33. data/pkg/webmachine-0.1.0/lib/webmachine/errors.rb +37 -0
  34. data/pkg/webmachine-0.1.0/lib/webmachine/headers.rb +16 -0
  35. data/pkg/webmachine-0.1.0/lib/webmachine/locale/en.yml +28 -0
  36. data/pkg/webmachine-0.1.0/lib/webmachine/request.rb +56 -0
  37. data/pkg/webmachine-0.1.0/lib/webmachine/resource/callbacks.rb +362 -0
  38. data/pkg/webmachine-0.1.0/lib/webmachine/resource/encodings.rb +36 -0
  39. data/pkg/webmachine-0.1.0/lib/webmachine/resource.rb +48 -0
  40. data/pkg/webmachine-0.1.0/lib/webmachine/response.rb +49 -0
  41. data/pkg/webmachine-0.1.0/lib/webmachine/streaming.rb +27 -0
  42. data/pkg/webmachine-0.1.0/lib/webmachine/translation.rb +11 -0
  43. data/pkg/webmachine-0.1.0/lib/webmachine/version.rb +4 -0
  44. data/pkg/webmachine-0.1.0/lib/webmachine.rb +19 -0
  45. data/pkg/webmachine-0.1.0/spec/spec_helper.rb +13 -0
  46. data/pkg/webmachine-0.1.0/spec/tests.org +57 -0
  47. data/pkg/webmachine-0.1.0/spec/webmachine/decision/conneg_spec.rb +152 -0
  48. data/pkg/webmachine-0.1.0/spec/webmachine/decision/flow_spec.rb +1030 -0
  49. data/pkg/webmachine-0.1.0/spec/webmachine/dispatcher/route_spec.rb +109 -0
  50. data/pkg/webmachine-0.1.0/spec/webmachine/dispatcher_spec.rb +34 -0
  51. data/pkg/webmachine-0.1.0/spec/webmachine/headers_spec.rb +19 -0
  52. data/pkg/webmachine-0.1.0/spec/webmachine/request_spec.rb +24 -0
  53. data/pkg/webmachine-0.1.0/webmachine.gemspec +44 -0
  54. data/pkg/webmachine-0.1.0.gem +0 -0
  55. data/spec/webmachine/configuration_spec.rb +27 -0
  56. data/spec/webmachine/decision/conneg_spec.rb +18 -11
  57. data/spec/webmachine/decision/flow_spec.rb +2 -0
  58. data/spec/webmachine/decision/helpers_spec.rb +105 -0
  59. data/spec/webmachine/errors_spec.rb +13 -0
  60. data/spec/webmachine/headers_spec.rb +2 -1
  61. data/spec/webmachine/media_type_spec.rb +78 -0
  62. data/webmachine.gemspec +4 -1
  63. metadata +69 -11
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Webmachine errors" do
4
+ describe ".render_error" do
5
+ it "sets the given response code on the response object" do
6
+ req = double('request', :method => 'GET').as_null_object
7
+ res = Webmachine::Response.new
8
+
9
+ Webmachine.render_error(404, req, res)
10
+ res.code.should be(404)
11
+ end
12
+ end
13
+ end
@@ -4,8 +4,9 @@ describe Webmachine::Headers do
4
4
  it "should set and access values insensitive to case" do
5
5
  subject['Content-TYPE'] = "text/plain"
6
6
  subject['CONTENT-TYPE'].should == 'text/plain'
7
+ subject.delete('CoNtEnT-tYpE').should == 'text/plain'
7
8
  end
8
-
9
+
9
10
  context "filtering with #grep" do
10
11
  subject { described_class["content-type" => "text/plain", "etag" => '"abcdef1234567890"'] }
11
12
  it "should filter keys by the given pattern" do
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ describe Webmachine::MediaType do
4
+ let(:raw_type){ "application/xml;charset=UTF-8" }
5
+ subject { described_class.new("application/xml", {"charset" => "UTF-8"}) }
6
+
7
+ context "equivalence" do
8
+ it { should == raw_type }
9
+ it { should == described_class.parse(raw_type) }
10
+ end
11
+
12
+ context "when it is the wildcard type" do
13
+ subject { described_class.new("*/*") }
14
+ it { should be_matches_all }
15
+ end
16
+
17
+ context "parsing a type" do
18
+ it "should return MediaTypes untouched" do
19
+ described_class.parse(subject).should equal(subject)
20
+ end
21
+
22
+ it "should parse a String" do
23
+ type = described_class.parse(raw_type)
24
+ type.should be_kind_of(described_class)
25
+ type.type.should == "application/xml"
26
+ type.params.should == {"charset" => "UTF-8"}
27
+ end
28
+
29
+ it "should parse a type/params pair" do
30
+ type = described_class.parse(["application/xml", {"charset" => "UTF-8"}])
31
+ type.should be_kind_of(described_class)
32
+ type.type.should == "application/xml"
33
+ type.params.should == {"charset" => "UTF-8"}
34
+ end
35
+
36
+ it "should parse a type/params pair where the type has some params in the string" do
37
+ type = described_class.parse(["application/xml;version=1", {"charset" => "UTF-8"}])
38
+ type.should be_kind_of(described_class)
39
+ type.type.should == "application/xml"
40
+ type.params.should == {"charset" => "UTF-8", "version" => "1"}
41
+ end
42
+
43
+ it "should parse a type/params pair with params and whitespace in the string" do
44
+ type = described_class.parse(["multipart/form-data; boundary=----------------------------2c46a7bec2b9", {"charset" => "UTF-8"}])
45
+ type.should be_kind_of(described_class)
46
+ type.type.should == "multipart/form-data"
47
+ type.params.should == {"boundary" => "----------------------------2c46a7bec2b9", "charset" => "UTF-8"}
48
+ end
49
+
50
+ it "should raise an error when given an invalid type/params pair" do
51
+ expect {
52
+ described_class.parse([false, "blah"])
53
+ }.to raise_error(ArgumentError)
54
+ end
55
+ end
56
+
57
+ describe "matching a requested type" do
58
+ it { should be_exact_match("application/xml;charset=UTF-8") }
59
+ it { should be_exact_match("application/*;charset=UTF-8") }
60
+ it { should be_exact_match("*/*;charset=UTF-8") }
61
+ it { should be_exact_match("*;charset=UTF-8") }
62
+ it { should_not be_exact_match("text/xml") }
63
+ it { should_not be_exact_match("application/xml") }
64
+ it { should_not be_exact_match("application/xml;version=1") }
65
+
66
+ it { should be_type_matches("application/xml") }
67
+ it { should be_type_matches("application/*") }
68
+ it { should be_type_matches("*/*") }
69
+ it { should be_type_matches("*") }
70
+ it { should_not be_type_matches("text/xml") }
71
+ it { should_not be_type_matches("text/*") }
72
+
73
+ it { should be_params_match({}) }
74
+ it { should be_params_match({"charset" => "UTF-8"}) }
75
+ it { should_not be_params_match({"charset" => "Windows-1252"}) }
76
+ it { should_not be_params_match({"version" => "3"}) }
77
+ end
78
+ end
data/webmachine.gemspec CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |gem|
11
11
  the confusion of going through a CGI-style interface like Rack. It is strongly influenced
12
12
  by the original Erlang project of the same name and shares its opinionated nature about HTTP.
13
13
  DESC
14
- gem.homepage = "http://seancribbs.github.com/webmachine.rb"
14
+ gem.homepage = "http://github.com/seancribbs/webmachine-ruby"
15
15
  gem.authors = ["Sean Cribbs"]
16
16
  gem.email = ["sean@basho.com"]
17
17
 
@@ -23,17 +23,20 @@ Gem::Specification.new do |gem|
23
23
  gem.add_development_dependency(%q<rspec>, ["~> 2.6.0"])
24
24
  gem.add_development_dependency(%q<yard>, ["~> 0.6.7"])
25
25
  gem.add_development_dependency(%q<rake>)
26
+ gem.add_development_dependency(%q<mongrel>, ['~>1.2.beta'])
26
27
  else
27
28
  gem.add_dependency(%q<i18n>, [">= 0.4.0"])
28
29
  gem.add_dependency(%q<rspec>, ["~> 2.6.0"])
29
30
  gem.add_dependency(%q<yard>, ["~> 0.6.7"])
30
31
  gem.add_dependency(%q<rake>)
32
+ gem.add_dependency(%q<mongrel>, ['~>1.2.beta'])
31
33
  end
32
34
  else
33
35
  gem.add_dependency(%q<i18n>, [">= 0.4.0"])
34
36
  gem.add_dependency(%q<rspec>, ["~> 2.6.0"])
35
37
  gem.add_dependency(%q<yard>, ["~> 0.6.7"])
36
38
  gem.add_dependency(%q<rake>)
39
+ gem.add_dependency(%q<mongrel>, ['~>1.2.beta'])
37
40
  end
38
41
 
39
42
  ignores = File.read(".gitignore").split(/\r?\n/).reject{ |f| f =~ /^(#.+|\s*)$/ }.map {|f| Dir[f] }.flatten
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: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-08-25 00:00:00.000000000Z
12
+ date: 2011-09-11 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: i18n
16
- requirement: &2152637280 !ruby/object:Gem::Requirement
16
+ requirement: &2160756300 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.4.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2152637280
24
+ version_requirements: *2160756300
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &2152636780 !ruby/object:Gem::Requirement
27
+ requirement: &2160755360 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 2.6.0
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *2152636780
35
+ version_requirements: *2160755360
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: yard
38
- requirement: &2152636300 !ruby/object:Gem::Requirement
38
+ requirement: &2160754640 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.6.7
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *2152636300
46
+ version_requirements: *2160754640
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rake
49
- requirement: &2152635920 !ruby/object:Gem::Requirement
49
+ requirement: &2160754100 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,18 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *2152635920
57
+ version_requirements: *2160754100
58
+ - !ruby/object:Gem::Dependency
59
+ name: mongrel
60
+ requirement: &2160752320 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: 1.2.beta
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *2160752320
58
69
  description: ! ' webmachine is a toolkit for building HTTP applications in a declarative
59
70
  fashion, that avoids the confusion of going through a CGI-style interface like Rack.
60
71
  It is strongly influenced by the original Erlang project of the same name and shares
@@ -68,8 +79,10 @@ files:
68
79
  - examples/webrick.rb
69
80
  - Gemfile
70
81
  - Guardfile
82
+ - lib/webmachine/adapters/mongrel.rb
71
83
  - lib/webmachine/adapters/webrick.rb
72
84
  - lib/webmachine/adapters.rb
85
+ - lib/webmachine/configuration.rb
73
86
  - lib/webmachine/decision/conneg.rb
74
87
  - lib/webmachine/decision/flow.rb
75
88
  - lib/webmachine/decision/fsm.rb
@@ -80,6 +93,7 @@ files:
80
93
  - lib/webmachine/errors.rb
81
94
  - lib/webmachine/headers.rb
82
95
  - lib/webmachine/locale/en.yml
96
+ - lib/webmachine/media_type.rb
83
97
  - lib/webmachine/request.rb
84
98
  - lib/webmachine/resource/callbacks.rb
85
99
  - lib/webmachine/resource/encodings.rb
@@ -89,19 +103,59 @@ files:
89
103
  - lib/webmachine/translation.rb
90
104
  - lib/webmachine/version.rb
91
105
  - lib/webmachine.rb
106
+ - pkg/webmachine-0.1.0/examples/webrick.rb
107
+ - pkg/webmachine-0.1.0/Gemfile
108
+ - pkg/webmachine-0.1.0/Guardfile
109
+ - pkg/webmachine-0.1.0/lib/webmachine/adapters/webrick.rb
110
+ - pkg/webmachine-0.1.0/lib/webmachine/adapters.rb
111
+ - pkg/webmachine-0.1.0/lib/webmachine/decision/conneg.rb
112
+ - pkg/webmachine-0.1.0/lib/webmachine/decision/flow.rb
113
+ - pkg/webmachine-0.1.0/lib/webmachine/decision/fsm.rb
114
+ - pkg/webmachine-0.1.0/lib/webmachine/decision/helpers.rb
115
+ - pkg/webmachine-0.1.0/lib/webmachine/decision.rb
116
+ - pkg/webmachine-0.1.0/lib/webmachine/dispatcher/route.rb
117
+ - pkg/webmachine-0.1.0/lib/webmachine/dispatcher.rb
118
+ - pkg/webmachine-0.1.0/lib/webmachine/errors.rb
119
+ - pkg/webmachine-0.1.0/lib/webmachine/headers.rb
120
+ - pkg/webmachine-0.1.0/lib/webmachine/locale/en.yml
121
+ - pkg/webmachine-0.1.0/lib/webmachine/request.rb
122
+ - pkg/webmachine-0.1.0/lib/webmachine/resource/callbacks.rb
123
+ - pkg/webmachine-0.1.0/lib/webmachine/resource/encodings.rb
124
+ - pkg/webmachine-0.1.0/lib/webmachine/resource.rb
125
+ - pkg/webmachine-0.1.0/lib/webmachine/response.rb
126
+ - pkg/webmachine-0.1.0/lib/webmachine/streaming.rb
127
+ - pkg/webmachine-0.1.0/lib/webmachine/translation.rb
128
+ - pkg/webmachine-0.1.0/lib/webmachine/version.rb
129
+ - pkg/webmachine-0.1.0/lib/webmachine.rb
130
+ - pkg/webmachine-0.1.0/Rakefile
131
+ - pkg/webmachine-0.1.0/README.md
132
+ - pkg/webmachine-0.1.0/spec/spec_helper.rb
133
+ - pkg/webmachine-0.1.0/spec/tests.org
134
+ - pkg/webmachine-0.1.0/spec/webmachine/decision/conneg_spec.rb
135
+ - pkg/webmachine-0.1.0/spec/webmachine/decision/flow_spec.rb
136
+ - pkg/webmachine-0.1.0/spec/webmachine/dispatcher/route_spec.rb
137
+ - pkg/webmachine-0.1.0/spec/webmachine/dispatcher_spec.rb
138
+ - pkg/webmachine-0.1.0/spec/webmachine/headers_spec.rb
139
+ - pkg/webmachine-0.1.0/spec/webmachine/request_spec.rb
140
+ - pkg/webmachine-0.1.0/webmachine.gemspec
141
+ - pkg/webmachine-0.1.0.gem
92
142
  - Rakefile
93
143
  - README.md
94
144
  - spec/spec_helper.rb
95
145
  - spec/tests.org
146
+ - spec/webmachine/configuration_spec.rb
96
147
  - spec/webmachine/decision/conneg_spec.rb
97
148
  - spec/webmachine/decision/flow_spec.rb
149
+ - spec/webmachine/decision/helpers_spec.rb
98
150
  - spec/webmachine/dispatcher/route_spec.rb
99
151
  - spec/webmachine/dispatcher_spec.rb
152
+ - spec/webmachine/errors_spec.rb
100
153
  - spec/webmachine/headers_spec.rb
154
+ - spec/webmachine/media_type_spec.rb
101
155
  - spec/webmachine/request_spec.rb
102
156
  - webmachine.gemspec
103
157
  - .gitignore
104
- homepage: http://seancribbs.github.com/webmachine.rb
158
+ homepage: http://github.com/seancribbs/webmachine-ruby
105
159
  licenses: []
106
160
  post_install_message:
107
161
  rdoc_options: []
@@ -128,10 +182,14 @@ summary: webmachine is a toolkit for building HTTP applications,
128
182
  test_files:
129
183
  - spec/spec_helper.rb
130
184
  - spec/tests.org
185
+ - spec/webmachine/configuration_spec.rb
131
186
  - spec/webmachine/decision/conneg_spec.rb
132
187
  - spec/webmachine/decision/flow_spec.rb
188
+ - spec/webmachine/decision/helpers_spec.rb
133
189
  - spec/webmachine/dispatcher/route_spec.rb
134
190
  - spec/webmachine/dispatcher_spec.rb
191
+ - spec/webmachine/errors_spec.rb
135
192
  - spec/webmachine/headers_spec.rb
193
+ - spec/webmachine/media_type_spec.rb
136
194
  - spec/webmachine/request_spec.rb
137
195
  - .gitignore