class Senv::EnvChangeTracker
Constants
- THREAD_SAFE
Public Class Methods
new(env)
click to toggle source
# File lib/senv.rb, line 549 def initialize(env) @env = env @changes = { :deleted => [], :updated => [], :created => [], } @change_for = proc do |key, val| if @env.has_key?(key) case when val.nil? {:type => :deleted, :info => [key, val]} when val.to_s != @env[key].to_s {:type => :updated, :info => [key, val]} else nil end else {:type => :created, :info => [key, val]} end end @track_change = proc do |key, val| change = @change_for[key, val] if change @changes[change[:type]].push(change[:info]) end end end
track(&block)
click to toggle source
# File lib/senv.rb, line 627 def EnvChangeTracker.track(&block) THREAD_SAFE.synchronize do env = EnvChangeTracker.new(::ENV) ::Object.send(:remove_const, :ENV) ::Object.send(:const_set, :ENV, env) begin block.call env ensure ::Object.send(:remove_const, :ENV) ::Object.send(:const_set, :ENV, env) end end end
Public Instance Methods
[]=(key, val)
click to toggle source
# File lib/senv.rb, line 590 def []=(key, val) @track_change[key, val] @env[key] = val end
apply(env)
click to toggle source
# File lib/senv.rb, line 612 def apply(env) @changes[:created].each do |k, v| env[k] = v end @changes[:updated].each do |k, v| env[k] = v end @changes[:deleted].each do |k, v| env.delete(k) end @changes end
changes()
click to toggle source
# File lib/senv.rb, line 582 def changes @changes end
delete(key)
click to toggle source
# File lib/senv.rb, line 607 def delete(key) @track_change[key, nil] @env.delete(key) end
method_missing(method, *args, &block)
click to toggle source
# File lib/senv.rb, line 586 def method_missing(method, *args, &block) @env.send(method, *args, &block) end
replace(hash)
click to toggle source
# File lib/senv.rb, line 595 def replace(hash) hash.each do |key, val| @track_change[key, val] end @env.replace(hash) end
store(key, val)
click to toggle source
# File lib/senv.rb, line 602 def store(key, val) @track_change[key, val] @env.store(key, val) end