Class: ActionController::Routing::Segment
- Defined in:
- lib/action_controller/routing/segments.rb
Overview
:nodoc:
Direct Known Subclasses
Constant Summary collapse
- RESERVED_PCHAR =
':@&=+$,;'
- SAFE_PCHAR =
"#{URI::REGEXP::PATTERN::UNRESERVED}#{RESERVED_PCHAR}"
- UNSAFE_PCHAR =
Regexp.new("[^#{SAFE_PCHAR}]", false, 'N').freeze
Instance Attribute Summary collapse
-
#is_optional ⇒ Object
(also: #optional?)
TODO: Convert :is_optional accessor to read only.
Instance Method Summary collapse
-
#all_optionals_available_condition(prior_segments) ⇒ Object
Return an if condition that is true if all the prior segments can be generated.
-
#continue_string_structure(prior_segments) ⇒ Object
Continue generating string for the prior segments.
- #extraction_code ⇒ Object
-
#initialize ⇒ Segment
constructor
A new instance of Segment.
- #interpolation_chunk ⇒ Object
-
#interpolation_statement(prior_segments) ⇒ Object
Return a string interpolation statement for this segment and those before it.
-
#match_extraction(next_capture) ⇒ Object
Recognition.
- #number_of_captures ⇒ Object
-
#optionality_implied? ⇒ Boolean
Returns true if this segment is optional? because of a default.
- #string_structure(prior_segments) ⇒ Object
Constructor Details
#initialize ⇒ Segment
Returns a new instance of Segment.
16 17 18 |
# File 'lib/action_controller/routing/segments.rb', line 16 def initialize @is_optional = false end |
Instance Attribute Details
#is_optional ⇒ Object Also known as: optional?
TODO: Convert :is_optional accessor to read only
13 14 15 |
# File 'lib/action_controller/routing/segments.rb', line 13 def is_optional @is_optional end |
Instance Method Details
#all_optionals_available_condition(prior_segments) ⇒ Object
Return an if condition that is true if all the prior segments can be generated. If there are no optional segments before this one, then nil is returned.
55 56 57 58 |
# File 'lib/action_controller/routing/segments.rb', line 55 def all_optionals_available_condition(prior_segments) optional_locals = prior_segments.collect { |s| s.local_name if s.optional? && s.respond_to?(:local_name) }.compact optional_locals.empty? ? nil : " if #{optional_locals * ' && '}" end |
#continue_string_structure(prior_segments) ⇒ Object
Continue generating string for the prior segments.
29 30 31 32 33 34 35 36 |
# File 'lib/action_controller/routing/segments.rb', line 29 def continue_string_structure(prior_segments) if prior_segments.empty? interpolation_statement(prior_segments) else new_priors = prior_segments[0..-2] prior_segments.last.string_structure(new_priors) end end |
#extraction_code ⇒ Object
24 25 26 |
# File 'lib/action_controller/routing/segments.rb', line 24 def extraction_code nil end |
#interpolation_chunk ⇒ Object
38 39 40 |
# File 'lib/action_controller/routing/segments.rb', line 38 def interpolation_chunk URI.escape(value, UNSAFE_PCHAR) end |
#interpolation_statement(prior_segments) ⇒ Object
Return a string interpolation statement for this segment and those before it.
43 44 45 46 47 |
# File 'lib/action_controller/routing/segments.rb', line 43 def interpolation_statement(prior_segments) chunks = prior_segments.collect { |s| s.interpolation_chunk } chunks << interpolation_chunk "\"#{chunks * ''}\"#{all_optionals_available_condition(prior_segments)}" end |
#match_extraction(next_capture) ⇒ Object
Recognition
62 63 64 |
# File 'lib/action_controller/routing/segments.rb', line 62 def match_extraction(next_capture) nil end |
#number_of_captures ⇒ Object
20 21 22 |
# File 'lib/action_controller/routing/segments.rb', line 20 def number_of_captures Regexp.new(regexp_chunk).number_of_captures end |
#optionality_implied? ⇒ Boolean
Returns true if this segment is optional? because of a default. If so, then no warning will be emitted regarding this segment.
70 71 72 |
# File 'lib/action_controller/routing/segments.rb', line 70 def optionality_implied? false end |
#string_structure(prior_segments) ⇒ Object
49 50 51 |
# File 'lib/action_controller/routing/segments.rb', line 49 def string_structure(prior_segments) optional? ? continue_string_structure(prior_segments) : interpolation_statement(prior_segments) end |