Class: ActionDispatch::Routing::RouteSet::Generator
- Defined in:
 - actionpack/lib/action_dispatch/routing/route_set.rb
 
Instance Attribute Summary collapse
- 
  
    
      #named_route  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    
Returns the value of attribute named_route.
 - 
  
    
      #options  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    
Returns the value of attribute options.
 - 
  
    
      #recall  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    
Returns the value of attribute recall.
 - 
  
    
      #set  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    
Returns the value of attribute set.
 
Instance Method Summary collapse
- #controller ⇒ Object
 - #current_controller ⇒ Object
 - #different_controller? ⇒ Boolean
 - 
  
    
      #generate  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Generates a path from routes, returns a RouteWithParams or MissingRoute.
 - 
  
    
      #initialize(named_route, options, recall, set)  ⇒ Generator 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    
A new instance of Generator.
 - 
  
    
      #normalize_controller!  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Remove leading slashes from controllers.
 - 
  
    
      #normalize_controller_action_id!  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
This pulls :controller, :action, and :id out of the recall.
 - #normalize_options! ⇒ Object
 - #use_recall_for(key) ⇒ Object
 - 
  
    
      #use_relative_controller!  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
if the current controller is “foo/bar/baz” and controller: “baz/bat” is specified, the controller becomes “foo/baz/bat”.
 
Constructor Details
#initialize(named_route, options, recall, set) ⇒ Generator
Returns a new instance of Generator.
      717 718 719 720 721 722 723 724 725 726 727  | 
    
      # File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 717 def initialize(named_route, , recall, set) @named_route = named_route @options = @recall = recall @set = set normalize_controller_action_id! use_relative_controller! normalize_controller! end  | 
  
Instance Attribute Details
#named_route ⇒ Object (readonly)
Returns the value of attribute named_route.
      715 716 717  | 
    
      # File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 715 def named_route @named_route end  | 
  
#options ⇒ Object (readonly)
Returns the value of attribute options.
      715 716 717  | 
    
      # File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 715 def @options end  | 
  
#recall ⇒ Object (readonly)
Returns the value of attribute recall.
      715 716 717  | 
    
      # File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 715 def recall @recall end  | 
  
#set ⇒ Object (readonly)
Returns the value of attribute set.
      715 716 717  | 
    
      # File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 715 def set @set end  | 
  
Instance Method Details
#controller ⇒ Object
      729 730 731  | 
    
      # File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 729 def controller @options[:controller] end  | 
  
#current_controller ⇒ Object
      733 734 735  | 
    
      # File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 733 def current_controller @recall[:controller] end  | 
  
#different_controller? ⇒ Boolean
      803 804 805 806  | 
    
      # File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 803 def different_controller? return false unless current_controller controller.to_param != current_controller.to_param end  | 
  
#generate ⇒ Object
Generates a path from routes, returns a RouteWithParams or MissingRoute. MissingRoute will raise ActionController::UrlGenerationError.
      799 800 801  | 
    
      # File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 799 def generate @set.formatter.generate(named_route, , recall) end  | 
  
#normalize_controller! ⇒ Object
Remove leading slashes from controllers
      787 788 789 790 791 792 793 794 795  | 
    
      # File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 787 def normalize_controller! if controller if controller.start_with?("/") @options[:controller] = controller[1..-1] else @options[:controller] = controller end end end  | 
  
#normalize_controller_action_id! ⇒ Object
This pulls :controller, :action, and :id out of the recall. The recall key is only used if there is no key in the options or if the key in the options is identical. If any of :controller, :action or :id is not found, don’t pull any more keys from the recall.
      769 770 771 772 773  | 
    
      # File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 769 def normalize_controller_action_id! use_recall_for(:controller) || return use_recall_for(:action) || return use_recall_for(:id) end  | 
  
#normalize_options! ⇒ Object
      745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763  | 
    
      # File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 745 def # If an explicit :controller was given, always make :action explicit too, so # that action expiry works as expected for things like # # generate({controller: 'content'}, {controller: 'content', action: 'show'}) # # (the above is from the unit tests). In the above case, because the controller # was explicitly given, but no action, the action is implied to be "index", not # the recalled action of "show". if [:controller] [:action] ||= "index" [:controller] = [:controller].to_s end if .key?(:action) [:action] = ([:action] || "index").to_s end end  | 
  
#use_recall_for(key) ⇒ Object
      737 738 739 740 741 742 743  | 
    
      # File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 737 def use_recall_for(key) if @recall[key] && (!@options.key?(key) || @options[key] == @recall[key]) if !named_route_exists? || segment_keys.include?(key) @options[key] = @recall[key] end end end  | 
  
#use_relative_controller! ⇒ Object
if the current controller is “foo/bar/baz” and controller: “baz/bat” is specified, the controller becomes “foo/baz/bat”
      777 778 779 780 781 782 783 784  | 
    
      # File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 777 def use_relative_controller! if !named_route && different_controller? && !controller.start_with?("/") old_parts = current_controller.split("/") size = controller.count("/") + 1 parts = old_parts[0...-size] << controller @options[:controller] = parts.join("/") end end  |