Sha256: 3aeb38719a52a0a405604bbe5718c0b7d36c01ec4c46646ad661015208cb1d97
Contents?: true
Size: 1.68 KB
Versions: 3
Compression:
Stored size: 1.68 KB
Contents
module Dynamoid module IdentityMap extend ActiveSupport::Concern def self.clear Dynamoid.included_models.each { |m| m.identity_map.clear } end module ClassMethods def identity_map @identity_map ||= {} end def from_database(attrs = {}) return super if identity_map_off? key = identity_map_key(attrs) document = identity_map[key] if document.nil? document = super identity_map[key] = document else document.load(attrs) end document end def find_by_id(id, options = {}) return super if identity_map_off? key = id.to_s if range_key = options[:range_key] key += "::#{range_key}" end if identity_map[key] identity_map[key] else super end end def identity_map_key(attrs) key = attrs[hash_key].to_s if range_key key += "::#{attrs[range_key]}" end key end def identity_map_on? Dynamoid::Config.identity_map end def identity_map_off? !identity_map_on? end end def identity_map self.class.identity_map end def save(*args) return super if self.class.identity_map_off? if result = super identity_map[identity_map_key] = self end result end def delete return super if self.class.identity_map_off? identity_map.delete(identity_map_key) super end def identity_map_key key = hash_key.to_s if self.class.range_key key += "::#{range_value}" end key end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
dynamoid-2.2.0 | lib/dynamoid/identity_map.rb |
dynamoid-2.1.0 | lib/dynamoid/identity_map.rb |
dynamoid-2.0.0 | lib/dynamoid/identity_map.rb |