lib/rubber/environment.rb in rubber-2.6.2 vs lib/rubber/environment.rb in rubber-2.6.3

- old
+ new

@@ -1,8 +1,9 @@ require 'yaml' require 'socket' require 'delegate' +require 'monitor' require 'rubber/encryption' module Rubber module Configuration @@ -118,34 +119,44 @@ elsif old.is_a?(Array) && new.is_a?(Array) value = old | new else value = new end - return value + + value end class HashValueProxy < Hash - attr_reader :global + include MonitorMixin + attr_reader :global, :cache + def initialize(global, receiver) @global = global + @cache = {} super() replace(receiver) end def rubber_instances - @rubber_instances ||= Rubber::Configuration::rubber_instances + Rubber.instances end - + def known_roles Rubber::Configuration.get_configuration(Rubber.env).environment.known_roles end def [](name) - value = super(name) - value = global[name] if global && !value - return expand(value) + unless cache.has_key?(name) + synchronize do + value = super(name) + value = global[name] if global && !value + cache[name] = expand(value) + end + end + + cache[name] end def each each_key do |key| yield key, self[key] @@ -157,21 +168,22 @@ def to_a self.collect {|k, v| [k, v]} end def method_missing(method_id) - key = method_id.id2name - return self[key] + self[method_id.id2name] end def expand_string(val) while val =~ /\#\{[^\}]+\}/ val = eval('%Q{' + val + '}', binding, __FILE__) end + val = true if val =="true" val = false if val == "false" - return val + + val end def expand(value) val = case value when Hash @@ -181,11 +193,12 @@ when Enumerable value.collect {|v| expand(v) } else value end - return val + + val end end class BoundEnv < HashValueProxy @@ -209,26 +222,29 @@ def bind_config(global) global = global.clone() role_overrides = global.delete("roles") || {} env_overrides = global.delete("environments") || {} host_overrides = global.delete("hosts") || {} + Array(roles).each do |role| Array(role_overrides[role]).each do |k, v| global[k] = Environment.combine(global[k], v) end end + Array(env_overrides[env]).each do |k, v| global[k] = Environment.combine(global[k], v) end + Array(host_overrides[host]).each do |k, v| global[k] = Environment.combine(global[k], v) end - return global + + global end def method_missing(method_id) - key = method_id.id2name - return self[key] + self[method_id.id2name] end end end