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 ⇒ Fixnum
(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.
52 53 54 55 |
# File 'lib/openstudio/workflow/registry.rb', line 52 def initialize @items = {} @results_cache = {} end |
Instance Method Details
#__internal_state ⇒ Object
169 170 171 172 173 174 |
# File 'lib/openstudio/workflow/registry.rb', line 169 def __internal_state { items: @items, results_cache: @results_cache } end |
#empty? ⇒ Boolean
Checks if this registry has any items
129 130 131 |
# File 'lib/openstudio/workflow/registry.rb', line 129 def empty? @items.keys.empty? end |
#eval(key) ⇒ Object
Re-evaluate the proc of a key and update the cache
88 89 90 91 92 93 94 95 96 97 |
# File 'lib/openstudio/workflow/registry.rb', line 88 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
75 76 77 78 79 |
# File 'lib/openstudio/workflow/registry.rb', line 75 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
103 104 105 |
# File 'lib/openstudio/workflow/registry.rb', line 103 def key?(key) @items.key?(key) end |
#keys ⇒ Array
Returns an array populated with the keys of this object
112 113 114 |
# File 'lib/openstudio/workflow/registry.rb', line 112 def keys @items.keys end |
#length ⇒ Fixnum Also known as: size
Return the number of elements in this registry
120 121 122 |
# File 'lib/openstudio/workflow/registry.rb', line 120 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
139 140 141 142 143 144 |
# File 'lib/openstudio/workflow/registry.rb', line 139 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
151 152 153 154 |
# File 'lib/openstudio/workflow/registry.rb', line 151 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
63 64 65 66 67 68 |
# File 'lib/openstudio/workflow/registry.rb', line 63 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
160 161 162 163 164 165 166 167 |
# File 'lib/openstudio/workflow/registry.rb', line 160 def to_hash result = {} @results_cache.each_pair do |key, value| result[key] = value end result end |