Class: Ruby::Rego::Builtins::BuiltinRegistryOverlay

Inherits:
Object
  • Object
show all
Includes:
BuiltinInvocation
Defined in:
lib/ruby/rego/builtins/registry.rb

Overview

Registry wrapper that overlays builtin entries without mutating the base registry.

Instance Method Summary collapse

Constructor Details

#initialize(base_registry:, overrides: {}) ⇒ BuiltinRegistryOverlay

Returns a new instance of BuiltinRegistryOverlay.

Parameters:



158
159
160
161
# File 'lib/ruby/rego/builtins/registry.rb', line 158

def initialize(base_registry:, overrides: {})
  @base_registry = base_registry
  @overrides = overrides
end

Instance Method Details

#call(name, args) ⇒ Ruby::Rego::Value

Parameters:

  • name (String, Symbol)
  • args (Array<Object>)

Returns:



174
175
176
177
# File 'lib/ruby/rego/builtins/registry.rb', line 174

def call(name, args)
  entry = entry_for(name)
  invoke_entry(entry, args)
end

#entry_for(name) ⇒ BuiltinRegistry::Entry

Parameters:

  • name (String, Symbol)

Returns:



181
182
183
184
# File 'lib/ruby/rego/builtins/registry.rb', line 181

def entry_for(name)
  normalized = normalize_name(name)
  overrides.fetch(normalized) { base_registry.entry_for(normalized) }
end

#registered?(name) ⇒ Boolean

Parameters:

  • name (String, Symbol)

Returns:

  • (Boolean)


188
189
190
191
# File 'lib/ruby/rego/builtins/registry.rb', line 188

def registered?(name)
  normalized = normalize_name(name)
  overrides.key?(normalized) || base_registry.registered?(normalized)
end

#with_override(name, entry) ⇒ BuiltinRegistryOverlay

Parameters:

Returns:



166
167
168
169
# File 'lib/ruby/rego/builtins/registry.rb', line 166

def with_override(name, entry)
  normalized = normalize_name(name)
  self.class.new(base_registry: base_registry, overrides: overrides.merge(normalized => entry))
end