module Risky::Resolver::ClassMethods
Makes it easy to resolve conflicts in an object in different ways.
class User
include Risky::Resolver value :union, :resolve => :union value :union, :resolve => lambda do |xs| xs.first end
Public Instance Methods
merge(versions)
click to toggle source
Calls superclass method
# File lib/risky/resolver.rb, line 10 def merge(versions) p = super(versions).clone # For each field, use the given resolver to merge all the conflicting # values together. values.each do |value, opts| next unless resolver = opts[:resolve] # Convert symbols and such to callables. unless resolver.respond_to? :call resolver = begin # Try our resolvers Resolvers.method resolver rescue # Try a class method method resolver end end # Resolve and set p.send("#{value}=", resolver.call( versions.map do |version| version.send value end )) end p end