Flowdock
method

optionalize_trailing_dynamic_segments

Importance_0
Ruby on Rails latest stable (v6.1.7.7) - 0 notes - Class: ActionDispatch::Routing::DeprecatedMapper
  • 1.0.0
  • 1.1.6
  • 1.2.6
  • 2.0.3
  • 2.1.0
  • 2.2.1
  • 2.3.8
  • 3.0.0 (0)
  • 3.0.9 (0)
  • 3.1.0
  • 3.2.1
  • 3.2.8
  • 3.2.13
  • 4.0.2
  • 4.1.8
  • 4.2.1
  • 4.2.7
  • 4.2.9
  • 5.0.0.1
  • 5.1.7
  • 5.2.3
  • 6.0.0
  • 6.1.3.1
  • 6.1.7.7
  • 7.0.0
  • 7.1.3.2
  • What's this?

Method deprecated or moved

This method is deprecated or moved on the latest stable version. The last existing version (v3.0.9) is shown here.

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.