class Lolita::Extensions::Authorization::PunditAdapter
Public Class Methods
new(context, options={})
click to toggle source
# File lib/lolita/extensions/authorization/pundit_adapter.rb, line 6 def initialize context, options={} raise NameError, "Pundit is not defined" unless defined?(Pundit) raise Lolita::NoAuthorizationDefinedError, "Lolita.authorization is not defined" unless Lolita.authorization @context = context @options = options current_ability end
Public Instance Methods
can?(*args)
click to toggle source
# File lib/lolita/extensions/authorization/pundit_adapter.rb, line 14 def can? *args !!(ability = current_ability(*args) and ability.send(policy_method(args))) end
cannot?(*args)
click to toggle source
# File lib/lolita/extensions/authorization/pundit_adapter.rb, line 18 def cannot? *args !can?(*args) end
current_ability(*args)
click to toggle source
# File lib/lolita/extensions/authorization/pundit_adapter.rb, line 22 def current_ability *args if current_user && record = get_record(*args) @current_ability = Pundit.policy(current_user, record) || Lolita.policy_class.new(current_user, record) @context && @context.instance_variable_set(:"@current_ability", @current_ability) end @current_ability end
Private Instance Methods
current_user()
click to toggle source
# File lib/lolita/extensions/authorization/pundit_adapter.rb, line 39 def current_user @context && @context.authentication_proxy.current_user end
get_record(*args)
click to toggle source
# File lib/lolita/extensions/authorization/pundit_adapter.rb, line 43 def get_record *args if args.any? record_as_instance(args.last) else mapping = @options[:request].env["lolita.mapping"] and mapping.class_name.constantize end end
is_instance?(obj)
click to toggle source
# File lib/lolita/extensions/authorization/pundit_adapter.rb, line 71 def is_instance? obj !obj.respond_to? :ancestors end
is_module?(obj)
click to toggle source
# File lib/lolita/extensions/authorization/pundit_adapter.rb, line 68 def is_module? obj obj.class == Module end
policy_method(args)
click to toggle source
# File lib/lolita/extensions/authorization/pundit_adapter.rb, line 51 def policy_method args "#{args.first}?" end
record_as_instance(record)
click to toggle source
pundit can receive only instance as record, but Lolita
can give sometime instance sometimes class or module, so we try to make it as instance
# File lib/lolita/extensions/authorization/pundit_adapter.rb, line 58 def record_as_instance record if is_instance?(record) record elsif is_module?(record) Object.new else record.new end end