Class: OpenStudio::Workflow::Registry
- Inherits:
-
Object
- Object
- OpenStudio::Workflow::Registry
- Defined in:
- lib/openstudio/workflow/registry.rb
Overview
(rhorsey) registry should be a member of WorkflowRunner - DLM
(rhorsey) how is this different than a regular hash? why is it important to be able to register keys with blocks that return values instead of values, looks like the block is called on insert anyway? let’s not go crazy on performance optimizations until we have to - DLM
Instance Method Summary collapse
- #__internal_state ⇒ Object
-
#empty? ⇒ Boolean
Checks if this registry has any items.
-
#eval(key) ⇒ Object
Re-evaluate the proc of a key and update the cache.
-
#get(key) ⇒ Object
(also: #[])
Get the cached value of the given key.
-
#initialize ⇒ Registry
constructor
A new instance of Registry.
-
#key?(key) ⇒ Boolean
(also: #has_key?)
Checks if the given key is registered with the registry.
-
#keys ⇒ Array
Returns an array populated with the keys of this object.
-
#length ⇒ Integer
(also: #size)
Return the number of elements in this registry.
-
#merge(other) ⇒ Registry
Merge one registry with another and return a completely new registry.
-
#merge!(other) ⇒ Void
Like #merge but updates self.
-
#register(key, &block) ⇒ Object
Register a key and cache it’s value.
-
#to_hash ⇒ Hash
Converts the registry to a hash.
Constructor Details
#initialize ⇒ Registry
Returns a new instance of Registry.
22 23 24 25 |
# File 'lib/openstudio/workflow/registry.rb', line 22 def initialize @items = {} @results_cache = {} end |
Instance Method Details
#__internal_state ⇒ Object
139 140 141 142 143 144 |
# File 'lib/openstudio/workflow/registry.rb', line 139 def __internal_state { items: @items, results_cache: @results_cache } end |
#empty? ⇒ Boolean
Checks if this registry has any items
99 100 101 |
# File 'lib/openstudio/workflow/registry.rb', line 99 def empty? @items.keys.empty? end |
#eval(key) ⇒ Object
Re-evaluate the proc of a key and update the cache
58 59 60 61 62 63 64 65 66 67 |
# File 'lib/openstudio/workflow/registry.rb', line 58 def eval(key) return nil unless @items.key?(key) begin @items[key].call rescue StandardError return nil end @results_cache[key] = @items[key].call end |
#get(key) ⇒ Object Also known as: []
Get the cached value of the given key
45 46 47 48 49 |
# File 'lib/openstudio/workflow/registry.rb', line 45 def get(key) return nil unless @items.key?(key) @results_cache[key] end |
#key?(key) ⇒ Boolean Also known as: has_key?
Checks if the given key is registered with the registry
73 74 75 |
# File 'lib/openstudio/workflow/registry.rb', line 73 def key?(key) @items.key?(key) end |
#keys ⇒ Array
Returns an array populated with the keys of this object
82 83 84 |
# File 'lib/openstudio/workflow/registry.rb', line 82 def keys @items.keys end |
#length ⇒ Integer Also known as: size
Return the number of elements in this registry
90 91 92 |
# File 'lib/openstudio/workflow/registry.rb', line 90 def length @items.keys.length end |
#merge(other) ⇒ Registry
Merge one registry with another and return a completely new registry. Note that the result cache is completely
busted, so any gets on the new registry will result in a cache miss
109 110 111 112 113 114 |
# File 'lib/openstudio/workflow/registry.rb', line 109 def merge(other) self.class.new.tap do |result| result.merge!(self) result.merge!(other) end end |
#merge!(other) ⇒ Void
Like #merge but updates self
121 122 123 124 |
# File 'lib/openstudio/workflow/registry.rb', line 121 def merge!(other) @items.merge!(other.__internal_state[:items]) self end |
#register(key, &block) ⇒ Object
Register a key and cache it’s value. Note that if a key with the given name already exists it is overwritten
33 34 35 36 37 38 |
# File 'lib/openstudio/workflow/registry.rb', line 33 def register(key, &block) raise ArgumentError, 'block required' unless block_given? @items[key] = block @results_cache[key] = @items[key].call end |
#to_hash ⇒ Hash
Converts the registry to a hash
130 131 132 133 134 135 136 137 |
# File 'lib/openstudio/workflow/registry.rb', line 130 def to_hash result = {} @results_cache.each_pair do |key, value| result[key] = value end result end |