Class: Puppet::Network::HTTP::Route
- 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
-
#path_matcher ⇒ Object
readonly
Returns the value of attribute path_matcher.
Class Method Summary collapse
Instance Method Summary collapse
- #any(*handlers) ⇒ Object
- #chain(*routes) ⇒ Object
- #delete(*handlers) ⇒ Object
- #get(*handlers) ⇒ Object
- #head(*handlers) ⇒ Object
-
#initialize(path_matcher) ⇒ Route
constructor
A new instance of Route.
- #inspect ⇒ Object
- #matches?(request) ⇒ Boolean
- #options(*handlers) ⇒ Object
- #post(*handlers) ⇒ Object
- #process(request, response) ⇒ Object
- #put(*handlers) ⇒ Object
Constructor Details
#initialize(path_matcher) ⇒ Route
Returns a new instance of Route.
16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/puppet/network/http/route.rb', line 16 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_matcher ⇒ Object (readonly)
Returns the value of attribute path_matcher.
10 11 12 |
# File 'lib/puppet/network/http/route.rb', line 10 def path_matcher @path_matcher end |
Class Method Details
.path(path_matcher) ⇒ Object
12 13 14 |
# File 'lib/puppet/network/http/route.rb', line 12 def self.path(path_matcher) new(path_matcher) end |
Instance Method Details
#any(*handlers) ⇒ Object
59 60 61 62 63 64 |
# File 'lib/puppet/network/http/route.rb', line 59 def any(*handlers) @method_handlers.each do |method, _registered_handlers| @method_handlers[method] = handlers end self end |
#chain(*routes) ⇒ Object
66 67 68 69 |
# File 'lib/puppet/network/http/route.rb', line 66 def chain(*routes) @chained = routes self end |
#delete(*handlers) ⇒ Object
54 55 56 57 |
# File 'lib/puppet/network/http/route.rb', line 54 def delete(*handlers) @method_handlers[:DELETE] = handlers self end |
#get(*handlers) ⇒ Object
29 30 31 32 |
# File 'lib/puppet/network/http/route.rb', line 29 def get(*handlers) @method_handlers[:GET] = handlers self end |
#head(*handlers) ⇒ Object
34 35 36 37 |
# File 'lib/puppet/network/http/route.rb', line 34 def head(*handlers) @method_handlers[:HEAD] = handlers self end |
#inspect ⇒ Object
95 96 97 |
# File 'lib/puppet/network/http/route.rb', line 95 def inspect "Route #{@path_matcher.inspect}" end |
#matches?(request) ⇒ Boolean
71 72 73 74 75 76 77 78 79 80 |
# File 'lib/puppet/network/http/route.rb', line 71 def matches?(request) Puppet.debug { "Evaluating match for #{inspect}" } if match(request.routing_path) return true else Puppet.debug { "Did not match path (#{request.routing_path.inspect})" } end false end |
#options(*handlers) ⇒ Object
39 40 41 42 |
# File 'lib/puppet/network/http/route.rb', line 39 def (*handlers) @method_handlers[:OPTIONS] = handlers self end |
#post(*handlers) ⇒ Object
44 45 46 47 |
# File 'lib/puppet/network/http/route.rb', line 44 def post(*handlers) @method_handlers[:POST] = handlers self end |
#process(request, response) ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/puppet/network/http/route.rb', line 82 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
49 50 51 52 |
# File 'lib/puppet/network/http/route.rb', line 49 def put(*handlers) @method_handlers[:PUT] = handlers self end |