2009-10-12 08:37:42 -03:00
|
|
|
module Devise
|
|
|
|
module Controllers
|
2009-10-27 21:26:40 -02:00
|
|
|
# Those helpers are used only inside Devise controllers and should not be
|
|
|
|
# included in ApplicationController since they all depend on the url being
|
|
|
|
# accessed.
|
2009-10-12 08:37:42 -03:00
|
|
|
module Helpers
|
|
|
|
|
|
|
|
def self.included(base)
|
|
|
|
base.class_eval do
|
2009-11-18 10:22:01 -02:00
|
|
|
unloadable
|
|
|
|
|
2009-11-19 11:43:31 -02:00
|
|
|
helper_method :resource, :scope_name, :resource_name, :resource_class, :devise_mapping, :devise_controller?
|
|
|
|
hide_action :resource, :scope_name, :resource_name, :resource_class, :devise_mapping, :devise_controller?
|
2009-10-27 21:26:40 -02:00
|
|
|
|
2009-11-06 09:33:18 -02:00
|
|
|
skip_before_filter *Devise.mappings.keys.map { |m| :"authenticate_#{m}!" }
|
2009-10-27 21:26:40 -02:00
|
|
|
before_filter :is_devise_resource?
|
2009-10-12 08:37:42 -03:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2009-10-17 12:10:15 -03:00
|
|
|
# Gets the actual resource stored in the instance variable
|
2009-10-12 08:37:42 -03:00
|
|
|
def resource
|
|
|
|
instance_variable_get(:"@#{resource_name}")
|
|
|
|
end
|
|
|
|
|
2009-10-17 12:10:15 -03:00
|
|
|
# Proxy to devise map name
|
2009-10-12 08:37:42 -03:00
|
|
|
def resource_name
|
|
|
|
devise_mapping.name
|
|
|
|
end
|
2009-11-19 11:43:31 -02:00
|
|
|
alias :scope_name :resource_name
|
2009-10-12 08:37:42 -03:00
|
|
|
|
2009-10-17 12:10:15 -03:00
|
|
|
# Proxy to devise map class
|
2009-10-12 08:37:42 -03:00
|
|
|
def resource_class
|
|
|
|
devise_mapping.to
|
|
|
|
end
|
|
|
|
|
2009-10-27 21:26:40 -02:00
|
|
|
# Attempt to find the mapped route for devise based on request path
|
|
|
|
def devise_mapping
|
2009-11-06 14:27:27 -02:00
|
|
|
@devise_mapping ||= Devise::Mapping.find_by_path(request.path)
|
2009-10-27 21:26:40 -02:00
|
|
|
end
|
|
|
|
|
2009-11-06 09:33:18 -02:00
|
|
|
# Overwrites devise_controller? to return true
|
|
|
|
def devise_controller?
|
|
|
|
true
|
|
|
|
end
|
|
|
|
|
2009-10-12 09:56:12 -03:00
|
|
|
protected
|
2009-10-12 08:37:42 -03:00
|
|
|
|
2009-10-27 21:26:40 -02:00
|
|
|
# Checks whether it's a devise mapped resource or not.
|
|
|
|
def is_devise_resource? #:nodoc:
|
|
|
|
raise ActionController::UnknownAction unless devise_mapping && devise_mapping.allows?(controller_name)
|
2009-10-12 09:56:12 -03:00
|
|
|
end
|
2009-10-12 08:37:42 -03:00
|
|
|
|
2009-10-17 12:10:15 -03:00
|
|
|
# Sets the resource creating an instance variable
|
2009-10-12 09:56:12 -03:00
|
|
|
def resource=(new_resource)
|
|
|
|
instance_variable_set(:"@#{resource_name}", new_resource)
|
|
|
|
end
|
2009-10-12 08:37:42 -03:00
|
|
|
|
2009-10-29 08:43:45 -02:00
|
|
|
# Build a devise resource without setting password and password confirmation fields.
|
2009-10-27 21:31:12 -02:00
|
|
|
def build_resource
|
2009-10-29 08:43:45 -02:00
|
|
|
self.resource ||= begin
|
|
|
|
attributes = params[resource_name].try(:except, :password, :password_confirmation)
|
2009-11-21 11:58:02 -02:00
|
|
|
resource_class.new(attributes || {})
|
2009-10-29 08:43:45 -02:00
|
|
|
end
|
2009-10-27 21:31:12 -02:00
|
|
|
end
|
|
|
|
|
2009-10-27 21:26:40 -02:00
|
|
|
# Helper for use in before_filters where no authentication is required.
|
|
|
|
#
|
|
|
|
# Example:
|
|
|
|
# before_filter :require_no_authentication, :only => :new
|
|
|
|
def require_no_authentication
|
2009-11-19 11:16:31 -02:00
|
|
|
redirect_to after_sign_in_path_for(resource_name) if warden.authenticated?(resource_name)
|
2009-10-27 21:26:40 -02:00
|
|
|
end
|
|
|
|
|
2009-10-17 12:10:15 -03: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-20 01:28:01 -02:00
|
|
|
# user:
|
2009-10-17 12:10:15 -03:00
|
|
|
# #resource_scope_messages
|
|
|
|
#
|
|
|
|
# Please refer to README or en.yml locale file to check what messages are
|
|
|
|
# available.
|
2009-10-21 11:20:10 -02:00
|
|
|
def set_flash_message(key, kind, now=false)
|
|
|
|
flash_hash = now ? flash.now : flash
|
|
|
|
flash_hash[key] = I18n.t(:"#{resource_name}.#{kind}",
|
2009-10-12 09:56:12 -03:00
|
|
|
:scope => [:devise, controller_name.to_sym], :default => kind)
|
|
|
|
end
|
2009-10-12 08:37:42 -03:00
|
|
|
|
2009-10-21 11:20:10 -02:00
|
|
|
# Shortcut to set flash.now message. Same rules applied from set_flash_message
|
|
|
|
def set_now_flash_message(key, kind)
|
|
|
|
set_flash_message(key, kind, true)
|
|
|
|
end
|
|
|
|
|
2009-10-12 08:37:42 -03:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|