http_router 0.3.0 → 0.3.1
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/.gitignore +1 -0
- data/CHANGELOG +6 -0
- data/benchmarks/rec2.rb +25 -25
- data/lib/http_router/node.rb +1 -0
- data/lib/http_router/version.rb +1 -1
- data/spec/recognize_spec.rb +17 -1
- metadata +18 -19
- data/Gemfile.lock +0 -59
data/.gitignore
CHANGED
data/CHANGELOG
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
== 0.3.1
|
2
|
+
|
3
|
+
* Node transplant in request tree building not working in all cases. (Joshua Hull, f82ae82)
|
4
|
+
* Smaller set of benchmarks to match rack-mount (Joshua Hull, ca723e9)
|
5
|
+
* Better 405 test that is order invariant. (Thanks Cored!) (Joshua Hull, 4ad40e6)
|
6
|
+
|
1
7
|
== 0.3.0
|
2
8
|
|
3
9
|
* Unescape param values (Joshua Hull, d7a6a1f)
|
data/benchmarks/rec2.rb
CHANGED
@@ -5,31 +5,31 @@ require 'lib/http_router'
|
|
5
5
|
u = HttpRouter.new
|
6
6
|
u.add('/simple').to {|env| [200, {'Content-type'=>'text/html'}, []]}
|
7
7
|
u.add('/simple/again').compile.to {|env| [200, {'Content-type'=>'text/html'}, []]}
|
8
|
-
u.add('/simple/again/and/again').compile.to {|env| [200, {'Content-type'=>'text/html'}, []]}
|
8
|
+
#u.add('/simple/again/and/again').compile.to {|env| [200, {'Content-type'=>'text/html'}, []]}
|
9
9
|
u.add('/dynamic/:variable').compile.to {|env| [200, {'Content-type'=>'text/html'}, []]}
|
10
|
-
u.add('/rails/:controller/:action/:id').compile.to {|env| [200, {'Content-type'=>'text/html'}, []]}
|
11
|
-
u.add('/greedy/:greed').matching(:greed => /.*/).compile.to {|env| [200, {'Content-type'=>'text/html'}, []]}
|
10
|
+
#u.add('/rails/:controller/:action/:id').compile.to {|env| [200, {'Content-type'=>'text/html'}, []]}
|
11
|
+
#u.add('/greedy/:greed').matching(:greed => /.*/).compile.to {|env| [200, {'Content-type'=>'text/html'}, []]}
|
12
12
|
#u.add('/greedy/hey.:greed.html').to {|env| [200, {'Content-type'=>'text/html'}, []]}
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
14
|
+
puts Benchmark.measure {
|
15
|
+
('aa'..'nn').each do |first|
|
16
|
+
('a'..'n').each do |second|
|
17
|
+
u.add("/#{first}/#{second}").to {|env| [200, {'Content-type'=>'text/html'}, []]}
|
18
|
+
end
|
19
|
+
end
|
20
20
|
#
|
21
|
-
|
22
|
-
|
21
|
+
puts "u.routes.size: #{u.routes.size}"
|
22
|
+
}
|
23
23
|
#
|
24
24
|
TIMES = 50_000
|
25
25
|
|
26
26
|
simple_env = Rack::MockRequest.env_for('/simple')
|
27
27
|
simple2_env = Rack::MockRequest.env_for('/simple/again')
|
28
|
-
simple3_env = Rack::MockRequest.env_for('/simple/again/and/again')
|
28
|
+
#simple3_env = Rack::MockRequest.env_for('/simple/again/and/again')
|
29
29
|
simple_and_dynamic_env = Rack::MockRequest.env_for('/dynamic/anything')
|
30
|
-
simple_and_dynamic_env1 = Rack::MockRequest.env_for('/rails/controller/action/id')
|
31
|
-
simple_and_dynamic_env2 = Rack::MockRequest.env_for('/greedy/controller/action/id')
|
32
|
-
simple_and_dynamic_env3 = Rack::MockRequest.env_for('/greedy/hey.hello.html')
|
30
|
+
#simple_and_dynamic_env1 = Rack::MockRequest.env_for('/rails/controller/action/id')
|
31
|
+
#simple_and_dynamic_env2 = Rack::MockRequest.env_for('/greedy/controller/action/id')
|
32
|
+
#simple_and_dynamic_env3 = Rack::MockRequest.env_for('/greedy/hey.hello.html')
|
33
33
|
|
34
34
|
RBench.run(TIMES) do
|
35
35
|
|
@@ -41,21 +41,21 @@ RBench.run(TIMES) do
|
|
41
41
|
u.call(simple2_env).first == 200 or raise
|
42
42
|
end
|
43
43
|
|
44
|
-
report "8 levels, static" do
|
45
|
-
|
46
|
-
end
|
44
|
+
#report "8 levels, static" do
|
45
|
+
# u.call(simple3_env).first == 200 or raise
|
46
|
+
#end
|
47
47
|
|
48
48
|
report "4 levels, 1 dynamic" do
|
49
49
|
u.call(simple_and_dynamic_env).first == 200 or raise
|
50
50
|
end
|
51
51
|
|
52
|
-
report "8 levels, 3 dynamic" do
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
report "4 levels, 1 greedy" do
|
57
|
-
|
58
|
-
end
|
52
|
+
#report "8 levels, 3 dynamic" do
|
53
|
+
# u.call(simple_and_dynamic_env1).first == 200 or raise
|
54
|
+
#end
|
55
|
+
#
|
56
|
+
#report "4 levels, 1 greedy" do
|
57
|
+
# u.call(simple_and_dynamic_env2).first == 200 or raise
|
58
|
+
#end
|
59
59
|
|
60
60
|
end
|
61
61
|
|
data/lib/http_router/node.rb
CHANGED
data/lib/http_router/version.rb
CHANGED
data/spec/recognize_spec.rb
CHANGED
@@ -124,7 +124,11 @@ describe "HttpRouter#recognize" do
|
|
124
124
|
@router.recognize(Rack::MockRequest.env_for('/test', :method => 'GET')).destination.should == :get
|
125
125
|
@router.recognize(Rack::MockRequest.env_for('/test', :method => 'DELETE')).destination.should == :delete
|
126
126
|
@router.recognize(Rack::MockRequest.env_for('/test', :method => 'PUT')).status.should == 405
|
127
|
-
@router.recognize(Rack::MockRequest.env_for('/test', :method => 'PUT')).headers['Allow'].
|
127
|
+
methods = @router.recognize(Rack::MockRequest.env_for('/test', :method => 'PUT')).headers['Allow'].split(/,\s+/)
|
128
|
+
methods.should include('DELETE')
|
129
|
+
methods.should include('GET')
|
130
|
+
methods.should include('POST')
|
131
|
+
methods.size.should == 3
|
128
132
|
@router.recognize(Rack::MockRequest.env_for('/test.html', :method => 'POST')).destination.should == :post
|
129
133
|
@router.recognize(Rack::MockRequest.env_for('/test.html', :method => 'GET')).destination.should == :get
|
130
134
|
@router.recognize(Rack::MockRequest.env_for('/test.html', :method => 'DELETE')).destination.should == :delete
|
@@ -153,6 +157,18 @@ describe "HttpRouter#recognize" do
|
|
153
157
|
@router.recognize(Rack::MockRequest.env_for('/test', :method => 'PUT')).route.named.should == :test_catchall
|
154
158
|
end
|
155
159
|
|
160
|
+
it "should try multiple request method restrictions in both orders" do
|
161
|
+
@router.add("/test").host('host2').to(:host2)
|
162
|
+
@router.add("/test").post.to(:post)
|
163
|
+
@router.add("/test").host('host2').get.to(:host2_get)
|
164
|
+
@router.add("/test").post.host('host2').to(:host2_post)
|
165
|
+
|
166
|
+
@router.recognize(Rack::MockRequest.env_for('http://host2/test', :method => 'PUT')).dest.should == :host2
|
167
|
+
@router.recognize(Rack::MockRequest.env_for('http://host1/test', :method => 'POST')).dest.should == :post
|
168
|
+
@router.recognize(Rack::MockRequest.env_for('http://host2/test', :method => 'GET')).dest.should == :host2_get
|
169
|
+
@router.recognize(Rack::MockRequest.env_for('http://host2/test', :method => 'POST')).dest.should == :host2_post
|
170
|
+
end
|
171
|
+
|
156
172
|
it "should try both specific and non-specifc routes" do
|
157
173
|
@router.post("/test").host('host1').to(:post_host1)
|
158
174
|
@router.add("/test").host('host2').to(:any_post2)
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: http_router
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 1
|
10
|
+
version: 0.3.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Joshua Hull
|
@@ -15,10 +15,11 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-06-
|
18
|
+
date: 2010-06-30 00:00:00 -04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
+
prerelease: false
|
22
23
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|
23
24
|
none: false
|
24
25
|
requirements:
|
@@ -30,10 +31,10 @@ dependencies:
|
|
30
31
|
- 0
|
31
32
|
version: "1.0"
|
32
33
|
requirement: *id001
|
33
|
-
name: rack
|
34
|
-
prerelease: false
|
35
34
|
type: :runtime
|
35
|
+
name: rack
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
|
+
prerelease: false
|
37
38
|
version_requirements: &id002 !ruby/object:Gem::Requirement
|
38
39
|
none: false
|
39
40
|
requirements:
|
@@ -46,10 +47,10 @@ dependencies:
|
|
46
47
|
- 1
|
47
48
|
version: 0.2.1
|
48
49
|
requirement: *id002
|
49
|
-
name: url_mount
|
50
|
-
prerelease: false
|
51
50
|
type: :runtime
|
51
|
+
name: url_mount
|
52
52
|
- !ruby/object:Gem::Dependency
|
53
|
+
prerelease: false
|
53
54
|
version_requirements: &id003 !ruby/object:Gem::Requirement
|
54
55
|
none: false
|
55
56
|
requirements:
|
@@ -60,10 +61,10 @@ dependencies:
|
|
60
61
|
- 0
|
61
62
|
version: "0"
|
62
63
|
requirement: *id003
|
63
|
-
name: rspec
|
64
|
-
prerelease: false
|
65
64
|
type: :development
|
65
|
+
name: rspec
|
66
66
|
- !ruby/object:Gem::Dependency
|
67
|
+
prerelease: false
|
67
68
|
version_requirements: &id004 !ruby/object:Gem::Requirement
|
68
69
|
none: false
|
69
70
|
requirements:
|
@@ -74,10 +75,10 @@ dependencies:
|
|
74
75
|
- 0
|
75
76
|
version: "0"
|
76
77
|
requirement: *id004
|
77
|
-
name: rake
|
78
|
-
prerelease: false
|
79
78
|
type: :development
|
79
|
+
name: rake
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
|
+
prerelease: false
|
81
82
|
version_requirements: &id005 !ruby/object:Gem::Requirement
|
82
83
|
none: false
|
83
84
|
requirements:
|
@@ -88,10 +89,10 @@ dependencies:
|
|
88
89
|
- 0
|
89
90
|
version: "0"
|
90
91
|
requirement: *id005
|
91
|
-
name: sinatra
|
92
|
-
prerelease: false
|
93
92
|
type: :development
|
93
|
+
name: sinatra
|
94
94
|
- !ruby/object:Gem::Dependency
|
95
|
+
prerelease: false
|
95
96
|
version_requirements: &id006 !ruby/object:Gem::Requirement
|
96
97
|
none: false
|
97
98
|
requirements:
|
@@ -102,10 +103,10 @@ dependencies:
|
|
102
103
|
- 0
|
103
104
|
version: "0"
|
104
105
|
requirement: *id006
|
105
|
-
name: rbench
|
106
|
-
prerelease: false
|
107
106
|
type: :development
|
107
|
+
name: rbench
|
108
108
|
- !ruby/object:Gem::Dependency
|
109
|
+
prerelease: false
|
109
110
|
version_requirements: &id007 !ruby/object:Gem::Requirement
|
110
111
|
none: false
|
111
112
|
requirements:
|
@@ -118,9 +119,8 @@ dependencies:
|
|
118
119
|
- 11
|
119
120
|
version: 0.0.11
|
120
121
|
requirement: *id007
|
121
|
-
name: tumbler
|
122
|
-
prerelease: false
|
123
122
|
type: :development
|
123
|
+
name: tumbler
|
124
124
|
description: A kick-ass HTTP router for use in Rack & Sinatra
|
125
125
|
email: joshbuddy@gmail.com
|
126
126
|
executables: []
|
@@ -133,7 +133,6 @@ files:
|
|
133
133
|
- .gitignore
|
134
134
|
- CHANGELOG
|
135
135
|
- Gemfile
|
136
|
-
- Gemfile.lock
|
137
136
|
- README.rdoc
|
138
137
|
- Rakefile
|
139
138
|
- Tumbler
|
data/Gemfile.lock
DELETED
@@ -1,59 +0,0 @@
|
|
1
|
-
---
|
2
|
-
dependencies:
|
3
|
-
url_mount:
|
4
|
-
group:
|
5
|
-
- :default
|
6
|
-
version: ">= 0.2.1"
|
7
|
-
rake:
|
8
|
-
group:
|
9
|
-
- :development
|
10
|
-
version: ">= 0"
|
11
|
-
tumbler:
|
12
|
-
group:
|
13
|
-
- :development
|
14
|
-
version: ">= 0.0.11"
|
15
|
-
rspec:
|
16
|
-
group:
|
17
|
-
- :development
|
18
|
-
version: ">= 0"
|
19
|
-
rack:
|
20
|
-
group:
|
21
|
-
- :default
|
22
|
-
version: ">= 1.0"
|
23
|
-
sinatra:
|
24
|
-
group:
|
25
|
-
- :development
|
26
|
-
version: ">= 0"
|
27
|
-
rbench:
|
28
|
-
group:
|
29
|
-
- :development
|
30
|
-
version: ">= 0"
|
31
|
-
specs:
|
32
|
-
- rake:
|
33
|
-
version: 0.8.7
|
34
|
-
- blockenspiel:
|
35
|
-
version: 0.3.3
|
36
|
-
- bundler:
|
37
|
-
version: 0.9.26
|
38
|
-
- callsite:
|
39
|
-
version: 0.0.2
|
40
|
-
- json:
|
41
|
-
version: 1.4.3
|
42
|
-
- rack:
|
43
|
-
version: 1.2.1
|
44
|
-
- rbench:
|
45
|
-
version: 0.2.3
|
46
|
-
- rspec:
|
47
|
-
version: 1.3.0
|
48
|
-
- sinatra:
|
49
|
-
version: "1.0"
|
50
|
-
- versionomy:
|
51
|
-
version: 0.4.0
|
52
|
-
- tumbler:
|
53
|
-
version: 0.0.11
|
54
|
-
- url_mount:
|
55
|
-
version: 0.2.1
|
56
|
-
hash: df813dada9b96e269c9f2dc81627e29f1dcec5f4
|
57
|
-
sources:
|
58
|
-
- Rubygems:
|
59
|
-
uri: http://gemcutter.org
|