Module: Devise::Controllers::UrlHelpers

Defined in:
lib/devise/controllers/url_helpers.rb

Overview

Create url helpers to be used with resource/scope configuration. Acts as proxies to the generated routes created by devise. Resource param can be a string or symbol, a class, or an instance object. Example using a :user resource:

new_session_path(:user)      => new_user_session_path
session_path(:user)          => user_session_path
destroy_session_path(:user)  => destroy_user_session_path

new_password_path(:user)     => new_user_password_path
password_path(:user)         => user_password_path
edit_password_path(:user)    => edit_user_password_path

new_confirmation_path(:user) => new_user_confirmation_path
confirmation_path(:user)     => user_confirmation_path

Those helpers are included by default to ActionController::Base.

In case you want to add such helpers to another class, you can do that as long as this new class includes both url_helpers and mounted_helpers. Example:

include Rails.application.routes.url_helpers
include Rails.application.routes.mounted_helpers

Class Method Summary collapse

Class Method Details

.generate_helpers!(routes = nil) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/devise/controllers/url_helpers.rb', line 35

def self.generate_helpers!(routes=nil)
  routes ||= begin
    mappings = Devise.mappings.values.map(&:used_helpers).flatten.uniq
    Devise::URL_HELPERS.slice(*mappings)
  end

  routes.each do |module_name, actions|
    [:path, :url].each do |path_or_url|
      actions.each do |action|
        action = action ? "#{action}_" : ""
        method = "#{action}#{module_name}_#{path_or_url}"

        class_eval <<-URL_HELPERS, __FILE__, __LINE__ + 1
          def #{method}(resource_or_scope, *args)
            scope = Devise::Mapping.find_scope!(resource_or_scope)
            router_name = Devise.mappings[scope].router_name
            context = router_name ? send(router_name) : _devise_route_context
            context.send("#{action}\#{scope}_#{module_name}_#{path_or_url}", *args)
          end
        URL_HELPERS
      end
    end
  end
end

.remove_helpers!Object



29
30
31
32
33
# File 'lib/devise/controllers/url_helpers.rb', line 29

def self.remove_helpers!
  self.instance_methods.map(&:to_s).grep(/_(url|path)$/).each do |method|
    remove_method method
  end
end