Class: HttpRouter::Node::Request

Inherits:
HttpRouter::Node show all
Defined in:
lib/http_router/node/request.rb

Instance Attribute Summary collapse

Attributes inherited from HttpRouter::Node

#priority, #router

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from HttpRouter::Node

#add_arbitrary, #add_destination, #add_free_match, #add_glob, #add_match, #add_request, #add_spanning_match, #add_variable, #arbitrary, #destination, #glob, #join_whole_path, #linear, #lookup, #request, #unescape, #variable

Constructor Details

#initialize(router) ⇒ Request

Returns a new instance of Request.



10
11
12
# File 'lib/http_router/node/request.rb', line 10

def initialize(router)
  @router, @linear, @catchall, @lookup = router, [], nil, {}
end

Instance Attribute Details

#request_methodObject

Returns the value of attribute request_method.



8
9
10
# File 'lib/http_router/node/request.rb', line 8

def request_method
  @request_method
end

Class Method Details

.request_methodsObject



4
5
6
# File 'lib/http_router/node/request.rb', line 4

def self.request_methods
  [:host, :scheme, :request_method, :user_agent]
end

Instance Method Details

#[](request) ⇒ Object



51
52
53
54
55
56
57
58
59
60
# File 'lib/http_router/node/request.rb', line 51

def [](request)
  if @request_method
    val = request.rack_request.send(@request_method.to_sym)
    @linear.each { |(matcher, node)| node[request] if matcher === val }
    @lookup[val][request] if @lookup.key?(val)
    @catchall[request] if @catchall
  else
    super(request)
  end
end

#add_catchallObject



41
42
43
# File 'lib/http_router/node/request.rb', line 41

def add_catchall
  @catchall ||= Request.new(@router)
end

#add_linear(matcher) ⇒ Object



45
46
47
48
49
# File 'lib/http_router/node/request.rb', line 45

def add_linear(matcher)
  next_node = Request.new(@router)
  @linear << [matcher, next_node]
  next_node
end

#add_lookup(val) ⇒ Object



37
38
39
# File 'lib/http_router/node/request.rb', line 37

def add_lookup(val)
  @lookup[val] ||= Request.new(@router)
end

#transform_to(meth) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/http_router/node/request.rb', line 14

def transform_to(meth)
  new_node = Request.new(router)
  new_node.request_method = @request_method
  new_node.instance_var_set(:@linear, @linear.dup)
  new_node.instance_var_set(:@catchall, @catchall)
  new_node.instance_var_set(:@lookup, @lookup.dup)
  @linear.clear
  @lookup.clear
  @catchall = new_node
  @request_method = meth
  new_node
end