class Terrestrial::DirtyMap
Constants
- NotFound
Attributes
storage[R]
Public Class Methods
new(storage)
click to toggle source
# File lib/terrestrial/dirty_map.rb, line 3 def initialize(storage) @storage = storage end
Public Instance Methods
dirty?(record)
click to toggle source
# File lib/terrestrial/dirty_map.rb, line 20 def dirty?(record) !same_as_loaded?(record) || deleted?(record) end
load(record)
click to toggle source
# File lib/terrestrial/dirty_map.rb, line 15 def load(record) storage.store(hash_key(record), record.deep_clone) record end
load_if_new(record)
click to toggle source
# File lib/terrestrial/dirty_map.rb, line 10 def load_if_new(record) storage.fetch(hash_key(record)) { self.load(record) } record end
reject_unchanged_fields(record)
click to toggle source
# File lib/terrestrial/dirty_map.rb, line 24 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 Instance Methods
deleted?(record)
click to toggle source
# File lib/terrestrial/dirty_map.rb, line 46 def deleted?(record) record.if_delete { return true } return false end
hash_key(record)
click to toggle source
# File lib/terrestrial/dirty_map.rb, line 51 def hash_key(record) [record.namespace, record.identity] end
same_as_loaded?(record)
click to toggle source
# File lib/terrestrial/dirty_map.rb, line 36 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