lib/devise-guests/controllers/helpers.rb in devise-guests-0.2.0 vs lib/devise-guests/controllers/helpers.rb in devise-guests-0.3.0
- old
+ new
@@ -28,11 +28,24 @@
class_eval <<-METHODS, __FILE__, __LINE__ + 1
define_concern_callbacks :logging_in_#{mapping}
def guest_#{mapping}
- #{class_name}.find(session[:guest_#{mapping}_id].nil? ? session[:guest_#{mapping}_id] = create_guest_#{mapping}.id : session[:guest_#{mapping}_id])
+ 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]
@@ -46,12 +59,14 @@
guest_#{mapping}
end
end
private
- def create_guest_#{mapping}
- u = #{class_name}.create(:email => "guest_" + guest_#{mapping}_unique_suffix + "@example.com")
- u.save(:validate => false)
+ def create_guest_#{mapping} email = nil
+ email ||= "guest_" + guest_#{mapping}_unique_suffix + "@example.com"
+ u = #{class_name}.create(:email => email)
+ 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