Flowdock
method

optionalize_trailing_dynamic_segments

Importance_0
v3.0.9 - Show latest stable - 0 notes - Class: ActionDispatch::Routing::DeprecatedMapper
optionalize_trailing_dynamic_segments(path, requirements, defaults) private

No documentation

This method has no description. You can help the Ruby on Rails community by adding new notes.

Hide source
# File actionpack/lib/action_dispatch/routing/deprecated_mapper.rb, line 130
      def optionalize_trailing_dynamic_segments(path, requirements, defaults) #:nodoc:
        path = (path =~ /^\//) ? path.dup : "/#{path}"
        optional, segments = true, []

        required_segments = requirements.keys
        required_segments -= defaults.keys.compact

        old_segments = path.split('/')
        old_segments.shift
        length = old_segments.length

        old_segments.reverse.each_with_index do |segment, index|
          required_segments.each do |required|
            if segment =~ /#{required}/
              optional = false
              break
            end
          end

          if optional
            if segment == ":id" && segments.include?(":action")
              optional = false
            elsif segment == ":controller" || segment == ":action" || segment == ":id"
              # Ignore
            elsif !(segment =~ /^:\w+$/) &&
                !(segment =~ /^:\w+\(\.:format\)$/)
              optional = false
            elsif segment =~ /^:(\w+)$/
              if defaults.has_key?($1.to_sym)
                defaults.delete($1.to_sym) if defaults[$1.to_sym].nil?
              else
                optional = false
              end
            end
          end

          if optional && index < length - 1
            segments.unshift('(/', segment)
            segments.push(')')
          elsif optional
            segments.unshift('/(', segment)
            segments.push(')')
          else
            segments.unshift('/', segment)
          end
        end

        segments.join
      end
Register or log in to add new notes.