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