http_router 0.8.11 → 0.9.3

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/test/generation.rb CHANGED
@@ -1,83 +1,13 @@
1
1
  require 'json'
2
-
3
- generation_file = "#{File.dirname(__FILE__)}/common/generate.txt"
4
- generation = File.read(generation_file)
5
-
6
- class GenerationTest
7
- Info = Struct.new(:case, :original_line, :num)
8
-
9
- attr_reader :routes, :tests
10
- def initialize(file)
11
- @tests = []
12
- @routes = Info.new([], "", 0)
13
- end
14
-
15
- def error(msg)
16
- raise("Error in case: #{@routes.original_line.strip}:#{@routes.num + 1}\n#{msg}")
17
- end
18
-
19
- def add_test(line, num)
20
- @tests << Info.new(JSON.parse(line), line, num)
21
- end
22
-
23
- def add_routes(line, num)
24
- info = Info.new(JSON.parse(line), line, num)
25
- error("Routes have already been defined without tests") if info.case.is_a?(Array) && !@routes.case.empty?
26
- if info.case.is_a?(Array)
27
- @routes = info
28
- elsif @routes.case.empty?
29
- info.case = [info.case]
30
- @routes = info
31
- else
32
- @routes.case << info.case
33
- end
34
- end
35
-
36
- def interpret_val(val)
37
- case val
38
- when nil
39
- error("Unable to interpret #{val.inspect}")
40
- when Hash
41
- val['regex'] ? Regexp.new(val['regex']) : error("Okay serious, no idea #{val.inspect}")
42
- else
43
- val
44
- end
45
- end
46
-
47
- def invoke
48
- error("invoke called with no tests or routes") if @tests.empty? || @routes.nil?
49
- router = HttpRouter.new
50
- @routes.case.each do |route_definition|
51
- error("Too many keys! #{route_definition.keys.inspect}") unless route_definition.keys.size == 1
52
- route_name, route_properties = route_definition.keys.first, route_definition.values.first
53
- route = case route_properties
54
- when String
55
- router.add(route_properties)
56
- when Hash
57
- opts = {}
58
- route_path = interpret_val(route_properties.delete("path"))
59
- if route_properties.key?("conditions")
60
- opts[:conditions] = Hash[route_properties.delete("conditions").map{|k, v| [k.to_sym, interpret_val(v)]}]
61
- end
62
- if route_properties.key?("default")
63
- opts[:default_values] = Hash[route_properties.delete("default").map{|k, v| [k.to_sym, interpret_val(v)]}]
64
- end
65
- route_properties.each do |key, val|
66
- opts[key.to_sym] = interpret_val(val)
67
- end
68
- router.add(route_path, opts)
69
- else
70
- error("Route isn't a String or hash")
71
- end
72
- route.name(route_name.to_sym)
73
- route.to{|env| [200, {"env-to-test" => env.dup}, [route_name]]}
74
- end
2
+ require "#{File.dirname(__FILE__)}/generic"
3
+ class GenerationTest < AbstractTest
4
+ def run_tests
75
5
  @tests.map(&:case).each do |(expected_result, name, args)|
76
6
  args = [args] unless args.is_a?(Array)
77
7
  args.compact!
78
8
  args.map!{|a| a.is_a?(Hash) ? Hash[a.map{|k,v| [k.to_sym, v]}] : a }
79
9
  result = begin
80
- router.url(name.to_sym, *args)
10
+ @router.url(name.to_sym, *args)
81
11
  rescue HttpRouter::InvalidRouteException
82
12
  nil
83
13
  rescue HttpRouter::MissingParameterException
@@ -89,31 +19,4 @@ class GenerationTest
89
19
  end
90
20
  end
91
21
 
92
- tests = []
93
- test = nil
94
- num = 0
95
- generation.each_line do |line|
96
- begin
97
- case line
98
- when /^#/, /^\s*$/
99
- # skip
100
- when /^( |\t)/
101
- test.add_test(line, num)
102
- else
103
- if test.nil? || !test.tests.empty?
104
- tests << test if test
105
- test = GenerationTest.new(generation_file)
106
- end
107
- test.add_routes(line, num)
108
- end
109
- rescue
110
- warn "There was a problem with #{num}:#{line}"
111
- raise
112
- end
113
- num += 1
114
- end
115
- tests << test
116
-
117
- puts "Running generation tests (Routes: #{tests.size}, Tests: #{tests.inject(0){|s, t| s+=t.tests.size}})..."
118
- tests.each(&:invoke)
119
- puts "\ndone!"
22
+ GenerationTest.run("#{File.dirname(__FILE__)}/common/generate.txt")
data/test/generic.rb ADDED
@@ -0,0 +1,111 @@
1
+ require 'json'
2
+
3
+ class AbstractTest
4
+ def self.run(file)
5
+ contents = File.read(file)
6
+ tests = []
7
+ test = nil
8
+ num = 0
9
+ contents.each_line do |line|
10
+ begin
11
+ case line
12
+ when /^#/, /^\s*$/
13
+ # skip
14
+ when /^( |\t)/
15
+ test.add_test(line, num)
16
+ else
17
+ if test.nil? || !test.tests.empty?
18
+ tests << test if test
19
+ test = new(file)
20
+ end
21
+ test.add_routes(line, num)
22
+ end
23
+ rescue
24
+ warn "There was a problem with #{num}:#{line}"
25
+ raise
26
+ end
27
+ num += 1
28
+ end
29
+ tests << test
30
+
31
+ puts "Running tests (#{name}) (Routes: #{tests.size}, Tests: #{tests.inject(0){|s, t| s+=t.tests.size}})..."
32
+ tests.each(&:invoke)
33
+ puts "\ndone!"
34
+ end
35
+
36
+ Info = Struct.new(:case, :original_line, :num)
37
+
38
+ attr_reader :routes, :tests
39
+ def initialize(file)
40
+ @tests = []
41
+ @routes = Info.new([], "", 0)
42
+ end
43
+
44
+ def error(msg)
45
+ raise("Error in case: #{@routes.original_line.strip}:#{@routes.num + 1}\n#{msg}")
46
+ end
47
+
48
+ def add_test(line, num)
49
+ @tests << Info.new(JSON.parse(line), line, num)
50
+ end
51
+
52
+ def add_routes(line, num)
53
+ info = Info.new(JSON.parse(line), line, num)
54
+ error("Routes have already been defined without tests") if info.case.is_a?(Array) && !@routes.case.empty?
55
+ if info.case.is_a?(Array)
56
+ @routes = info
57
+ elsif @routes.case.empty?
58
+ info.case = [info.case]
59
+ @routes = info
60
+ else
61
+ @routes.case << info.case
62
+ end
63
+ end
64
+
65
+ def interpret_val(val)
66
+ case val
67
+ when nil
68
+ error("Unable to interpret #{val.inspect}")
69
+ when Hash
70
+ val['regex'] ? Regexp.new(val['regex']) : error("Okay serious, no idea #{val.inspect}")
71
+ else
72
+ val
73
+ end
74
+ end
75
+
76
+ def run_tests
77
+ raise
78
+ end
79
+
80
+ def invoke
81
+ error("invoke called with no tests or routes") if @tests.empty? || @routes.nil?
82
+ @router = HttpRouter.new
83
+ @routes.case.each do |route_definition|
84
+ error("Too many keys! #{route_definition.keys.inspect}") unless route_definition.keys.size == 1
85
+ route_name, route_properties = route_definition.keys.first, route_definition.values.first
86
+ route = case route_properties
87
+ when String
88
+ @router.add(route_properties)
89
+ when Hash
90
+ opts = {}
91
+ route_path = interpret_val(route_properties.delete("path"))
92
+ if route_properties.key?("conditions")
93
+ opts[:conditions] = Hash[route_properties.delete("conditions").map{|k, v| [k.to_sym, interpret_val(v)]}]
94
+ end
95
+ if route_properties.key?("default")
96
+ opts[:default_values] = Hash[route_properties.delete("default").map{|k, v| [k.to_sym, interpret_val(v)]}]
97
+ end
98
+ route_properties.each do |key, val|
99
+ opts[key.to_sym] = interpret_val(val)
100
+ end
101
+ @router.add(route_path, opts)
102
+ else
103
+ error("Route isn't a String or hash")
104
+ end
105
+ route.name(route_name.to_sym)
106
+ route.to{|env| [200, {"env-to-test" => env.dup}, [route_name]]}
107
+ end
108
+ run_tests
109
+ print '.'
110
+ end
111
+ end
data/test/recognition.rb CHANGED
@@ -1,74 +1,6 @@
1
- require 'json'
2
-
3
- recognition_file = "#{File.dirname(__FILE__)}/common/recognize.txt"
4
- recognition = File.read(recognition_file)
5
-
6
- class RecognitionTest
7
- Info = Struct.new(:case, :original_line, :num)
8
-
9
- attr_reader :routes, :tests
10
- def initialize(file)
11
- @tests = []
12
- @routes = Info.new([], "", 0)
13
- end
14
-
15
- def error(msg)
16
- raise("Error in case: #{@routes.original_line.strip}:#{@routes.num + 1}\n#{msg}")
17
- end
18
-
19
- def add_test(line, num)
20
- @tests << Info.new(JSON.parse(line), line, num)
21
- end
22
-
23
- def add_routes(line, num)
24
- info = Info.new(JSON.parse(line), line, num)
25
- error("Routes have already been defined without tests") if info.case.is_a?(Array) && !@routes.case.empty?
26
- if info.case.is_a?(Array)
27
- @routes = info
28
- elsif @routes.case.empty?
29
- info.case = [info.case]
30
- @routes = info
31
- else
32
- @routes.case << info.case
33
- end
34
- end
35
-
36
- def interpret_val(val)
37
- case val
38
- when nil
39
- error("Unable to interpret #{val.inspect}")
40
- when Hash
41
- val['regex'] ? Regexp.new(val['regex']) : error("Okay serious, no idea #{val.inspect}")
42
- else
43
- val
44
- end
45
- end
46
-
47
- def invoke
48
- error("invoke called with no tests or routes") if @tests.empty? || @routes.nil?
49
- router = HttpRouter.new
50
- @routes.case.each do |route_definition|
51
- error("Too many keys! #{route_definition.keys.inspect}") unless route_definition.keys.size == 1
52
- route_name, route_properties = route_definition.keys.first, route_definition.values.first
53
- route = case route_properties
54
- when String
55
- router.add(route_properties)
56
- when Hash
57
- opts = {}
58
- route_path = interpret_val(route_properties.delete("path"))
59
- if route_properties.key?("conditions")
60
- opts[:conditions] = Hash[route_properties.delete("conditions").map{|k, v| [k.to_sym, interpret_val(v)]}]
61
- end
62
- route_properties.each do |key, val|
63
- opts[key.to_sym] = interpret_val(val)
64
- end
65
- router.add(route_path, opts)
66
- else
67
- error("Route isn't a String or hash")
68
- end
69
- route.name(route_name.to_sym)
70
- route.to{|env| [200, {"env-to-test" => env.dup}, [route_name]]}
71
- end
1
+ require "#{File.dirname(__FILE__)}/generic"
2
+ class RecognitionTest < AbstractTest
3
+ def run_tests
72
4
  @tests.map(&:case).each do |(name, req, params)|
73
5
  env = case req
74
6
  when String
@@ -79,7 +11,7 @@ class RecognitionTest
79
11
  e['rack.url_scheme'] = req['scheme'] if req.key?('scheme')
80
12
  e
81
13
  end
82
- response = router.call(env)
14
+ response = @router.call(env)
83
15
  case name
84
16
  when nil
85
17
  error("Expected no response") unless response.first == 404
@@ -112,31 +44,5 @@ class RecognitionTest
112
44
  end
113
45
  end
114
46
 
115
- tests = []
116
- test = nil
117
- num = 0
118
- recognition.each_line do |line|
119
- begin
120
- case line
121
- when /^#/, /^\s*$/
122
- # skip
123
- when /^( |\t)/
124
- test.add_test(line, num)
125
- else
126
- if test.nil? || !test.tests.empty?
127
- tests << test if test
128
- test = RecognitionTest.new(recognition_file)
129
- end
130
- test.add_routes(line, num)
131
- end
132
- rescue
133
- warn "There was a problem with #{num}:#{line}"
134
- raise
135
- end
136
- num += 1
137
- end
138
- tests << test
139
-
140
- puts "Running recognition tests (Routes: #{tests.size}, Tests: #{tests.inject(0){|s, t| s+=t.tests.size}})..."
141
- tests.each(&:invoke)
142
- puts "\ndone!"
47
+ RecognitionTest.run("#{File.dirname(__FILE__)}/common/recognize.txt")
48
+ RecognitionTest.run("#{File.dirname(__FILE__)}/common/http_recognize.txt")
data/test/test_misc.rb CHANGED
@@ -8,8 +8,8 @@ class TestMisc < MiniTest::Unit::TestCase
8
8
 
9
9
  assert_equal nil, r1.recognize(Rack::Request.new(Rack::MockRequest.env_for('/test2')))
10
10
  assert r2.recognize(Rack::MockRequest.env_for('/test2'))
11
- assert_equal r1.routes.first, r1.named_routes[:test_route]
12
- assert_equal r2.routes.first, r2.named_routes[:test_route]
11
+ assert_equal r1.routes.first, r1.named_routes[:test_route].first
12
+ assert_equal r2.routes.first, r2.named_routes[:test_route].first
13
13
 
14
14
  r1.add('/another').name(:test).to(:test2)
15
15
 
@@ -33,4 +33,28 @@ class TestMisc < MiniTest::Unit::TestCase
33
33
  assert 304, response[0]
34
34
  assert "/hi", response[1]["Location"]
35
35
  end
36
+
37
+ def test_multi_name_gen
38
+ r = HttpRouter.new
39
+ r.add('/').name(:index).default_destination
40
+ r.add('/:name').name(:index).default_destination
41
+ r.add('/:name/:category').name(:index).default_destination
42
+ assert_equal '/', r.url(:index)
43
+ assert_equal '/name', r.url(:index, 'name')
44
+ assert_equal '/name/category', r.url(:index, 'name', 'category')
45
+ end
46
+
47
+ def test_regex_generation
48
+ r = HttpRouter.new
49
+ r.add(%r|/test/.*|, :path_for_generation => '/test/:variable').name(:route).default_destination
50
+ assert_equal '/test/var', r.url(:route, "var")
51
+ end
52
+
53
+ def test_regex_generation
54
+ r = HttpRouter.new
55
+ r.add(%r|/test/.*|, :path_for_generation => '/test/:variable').name(:route).default_destination
56
+ assert_equal '/test/var', r.url(:route, "var")
57
+ assert_equal '/test/var', r.url(:route, :variable => "var")
58
+ assert_raises(HttpRouter::InvalidRouteException) { r.url(:route) }
59
+ end
36
60
  end
@@ -30,10 +30,10 @@ class TestMounting < MiniTest::Unit::TestCase
30
30
 
31
31
  def test_path_with_optional
32
32
  @r1.add("/foo(/:bar)").to(@r2)
33
- @r2.add("/hey(/:there)").name(:test).to{|env| [200, {}, []]}
34
- assert_equal "/foo/hey", @r2.url(:test)
35
- assert_equal "/foo/bar/hey", @r2.url(:test, :bar => "bar")
36
- assert_equal "/foo/bar/hey/there", @r2.url(:test, :bar => "bar", :there => "there")
33
+ @r2.add("/hey(/:there)").name(:test2).to{|env| [200, {}, []]}
34
+ assert_equal "/foo/hey", @r2.url(:test2)
35
+ assert_equal "/foo/bar/hey", @r2.url(:test2, :bar => "bar")
36
+ assert_equal "/foo/bar/hey/there", @r2.url(:test2, :bar => "bar", :there => "there")
37
37
  end
38
38
 
39
39
  def test_nest3
@@ -73,6 +73,15 @@ class TestRecognition < MiniTest::Unit::TestCase
73
73
  assert_body 'working', router.call(Rack::MockRequest.env_for('/'))
74
74
  end
75
75
 
76
+ def test_non_path_matching
77
+ passed, working = router {
78
+ add(:conditions => {:user_agent => /MSIE/}).to { |env| [200, {}, ['IE']] }
79
+ add('/').to { |env| [200, {}, ['SOMETHING ELSE']] }
80
+ }
81
+ assert_body 'SOMETHING ELSE', router.call(Rack::MockRequest.env_for('/'))
82
+ assert_body 'IE', router.call(Rack::MockRequest.env_for('/', 'HTTP_USER_AGENT' => 'THIS IS MSIE DAWG'))
83
+ end
84
+
76
85
  def test_passing_with_cascade
77
86
  passed, working = router {
78
87
  add('/').to { |env| [200, {'X-Cascade' => 'pass'}, ['pass']] }
@@ -90,4 +99,13 @@ class TestRecognition < MiniTest::Unit::TestCase
90
99
  assert_route matching, '/test/123/123/asd/aasd/zxcqwe/asdzxc', {:var => '123', :var2 => '123', :glob => %w{asd aasd zxcqwe asdzxc}}
91
100
  assert got_this_far, "matching should have gotten this far"
92
101
  end
102
+
103
+ def test_compiling_uncompiling
104
+ @router = HttpRouter.new
105
+ root = @router.add('/').default_destination
106
+ assert_route root, '/'
107
+ test = @router.add('/test').default_destination
108
+ assert_route root, '/'
109
+ assert_route test, '/test'
110
+ end
93
111
  end
metadata CHANGED
@@ -1,8 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: http_router
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 61
4
5
  prerelease:
5
- version: 0.8.11
6
+ segments:
7
+ - 0
8
+ - 9
9
+ - 3
10
+ version: 0.9.3
6
11
  platform: ruby
7
12
  authors:
8
13
  - Joshua Hull
@@ -10,119 +15,161 @@ autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
17
 
13
- date: 2011-07-05 00:00:00 -07:00
18
+ date: 2011-07-27 00:00:00 -07:00
14
19
  default_executable:
15
20
  dependencies:
16
21
  - !ruby/object:Gem::Dependency
17
- name: rack
18
22
  prerelease: false
19
- requirement: &id001 !ruby/object:Gem::Requirement
23
+ version_requirements: &id001 !ruby/object:Gem::Requirement
20
24
  none: false
21
25
  requirements:
22
26
  - - ">="
23
27
  - !ruby/object:Gem::Version
28
+ hash: 23
29
+ segments:
30
+ - 1
31
+ - 0
32
+ - 0
24
33
  version: 1.0.0
34
+ requirement: *id001
35
+ name: rack
25
36
  type: :runtime
26
- version_requirements: *id001
27
37
  - !ruby/object:Gem::Dependency
28
- name: url_mount
29
38
  prerelease: false
30
- requirement: &id002 !ruby/object:Gem::Requirement
39
+ version_requirements: &id002 !ruby/object:Gem::Requirement
31
40
  none: false
32
41
  requirements:
33
42
  - - ~>
34
43
  - !ruby/object:Gem::Version
44
+ hash: 21
45
+ segments:
46
+ - 0
47
+ - 2
48
+ - 1
35
49
  version: 0.2.1
50
+ requirement: *id002
51
+ name: url_mount
36
52
  type: :runtime
37
- version_requirements: *id002
38
53
  - !ruby/object:Gem::Dependency
39
- name: minitest
40
54
  prerelease: false
41
- requirement: &id003 !ruby/object:Gem::Requirement
55
+ version_requirements: &id003 !ruby/object:Gem::Requirement
42
56
  none: false
43
57
  requirements:
44
58
  - - ~>
45
59
  - !ruby/object:Gem::Version
60
+ hash: 15
61
+ segments:
62
+ - 2
63
+ - 0
64
+ - 0
46
65
  version: 2.0.0
66
+ requirement: *id003
67
+ name: minitest
47
68
  type: :development
48
- version_requirements: *id003
49
69
  - !ruby/object:Gem::Dependency
50
- name: code_stats
51
70
  prerelease: false
52
- requirement: &id004 !ruby/object:Gem::Requirement
71
+ version_requirements: &id004 !ruby/object:Gem::Requirement
53
72
  none: false
54
73
  requirements:
55
74
  - - ">="
56
75
  - !ruby/object:Gem::Version
76
+ hash: 3
77
+ segments:
78
+ - 0
57
79
  version: "0"
80
+ requirement: *id004
81
+ name: code_stats
58
82
  type: :development
59
- version_requirements: *id004
60
83
  - !ruby/object:Gem::Dependency
61
- name: rake
62
84
  prerelease: false
63
- requirement: &id005 !ruby/object:Gem::Requirement
85
+ version_requirements: &id005 !ruby/object:Gem::Requirement
64
86
  none: false
65
87
  requirements:
66
88
  - - ~>
67
89
  - !ruby/object:Gem::Version
90
+ hash: 49
91
+ segments:
92
+ - 0
93
+ - 8
94
+ - 7
68
95
  version: 0.8.7
96
+ requirement: *id005
97
+ name: rake
69
98
  type: :development
70
- version_requirements: *id005
71
99
  - !ruby/object:Gem::Dependency
72
- name: rbench
73
100
  prerelease: false
74
- requirement: &id006 !ruby/object:Gem::Requirement
101
+ version_requirements: &id006 !ruby/object:Gem::Requirement
75
102
  none: false
76
103
  requirements:
77
104
  - - ">="
78
105
  - !ruby/object:Gem::Version
106
+ hash: 3
107
+ segments:
108
+ - 0
79
109
  version: "0"
110
+ requirement: *id006
111
+ name: rbench
80
112
  type: :development
81
- version_requirements: *id006
82
113
  - !ruby/object:Gem::Dependency
83
- name: json
84
114
  prerelease: false
85
- requirement: &id007 !ruby/object:Gem::Requirement
115
+ version_requirements: &id007 !ruby/object:Gem::Requirement
86
116
  none: false
87
117
  requirements:
88
118
  - - ">="
89
119
  - !ruby/object:Gem::Version
120
+ hash: 3
121
+ segments:
122
+ - 0
90
123
  version: "0"
124
+ requirement: *id007
125
+ name: json
91
126
  type: :development
92
- version_requirements: *id007
93
127
  - !ruby/object:Gem::Dependency
94
- name: phocus
95
128
  prerelease: false
96
- requirement: &id008 !ruby/object:Gem::Requirement
129
+ version_requirements: &id008 !ruby/object:Gem::Requirement
97
130
  none: false
98
131
  requirements:
99
132
  - - ">="
100
133
  - !ruby/object:Gem::Version
134
+ hash: 3
135
+ segments:
136
+ - 0
101
137
  version: "0"
138
+ requirement: *id008
139
+ name: phocus
102
140
  type: :development
103
- version_requirements: *id008
104
141
  - !ruby/object:Gem::Dependency
105
- name: bundler
106
142
  prerelease: false
107
- requirement: &id009 !ruby/object:Gem::Requirement
143
+ version_requirements: &id009 !ruby/object:Gem::Requirement
108
144
  none: false
109
145
  requirements:
110
146
  - - ~>
111
147
  - !ruby/object:Gem::Version
148
+ hash: 23
149
+ segments:
150
+ - 1
151
+ - 0
152
+ - 0
112
153
  version: 1.0.0
154
+ requirement: *id009
155
+ name: bundler
113
156
  type: :development
114
- version_requirements: *id009
115
157
  - !ruby/object:Gem::Dependency
116
- name: thin
117
158
  prerelease: false
118
- requirement: &id010 !ruby/object:Gem::Requirement
159
+ version_requirements: &id010 !ruby/object:Gem::Requirement
119
160
  none: false
120
161
  requirements:
121
162
  - - "="
122
163
  - !ruby/object:Gem::Version
164
+ hash: 15
165
+ segments:
166
+ - 1
167
+ - 2
168
+ - 8
123
169
  version: 1.2.8
170
+ requirement: *id010
171
+ name: thin
124
172
  type: :development
125
- version_requirements: *id010
126
173
  description: This library allows you to recognize and build URLs in a Rack application.
127
174
  email: joshbuddy@gmail.com
128
175
  executables: []
@@ -156,20 +203,24 @@ files:
156
203
  - examples/variable.ru
157
204
  - examples/variable_with_regex.ru
158
205
  - http_router.gemspec
206
+ - js/lib/http_router.coffee
207
+ - js/lib/http_router.js
208
+ - js/package.json
209
+ - js/test/test.coffee
210
+ - js/test/test.js
159
211
  - lib/http_router.rb
160
212
  - lib/http_router/node.rb
161
213
  - lib/http_router/node/arbitrary.rb
162
- - lib/http_router/node/destination.rb
163
214
  - lib/http_router/node/free_regex.rb
164
215
  - lib/http_router/node/glob.rb
165
216
  - lib/http_router/node/glob_regex.rb
166
217
  - lib/http_router/node/lookup.rb
218
+ - lib/http_router/node/path.rb
167
219
  - lib/http_router/node/regex.rb
168
220
  - lib/http_router/node/request.rb
169
221
  - lib/http_router/node/root.rb
170
222
  - lib/http_router/node/spanning_regex.rb
171
223
  - lib/http_router/node/variable.rb
172
- - lib/http_router/path.rb
173
224
  - lib/http_router/rack.rb
174
225
  - lib/http_router/rack/builder.rb
175
226
  - lib/http_router/rack/url_map.rb
@@ -177,10 +228,13 @@ files:
177
228
  - lib/http_router/request.rb
178
229
  - lib/http_router/response.rb
179
230
  - lib/http_router/route.rb
231
+ - lib/http_router/util.rb
180
232
  - lib/http_router/version.rb
181
233
  - test/common/generate.txt
234
+ - test/common/http_recognize.txt
182
235
  - test/common/recognize.txt
183
236
  - test/generation.rb
237
+ - test/generic.rb
184
238
  - test/helper.rb
185
239
  - test/rack/test_route.rb
186
240
  - test/recognition.rb
@@ -202,12 +256,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
202
256
  requirements:
203
257
  - - ">="
204
258
  - !ruby/object:Gem::Version
259
+ hash: 3
260
+ segments:
261
+ - 0
205
262
  version: "0"
206
263
  required_rubygems_version: !ruby/object:Gem::Requirement
207
264
  none: false
208
265
  requirements:
209
266
  - - ">="
210
267
  - !ruby/object:Gem::Version
268
+ hash: 3
269
+ segments:
270
+ - 0
211
271
  version: "0"
212
272
  requirements: []
213
273