Class/Module Index [+]

Quicksearch

ActionController::Routing::Optimisation::PositionalArguments

Given a route

map.person '/people/:id'

If the user calls person_url(@person), we can simply return a string like “/people/#{@person.to_param}” rather than triggering the expensive logic in url_for.

Public Instance Methods

generation_code() click to toggle source
# File lib/action_controller/routing/optimisations.rb, line 78
def generation_code
  elements = []
  idx = 0

  if kind == :url
    elements << '#{request.protocol}'
    elements << '#{request.host_with_port}'
  end

  elements << '#{ActionController::Base.relative_url_root if ActionController::Base.relative_url_root}'

  # The last entry in <tt>route.segments</tt> appears to *always* be a
  # 'divider segment' for '/' but we have assertions to ensure that
  # we don't include the trailing slashes, so skip them.
  (route.segments.size == 1 ? route.segments : route.segments[0..-2]).each do |segment|
    if segment.is_a?(DynamicSegment)
      elements << segment.interpolation_chunk("args[#{idx}].to_param")
      idx += 1
    else
      elements << segment.interpolation_chunk
    end
  end
  %("#{elements * ''}")
end
guard_conditions() click to toggle source
# File lib/action_controller/routing/optimisations.rb, line 67
def guard_conditions
  number_of_arguments = route.required_segment_keys.size
  # if they're using foo_url(:id=>2) it's one
  # argument, but we don't want to generate /foos/id2
  if number_of_arguments == 1
    ["args.size == 1", "!args.first.is_a?(Hash)"]
  else
    ["args.size == #{number_of_arguments}"]
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.