class Db::Sync::Diff
Attributes
deletes[R]
inserts[R]
original[RW]
pkey[RW]
replace_with[RW]
updates[R]
Public Class Methods
compare(item1, item2)
click to toggle source
# File lib/db/sync/diff.rb, line 70 def self.compare(item1, item2) result = item1.values <=> item2.values compare_count result end
compare_count()
click to toggle source
TODO: remove, checks for number of comparisons
# File lib/db/sync/diff.rb, line 77 def self.compare_count end
new(original, replace_with, pkey)
click to toggle source
# File lib/db/sync/diff.rb, line 5 def initialize(original, replace_with, pkey) self.original = original.collect self.replace_with = replace_with.collect self.pkey = pkey check_items end
Public Instance Methods
check_for_update(original_item, replace_item)
click to toggle source
# File lib/db/sync/diff.rb, line 52 def check_for_update(original_item, replace_item) return if original_item.nil? || replace_item.nil? changes = {} replace_item.each do |key, value| next if value == original_item[key] changes[key] = value end return if changes.blank? @updates << { key: original_item.slice(*pkey), changes: changes } end
check_items()
click to toggle source
# File lib/db/sync/diff.rb, line 24 def check_items @inserts = [] @deletes = [] @updates = [] original.rewind replace_with.rewind original_item = next_original_item replace_item = next_replace_item loop do cmp = compare(original_item, replace_item) if cmp == 0 check_for_update(original_item, replace_item) original_item = next_original_item replace_item = next_replace_item elsif cmp > 0 @inserts << replace_item replace_item = next_replace_item else @deletes << original_item.slice(*pkey) original_item = next_original_item end break if original_item.nil? && replace_item.nil? end nil end
compare(item1, item2)
click to toggle source
# File lib/db/sync/diff.rb, line 63 def compare(item1, item2) return 0 if item1.nil? && item2.nil? return -1 if item2.nil? return 1 if item1.nil? self.class.compare(item1.slice(*pkey), item2.slice(*pkey)) end
next_original_item()
click to toggle source
# File lib/db/sync/diff.rb, line 12 def next_original_item original.next rescue StopIteration nil end
next_replace_item()
click to toggle source
# File lib/db/sync/diff.rb, line 18 def next_replace_item replace_with.next rescue StopIteration nil end