Class: HttpRouter::Node::Path

### Home Classes Methods

### In Files

- lib/http_router/node/path.rb

### Parent

HttpRouter::Node

### Methods

- ::new
- #duplicates
- #hashify_params
- #inspect_label
- #to_code
- #usable?

### Files

- LICENSE

### Class/Module Index

Quicksearch

- HttpRouter
- HttpRouter::GenerationHelper
- HttpRouter::Generator
- HttpRouter::Generator::PathGenerator
- HttpRouter::Node
- HttpRouter::Node::AbstractRequestNode
- HttpRouter::Node::FreeRegex
- HttpRouter::Node::Glob
- HttpRouter::Node::GlobRegex
- HttpRouter::Node::Host
- HttpRouter::Node::Lookup
- HttpRouter::Node::Path
- HttpRouter::Node::Regex
- HttpRouter::Node::RequestMethod
- HttpRouter::Node::Root
- HttpRouter::Node::Scheme
- HttpRouter::Node::SpanningRegex
- HttpRouter::Node::UserAgent
- HttpRouter::Node::Variable
- HttpRouter::RegexRouteGeneration
- HttpRouter::Request
- HttpRouter::Response
- HttpRouter::Route
- HttpRouter::RouteHelper
- HttpRouter::Util

No matching classes.

# 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

    # 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

[Validate]

Generated with the Darkfish Rdoc Generator 2.