Files

HttpRouter::Node::Path

Attributes

dynamic[R]
dynamic?[R]
original_path[R]
param_names[R]
route[R]

Public Class Methods

new(router, parent, route, path, param_names = []) click to toggle source
# File lib/http_router/node/path.rb, line 6
def initialize(router, parent, route, path, param_names = [])
  @route, @original_path, @param_names, @dynamic = route, path, param_names, !param_names.empty?
  raise AmbiguousVariableException, "You have duplicate variable name present: #{param_names.join(', ')}" if param_names.uniq.size != param_names.size
  Util.add_path_generation(self, route, @original_path) if @original_path.respond_to?(:split)
  super router, parent
  root.uncompile
end

Public Instance Methods

hashify_params(params) click to toggle source
# File lib/http_router/node/path.rb, line 14
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 56
def inspect_label
  "Path: #{original_path.inspect} for route #{route.named || 'unnamed route'} to #{route.dest.inspect}"
end
to_code() click to toggle source
# File lib/http_router/node/path.rb, line 25
def to_code
  path_ivar = inject_root_ivar(self)
  "#{"if request.path_finished?" unless route.match_partially?}
    catch(:pass) do
      #{"if 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)
        throw :success, response.finish
      end" if router.redirect_trailing_slash?}

      #{"if request.path.empty?#{" or (request.path.size == 1 and request.path.first == '')" if router.ignore_trailing_slash?}" unless route.match_partially?}
        if request.perform_call
          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)
          router.pass_on_response(response) ? throw(:pass) : throw(:success, response)
        else
          request.matched_route(Response.new(request, #{path_ivar}))
        end
      #{"end" unless route.match_partially?}
    end
  #{"end" unless route.match_partially?}"
end
url(args, options) click to toggle source
# File lib/http_router/node/path.rb, line 18
def url(args, options)
  if path = raw_url(args, options)
    raise TooManyParametersException unless args.empty?
    [URI.escape(path), options]
  end
end
usable?(other) click to toggle source
# File lib/http_router/node/path.rb, line 52
def usable?(other)
  other == self
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.