Class: ActionController::Routing::DynamicSegment
- Inherits:
-
Segment
show all
- Defined in:
- lib/action_controller/routing/segments.rb
Overview
Constant Summary
Constants inherited
from Segment
Segment::RESERVED_PCHAR, Segment::UNSAFE_PCHAR
Instance Attribute Summary collapse
Attributes inherited from Segment
#is_optional
Instance Method Summary
collapse
Methods inherited from Segment
#all_optionals_available_condition, #continue_string_structure, #interpolation_statement
Constructor Details
#initialize(key = nil, options = {}) ⇒ DynamicSegment
Returns a new instance of DynamicSegment.
114
115
116
117
118
119
|
# File 'lib/action_controller/routing/segments.rb', line 114
def initialize(key = nil, options = {})
super()
self.key = key
self.default = options[:default] if options.key? :default
self.is_optional = true if options[:optional] || options.key?(:default)
end
|
Instance Attribute Details
Returns the value of attribute default.
112
113
114
|
# File 'lib/action_controller/routing/segments.rb', line 112
def default
@default
end
|
Returns the value of attribute key.
112
113
114
|
# File 'lib/action_controller/routing/segments.rb', line 112
def key
@key
end
|
Returns the value of attribute regexp.
112
113
114
|
# File 'lib/action_controller/routing/segments.rb', line 112
def regexp
@regexp
end
|
Instance Method Details
#build_pattern(pattern) ⇒ Object
189
190
191
192
193
194
|
# File 'lib/action_controller/routing/segments.rb', line 189
def build_pattern(pattern)
chunk = regexp_chunk
chunk = "(#{chunk})" if Regexp.new(chunk).number_of_captures == 0
pattern = "#{chunk}#{pattern}"
optional? ? Regexp.optionalize(pattern) : pattern
end
|
#expiry_statement ⇒ Object
144
145
146
|
# File 'lib/action_controller/routing/segments.rb', line 144
def expiry_statement
"expired, hash = true, options if !expired && expire_on[:#{key}]"
end
|
130
131
132
|
# File 'lib/action_controller/routing/segments.rb', line 130
def
"#{local_name} = hash[:#{key}] && hash[:#{key}].to_param #{"|| #{default.inspect}" if default}"
end
|
148
149
150
151
152
153
|
# File 'lib/action_controller/routing/segments.rb', line 148
def
s =
vc = value_check
s << "\nreturn [nil,nil] unless #{vc}" if vc
s << "\n#{expiry_statement}"
end
|
#interpolation_chunk(value_code = "#{local_name}") ⇒ Object
155
156
157
|
# File 'lib/action_controller/routing/segments.rb', line 155
def interpolation_chunk(value_code = "#{local_name}")
"\#{URI.escape(#{value_code}.to_s, ActionController::Routing::Segment::UNSAFE_PCHAR)}"
end
|
#local_name ⇒ Object
The local variable name that the value of this segment will be extracted to.
126
127
128
|
# File 'lib/action_controller/routing/segments.rb', line 126
def local_name
"#{key}_value"
end
|
196
197
198
199
200
201
202
203
204
205
206
207
208
|
# File 'lib/action_controller/routing/segments.rb', line 196
def (next_capture)
default_value = default ? default.inspect : nil
%[
value = if (m = match[#{next_capture}])
URI.unescape(m)
else
#{default_value}
end
params[:#{key}] = value if value
]
end
|
#optionality_implied? ⇒ Boolean
210
211
212
|
# File 'lib/action_controller/routing/segments.rb', line 210
def optionality_implied?
[:action, :id].include? key
end
|
#regexp_chunk ⇒ Object
177
178
179
180
181
182
183
184
185
186
187
|
# File 'lib/action_controller/routing/segments.rb', line 177
def regexp_chunk
if regexp
if regexp_has_modifiers?
"(#{regexp.to_s})"
else
"(#{regexp.source})"
end
else
"([^#{Routing::SEPARATORS.join}]+)"
end
end
|
#regexp_has_modifiers? ⇒ Boolean
214
215
216
|
# File 'lib/action_controller/routing/segments.rb', line 214
def regexp_has_modifiers?
regexp.options & (Regexp::IGNORECASE | Regexp::EXTENDED) != 0
end
|
#string_structure(prior_segments) ⇒ Object
159
160
161
162
163
164
165
166
167
168
169
170
171
|
# File 'lib/action_controller/routing/segments.rb', line 159
def string_structure(prior_segments)
if optional? "if #{local_name} == #{default.inspect}\n" +
continue_string_structure(prior_segments) +
"\nelse\n" + "#{interpolation_statement(prior_segments)}\nend"
else
interpolation_statement(prior_segments)
end
end
|
121
122
123
|
# File 'lib/action_controller/routing/segments.rb', line 121
def to_s
":#{key}"
end
|
#value_check ⇒ Object
133
134
135
136
137
138
139
140
141
142
143
|
# File 'lib/action_controller/routing/segments.rb', line 133
def value_check
if default "#{value_regexp.inspect} =~ #{local_name}" if regexp
elsif optional?
"#{local_name}.nil? || #{value_regexp.inspect} =~ #{local_name}" if regexp
else "#{local_name} #{"&& #{value_regexp.inspect} =~ #{local_name}" if regexp}"
end
end
|
#value_regexp ⇒ Object
173
174
175
|
# File 'lib/action_controller/routing/segments.rb', line 173
def value_regexp
Regexp.new "\\A#{regexp.to_s}\\Z" if regexp
end
|