Class: ActionDispatch::Routing::Route

Inherits:
Object
  • Object
show all
Defined in:
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.


7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/action_dispatch/routing/route.rb', line 7

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

  @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

  @conditions = conditions.inject({}) { |h, (k, v)|
    h[k] = Rack::Mount::RegexpWithNamedGroups.new(v)
    h
  }

  @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


4
5
6
# File 'lib/action_dispatch/routing/route.rb', line 4

def app
  @app
end

#conditionsObject (readonly)

Returns the value of attribute conditions


4
5
6
# File 'lib/action_dispatch/routing/route.rb', line 4

def conditions
  @conditions
end

#defaultsObject (readonly)

Returns the value of attribute defaults


4
5
6
# File 'lib/action_dispatch/routing/route.rb', line 4

def defaults
  @defaults
end

#nameObject (readonly)

Returns the value of attribute name


4
5
6
# File 'lib/action_dispatch/routing/route.rb', line 4

def name
  @name
end

#pathObject (readonly)

Returns the value of attribute path


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

def path
  @path
end

#requirementsObject (readonly)

Returns the value of attribute requirements


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

def requirements
  @requirements
end

#setObject (readonly)

Returns the value of attribute set


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

def set
  @set
end

Instance Method Details

#segment_keysObject


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

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

#to_aObject


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

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

#to_sObject


53
54
55
56
57
# File 'lib/action_dispatch/routing/route.rb', line 53

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

#verbObject


33
34
35
36
37
38
39
40
41
42
43
# File 'lib/action_dispatch/routing/route.rb', line 33

def verb
  if method = conditions[:request_method]
    case method
    when Regexp
      source = method.source.upcase
      source =~ /\A\^[-A-Z|]+\$\Z/ ? source[1..-2] : source
    else
      method.to_s.upcase
    end
  end
end