Class: OpenStudio::Workflow::Registry

Inherits:
Object
  • Object
show all
Defined in:
lib/openstudio/workflow/registry.rb

Overview

TODO:

(rhorsey) registry should be a member of WorkflowRunner - DLM

TODO:

(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

Constructor Details

#initializeRegistry

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_stateObject



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

Returns:

  • (Boolean)


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

Parameters:

  • key (Sym or String)

    This will evaluate the item assigned to the key and update the cache if possible

Returns:

  • If successful the method returns the new value, and if it cannot find or cannot update the key it

    returns nil



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

Parameters:

  • []

    key The key defining the block

Returns:

  • Returns the registries cached value for the key or nil if the key was not found



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

Returns:

  • (Boolean)


103
104
105
# File 'lib/openstudio/workflow/registry.rb', line 103

def key?(key)
  @items.key?(key)
end

#keysArray

Returns an array populated with the keys of this object

Returns:

  • (Array)


112
113
114
# File 'lib/openstudio/workflow/registry.rb', line 112

def keys
  @items.keys
end

#lengthFixnum Also known as: size

Return the number of elements in this registry

Returns:

  • (Fixnum)


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

Parameters:

  • other (Registry)

    The other #Registry to merge onto of self

Returns:



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

Parameters:

  • other (Registry)

    The other #Registry to merge onto of self

Returns:

  • (Void)


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

Parameters:

  • []

    key The key for the passed in block. Symbols are highly recommended

  • block (Proc)

    The block (Proc) which contains the registered information

Returns:

  • Returns block.call from the registries cache

Raises:

  • (ArgumentError)


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_hashHash

Converts the registry to a hash

Returns:

  • (Hash)

    The registry as 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