Sha256: 767603e3e0ec7a9ab1201c2b7db738d2a85212374626d4715ecfa60eab9f65c9
Contents?: true
Size: 1.33 KB
Versions: 1
Compression:
Stored size: 1.33 KB
Contents
require "pretender/version" module Pretender def impersonates(scope = :user, opts = {}) impersonated_method = opts[:method] || :"current_#{scope}" impersonate_with = opts[:with] || proc{|id| scope.to_s.classify.constantize.where(:id => id).first } true_method = :"true_#{scope}" session_key = :"impersonated_#{scope}_id" impersonated_var = :"@impersonated_#{scope}" # define methods alias_method true_method, impersonated_method helper_method true_method define_method impersonated_method do if !instance_variable_get(impersonated_var) # only fetch impersonation if user is logged in and impersonation_id exists true_resource = send(true_method) value = (true_resource && session[session_key] && impersonate_with.call(session[session_key])) || true_resource instance_variable_set(impersonated_var, value) if value end instance_variable_get(impersonated_var) end define_method :"impersonate_#{scope}" do |resource| instance_variable_set(impersonated_var, resource) session[session_key] = resource.id end define_method :"stop_impersonating_#{scope}" do instance_variable_set(impersonated_var, nil) session[session_key] = nil end end end ActionController::Base.send(:extend, Pretender) if defined?(ActionController::Base)
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
pretender-0.0.2 | lib/pretender.rb |