Class: Ruby::Rego::CompiledPolicySet
- Inherits:
-
Object
- Object
- Ruby::Rego::CompiledPolicySet
- Defined in:
- lib/ruby/rego/compiled_policy_set.rb
Overview
Immutable set of compiled modules keyed by package path.
Class Method Summary collapse
-
.longest_prefix_key(package_keys, keys) ⇒ String?
Find the package key whose path is the longest prefix of keys.
Instance Method Summary collapse
-
#initialize(modules) ⇒ CompiledPolicySet
constructor
A new instance of CompiledPolicySet.
-
#module_for(keys) ⇒ CompiledModule?
Find the module whose package path is the longest prefix of keys.
-
#modules ⇒ Array<CompiledModule>
-
#package_keys ⇒ Array<String>
Constructor Details
#initialize(modules) ⇒ CompiledPolicySet
Returns a new instance of CompiledPolicySet.
8 9 10 |
# File 'lib/ruby/rego/compiled_policy_set.rb', line 8 def initialize(modules) @modules_by_key = index_by_package_key(modules).freeze end |
Class Method Details
.longest_prefix_key(package_keys, keys) ⇒ String?
Find the package key whose path is the longest prefix of keys.
36 37 38 39 40 |
# File 'lib/ruby/rego/compiled_policy_set.rb', line 36 def self.longest_prefix_key(package_keys, keys) string_keys = keys.map(&:to_s) matches = package_keys.select { |package_key| prefix_match?(package_key, string_keys) } matches.max_by { |package_key| package_key.split(".").length } end |
Instance Method Details
#module_for(keys) ⇒ CompiledModule?
Find the module whose package path is the longest prefix of keys.
26 27 28 29 |
# File 'lib/ruby/rego/compiled_policy_set.rb', line 26 def module_for(keys) key = self.class.longest_prefix_key(package_keys, keys) key && modules_by_key[key] end |
#modules ⇒ Array<CompiledModule>
13 14 15 |
# File 'lib/ruby/rego/compiled_policy_set.rb', line 13 def modules modules_by_key.values end |
#package_keys ⇒ Array<String>
18 19 20 |
# File 'lib/ruby/rego/compiled_policy_set.rb', line 18 def package_keys modules_by_key.keys end |