Class: ActionController::Routing::Segment
- Defined in:
- lib/action_controller/routing.rb
Overview
:nodoc:
Direct Known Subclasses
Constant Summary collapse
- RESERVED_PCHAR =
':@&=+$,;'
- UNSAFE_PCHAR =
Regexp.new("[^#{URI::REGEXP::PATTERN::UNRESERVED}#{RESERVED_PCHAR}]", false, 'N').freeze
Instance Attribute Summary collapse
-
#is_optional ⇒ Object
(also: #optional?)
Returns the value of attribute is_optional.
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.
-
#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.
599 600 601 |
# File 'lib/action_controller/routing.rb', line 599 def initialize self.is_optional = false end |
Instance Attribute Details
#is_optional ⇒ Object Also known as: optional?
Returns the value of attribute is_optional.
596 597 598 |
# File 'lib/action_controller/routing.rb', line 596 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.
634 635 636 637 |
# File 'lib/action_controller/routing.rb', line 634 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.
608 609 610 611 612 613 614 615 |
# File 'lib/action_controller/routing.rb', line 608 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
603 604 605 |
# File 'lib/action_controller/routing.rb', line 603 def extraction_code nil end |
#interpolation_chunk ⇒ Object
617 618 619 |
# File 'lib/action_controller/routing.rb', line 617 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.
622 623 624 625 626 |
# File 'lib/action_controller/routing.rb', line 622 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
641 642 643 |
# File 'lib/action_controller/routing.rb', line 641 def match_extraction(next_capture) nil 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.
649 650 651 |
# File 'lib/action_controller/routing.rb', line 649 def optionality_implied? false end |
#string_structure(prior_segments) ⇒ Object
628 629 630 |
# File 'lib/action_controller/routing.rb', line 628 def string_structure(prior_segments) optional? ? continue_string_structure(prior_segments) : interpolation_statement(prior_segments) end |