Sha256: 95936e681a84ae3c7d13e051ae9d6b5966432c47a207c710d5efc40ef7e54427
Contents?: true
Size: 1.67 KB
Versions: 1
Compression:
Stored size: 1.67 KB
Contents
# Author: Stephen Sykes module SlimScrooge class MonitoredHash < Hash attr_accessor :callsite, :result_set, :monitored_columns def self.[](monitored_columns, unmonitored_columns, callsite) hash = MonitoredHash.new {|hash, key| hash.new_column_access(key)} hash.monitored_columns = monitored_columns hash.merge!(unmonitored_columns) hash.callsite = callsite hash end def new_column_access(name) if @callsite.columns_hash.has_key?(name) @result_set.reload! if @result_set && name != @callsite.primary_key Callsites.add_seen_column(@callsite, name) end @monitored_columns[name] end def []=(name, value) if has_key?(name) return super elsif @result_set && @callsite.columns_hash.has_key?(name) @result_set.reload! Callsites.add_seen_column(@callsite, name) end @monitored_columns[name] = value end def keys @result_set ? @callsite.columns_hash.keys : super | @monitored_columns.keys end def has_key?(name) @result_set ? @callsite.columns_hash.has_key?(name) : super || @monitored_columns.has_key?(name) end alias_method :include?, :has_key? def to_hash @result_set.reload! if @result_set @monitored_columns.merge(self) end # Marshal # Dump a real hash - can't dump a monitored hash due to default proc # def _dump(depth) Marshal.dump(to_hash) end def self._load(str) Marshal.load(str) end end end class Hash alias_method :c_update, :update def update(other_hash, &block) c_update(other_hash.to_hash, &block) end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
slim_scrooge-1.0.0 | lib/slim_scrooge/monitored_hash.rb |