lib/rubber/environment.rb in rubber-2.1.0 vs lib/rubber/environment.rb in rubber-2.1.1
- old
+ new
@@ -7,15 +7,18 @@
# Contains the configuration defined in rubber.yml
# Handles selecting of correct config values based on
# the host/role passed into bind
class Environment
attr_reader :config_root
+ attr_reader :config_env
attr_reader :config_files
attr_reader :config_secret
- def initialize(config_root)
+ def initialize(config_root, env)
@config_root = config_root
+ @config_env = env
+
@config_files = ["#{@config_root}/rubber.yml"]
@config_files += Dir["#{@config_root}/rubber-*.yml"].sort
# add a config file for current env only so that you can override
#things for specific envs
@@ -69,11 +72,11 @@
def current_full_host
Socket::gethostname
end
def bind(roles = nil, host = nil)
- BoundEnv.new(@items, roles, host)
+ BoundEnv.new(@items, roles, host, config_env)
end
# combine old and new into a single value:
# non-nil wins if other is nil
# arrays just get unioned
@@ -158,14 +161,16 @@
end
class BoundEnv < HashValueProxy
attr_reader :roles
attr_reader :host
+ attr_reader :env
- def initialize(global, roles, host)
+ def initialize(global, roles, host, env)
@roles = roles
@host = host
+ @env = env
bound_global = bind_config(global)
super(nil, bound_global)
end
def full_host
@@ -174,14 +179,18 @@
# Forces role/host overrides into config
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
\ No newline at end of file