Class: ActionDispatch::Journey::Route
- Inherits:
-
Object
- Object
- ActionDispatch::Journey::Route
- Defined in:
- lib/action_dispatch/journey/route.rb
Defined Under Namespace
Modules: VerbMatchers
Instance Attribute Summary collapse
-
#app ⇒ Object
readonly
Returns the value of attribute app.
-
#constraints ⇒ Object
(also: #conditions)
readonly
Returns the value of attribute constraints.
-
#defaults ⇒ Object
readonly
Returns the value of attribute defaults.
-
#internal ⇒ Object
readonly
Returns the value of attribute internal.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#path ⇒ Object
readonly
Returns the value of attribute path.
-
#precedence ⇒ Object
readonly
Returns the value of attribute precedence.
-
#scope_options ⇒ Object
readonly
Returns the value of attribute scope_options.
Class Method Summary collapse
- .build(name, app, path, constraints, required_defaults, defaults) ⇒ Object
- .verb_matcher(verb) ⇒ Object
Instance Method Summary collapse
- #ast ⇒ Object
- #dispatcher? ⇒ Boolean
- #eager_load! ⇒ Object
- #format(path_options) ⇒ Object
- #glob? ⇒ Boolean
-
#initialize(name, app, path, constraints, required_defaults, defaults, request_method_match, precedence, scope_options, internal = false) ⇒ Route
constructor
path
is a path constraint. - #ip ⇒ Object
- #matches?(request) ⇒ Boolean
- #parts ⇒ Object (also: #segment_keys)
- #required_default?(key) ⇒ Boolean
- #required_defaults ⇒ Object
- #required_keys ⇒ Object
- #required_parts ⇒ Object
-
#requirements ⇒ Object
Needed for ‘rails routes`.
- #requires_matching_verb? ⇒ Boolean
- #score(supplied_keys) ⇒ Object
- #segments ⇒ Object
- #verb ⇒ Object
Constructor Details
#initialize(name, app, path, constraints, required_defaults, defaults, request_method_match, precedence, scope_options, internal = false) ⇒ Route
path
is a path constraint. constraints
is a hash of constraints to be applied to this route.
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/action_dispatch/journey/route.rb', line 60 def initialize(name, app, path, constraints, required_defaults, defaults, request_method_match, precedence, , internal = false) @name = name @app = app @path = path @request_method_match = request_method_match @constraints = constraints @defaults = defaults @required_defaults = nil @_required_defaults = required_defaults @required_parts = nil @parts = nil @decorated_ast = nil @precedence = precedence @path_formatter = @path.build_formatter @scope_options = @internal = internal end |
Instance Attribute Details
#app ⇒ Object (readonly)
Returns the value of attribute app.
7 8 9 |
# File 'lib/action_dispatch/journey/route.rb', line 7 def app @app end |
#constraints ⇒ Object (readonly) Also known as: conditions
Returns the value of attribute constraints.
7 8 9 |
# File 'lib/action_dispatch/journey/route.rb', line 7 def constraints @constraints end |
#defaults ⇒ Object (readonly)
Returns the value of attribute defaults.
7 8 9 |
# File 'lib/action_dispatch/journey/route.rb', line 7 def defaults @defaults end |
#internal ⇒ Object (readonly)
Returns the value of attribute internal.
7 8 9 |
# File 'lib/action_dispatch/journey/route.rb', line 7 def internal @internal end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
7 8 9 |
# File 'lib/action_dispatch/journey/route.rb', line 7 def name @name end |
#path ⇒ Object (readonly)
Returns the value of attribute path.
7 8 9 |
# File 'lib/action_dispatch/journey/route.rb', line 7 def path @path end |
#precedence ⇒ Object (readonly)
Returns the value of attribute precedence.
7 8 9 |
# File 'lib/action_dispatch/journey/route.rb', line 7 def precedence @precedence end |
#scope_options ⇒ Object (readonly)
Returns the value of attribute scope_options.
7 8 9 |
# File 'lib/action_dispatch/journey/route.rb', line 7 def @scope_options end |
Class Method Details
.build(name, app, path, constraints, required_defaults, defaults) ⇒ Object
52 53 54 55 |
# File 'lib/action_dispatch/journey/route.rb', line 52 def self.build(name, app, path, constraints, required_defaults, defaults) request_method_match = verb_matcher(constraints.delete(:request_method)) new name, app, path, constraints, required_defaults, defaults, request_method_match, 0, {} end |
.verb_matcher(verb) ⇒ Object
46 47 48 49 50 |
# File 'lib/action_dispatch/journey/route.rb', line 46 def self.verb_matcher(verb) VerbMatchers::VERB_TO_CLASS.fetch(verb) do VerbMatchers::Unknown.new verb.to_s.dasherize.upcase end end |
Instance Method Details
#ast ⇒ Object
87 88 89 90 91 92 93 |
# File 'lib/action_dispatch/journey/route.rb', line 87 def ast @decorated_ast ||= begin decorated_ast = path.ast decorated_ast.find_all(&:terminal?).each { |n| n.memo = self } decorated_ast end end |
#dispatcher? ⇒ Boolean
159 160 161 |
# File 'lib/action_dispatch/journey/route.rb', line 159 def dispatcher? @app.dispatcher? end |
#eager_load! ⇒ Object
79 80 81 82 83 84 85 |
# File 'lib/action_dispatch/journey/route.rb', line 79 def eager_load! path.eager_load! ast parts required_defaults nil end |
#format(path_options) ⇒ Object
137 138 139 |
# File 'lib/action_dispatch/journey/route.rb', line 137 def format() @path_formatter.evaluate end |
#glob? ⇒ Boolean
155 156 157 |
# File 'lib/action_dispatch/journey/route.rb', line 155 def glob? !path.spec.grep(Nodes::Star).empty? end |
#ip ⇒ Object
181 182 183 |
# File 'lib/action_dispatch/journey/route.rb', line 181 def ip constraints[:ip] || // end |
#matches?(request) ⇒ Boolean
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 |
# File 'lib/action_dispatch/journey/route.rb', line 163 def matches?(request) match_verb(request) && constraints.all? { |method, value| case value when Regexp, String value === request.send(method).to_s when Array value.include?(request.send(method)) when TrueClass request.send(method).present? when FalseClass request.send(method).blank? else value === request.send(method) end } end |
#parts ⇒ Object Also known as: segment_keys
132 133 134 |
# File 'lib/action_dispatch/journey/route.rb', line 132 def parts @parts ||= segments.map(&:to_sym) end |
#required_default?(key) ⇒ Boolean
145 146 147 |
# File 'lib/action_dispatch/journey/route.rb', line 145 def required_default?(key) @_required_defaults.include?(key) end |
#required_defaults ⇒ Object
149 150 151 152 153 |
# File 'lib/action_dispatch/journey/route.rb', line 149 def required_defaults @required_defaults ||= @defaults.dup.delete_if do |k, _| parts.include?(k) || !required_default?(k) end end |
#required_keys ⇒ Object
113 114 115 |
# File 'lib/action_dispatch/journey/route.rb', line 113 def required_keys required_parts + required_defaults.keys end |
#required_parts ⇒ Object
141 142 143 |
# File 'lib/action_dispatch/journey/route.rb', line 141 def required_parts @required_parts ||= path.required_names.map(&:to_sym) end |
#requirements ⇒ Object
Needed for ‘rails routes`. Picks up succinctly defined requirements for a route, for example route
get 'photo/:id', :controller => 'photos', :action => 'show',
:id => /[A-Z]\d{5}/
will have :action=>“show”, :id=>/d{5/} as requirements.
103 104 105 106 107 |
# File 'lib/action_dispatch/journey/route.rb', line 103 def requirements @defaults.merge(path.requirements).delete_if { |_, v| /.+?/ == v } end |
#requires_matching_verb? ⇒ Boolean
185 186 187 |
# File 'lib/action_dispatch/journey/route.rb', line 185 def requires_matching_verb? !@request_method_match.all? { |x| x == VerbMatchers::All } end |
#score(supplied_keys) ⇒ Object
117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/action_dispatch/journey/route.rb', line 117 def score(supplied_keys) required_keys = path.required_names required_keys.each do |k| return -1 unless supplied_keys.include?(k) end score = 0 path.names.each do |k| score += 1 if supplied_keys.include?(k) end score + (required_defaults.length * 2) end |
#segments ⇒ Object
109 110 111 |
# File 'lib/action_dispatch/journey/route.rb', line 109 def segments path.names end |
#verb ⇒ Object
189 190 191 |
# File 'lib/action_dispatch/journey/route.rb', line 189 def verb verbs.join("|") end |