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

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
actionpack/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

Methods included from Enumerable

#as_json, #exclude?, #index_by, #many?, #sum

Constructor Details

#initializeNamedRouteCollection

Returns a new instance of NamedRouteCollection.


93
94
95
96
97
98
99
# File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 93

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

#routesObject (readonly)

Returns the value of attribute routes


91
92
93
# File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 91

def routes
  @routes
end

#url_helpers_moduleObject (readonly)

Returns the value of attribute url_helpers_module


91
92
93
# File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 91

def url_helpers_module
  @url_helpers_module
end

Instance Method Details

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


132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 132

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

  if routes.key? key
    @path_helpers_module.send :undef_method, path_name
    @url_helpers_module.send  :undef_method, url_name
  end
  routes[key] = route
  define_url_helper @path_helpers_module, route, path_name, route.defaults, name, LEGACY
  define_url_helper @url_helpers_module,  route, url_name,  route.defaults, name, UNKNOWN

  @path_helpers << path_name
  @url_helpers << url_name
end

#clear!Object Also known as: clear


118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 118

def clear!
  @path_helpers.each do |helper|
    @path_helpers_module.send :undef_method, helper
  end

  @url_helpers.each do |helper|
    @url_helpers_module.send  :undef_method, helper
  end

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

#eachObject


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

def each
  routes.each { |name, route| yield name, route }
  self
end

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


149
150
151
# File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 149

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

#helper_namesObject


114
115
116
# File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 114

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

#helpersObject


106
107
108
109
110
111
112
# File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 106

def helpers
  ActiveSupport::Deprecation.warn(<<-MSG.squish)
    `named_routes.helpers` is deprecated, please use `route_defined?(route_name)`
    to see if a named route was defined.
  MSG
  @path_helpers + @url_helpers
end

#key?(name) ⇒ Boolean

Returns:

  • (Boolean)

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

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

#lengthObject


170
171
172
# File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 170

def length
  routes.length
end

#namesObject


166
167
168
# File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 166

def names
  routes.keys
end

#path_helpers_module(warn = false) ⇒ Object


174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
# File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 174

def path_helpers_module(warn = false)
  if warn
    mod = @path_helpers_module
    helpers = @path_helpers
    Module.new do
      include mod

      helpers.each do |meth|
        define_method(meth) do |*args, &block|
          ActiveSupport::Deprecation.warn("The method `#{meth}` cannot be used here as a full URL is required. Use `#{meth.to_s.sub(/_path$/, '_url')}` instead")
          super(*args, &block)
        end
      end
    end
  else
    @path_helpers_module
  end
end

#route_defined?(name) ⇒ Boolean

Returns:

  • (Boolean)

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

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