http_router 0.6.0 → 0.6.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.
@@ -2,15 +2,36 @@ class HttpRouter
2
2
  class Node
3
3
  class Request < Node
4
4
  def self.request_methods
5
- [:host, :request_method, :scheme, :user_agent]
5
+ [:host, :scheme, :request_method, :user_agent]
6
6
  end
7
7
 
8
+ attr_reader :request_method
9
+
8
10
  def initialize(router)
9
11
  @router, @linear, @catchall, @lookup = router, [], nil, {}
10
12
  end
11
13
 
14
+ def transform_to(meth)
15
+ new_node = Request.new(router)
16
+ new_node.request_method = @request_method
17
+ new_node.instance_var_set(:@linear, @linear.dup)
18
+ new_node.instance_var_set(:@catchall, @catchall)
19
+ new_node.instance_var_set(:@lookup, @lookup.dup)
20
+ @linear.clear
21
+ @lookup.clear
22
+ @catchall = new_node
23
+ @request_method = meth
24
+ new_node
25
+ end
26
+
12
27
  def request_method=(meth)
13
28
  @request_method = meth == :method ? :request_method : meth
29
+ if @destination
30
+ next_node = add_catchall
31
+ next_node.instance_variable_set(:@destination, (next_node.instance_variable_get(:@destination) || []).concat(@destination))
32
+ @destination.clear
33
+ end
34
+ @request_method
14
35
  end
15
36
 
16
37
  def add_lookup(val)
@@ -95,16 +95,30 @@ class HttpRouter
95
95
  @request ||= Request.new(@router)
96
96
  next_requests = [@request]
97
97
  Request.request_methods.each do |method|
98
+ method_index = Request.request_methods.index(method)
98
99
  next_requests.map! do |next_request|
99
- next_request.request_method = method
100
- (opts[method].nil? ? [nil] : Array(opts[method])).map do |request_matcher|
101
- case request_matcher
102
- when nil
103
- next_request.add_catchall
104
- when String
105
- next_request.add_lookup(request_matcher)
106
- when Regexp
107
- next_request.add_linear(request_matcher)
100
+ if opts[method].nil? && next_request.request_method.nil?
101
+ next_request
102
+ else
103
+ next_request_index = next_request.request_method && Request.request_methods.index(next_request.request_method)
104
+ rank = next_request_index ? method_index <=> next_request_index : 0
105
+ case rank
106
+ when 0
107
+ next_request.request_method = method
108
+ (opts[method].nil? ? [nil] : Array(opts[method])).map do |request_matcher|
109
+ case request_matcher
110
+ when nil
111
+ next_request.add_catchall
112
+ when String
113
+ next_request.add_lookup(request_matcher)
114
+ when Regexp
115
+ next_request.add_linear(request_matcher)
116
+ end
117
+ end
118
+ when -1
119
+ next_request
120
+ when 1
121
+ next_request.transform_to(method)
108
122
  end
109
123
  end
110
124
  end
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  class HttpRouter #:nodoc
3
- VERSION = '0.6.0'
3
+ VERSION = '0.6.1'
4
4
  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: 7
4
+ hash: 5
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 6
9
- - 0
10
- version: 0.6.0
9
+ - 1
10
+ version: 0.6.1
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-03-17 00:00:00 -07:00
18
+ date: 2011-03-20 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency