Module: DeviseMasquerade::Controllers::Helpers

Defined in:
lib/devise_masquerade/controllers/helpers.rb

Class Method Summary collapse

Class Method Details

.define_helpers(mapping) ⇒ Object



4
5
6
7
8
9
10
11
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
# File 'lib/devise_masquerade/controllers/helpers.rb', line 4

def self.define_helpers(mapping)
  name = mapping.name
  class_name = mapping.class_name

  class_eval <<-METHODS, __FILE__, __LINE__ + 1
    def masquerade_#{name}!
      return if params["#{Devise.masquerade_param}"].blank?

      #{name} = ::#{class_name}.find_by_masquerade_key(params["#{Devise.masquerade_param}"])

      if #{name}
        masquerade_sign_in(#{name})
      end
    end

    def #{name}_masquerade?
      session[:"devise_masquerade_#{name}"].present?
    end

    def #{name}_masquerade_owner
      return nil unless send(:#{name}_masquerade?)
      ::#{class_name}.to_adapter.find_first(:id => session[:"devise_masquerade_#{name}"])
    end

    private

    def masquerade_sign_in(resource)
      if Devise.masquerade_bypass_warden_callback
        if respond_to?(:bypass_sign_in)
          bypass_sign_in(resource)
        else
          sign_in(resource, :bypass => true)
        end
      else
        sign_in(resource)
      end
    end
  METHODS

  ActiveSupport.on_load(:action_controller) do
    if respond_to?(:helper_method)
      helper_method "#{name}_masquerade?"
      helper_method "#{name}_masquerade_owner"
    end
  end
end