Class: Ruby::Rego::CompiledPolicySet

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby/rego/compiled_policy_set.rb

Overview

Immutable set of compiled modules keyed by package path.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(modules) ⇒ CompiledPolicySet

Returns a new instance of CompiledPolicySet.

Parameters:



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.

Parameters:

  • package_keys (Array<String>)

    candidate package keys

  • keys (Array<Object>)

    reference key list

Returns:

  • (String, nil)


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.

Parameters:

  • keys (Array<Object>)

    reference key list

Returns:



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

#modulesArray<CompiledModule>

Returns:



13
14
15
# File 'lib/ruby/rego/compiled_policy_set.rb', line 13

def modules
  modules_by_key.values
end

#package_keysArray<String>

Returns:

  • (Array<String>)


18
19
20
# File 'lib/ruby/rego/compiled_policy_set.rb', line 18

def package_keys
  modules_by_key.keys
end