Class: Ruby::Rego::Builtins::BuiltinRegistry
- Inherits:
-
Object
- Object
- Ruby::Rego::Builtins::BuiltinRegistry
- Includes:
- BuiltinInvocation
- Defined in:
- lib/ruby/rego/builtins/registry.rb
Overview
Registry for built-in function implementations.
Defined Under Namespace
Classes: Entry
Class Method Summary collapse
Instance Method Summary collapse
-
#call(name, args) ⇒ Ruby::Rego::Value
-
#entry_for(name) ⇒ Entry
-
#initialize ⇒ BuiltinRegistry
constructor
A new instance of BuiltinRegistry.
-
#register(name, arity) {|args| ... } ⇒ void
-
#registered?(name) ⇒ Boolean
-
#with_entry_override(name, entry) ⇒ Object
-
#with_override(name, entry) ⇒ BuiltinRegistryOverlay
Constructor Details
#initialize ⇒ BuiltinRegistry
Returns a new instance of BuiltinRegistry.
60 61 62 |
# File 'lib/ruby/rego/builtins/registry.rb', line 60 def initialize @builtins = {} end |
Class Method Details
.instance ⇒ BuiltinRegistry
54 55 56 |
# File 'lib/ruby/rego/builtins/registry.rb', line 54 def self.instance @instance ||= new end |
Instance Method Details
#call(name, args) ⇒ Ruby::Rego::Value
81 82 83 84 |
# File 'lib/ruby/rego/builtins/registry.rb', line 81 def call(name, args) entry = fetch_entry(normalize_name(name)) invoke_entry(entry, args) end |
#entry_for(name) ⇒ Entry
88 89 90 |
# File 'lib/ruby/rego/builtins/registry.rb', line 88 def entry_for(name) fetch_entry(normalize_name(name)) end |
#register(name, arity) {|args| ... } ⇒ void
This method returns an undefined value.
68 69 70 71 72 73 74 75 76 |
# File 'lib/ruby/rego/builtins/registry.rb', line 68 def register(name, arity, &block) raise ArgumentError, "Builtin registration requires a block" unless block builtin_name = normalize_name(name) validate_arity(arity) raise ArgumentError, "Builtin already registered: #{builtin_name}" if @builtins.key?(builtin_name) @builtins[builtin_name] = Entry.new(name: builtin_name, arity: arity, handler: block) end |
#registered?(name) ⇒ Boolean
117 118 119 |
# File 'lib/ruby/rego/builtins/registry.rb', line 117 def registered?(name) @builtins.key?(normalize_name(name)) end |
#with_entry_override(name, entry) ⇒ Object
96 97 98 99 100 101 102 103 |
# File 'lib/ruby/rego/builtins/registry.rb', line 96 def with_entry_override(name, entry) builtin_name = normalize_name(name) previous = fetch_entry(builtin_name) @builtins[builtin_name] = entry yield ensure @builtins[builtin_name] = previous end |
#with_override(name, entry) ⇒ BuiltinRegistryOverlay
108 109 110 111 112 113 |
# File 'lib/ruby/rego/builtins/registry.rb', line 108 def with_override(name, entry) BuiltinRegistryOverlay.new( base_registry: self, overrides: { normalize_name(name) => entry } ) end |