Class: ActionController::Routing::Route

Inherits:
Object
  • Object
show all
Defined in:
lib/action_controller/routing.rb

Overview

:nodoc:

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(path, options = {}) ⇒ Route

Returns a new instance of Route.



337
338
339
340
341
342
343
344
345
346
# File 'lib/action_controller/routing.rb', line 337

def initialize(path, options = {})
  @path, @options = path, options
    
  initialize_components path
  defaults, conditions = initialize_hashes options.dup
  @defaults = defaults.dup
  configure_components(defaults, conditions)
  add_default_requirements
  initialize_keys
end

Instance Attribute Details

#componentsObject

Returns the value of attribute components.



334
335
336
# File 'lib/action_controller/routing.rb', line 334

def components
  @components
end

#defaultsObject (readonly)

Returns the value of attribute defaults.



335
336
337
# File 'lib/action_controller/routing.rb', line 335

def defaults
  @defaults
end

#keysObject (readonly)

Returns the value of attribute keys.



335
336
337
# File 'lib/action_controller/routing.rb', line 335

def keys
  @keys
end

#knownObject

Returns the value of attribute known.



334
335
336
# File 'lib/action_controller/routing.rb', line 334

def known
  @known
end

#optionsObject (readonly)

Returns the value of attribute options.



335
336
337
# File 'lib/action_controller/routing.rb', line 335

def options
  @options
end

#pathObject (readonly)

Returns the value of attribute path.



335
336
337
# File 'lib/action_controller/routing.rb', line 335

def path
  @path
end

Instance Method Details

#extra_keys(options) ⇒ Object



390
391
392
# File 'lib/action_controller/routing.rb', line 390

def extra_keys(options)
  options.keys - @keys
end

#initialize_keysObject



385
386
387
388
# File 'lib/action_controller/routing.rb', line 385

def initialize_keys
  @keys = (components.collect {|c| c.key} + known.keys).compact
  @keys.freeze
end

#inspectObject



348
349
350
# File 'lib/action_controller/routing.rb', line 348

def inspect
  "<#{self.class} #{path.inspect}, #{options.inspect[1..-1]}>"
end

#matches_controller?(controller) ⇒ Boolean

Returns:

  • (Boolean)


394
395
396
397
398
399
400
401
# File 'lib/action_controller/routing.rb', line 394

def matches_controller?(controller)
  if known[:controller] then known[:controller] == controller
  else
    c = components.find {|c| c.key == :controller}
    return false unless c
    return c.condition.nil? || eval(Routing.test_condition('controller', c.condition))
  end
end

#write_generation(generator = CodeGeneration::GenerationGenerator.new) ⇒ Object



352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
# File 'lib/action_controller/routing.rb', line 352

def write_generation(generator = CodeGeneration::GenerationGenerator.new)
  generator.before, generator.current, generator.after = [], components.first, (components[1..-1] || [])

  if known.empty? then generator.go
  else
    # Alter the conditions to allow :action => 'index' to also catch :action => nil
    altered_known = known.collect do |k, v|
      if k == :action && v== 'index' then [k, [nil, 'index']]
      else [k, v]
      end
    end
    generator.if(generator.check_conditions(altered_known)) {|gp| gp.go }
  end
  
  generator
end

#write_recognition(generator = CodeGeneration::RecognitionGenerator.new) ⇒ Object



369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
# File 'lib/action_controller/routing.rb', line 369

def write_recognition(generator = CodeGeneration::RecognitionGenerator.new)
  g = generator.dup
  g.share_locals_with generator
  g.before, g.current, g.after = [], components.first, (components[1..-1] || [])
    
  known.each do |key, value|
    if key == :controller then ControllerComponent.assign_controller(g, value)
    else g.constant_result(key, value)
    end
  end
    
  g.go
    
  generator
end