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