class HttpRouter::Node::Path
Attributes
dynamic[R]
dynamic?[R]
param_names[R]
path[R]
route[R]
Public Class Methods
new(router, parent, route, path, param_names = [])
click to toggle source
Calls superclass method
HttpRouter::Node.new
# File lib/http_router/node/path.rb, line 6 def initialize(router, parent, route, path, param_names = []) @route, @path, @param_names, @dynamic = route, path, param_names, !param_names.empty? @route.add_path(self) raise AmbiguousVariableException, "You have duplicate variable names present: #{duplicates.join(', ')}" if param_names.uniq.size != param_names.size super router, parent router.uncompile end
Public Instance Methods
duplicates()
click to toggle source
# File lib/http_router/node/path.rb, line 51 def duplicates param_names.group_by { |e| e }.select { |k, v| v.size > 1 }.map(&:first) end
hashify_params(params)
click to toggle source
# File lib/http_router/node/path.rb, line 15 def hashify_params(params) @dynamic && params ? Hash[param_names.zip(params)] : {} end
inspect_label()
click to toggle source
# File lib/http_router/node/path.rb, line 47 def inspect_label "Path: #{path.inspect} for route #{route.name || 'unnamed route'} to #{route.dest.inspect}" end
to_code()
click to toggle source
# File lib/http_router/node/path.rb, line 19 def to_code path_ivar = inject_root_ivar(self) "#{"if !callback && request.path.size == 1 && request.path.first == '' && (request.rack_request.head? || request.rack_request.get?) && request.rack_request.path_info[-1] == ?/ response = ::Rack::Response.new response.redirect(request.rack_request.path_info[0, request.rack_request.path_info.size - 1], 302) return response.finish end" if router.redirect_trailing_slash?} #{"if request.#{router.ignore_trailing_slash? ? 'path_finished?' : 'path.empty?'}" unless route.match_partially} if callback request.called = true callback.call(Response.new(request, #{path_ivar})) else env = request.rack_request.dup.env env['router.request'] = request env['router.params'] ||= {} #{"env['router.params'].merge!(Hash[#{param_names.inspect}.zip(request.params)])" if dynamic?} @router.rewrite#{"_partial" if route.match_partially}_path_info(env, request) response = @router.process_destination_path(#{path_ivar}, env) return response unless router.pass_on_response(response) end #{"end" unless route.match_partially}" end
usable?(other)
click to toggle source
# File lib/http_router/node/path.rb, line 43 def usable?(other) other == self end