Class: ActionDispatch::Routing::RouteSet::NamedRouteCollection

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/action_dispatch/routing/route_set.rb

Overview

A NamedRouteCollection instance is a collection of named routes, and also maintains an anonymous module that can be used to install helpers for the named routes.

Defined Under Namespace

Classes: UrlHelper

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeNamedRouteCollection

Returns a new instance of NamedRouteCollection.

[View source]

89
90
91
92
93
94
95
# File 'lib/action_dispatch/routing/route_set.rb', line 89

def initialize
  @routes = {}
  @path_helpers = Set.new
  @url_helpers = Set.new
  @url_helpers_module  = Module.new
  @path_helpers_module = Module.new
end

Instance Attribute Details

#path_helpers_moduleObject (readonly)

Returns the value of attribute path_helpers_module.


86
87
88
# File 'lib/action_dispatch/routing/route_set.rb', line 86

def path_helpers_module
  @path_helpers_module
end

#url_helpers_moduleObject (readonly)

Returns the value of attribute url_helpers_module.


86
87
88
# File 'lib/action_dispatch/routing/route_set.rb', line 86

def url_helpers_module
  @url_helpers_module
end

Instance Method Details

#add(name, route) ⇒ Object Also known as: []=

[View source]

120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/action_dispatch/routing/route_set.rb', line 120

def add(name, route)
  key       = name.to_sym
  path_name = :"#{name}_path"
  url_name  = :"#{name}_url"

  if routes.key? key
    @path_helpers_module.undef_method path_name
    @url_helpers_module.undef_method url_name
  end
  routes[key] = route

  helper = UrlHelper.create(route, route.defaults, name)
  define_url_helper @path_helpers_module, path_name, helper, PATH
  define_url_helper @url_helpers_module, url_name, helper, UNKNOWN

  @path_helpers << path_name
  @url_helpers << url_name
end

#add_url_helper(name, defaults, &block) ⇒ Object

Given a ‘name`, defines name_path and name_url helpers. Used by ’direct’, ‘resolve’, and ‘polymorphic’ route helpers.

[View source]

167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
# File 'lib/action_dispatch/routing/route_set.rb', line 167

def add_url_helper(name, defaults, &block)
  helper = CustomUrlHelper.new(name, defaults, &block)
  path_name = :"#{name}_path"
  url_name = :"#{name}_url"

  @path_helpers_module.module_eval do
    redefine_method(path_name) do |*args|
      helper.call(self, args, true)
    end
  end

  @url_helpers_module.module_eval do
    redefine_method(url_name) do |*args|
      helper.call(self, args, false)
    end
  end

  @path_helpers << path_name
  @url_helpers << url_name

  self
end

#clear!Object Also known as: clear

[View source]

106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/action_dispatch/routing/route_set.rb', line 106

def clear!
  @path_helpers.each do |helper|
    @path_helpers_module.remove_method helper
  end

  @url_helpers.each do |helper|
    @url_helpers_module.remove_method helper
  end

  @routes.clear
  @path_helpers.clear
  @url_helpers.clear
end

#each(&block) ⇒ Object

[View source]

152
153
154
155
# File 'lib/action_dispatch/routing/route_set.rb', line 152

def each(&block)
  routes.each(&block)
  self
end

#get(name) ⇒ Object Also known as: []

[View source]

139
140
141
# File 'lib/action_dispatch/routing/route_set.rb', line 139

def get(name)
  routes[name.to_sym]
end

#helper_namesObject

[View source]

102
103
104
# File 'lib/action_dispatch/routing/route_set.rb', line 102

def helper_names
  @path_helpers.map(&:to_s) + @url_helpers.map(&:to_s)
end

#key?(name) ⇒ Boolean

Returns:

  • (Boolean)
[View source]

143
144
145
146
# File 'lib/action_dispatch/routing/route_set.rb', line 143

def key?(name)
  return unless name
  routes.key? name.to_sym
end

#lengthObject

[View source]

161
162
163
# File 'lib/action_dispatch/routing/route_set.rb', line 161

def length
  routes.length
end

#namesObject

[View source]

157
158
159
# File 'lib/action_dispatch/routing/route_set.rb', line 157

def names
  routes.keys
end

#route_defined?(name) ⇒ Boolean

Returns:

  • (Boolean)
[View source]

97
98
99
100
# File 'lib/action_dispatch/routing/route_set.rb', line 97

def route_defined?(name)
  key = name.to_sym
  @path_helpers.include?(key) || @url_helpers.include?(key)
end