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