Sha256: 8483eaf2e7254ad2fcf80dc8ed2080f44f10fe3e59c7c9c5ed45ed7315d2f311

Contents?: true

Size: 904 Bytes

Versions: 1

Compression:

Stored size: 904 Bytes

Contents

# Author: Stephen Sykes

module SlimScrooge
  class MonitoredHash < Hash
    attr_accessor :callsite, :result_set
    
    def self.[](original_hash, callsite, result_set)
      hash = super(original_hash)
      hash.callsite = callsite
      hash.result_set = result_set
      hash
    end
    
    def [](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
      super
    end
    
    def []=(name, value)
      if @result_set && @callsite.columns_hash.has_key?(name)
        @result_set.reload!
      end
      super
    end
    
    def keys
      @result_set ? @callsite.columns_hash.keys : super
    end
    
    def has_key?(name)
      @result_set ? @callsite.columns_hash.has_key?(name) : super
    end
    
    alias_method :include?, :has_key?
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
slim_scrooge-0.1.1 lib/slim_scrooge/monitored_hash.rb