2009-10-12 07:37:42 -04:00
|
|
|
module Devise
|
|
|
|
module Controllers
|
|
|
|
module Helpers
|
|
|
|
|
|
|
|
def self.included(base)
|
|
|
|
base.class_eval do
|
2009-10-12 08:56:12 -04:00
|
|
|
helper_method :resource, :resource_name, :resource_class, :devise_mapping
|
2009-10-12 07:37:42 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2009-10-17 11:10:15 -04:00
|
|
|
# Gets the actual resource stored in the instance variable
|
2009-10-12 07:37:42 -04:00
|
|
|
def resource
|
|
|
|
instance_variable_get(:"@#{resource_name}")
|
|
|
|
end
|
|
|
|
|
2009-10-17 11:10:15 -04:00
|
|
|
# Proxy to devise map name
|
2009-10-12 07:37:42 -04:00
|
|
|
def resource_name
|
|
|
|
devise_mapping.name
|
|
|
|
end
|
|
|
|
|
2009-10-17 11:10:15 -04:00
|
|
|
# Proxy to devise map class
|
2009-10-12 07:37:42 -04:00
|
|
|
def resource_class
|
|
|
|
devise_mapping.to
|
|
|
|
end
|
|
|
|
|
2009-10-12 08:56:12 -04:00
|
|
|
protected
|
2009-10-12 07:37:42 -04:00
|
|
|
|
2009-10-18 10:54:21 -04:00
|
|
|
# Redirects to stored uri before signing in or the default path and clear
|
|
|
|
# return to.
|
|
|
|
def redirect_back_or_to(default)
|
|
|
|
redirect_to(return_to || default)
|
|
|
|
clear_return_to
|
|
|
|
end
|
|
|
|
|
|
|
|
# Access to scoped stored uri
|
|
|
|
def return_to
|
|
|
|
session[:"#{resource_name}.return_to"]
|
|
|
|
end
|
|
|
|
|
|
|
|
# Clear scoped stored uri
|
|
|
|
def clear_return_to
|
|
|
|
session[:"#{resource_name}.return_to"] = nil
|
|
|
|
end
|
|
|
|
|
2009-10-18 22:38:50 -04:00
|
|
|
# Checks for the existence of the resource root path. If it exists,
|
|
|
|
# returns it, otherwise returns the default root_path.
|
|
|
|
# Used after authenticating a user, confirming it's account or updating
|
|
|
|
# it's password, so we are able to redirect to scoped root paths.
|
|
|
|
# Examples (for a user scope):
|
|
|
|
# map.user_root '/users', :controller => 'users' # creates user_root_path
|
|
|
|
#
|
|
|
|
# map.namespace :users do |users|
|
|
|
|
# users.root # creates user_root_path
|
|
|
|
# end
|
|
|
|
def home_or_root_path
|
|
|
|
home_path = :"#{resource_name}_root_path"
|
|
|
|
respond_to?(home_path, true) ? send(home_path) : root_path
|
|
|
|
end
|
|
|
|
|
2009-10-17 11:10:15 -04:00
|
|
|
# Attempt to find the mapped route for devise based on request path
|
2009-10-12 08:56:12 -04:00
|
|
|
def devise_mapping
|
|
|
|
@devise_mapping ||= Devise.find_mapping_by_path(request.path)
|
|
|
|
end
|
2009-10-12 07:37:42 -04:00
|
|
|
|
2009-10-17 11:10:15 -04:00
|
|
|
# Sets the resource creating an instance variable
|
2009-10-12 08:56:12 -04:00
|
|
|
def resource=(new_resource)
|
|
|
|
instance_variable_set(:"@#{resource_name}", new_resource)
|
|
|
|
end
|
2009-10-12 07:37:42 -04:00
|
|
|
|
2009-10-17 11:10:15 -04:00
|
|
|
# Sets the flash message with :key, using I18n. By default you are able
|
|
|
|
# to setup your messages using specific resource scope, and if no one is
|
|
|
|
# found we look to default scope.
|
|
|
|
# Example (i18n locale file):
|
|
|
|
#
|
|
|
|
# en:
|
|
|
|
# devise:
|
|
|
|
# passwords:
|
|
|
|
# #default_scope_messages - only if resource_scope is not found
|
2009-10-19 23:28:01 -04:00
|
|
|
# user:
|
2009-10-17 11:10:15 -04:00
|
|
|
# #resource_scope_messages
|
|
|
|
#
|
|
|
|
# Please refer to README or en.yml locale file to check what messages are
|
|
|
|
# available.
|
2009-10-12 08:56:12 -04:00
|
|
|
def set_flash_message(key, kind)
|
|
|
|
flash[key] = I18n.t(:"#{resource_name}.#{kind}",
|
|
|
|
:scope => [:devise, controller_name.to_sym], :default => kind)
|
|
|
|
end
|
2009-10-12 07:37:42 -04:00
|
|
|
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|