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_helpers(mapping) ⇒ Object

:nodoc:



12
13
14
15
16
17
18
19
20
21
22
23
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
# File 'lib/devise-guests/controllers/helpers.rb', line 12

def self.define_helpers(mapping) # :nodoc:
  class_name = mapping.class_name
  mapping = mapping.name

  class_eval "    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 unless send(:\"skip_destroy_guest_\#{mapping}\")\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.assign_attributes(send(:\"guest_\#{mapping}_params\"))\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}_params\n      {}\n    end\n\n    def guest_\#{mapping}_unique_suffix\n      SecureRandom.uuid\n    end\n\n    def skip_destroy_guest_\#{mapping}\n      false\n    end\n\n    def transfer_guest_to_\#{mapping}\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    define_callbacks \"logging_in_\#{mapping}\"\n    set_callback :\"logging_in_\#{mapping}\", :\"transfer_guest_to_\#{mapping}\"\n  end\nend\n", __FILE__, __LINE__ + 1