Class: CommandTower::Configuration::Registry::PrincipalCapabilities::Config
- Inherits:
-
Object
- Object
- CommandTower::Configuration::Registry::PrincipalCapabilities::Config
- Defined in:
- lib/command_tower/configuration/registry/principal_capabilities/config.rb
Constant Summary collapse
- PLATFORM_CAPABILITIES =
Curated CT-owned frontend-projectable capabilities (1:1 entity names). Deliberate registration only — never an automatic Entity.entities dump.
%i[ admin_workspace admin_audit_events admin_messaging_announcements admin_users admin_users_update admin_rbac_assignments admin_impersonation me_audit_events ].freeze
Instance Method Summary collapse
- #capability(name, owner: :host) {|definition| ... } ⇒ Object
- #definitions ⇒ Object
- #fetch(name) ⇒ Object
- #finalize! ⇒ Object
- #finalized? ⇒ Boolean
-
#initialize ⇒ Config
constructor
A new instance of Config.
- #registered?(name) ⇒ Boolean
- #reset_host_definitions! ⇒ Object
- #validate_required_entities!(entities) ⇒ Object
Constructor Details
#initialize ⇒ Config
Returns a new instance of Config.
24 25 26 27 28 |
# File 'lib/command_tower/configuration/registry/principal_capabilities/config.rb', line 24 def initialize @definitions = {} @finalized = false seed_platform_capabilities! end |
Instance Method Details
#capability(name, owner: :host) {|definition| ... } ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/command_tower/configuration/registry/principal_capabilities/config.rb', line 30 def capability(name, owner: :host) raise CommandTower::PrincipalCapabilities::FrozenRegistryError, "principal capabilities registry is frozen" if @finalized normalized = normalize_name!(name) existing = @definitions[normalized] if existing if existing.owner == :command_tower && owner == :host raise CommandTower::PrincipalCapabilities::HostOverrideError, "host cannot redefine CommandTower-owned principal capability #{normalized}" end raise CommandTower::PrincipalCapabilities::DuplicateCapabilityError, "principal capability #{normalized} is already registered" end definition = CapabilityDefinition.new yield definition if block_given? definition.owner = owner definition.validate_definition!(name: normalized) @definitions[normalized] = definition definition end |
#definitions ⇒ Object
71 72 73 |
# File 'lib/command_tower/configuration/registry/principal_capabilities/config.rb', line 71 def definitions @definitions.dup.freeze end |
#fetch(name) ⇒ Object
54 55 56 57 58 59 60 61 62 63 |
# File 'lib/command_tower/configuration/registry/principal_capabilities/config.rb', line 54 def fetch(name) normalized = normalize_name!(name) definition = @definitions[normalized] if definition.nil? raise CommandTower::PrincipalCapabilities::UnregisteredCapabilityError, "principal capability #{normalized} is not registered" end definition end |
#finalize! ⇒ Object
75 76 77 78 79 80 81 82 83 84 |
# File 'lib/command_tower/configuration/registry/principal_capabilities/config.rb', line 75 def finalize! @definitions.each_value do |definition| next unless definition.respond_to?(:class_composer_freeze_objects!) definition.class_composer_freeze_objects!(behavior: :raise, children: true) end @definitions.freeze @finalized = true self end |
#finalized? ⇒ Boolean
86 87 88 |
# File 'lib/command_tower/configuration/registry/principal_capabilities/config.rb', line 86 def finalized? @finalized end |
#registered?(name) ⇒ Boolean
65 66 67 68 69 |
# File 'lib/command_tower/configuration/registry/principal_capabilities/config.rb', line 65 def registered?(name) @definitions.key?(normalize_name!(name)) rescue CommandTower::PrincipalCapabilities::InvalidCapabilityNameError false end |
#reset_host_definitions! ⇒ Object
102 103 104 105 106 |
# File 'lib/command_tower/configuration/registry/principal_capabilities/config.rb', line 102 def reset_host_definitions! thaw_for_test! @definitions.delete_if { |_name, definition| definition.owner == :host } self end |
#validate_required_entities!(entities) ⇒ Object
90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/command_tower/configuration/registry/principal_capabilities/config.rb', line 90 def validate_required_entities!(entities) missing = @definitions.filter_map do |name, definition| next if entities.key?(definition.required_entity) "#{name} requires #{definition.required_entity}" end return self if missing.empty? raise CommandTower::PrincipalCapabilities::MissingRequiredEntityError, "principal capabilities reference unknown RBAC entities: #{missing.join(", ")}" end |