Class: Miau::PolicyStorage

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/miau/storage.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializePolicyStorage

Returns a new instance of PolicyStorage.



23
24
25
# File 'lib/miau/storage.rb', line 23

def initialize
  reset
end

Instance Attribute Details

#instancesObject (readonly)

e.g. { posts: PostsPolicy.new }



21
22
23
# File 'lib/miau/storage.rb', line 21

def instances
  @instances
end

#policiesObject (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(&: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

#resetObject



27
28
29
30
# File 'lib/miau/storage.rb', line 27

def reset
  @policies = {}
  @instances = {}
end

#to_yamlObject



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