Class: Miau::PolicyStorage
- Inherits:
-
Object
- Object
- Miau::PolicyStorage
- Includes:
- Singleton
- Defined in:
- lib/miau/storage.rb
Instance Attribute Summary collapse
-
#instances ⇒ Object
readonly
{ posts: PostsPolicy.new }.
-
#policies ⇒ Object
readonly
Example @policies: { posts: { delete: :delete, remove: :delete }, application: { admin: :check } }.
Instance Method Summary collapse
- #add_policy(kls, action, meth) ⇒ Object
- #find_or_create_policy(klass) ⇒ Object
-
#initialize ⇒ PolicyStorage
constructor
A new instance of PolicyStorage.
- #reset ⇒ Object
- #to_yaml ⇒ Object
Constructor Details
#initialize ⇒ PolicyStorage
Returns a new instance of PolicyStorage.
23 24 25 |
# File 'lib/miau/storage.rb', line 23 def initialize reset end |
Instance Attribute Details
#instances ⇒ Object (readonly)
{ posts: PostsPolicy.new }
21 22 23 |
# File 'lib/miau/storage.rb', line 21 def instances @instances end |
#policies ⇒ Object (readonly)
Example @policies: {
posts: {
delete: :delete,
remove: :delete
},
application: {
admin: :check
}
}
20 21 22 |
# File 'lib/miau/storage.rb', line 20 def policies @policies end |
Instance Method Details
#add_policy(kls, action, meth) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/miau/storage.rb', line 32 def add_policy(kls, action, meth) kls = kls.to_sym action = action.to_sym @policies[kls] ||= {} if @policies[kls][action] raise OverwriteError, "Can't overwrite policy(#{kls}, #{action})" end if meth.is_a?(Array) meths = [meth].flatten.collect { |m| m.to_sym } @policies[kls][action] = meths else @policies[kls][action] = meth.to_sym end end |
#find_or_create_policy(klass) ⇒ Object
48 49 50 51 52 53 54 55 56 |
# File 'lib/miau/storage.rb', line 48 def find_or_create_policy(klass) res = @instances[klass] return res unless res.nil? name = "#{klass.to_s.camelcase}Policy" return nil unless Object.const_defined?(name) instances[klass] = name.constantize.new end |
#reset ⇒ Object
27 28 29 30 |
# File 'lib/miau/storage.rb', line 27 def reset @policies = {} @instances = {} end |
#to_yaml ⇒ Object
58 59 60 61 |
# File 'lib/miau/storage.rb', line 58 def to_yaml "# === @policies ===\n" + YAML.dump(@policies) + "# === @instances ===\n" + YAML.dump(@instances) end |