def self.easy_diff(original, modified)
removed = nil
added = nil
if original.nil?
added = modified.safe_dup
elsif modified.nil?
removed = original.safe_dup
elsif original.is_a?(Hash) && modified.is_a?(Hash)
removed = {}
added = {}
keys_in_common = original.keys & modified.keys
keys_removed = original.keys - modified.keys
keys_added = modified.keys - original.keys
keys_removed.each{ |key| removed[key] = original[key].safe_dup }
keys_added.each{ |key| added[key] = modified[key].safe_dup }
keys_in_common.each do |key|
r, a = easy_diff original[key], modified[key]
unless _blank?(r) && _blank?(a)
removed[key] = r
added[key] = a
end
end
elsif original.is_a?(Array) && modified.is_a?(Array)
removed = subtract_arrays(original, modified)
added = subtract_arrays(modified, original)
elsif original != modified
removed = original
added = modified
end
return removed, added
end