Class: ActionController::Routing::DynamicSegment
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.
703
704
705
706
707
708
|
# File 'lib/action_controller/routing.rb', line 703
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.
701
702
703
|
# File 'lib/action_controller/routing.rb', line 701
def default
@default
end
|
Returns the value of attribute key.
701
702
703
|
# File 'lib/action_controller/routing.rb', line 701
def key
@key
end
|
Returns the value of attribute regexp.
701
702
703
|
# File 'lib/action_controller/routing.rb', line 701
def regexp
@regexp
end
|
Instance Method Details
#build_pattern(pattern) ⇒ Object
769
770
771
772
773
774
|
# File 'lib/action_controller/routing.rb', line 769
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
733
734
735
|
# File 'lib/action_controller/routing.rb', line 733
def expiry_statement
"expired, hash = true, options if !expired && expire_on[:#{key}]"
end
|
719
720
721
|
# File 'lib/action_controller/routing.rb', line 719
def
"#{local_name} = hash[:#{key}] && hash[:#{key}].to_param #{"|| #{default.inspect}" if default}"
end
|
737
738
739
740
741
742
|
# File 'lib/action_controller/routing.rb', line 737
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
744
745
746
|
# File 'lib/action_controller/routing.rb', line 744
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.
715
716
717
|
# File 'lib/action_controller/routing.rb', line 715
def local_name
"#{key}_value"
end
|
775
776
777
778
779
780
781
782
783
784
785
786
787
|
# File 'lib/action_controller/routing.rb', line 775
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
789
790
791
|
# File 'lib/action_controller/routing.rb', line 789
def optionality_implied?
[:action, :id].include? key
end
|
#regexp_chunk ⇒ Object
765
766
767
|
# File 'lib/action_controller/routing.rb', line 765
def regexp_chunk
regexp ? "(#{regexp.source})" : "([^#{Routing::SEPARATORS.join}]+)"
end
|
#string_structure(prior_segments) ⇒ Object
748
749
750
751
752
753
754
755
756
757
758
759
760
|
# File 'lib/action_controller/routing.rb', line 748
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
|
710
711
712
|
# File 'lib/action_controller/routing.rb', line 710
def to_s
":#{key}"
end
|
#value_check ⇒ Object
722
723
724
725
726
727
728
729
730
731
732
|
# File 'lib/action_controller/routing.rb', line 722
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
762
763
764
|
# File 'lib/action_controller/routing.rb', line 762
def value_regexp
Regexp.new "\\A#{regexp.source}\\Z" if regexp
end
|