def visit(source, target)
      super(source, target) do |src, tgt|
         merge(src, tgt)
         block_given? ? yield(src, tgt) : tgt
      end
    end
def visit(source, target)
      super(source, target) do |src, tgt|
         merge(src, tgt)
         block_given? ? yield(src, tgt) : tgt
      end
    end
Creates a new MergeVisitor on domain attributes.
 The domain attributes to visit are determined by calling the selector block given to
 this initializer as described in {ReferenceVisitor#initialize}.

 @param (see MatchVisitor#initialize)
 @option opts [Proc] :mergeable the block which determines which attributes are merged
 @option opts [Proc] :matcher the block which matches sources to targets
 @option opts [Proc] :copier the block which copies an unmatched source
 @yield (see MatchVisitor#initialize)
 @yieldparam (see MatchVisitor#initialize)
 Visits the source and target reference graphs and recursively merges each matching source
 reference into its corresponding target reference.

 If a block is given to this method, then the block is called on each matched (source, target) pair.

 @param [Resource] source the domain object to merge from
 @param [Resource] target the domain object to merge into
 @yield [target, source] the optional block to call on the visited source domain object and its
   matching target
 @yieldparam [Resource] target the domain object which matches the visited source
 @yieldparam [Resource] source the visited source domain object