Module: DeviseGuests::Controllers::Helpers
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/devise-guests/controllers/helpers.rb
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
Class Method Details
.define_concern_callbacks(*args) ⇒ Object
19 20 21 22 |
# File 'lib/devise-guests/controllers/helpers.rb', line 19 def self.define_concern_callbacks *args @@callbacks ||= [] @@callbacks << args end |
.define_helpers(mapping) ⇒ Object
:nodoc:
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/devise-guests/controllers/helpers.rb', line 24 def self.define_helpers(mapping) #:nodoc: class_name = mapping.class_name mapping = mapping.name class_eval <<-METHODS, __FILE__, __LINE__ + 1 define_concern_callbacks :logging_in_#{mapping} def guest_#{mapping} return @guest_#{mapping} if @guest_#{mapping} if session[:guest_#{mapping}_id] @guest_#{mapping} = #{class_name}.find_by_email(session[:guest_#{mapping}_id]) rescue nil @guest_#{mapping} = nil if @guest_#{mapping}.respond_to? :guest and !@guest_#{mapping}.guest end @guest_#{mapping} ||= begin u = create_guest_#{mapping}(session[:guest_#{mapping}_id]) session[:guest_#{mapping}_id] = u.email u end @guest_#{mapping} end def current_or_guest_#{mapping} if current_#{mapping} if session[:guest_#{mapping}_id] run_callbacks :logging_in_#{mapping} do guest_#{mapping}.destroy session[:guest_#{mapping}_id] = nil end end current_#{mapping} else guest_#{mapping} end end private def create_guest_#{mapping} email = nil email &&= nil unless email.to_s.match(/^guest/) email ||= "guest_" + guest_#{mapping}_unique_suffix + "@example.com" u = #{class_name}.new.tap do |g| g.email = email g.save end u.password = u.password_confirmation = email u.guest = true if u.respond_to? :guest u end def guest_#{mapping}_unique_suffix Devise.friendly_token + "_" + Time.now.to_i.to_s + "_" + unique_#{mapping}_counter.to_s end def unique_#{mapping}_counter @@unique_#{mapping}_counter ||= 0 @@unique_#{mapping}_counter += 1 end METHODS ActiveSupport.on_load(:action_controller) do helper_method "guest_#{mapping}", "current_or_guest_#{mapping}" end end |