Class: Textus::Manifest::Policy
- Inherits:
-
Object
- Object
- Textus::Manifest::Policy
- Defined in:
- lib/textus/manifest/policy.rb
Overview
Authority over zones and roles derived from a Manifest::Data snapshot. Encapsulates the lookups previously living on Manifest itself (zone_writers, zone_kinds, permission_for, role_kind, roles_with_kind).
Instance Method Summary collapse
-
#initialize(data) ⇒ Policy
constructor
A new instance of Policy.
- #permission_for(zone_name) ⇒ Object
- #role_kind(name) ⇒ Object
- #role_mapping ⇒ Object
- #roles_with_kind(kind) ⇒ Object
- #zone_kinds(zone_name) ⇒ Object
- #zone_readers ⇒ Object
- #zone_writers(zone_name) ⇒ Object
Constructor Details
#initialize(data) ⇒ Policy
Returns a new instance of Policy.
7 8 9 10 |
# File 'lib/textus/manifest/policy.rb', line 7 def initialize(data) @data = data @zone_kinds_cache = {} end |
Instance Method Details
#permission_for(zone_name) ⇒ Object
20 21 22 23 24 25 26 |
# File 'lib/textus/manifest/policy.rb', line 20 def (zone_name) Textus::Domain::Permission.new( zone: zone_name, write_policy: zone_writers(zone_name), read_policy: @data.zone_readers[zone_name] || :all, ) end |
#role_kind(name) ⇒ Object
39 40 41 |
# File 'lib/textus/manifest/policy.rb', line 39 def role_kind(name) @data.role_mapping[name] end |
#role_mapping ⇒ Object
35 36 37 |
# File 'lib/textus/manifest/policy.rb', line 35 def role_mapping @data.role_mapping end |
#roles_with_kind(kind) ⇒ Object
43 44 45 |
# File 'lib/textus/manifest/policy.rb', line 43 def roles_with_kind(kind) @data.role_mapping.each_with_object([]) { |(name, k), acc| acc << name if k == kind } end |
#zone_kinds(zone_name) ⇒ Object
28 29 30 31 32 33 |
# File 'lib/textus/manifest/policy.rb', line 28 def zone_kinds(zone_name) @zone_kinds_cache[zone_name] ||= zone_writers(zone_name).each_with_object(Set.new) do |w, acc| k = role_kind(w) acc << k if k end.freeze end |
#zone_readers ⇒ Object
16 17 18 |
# File 'lib/textus/manifest/policy.rb', line 16 def zone_readers @data.zone_readers end |
#zone_writers(zone_name) ⇒ Object
12 13 14 |
# File 'lib/textus/manifest/policy.rb', line 12 def zone_writers(zone_name) @data.zones[zone_name] or raise UsageError.new("undeclared zone '#{zone_name}'") end |