Class: Keisan::Functions::Registry
- Inherits:
-
Object
- Object
- Keisan::Functions::Registry
- Defined in:
- lib/keisan/functions/registry.rb
Instance Method Summary collapse
- #[](name) ⇒ Object
- #has?(name) ⇒ Boolean
-
#initialize(functions: {}, parent: nil, use_defaults: true, force: false) ⇒ Registry
constructor
A new instance of Registry.
- #locals ⇒ Object
- #modifiable?(name) ⇒ Boolean
- #register!(name, function, force: false) ⇒ Object
Constructor Details
#initialize(functions: {}, parent: nil, use_defaults: true, force: false) ⇒ Registry
Returns a new instance of Registry.
4 5 6 7 8 9 10 11 12 |
# 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 |
Instance Method Details
#[](name) ⇒ Object
14 15 16 17 18 19 20 21 22 23 |
# 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) ⇒ Boolean
29 30 31 32 33 |
# File 'lib/keisan/functions/registry.rb', line 29 def has?(name) !!self[name] rescue Exceptions::UndefinedFunctionError false end |
#locals ⇒ Object
25 26 27 |
# File 'lib/keisan/functions/registry.rb', line 25 def locals @hash end |
#modifiable?(name) ⇒ Boolean
35 36 37 |
# File 'lib/keisan/functions/registry.rb', line 35 def modifiable?(name) !frozen? && has?(name) end |
#register!(name, function, force: false) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 |
# 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 |