class Keisan::Functions::Registry
Public Class Methods
new(functions: {}, parent: nil, use_defaults: true, force: false)
click to toggle source
# File lib/keisan/functions/registry.rb, line 4 def initialize(functions: {}, parent: nil, use_defaults: true, force: false) @hash = {} @parent = parent @use_defaults = use_defaults functions.each do |name, function| register!(name, function, force: force) end end
Public Instance Methods
[](name)
click to toggle source
# File lib/keisan/functions/registry.rb, line 14 def [](name) return @hash[name] if @hash.has_key?(name) if @parent && (parent_value = @parent[name]) return parent_value end return default_registry[name] if @use_defaults && default_registry.has_name?(name) raise Exceptions::UndefinedFunctionError.new name end
has?(name)
click to toggle source
# File lib/keisan/functions/registry.rb, line 29 def has?(name) !!self[name] rescue Exceptions::UndefinedFunctionError false end
locals()
click to toggle source
# File lib/keisan/functions/registry.rb, line 25 def locals @hash end
modifiable?(name)
click to toggle source
# File lib/keisan/functions/registry.rb, line 35 def modifiable?(name) !frozen? && has?(name) end
register!(name, function, force: false)
click to toggle source
# File lib/keisan/functions/registry.rb, line 39 def register!(name, function, force: false) raise Exceptions::UnmodifiableError.new("Cannot modify frozen functions registry") if frozen? name = name.to_s case function when Proc self[name] = ProcFunction.new(name, function) when Function self[name] = function else raise Exceptions::InvalidFunctionError.new end end
Protected Instance Methods
has_name?(name)
click to toggle source
For checking if locally defined
# File lib/keisan/functions/registry.rb, line 56 def has_name?(name) @hash.has_key?(name) end
Private Instance Methods
[]=(name, function)
click to toggle source
# File lib/keisan/functions/registry.rb, line 62 def []=(name, function) @hash[name] = function end
default_registry()
click to toggle source
# File lib/keisan/functions/registry.rb, line 66 def default_registry DefaultRegistry.registry end