Class: Keisan::Variables::Registry
- Inherits:
-
Object
- Object
- Keisan::Variables::Registry
- Defined in:
- lib/keisan/variables/registry.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#shadowed ⇒ Object
readonly
Returns the value of attribute shadowed.
Instance Method Summary collapse
- #[](name) ⇒ Object
- #freeze ⇒ Object
- #has?(name) ⇒ Boolean
-
#initialize(variables: {}, shadowed: [], parent: nil, use_defaults: true, force: false) ⇒ Registry
constructor
A new instance of Registry.
- #locals ⇒ Object
- #modifiable?(name) ⇒ Boolean
- #register!(name, value, force: false) ⇒ Object
Constructor Details
#initialize(variables: {}, shadowed: [], parent: nil, use_defaults: true, force: false) ⇒ Registry
Returns a new instance of Registry.
6 7 8 9 10 11 12 13 14 15 |
# File 'lib/keisan/variables/registry.rb', line 6 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 |
Instance Attribute Details
#shadowed ⇒ Object (readonly)
Returns the value of attribute shadowed.
4 5 6 |
# File 'lib/keisan/variables/registry.rb', line 4 def shadowed @shadowed end |
Instance Method Details
#[](name) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/keisan/variables/registry.rb', line 17 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 ⇒ Object
29 30 31 32 |
# File 'lib/keisan/variables/registry.rb', line 29 def freeze @hash.values.each(&:freeze) super end |
#has?(name) ⇒ Boolean
38 39 40 41 42 |
# File 'lib/keisan/variables/registry.rb', line 38 def has?(name) !self[name].nil? rescue Exceptions::UndefinedVariableError false end |
#locals ⇒ Object
34 35 36 |
# File 'lib/keisan/variables/registry.rb', line 34 def locals @hash end |
#modifiable?(name) ⇒ Boolean
44 45 46 |
# File 'lib/keisan/variables/registry.rb', line 44 def modifiable?(name) !frozen? && has?(name) end |
#register!(name, value, force: false) ⇒ Object
48 49 50 51 52 53 |
# File 'lib/keisan/variables/registry.rb', line 48 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 |