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