Sha256: b3916364990ce817175e4a323b805c106a82609ba24118aec6612479d9464ef3
Contents?: true
Size: 1.07 KB
Versions: 1
Compression:
Stored size: 1.07 KB
Contents
module Terrestrial class DirtyMap def initialize(storage) @storage = storage end attr_reader :storage private :storage def load_if_new(record) storage.fetch(hash_key(record)) { self.load(record) } record end def load(record) storage.store(hash_key(record), record.deep_clone) record end def dirty?(record) !same_as_loaded?(record) || deleted?(record) end def reject_unchanged_fields(record) record_as_loaded = storage.fetch(hash_key(record), {}) record.reject { |field, value| value == record_as_loaded.fetch(field, NotFound) } end private NotFound = Module.new def same_as_loaded?(record) record_as_loaded = storage.fetch(hash_key(record), NotFound) if record_as_loaded == NotFound false else record.subset?(record_as_loaded) end end def deleted?(record) record.if_delete { return true } return false end def hash_key(record) [record.namespace, record.identity] end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
terrestrial-0.5.0 | lib/terrestrial/dirty_map.rb |