lib/snfoil/policy.rb in snfoil-policy-0.0.4 vs lib/snfoil/policy.rb in snfoil-policy-1.0.0
- old
+ new
@@ -26,25 +26,33 @@
class Error < RuntimeError; end
extend ActiveSupport::Concern
class_methods do
- def i_permissions
- @i_permissions ||= {}
+ def snfoil_permissions
+ @snfoil_permissions ||= {}
end
def permission(authorization_type, entity_class = nil, with: nil, &block)
- @i_permissions ||= {}
- @i_permissions[authorization_type] ||= {}
- if @i_permissions[authorization_type][entity_class]
+ @snfoil_permissions ||= {}
+ @snfoil_permissions[authorization_type] ||= {}
+ if @snfoil_permissions[authorization_type][entity_class]
raise SnFoil::Policy::Error,
"permission #{entity_class} #{authorization_type} already defined for #{name}"
end
- @i_permissions[authorization_type][entity_class] = build_permission_exec(with, block)
+ @snfoil_permissions[authorization_type][entity_class] = build_permission_exec(with, block)
define_permission_method(authorization_type)
end
+
+ def inherited(subclass)
+ super
+
+ instance_variables.grep(/@snfoil_.+/).each do |i|
+ subclass.instance_variable_set(i, instance_variable_get(i).dup)
+ end
+ end
end
attr_reader :record, :entity
attr_accessor :options
@@ -81,10 +89,10 @@
proc { send(method) }
end
def define_permission_method(authorization_type)
define_method authorization_type do
- self.class.i_permissions[authorization_type].each do |klass, exec|
+ self.class.snfoil_permissions[authorization_type].each do |klass, exec|
return instance_eval(&exec) if klass.nil? || entity.is_a?(klass)
end
false
end