class Miau::PolicyStorage
Attributes
instances[R]
policies[R]
Example @policies: {
posts: { delete: :delete, remove: :delete }, application: { admin: :check }
}
Public Class Methods
new()
click to toggle source
# File lib/miau/storage.rb, line 22 def initialize reset end
Public Instance Methods
add(klass, action, meth)
click to toggle source
# File lib/miau/storage.rb, line 31 def add(klass, action, meth) kls = klass.name.underscore[0..-8] # remove "_policy" kls = kls.to_sym @policies[kls] ||= {} @instances[kls] ||= klass.new @policies[kls][action.to_sym] = meth.to_sym end
find_policy(klass, action)
click to toggle source
returns policy: [instance, method]
# File lib/miau/storage.rb, line 49 def find_policy(klass, action) kls = instance_of(klass) act = policy_method(klass, action) return [kls, act] if kls.respond_to?(act) klass = :application kls = instance_of(klass) act = policy_method(klass, action) return [kls, act] if kls.respond_to?(act) # return nil end
reset()
click to toggle source
# File lib/miau/storage.rb, line 26 def reset @policies = {} @instances = {} end
run(klass, action, user, resource)
click to toggle source
# File lib/miau/storage.rb, line 62 def run(klass, action, user, resource) arr = find_policy(klass, action) unless arr msg = "class <#{klass}> action <#{action}>" raise Miau::NotDefinedError, msg end policy, meth = arr policy.user = user policy.resource = resource policy.send(meth) end
to_yaml()
click to toggle source
# File lib/miau/storage.rb, line 75 def to_yaml "# === @policies ===\n" + YAML.dump(@policies) + "# === @instances ===\n" + YAML.dump(@instances) end
Private Instance Methods
instance_of(klass)
click to toggle source
# File lib/miau/storage.rb, line 82 def instance_of(klass) res = @instances[klass] return res if res name = "#{klass.to_s.camelcase}Policy" return nil unless Object.const_defined?(name) @instances[klass] = name.constantize.new end
policy_method(klass, action)
click to toggle source
# File lib/miau/storage.rb, line 92 def policy_method(klass, action) act = @policies[klass] return action unless act act[action] || action end