Class: OpenStudio::Workflow::Registry

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

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