Class: ActionController::Routing::DynamicSegment
Overview
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.
643
644
645
646
647
648
|
# File 'lib/action_controller/routing.rb', line 643
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.
641
642
643
|
# File 'lib/action_controller/routing.rb', line 641
def default
@default
end
|
Returns the value of attribute key.
641
642
643
|
# File 'lib/action_controller/routing.rb', line 641
def key
@key
end
|
Returns the value of attribute regexp.
641
642
643
|
# File 'lib/action_controller/routing.rb', line 641
def regexp
@regexp
end
|
Instance Method Details
#build_pattern(pattern) ⇒ Object
709
710
711
712
713
714
|
# File 'lib/action_controller/routing.rb', line 709
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
673
674
675
|
# File 'lib/action_controller/routing.rb', line 673
def expiry_statement
"expired, hash = true, options if !expired && expire_on[:#{key}]"
end
|
659
660
661
|
# File 'lib/action_controller/routing.rb', line 659
def
"#{local_name} = hash[:#{key}] #{"|| #{default.inspect}" if default}"
end
|
677
678
679
680
681
682
|
# File 'lib/action_controller/routing.rb', line 677
def
s =
vc = value_check
s << "\nreturn [nil,nil] unless #{vc}" if vc
s << "\n#{expiry_statement}"
end
|
#interpolation_chunk ⇒ Object
684
685
686
|
# File 'lib/action_controller/routing.rb', line 684
def interpolation_chunk
"\#{CGI.escape(#{local_name}.to_s)}"
end
|
#local_name ⇒ Object
The local variable name that the value of this segment will be extracted to.
655
656
657
|
# File 'lib/action_controller/routing.rb', line 655
def local_name
"#{key}_value"
end
|
715
716
717
718
719
720
|
# File 'lib/action_controller/routing.rb', line 715
def (next_capture)
hangon = (default ? "|| #{default.inspect}" : "if match[#{next_capture}]")
"params[:#{key}] = match[#{next_capture}] #{hangon}"
end
|
#optionality_implied? ⇒ Boolean
722
723
724
|
# File 'lib/action_controller/routing.rb', line 722
def optionality_implied?
[:action, :id].include? key
end
|
#regexp_chunk ⇒ Object
705
706
707
|
# File 'lib/action_controller/routing.rb', line 705
def regexp_chunk
regexp ? "(#{regexp.source})" : "([^#{Routing::SEPARATORS.join}]+)"
end
|
#string_structure(prior_segments) ⇒ Object
688
689
690
691
692
693
694
695
696
697
698
699
700
|
# File 'lib/action_controller/routing.rb', line 688
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
|
650
651
652
|
# File 'lib/action_controller/routing.rb', line 650
def to_s
":#{key}"
end
|
#value_check ⇒ Object
662
663
664
665
666
667
668
669
670
671
672
|
# File 'lib/action_controller/routing.rb', line 662
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
702
703
704
|
# File 'lib/action_controller/routing.rb', line 702
def value_regexp
Regexp.new "\\A#{regexp.source}\\Z" if regexp
end
|