Class: TEF::ParameterStack::Override

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
lib/tef/ParameterStack/Override.rb

Overview

Override class.

This class represents one ‘access point’ for the software, with which it can override certain values of the Stack it belongs to.

Using it is as simple as using a Hash:

Examples:

override = Override.new(central_stack, 10);
override['SomeParam'] = 5
override['SomeParam'] = nil # Relinquish control over the value.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(stack, init_level = 0) ⇒ Override

Initialize an Override.

Values can be written into the Override immediately after creation. When the Override is no longer used, make sure to call #destroy!

Parameters:

  • stack (Stack)

    The stack to write to.

  • init_level (Numeric) (defaults to: 0)

    Level of this Override. Can not be changed, is always the same for all keys!

Raises:

  • (ArgumentError)


37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/tef/ParameterStack/Override.rb', line 37

def initialize(stack, init_level = 0)
	raise ArgumentError, 'Handler must be CoreStack!' unless stack.is_a? Stack

	@stack = stack

	@level = init_level;
	@overrides = {}

	@valid_until = nil;

	@stack.add_override self
end

Instance Attribute Details

#levelNumeric (readonly)

Returns Level of this Override. Higher levels mean higher priority. The highest-level override that is active for any given key will determine that key’s value!.

Returns:

  • (Numeric)

    Level of this Override. Higher levels mean higher priority. The highest-level override that is active for any given key will determine that key’s value!



26
27
28
# File 'lib/tef/ParameterStack/Override.rb', line 26

def level
  @level
end

Instance Method Details

#<=>(other) ⇒ Object



107
108
109
110
# File 'lib/tef/ParameterStack/Override.rb', line 107

def <=>(other)
	return @level <=> other.level if other.level != @level
	return self.hash <=> other.hash
end

#[](key) ⇒ Object

Note:

This will not be the global key. Use Stack#[] to retrieve the currently active key.

Returns The value of this Override for a given key.

Returns:

  • The value of this Override for a given key.



53
54
55
# File 'lib/tef/ParameterStack/Override.rb', line 53

def [](key)
	@overrides[key]
end

#[]=(key, new_value) ⇒ Object

Set the value for the given key. Setting nil as value causes this Override to relinquish control

Parameters:

  • key

    Hash-Key

  • new_value

    User-defined value. If nil, relinquishes control.



61
62
63
64
65
66
67
68
69
70
71
# File 'lib/tef/ParameterStack/Override.rb', line 61

def []=(key, new_value)
	return if @overrides[key] == new_value

	if new_value.nil?
		delete(key)
		return
	end

	@overrides[key] = new_value
	@stack.override_claims self, key
end

#delete(key) ⇒ Object

Delete a value for the given key. Equivalent to calling #[]= nil



85
86
87
88
89
90
91
92
# File 'lib/tef/ParameterStack/Override.rb', line 85

def delete(key)
	return unless @overrides.include? key
	@overrides.delete key

	return unless @stack.active_overrides[key] == self

	@stack.recompute_single key
end

#destroy!Object

Destroy this Override.

This function MUST be called if the user no longer needs this object. It relinquishes control over all the values that this Override formerly held.

Note that nothing else is modified, and Stack#add_override could be used to re-add this Override.



103
104
105
# File 'lib/tef/ParameterStack/Override.rb', line 103

def destroy!
	@stack.remove_override self
end

#include?(key) ⇒ true, false

Returns Whether this Override includes a given key.

Returns:

  • (true, false)

    Whether this Override includes a given key



74
75
76
# File 'lib/tef/ParameterStack/Override.rb', line 74

def include?(key)
	@overrides.include? key
end

#keysArray

Returns List of keys.

Returns:

  • (Array)

    List of keys



79
80
81
# File 'lib/tef/ParameterStack/Override.rb', line 79

def keys
	@overrides.keys
end