class Eternity::ConflictResolver
Constants
- Diff
Attributes
base[R]
current[R]
target[R]
Public Class Methods
new(current, target, base={})
click to toggle source
# File lib/eternity/conflict_resolver.rb, line 8 def initialize(current, target, base={}) @current = current @target = target @base = base end
resolve(current, target, base={})
click to toggle source
# File lib/eternity/conflict_resolver.rb, line 20 def self.resolve(current, target, base={}) new(current, target, base).resolve end
Public Instance Methods
resolve()
click to toggle source
# File lib/eternity/conflict_resolver.rb, line 14 def resolve current_diff = diff current, base target_diff = diff target, base merge(target_diff, target, merge(current_diff, current, base)) end
Private Instance Methods
diff(object, base)
click to toggle source
# File lib/eternity/conflict_resolver.rb, line 26 def diff(object, base) Diff.new object.keys - base.keys, base.keys.select { |k| base[k] != object[k] }, base.keys - object.keys end
merge(diff, object, base)
click to toggle source
# File lib/eternity/conflict_resolver.rb, line 32 def merge(diff, object, base) base.dup.tap do |result| (diff.added + diff.updated).each { |k| result[k] = object[k] } diff.removed.each { |k| result.delete k } end end