Class: Textus::Manifest::Policy

Inherits:
Object
  • Object
show all
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

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 permission_for(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_mappingObject



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_readersObject



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