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