http_router 0.5.1 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,20 +2,26 @@ require 'strscan'
2
2
 
3
3
  class HttpRouter
4
4
  class Route
5
- attr_reader :dest, :paths, :path, :matches_with, :original_path
5
+ attr_reader :dest, :paths, :path, :matches_with, :original_path, :regex
6
6
  attr_accessor :trailing_slash_ignore, :partially_match, :default_values
7
7
 
8
8
  def initialize(router, path)
9
9
  @router = router
10
- path[0,0] = '/' unless path[0] == ?/
11
- @path = path
12
- @original_path = path.dup
13
- @partially_match = extract_partial_match(path)
14
- @trailing_slash_ignore = extract_trailing_slash(path)
15
10
  @matches_with = {}
16
11
  @arbitrary = []
17
12
  @conditions = {}
18
13
  @default_values = {}
14
+ case path
15
+ when Regexp
16
+ @regex = path
17
+ path = '/*'
18
+ match_path(@regex)
19
+ end
20
+ @path = path
21
+ @original_path = path.dup
22
+ path[0,0] = '/' unless path[0] == ?/
23
+ @partially_match = extract_partial_match(path)
24
+ @trailing_slash_ignore = extract_trailing_slash(path)
19
25
  end
20
26
 
21
27
  def method_missing(method, *args, &block)
@@ -26,6 +32,10 @@ class HttpRouter
26
32
  end
27
33
  end
28
34
 
35
+ def regex?
36
+ !@regex.nil?
37
+ end
38
+
29
39
  def to_s
30
40
  "#{@original_path} conditions: #{@conditions.inspect} default_values: #{@default_values.inspect} name: #{named.inspect}"
31
41
  end
@@ -174,7 +184,15 @@ class HttpRouter
174
184
 
175
185
  # Convenient regexp matching on an entire path. Returns +self+
176
186
  def match_path(matcher)
177
- arbitrary{|env, params, dest| match = matcher.match(env.path_info); !match.nil? and match.begin(0) == 0 and match[0].size == env.path_info.size}
187
+ arbitrary{|env, params, dest|
188
+ match = matcher.match(env.path_info)
189
+ if !match.nil? and match.begin(0) == 0 and match[0].size == env.path_info.size
190
+ env['router.regex_match'] = match
191
+ true
192
+ else
193
+ false
194
+ end
195
+ }
178
196
  end
179
197
 
180
198
  # Adds an arbitrary proc matcher to a Route. Receives either a block, or a proc. The proc will receive a Rack::Request object, a Hash of the params, and the destination for this route. The proc must return true if the Route is matched. Returns +self+.
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  class HttpRouter #:nodoc
3
- VERSION = '0.5.1'
3
+ VERSION = '0.5.2'
4
4
  end
@@ -1,6 +1,9 @@
1
1
  class TestRecognition < MiniTest::Unit::TestCase
2
- def test_simple
2
+ def test_empty
3
3
  assert_route router.add(''), '/'
4
+ end
5
+
6
+ def test_simple
4
7
  assert_route router.add('/'), '/'
5
8
  assert_route router.add('/test'), '/test'
6
9
  assert_route router.add('/test/one'), '/test/one'
@@ -50,9 +50,10 @@ class TestVariable < MiniTest::Unit::TestCase
50
50
  end
51
51
 
52
52
  def test_match_path
53
- r = router { add('/:test').match_path(%r{/(test123|\d+)}) }
54
- assert_route r, '/test123', {:test => "test123"}
55
- assert_route r, '/123', {:test => "123"}
53
+ r = router { add(%r{/(test123|\d+)}) }
54
+ assert_equal true, r.regex?
55
+ assert_route r, '/test123'
56
+ assert_route r, '/123'
56
57
  assert_route nil, '/test123andmore'
57
58
  assert_route nil, '/lesstest123'
58
59
  end
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: 9
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 5
9
- - 1
10
- version: 0.5.1
9
+ - 2
10
+ version: 0.5.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Joshua Hull
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-12 00:00:00 -08:00
18
+ date: 2011-01-20 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency