class Keisan::Variables::Registry
Attributes
shadowed[R]
Public Class Methods
new(variables: {}, shadowed: [], parent: nil, use_defaults: true, force: false)
click to toggle source
# File lib/keisan/variables/registry.rb, line 8 def initialize(variables: {}, shadowed: [], parent: nil, use_defaults: true, force: false) @hash = {} @shadowed = ::Set.new(shadowed.map(&:to_s)) @parent = parent @use_defaults = use_defaults variables.each do |name, value| register!(name, value, force: force) end end
Public Instance Methods
[](name)
click to toggle source
# File lib/keisan/variables/registry.rb, line 19 def [](name) return @hash[name] if @hash.has_key?(name) raise Exceptions::UndefinedVariableError.new if @shadowed.include?(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::UndefinedVariableError.new name end
freeze()
click to toggle source
Calls superclass method
# File lib/keisan/variables/registry.rb, line 31 def freeze @hash.values.each(&:freeze) super end
has?(name)
click to toggle source
# File lib/keisan/variables/registry.rb, line 40 def has?(name) !self[name].nil? rescue Exceptions::UndefinedVariableError false end
locals()
click to toggle source
# File lib/keisan/variables/registry.rb, line 36 def locals @hash end
modifiable?(name)
click to toggle source
# File lib/keisan/variables/registry.rb, line 46 def modifiable?(name) !frozen? && has?(name) end
register!(name, value, force: false)
click to toggle source
# File lib/keisan/variables/registry.rb, line 50 def register!(name, value, force: false) raise Exceptions::UnmodifiableError.new("Cannot modify frozen variables registry") if frozen? name = name.to_s self[name.to_s] = value.to_node.to_cell end
Protected Instance Methods
has_name?(name)
click to toggle source
For checking if locally defined
# File lib/keisan/variables/registry.rb, line 60 def has_name?(name) @hash.has_key?(name) end
Private Instance Methods
[]=(name, value)
click to toggle source
# File lib/keisan/variables/registry.rb, line 66 def []=(name, value) @hash[name] = value end
default_registry()
click to toggle source
# File lib/keisan/variables/registry.rb, line 70 def default_registry DefaultRegistry.registry end