Class: ActionController::Routing::Segment

Inherits:
Object
  • Object
show all
Defined in:
lib/action_controller/routing.rb

Overview

:nodoc:

Direct Known Subclasses

DynamicSegment, StaticSegment

Constant Summary collapse

RESERVED_PCHAR =
':@&=+$,;'
UNSAFE_PCHAR =
Regexp.new("[^#{URI::REGEXP::PATTERN::UNRESERVED}#{RESERVED_PCHAR}]", false, 'N').freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeSegment

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_optionalObject 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_codeObject



603
604
605
# File 'lib/action_controller/routing.rb', line 603

def extraction_code
  nil
end

#interpolation_chunkObject



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.

Returns:

  • (Boolean)


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