lib/devise-guests/controllers/helpers.rb in devise-guests-0.7.0 vs lib/devise-guests/controllers/helpers.rb in devise-guests-0.8.0
- old
+ new
@@ -2,41 +2,26 @@
module Helpers
extend ActiveSupport::Concern
included do
include ActiveSupport::Callbacks
- (DeviseGuests::Controllers::Helpers.callbacks || []).each do |c|
- define_callbacks *c
- end
-
end
- mattr_reader :callbacks
-
module ClassMethods
-
end
- def self.define_concern_callbacks *args
- @@callbacks ||= []
- @@callbacks << args
- end
-
- def self.define_helpers(mapping) #:nodoc:
+ 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(#{class_name}.authentication_keys.first => session[:guest_#{mapping}_id]) rescue nil
- @guest_#{mapping} = nil if @guest_#{mapping}.respond_to? :guest and !@guest_#{mapping}.guest
+ @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.send(#{class_name}.authentication_keys.first)
@@ -48,11 +33,11 @@
def current_or_guest_#{mapping}
if current_#{mapping}
if session[:guest_#{mapping}_id]
run_callbacks :logging_in_#{mapping} do
- guest_#{mapping}.destroy
+ guest_#{mapping}.destroy unless send(:"skip_destroy_guest_#{mapping}")
session[:guest_#{mapping}_id] = nil
end
end
current_#{mapping}
else
@@ -63,10 +48,11 @@
private
def create_guest_#{mapping} key = nil
auth_key = #{class_name}.authentication_keys.first
#{class_name}.new do |g|
g.send("\#{auth_key}=", send(:"guest_\#{auth_key}_authentication_key", key))
+ g.assign_attributes(send(:"guest_#{mapping}_params"))
g.guest = true if g.respond_to? :guest
g.skip_confirmation! if g.respond_to?(:skip_confirmation!)
g.save(validate: false)
end
end
@@ -74,24 +60,28 @@
def guest_email_authentication_key key
key &&= nil unless key.to_s.match(/^guest/)
key ||= "guest_" + guest_#{mapping}_unique_suffix + "@example.com"
end
+ def guest_#{mapping}_params
+ {}
+ end
+
def guest_#{mapping}_unique_suffix
- Devise.friendly_token + "_" + Time.now.to_i.to_s + "_" + unique_#{mapping}_counter.to_s
+ SecureRandom.uuid
end
- def unique_#{mapping}_counter
- @@unique_#{mapping}_counter ||= 0
- @@unique_#{mapping}_counter += 1
+ def skip_destroy_guest_#{mapping}
+ false
end
METHODS
ActiveSupport.on_load(:action_controller) do
if respond_to?(:helper_method)
helper_method "guest_#{mapping}", "current_or_guest_#{mapping}"
end
+ define_callbacks "logging_in_#{mapping}"
end
end
end
end