module CanCanCan::Masquerade::InheritPermissions
Protected Instance Methods
build_permission_instance(&block)
click to toggle source
# File lib/cancancan/masquerade/inherit_permissions.rb, line 16 def build_permission_instance(&block) define_method(:to_permission_instance, &block) end
inherit_permissions_from(record, mapping: nil)
click to toggle source
# File lib/cancancan/masquerade/inherit_permissions.rb, line 6 def inherit_permissions_from(record, mapping: nil) case record when /^@/ then permissions_from_instance_variable(record) when Symbol then permissions_from_method(record) when Class then permissions_from_constructed_class(record, mapping) else raise InvalidPermissionConfiguration, "Invalid record type: #{record.class}. Expecting Symbol or Class." end end
Private Instance Methods
permissions_from_constructed_class(class_to_build, mapping)
click to toggle source
# File lib/cancancan/masquerade/inherit_permissions.rb, line 30 def permissions_from_constructed_class(class_to_build, mapping) unless mapping.is_a?(Hash) raise InvalidPermissionConfiguration, 'Must supply a `mapping:` when building from a Class' end build_permission_instance do values = mapping.reduce({}) do |final, (key, value)| mapped_value = if value.is_a? Symbol and respond_to? value send value elsif value.is_a? Symbol and instance_variable_defined? value instance_variable_get value else value end final.merge(key => mapped_value) end class_to_build.new(values) end end
permissions_from_instance_variable(variable)
click to toggle source
# File lib/cancancan/masquerade/inherit_permissions.rb, line 22 def permissions_from_instance_variable(variable) build_permission_instance { instance_variable_get(variable) } end
permissions_from_method(method)
click to toggle source
# File lib/cancancan/masquerade/inherit_permissions.rb, line 26 def permissions_from_method(method) build_permission_instance { send(method) } end