Class: ActionDispatch::Routing::Route

Inherits:
Object
  • Object
show all
Defined in:
actionpack/lib/action_dispatch/routing/route.rb

Overview

:nodoc:

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(set, app, conditions, requirements, defaults, name, anchor) ⇒ Route

Returns a new instance of Route.


9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'actionpack/lib/action_dispatch/routing/route.rb', line 9

def initialize(set, app, conditions, requirements, defaults, name, anchor)
  @set = set
  @app = app
  @defaults = defaults
  @name = name

  # FIXME: we should not be doing this much work in a constructor.

  @requirements = requirements.merge(defaults)
  @requirements.delete(:controller) if @requirements[:controller].is_a?(Regexp)
  @requirements.delete_if { |k, v|
    v == Regexp.compile("[^#{SEPARATORS.join}]+")
  }

  if path = conditions[:path_info]
    @path = path
    conditions[:path_info] = ::Rack::Mount::Strexp.compile(path, requirements, SEPARATORS, anchor)
  end

  @verbs = conditions[:request_method] || []

  @conditions = conditions.dup

  # Rack-Mount requires that :request_method be a regular expression.
  # :request_method represents the HTTP verb that matches this route.
  #
  # Here we munge values before they get sent on to rack-mount.
  @conditions[:request_method] = %r[^#{verb}$] unless @verbs.empty?
  @conditions[:path_info] = Rack::Mount::RegexpWithNamedGroups.new(@conditions[:path_info]) if @conditions[:path_info]
  @conditions.delete_if{ |k,v| k != :path_info && !valid_condition?(k) }
  @requirements.delete_if{ |k,v| !valid_condition?(k) }
end

Instance Attribute Details

#appObject (readonly)

Returns the value of attribute app


6
7
8
# File 'actionpack/lib/action_dispatch/routing/route.rb', line 6

def app
  @app
end

#conditionsObject (readonly)

Returns the value of attribute conditions


6
7
8
# File 'actionpack/lib/action_dispatch/routing/route.rb', line 6

def conditions
  @conditions
end

#defaultsObject (readonly)

Returns the value of attribute defaults


6
7
8
# File 'actionpack/lib/action_dispatch/routing/route.rb', line 6

def defaults
  @defaults
end

#nameObject (readonly)

Returns the value of attribute name


6
7
8
# File 'actionpack/lib/action_dispatch/routing/route.rb', line 6

def name
  @name
end

#pathObject (readonly)

Returns the value of attribute path


7
8
9
# File 'actionpack/lib/action_dispatch/routing/route.rb', line 7

def path
  @path
end

#requirementsObject (readonly)

Returns the value of attribute requirements


7
8
9
# File 'actionpack/lib/action_dispatch/routing/route.rb', line 7

def requirements
  @requirements
end

#setObject (readonly)

Returns the value of attribute set


7
8
9
# File 'actionpack/lib/action_dispatch/routing/route.rb', line 7

def set
  @set
end

Instance Method Details

#segment_keysObject


46
47
48
# File 'actionpack/lib/action_dispatch/routing/route.rb', line 46

def segment_keys
  @segment_keys ||= conditions[:path_info].names.compact.map { |key| key.to_sym }
end

#to_aObject


50
51
52
# File 'actionpack/lib/action_dispatch/routing/route.rb', line 50

def to_a
  [@app, @conditions, @defaults, @name]
end

#to_sObject


55
56
57
58
59
# File 'actionpack/lib/action_dispatch/routing/route.rb', line 55

def to_s
  @to_s ||= begin
    "%-6s %-40s %s" % [(verb || :any).to_s.upcase, path, requirements.inspect]
  end
end

#verbObject


42
43
44
# File 'actionpack/lib/action_dispatch/routing/route.rb', line 42

def verb
  @verbs.join '|'
end