Class: Puppet::Network::HTTP::Route

Inherits:
Object
  • Object
show all
Defined in:
lib/puppet/network/http/route.rb

Constant Summary collapse

MethodNotAllowedHandler =
lambda do |req, res|
  raise Puppet::Network::HTTP::Error::HTTPMethodNotAllowedError.new("method #{req.method} not allowed for route #{req.path}", Puppet::Network::HTTP::Issues::UNSUPPORTED_METHOD)
end
NO_HANDLERS =
[MethodNotAllowedHandler]

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(path_matcher) ⇒ Route

Returns a new instance of Route.



15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/puppet/network/http/route.rb', line 15

def initialize(path_matcher)
  @path_matcher = path_matcher
  @method_handlers = {
    :GET => NO_HANDLERS,
    :HEAD => NO_HANDLERS,
    :OPTIONS => NO_HANDLERS,
    :POST => NO_HANDLERS,
    :PUT => NO_HANDLERS,
    :DELETE => NO_HANDLERS
  }
  @chained = []
end

Instance Attribute Details

#path_matcherObject (readonly)

Returns the value of attribute path_matcher.



9
10
11
# File 'lib/puppet/network/http/route.rb', line 9

def path_matcher
  @path_matcher
end

Class Method Details

.path(path_matcher) ⇒ Object



11
12
13
# File 'lib/puppet/network/http/route.rb', line 11

def self.path(path_matcher)
  new(path_matcher)
end

Instance Method Details

#any(*handlers) ⇒ Object



58
59
60
61
62
63
# File 'lib/puppet/network/http/route.rb', line 58

def any(*handlers)
  @method_handlers.each do |method, registered_handlers|
    @method_handlers[method] = handlers
  end
  return self
end

#chain(*routes) ⇒ Object



65
66
67
68
# File 'lib/puppet/network/http/route.rb', line 65

def chain(*routes)
  @chained = routes
  self
end

#delete(*handlers) ⇒ Object



53
54
55
56
# File 'lib/puppet/network/http/route.rb', line 53

def delete(*handlers)
  @method_handlers[:DELETE] = handlers
  return self
end

#get(*handlers) ⇒ Object



28
29
30
31
# File 'lib/puppet/network/http/route.rb', line 28

def get(*handlers)
  @method_handlers[:GET] = handlers
  return self
end

#head(*handlers) ⇒ Object



33
34
35
36
# File 'lib/puppet/network/http/route.rb', line 33

def head(*handlers)
  @method_handlers[:HEAD] = handlers
  return self
end

#inspectObject



93
94
95
# File 'lib/puppet/network/http/route.rb', line 93

def inspect
  "Route #{@path_matcher.inspect}"
end

#matches?(request) ⇒ Boolean

Returns:

  • (Boolean)


70
71
72
73
74
75
76
77
78
# File 'lib/puppet/network/http/route.rb', line 70

def matches?(request)
  Puppet.debug { "Evaluating match for #{self.inspect}" }
  if match(request.routing_path)
    return true
  else
    Puppet.debug { "Did not match path (#{request.routing_path.inspect})" }
  end
  return false
end

#options(*handlers) ⇒ Object



38
39
40
41
# File 'lib/puppet/network/http/route.rb', line 38

def options(*handlers)
  @method_handlers[:OPTIONS] = handlers
  return self
end

#post(*handlers) ⇒ Object



43
44
45
46
# File 'lib/puppet/network/http/route.rb', line 43

def post(*handlers)
  @method_handlers[:POST] = handlers
  return self
end

#process(request, response) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/puppet/network/http/route.rb', line 80

def process(request, response)
  handlers = @method_handlers[request.method.upcase.intern] || NO_HANDLERS
  handlers.each do |handler|
    handler.call(request, response)
  end

  subrequest = request.route_into(match(request.routing_path).to_s)
  chained_route = @chained.find { |route| route.matches?(subrequest) }
  if chained_route
    chained_route.process(subrequest, response)
  end
end

#put(*handlers) ⇒ Object



48
49
50
51
# File 'lib/puppet/network/http/route.rb', line 48

def put(*handlers)
  @method_handlers[:PUT] = handlers
  return self
end