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
91
92
93
94
95
# 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 "    define_concern_callbacks :logging_in_\#{mapping}\n\n \n    def guest_\#{mapping}\n      return @guest_\#{mapping} if @guest_\#{mapping}\n\n      if session[:guest_\#{mapping}_id]\n        @guest_\#{mapping} = \#{class_name}.find_by(\#{class_name}.authentication_keys.first => session[:guest_\#{mapping}_id]) rescue nil\n        @guest_\#{mapping} = nil if @guest_\#{mapping}.respond_to? :guest and !@guest_\#{mapping}.guest \n      end\n\n      @guest_\#{mapping} ||= begin\n        u = create_guest_\#{mapping}(session[:guest_\#{mapping}_id])\n        session[:guest_\#{mapping}_id] = u.send(\#{class_name}.authentication_keys.first)\n        u\n      end\n\n      @guest_\#{mapping}\n    end\n\n    def current_or_guest_\#{mapping}\n      if current_\#{mapping}\n        if session[:guest_\#{mapping}_id]\n          run_callbacks :logging_in_\#{mapping} do\n            guest_\#{mapping}.destroy\n            session[:guest_\#{mapping}_id] = nil\n          end\n        end\n        current_\#{mapping}\n      else\n        guest_\#{mapping}\n      end\n    end\n\n    private\n    def create_guest_\#{mapping} key = nil\n      auth_key = \#{class_name}.authentication_keys.first\n      \#{class_name}.new do |g|\n        g.send(\"\\\#{auth_key}=\", send(:\"guest_\\\#{auth_key}_authentication_key\", key))\n        g.guest = true if g.respond_to? :guest\n        g.skip_confirmation! if g.respond_to?(:skip_confirmation!)\n        g.save(validate: false)\n      end\n    end\n\n    def guest_email_authentication_key key\n      key &&= nil unless key.to_s.match(/^guest/)\n      key ||= \"guest_\" + guest_\#{mapping}_unique_suffix + \"@example.com\"\n    end\n\n    def guest_\#{mapping}_unique_suffix\n      Devise.friendly_token + \"_\" + Time.now.to_i.to_s + \"_\" + unique_\#{mapping}_counter.to_s\n    end\n\n    def unique_\#{mapping}_counter\n      @@unique_\#{mapping}_counter ||= 0\n      @@unique_\#{mapping}_counter += 1\n    end\n\n  METHODS\n\n  ActiveSupport.on_load(:action_controller) do\n    if respond_to?(:helper_method)\n      helper_method \"guest_\#{mapping}\", \"current_or_guest_\#{mapping}\"\n    end\n  end\nend\n", __FILE__, __LINE__ + 1