def merge(source, target)
      # trivial case
      return target if source.equal?(target)
      # the domain attributes to merge
      mas = @mergeable.call(source)
      unless mas.empty? then
        logger.debug { "Merging #{source.qp} #{mas.to_series} into #{target.qp}..." }
      end
      # merge the non-domain attributes
      target.merge_attributes(source)
      # merge the source domain attributes into the target
      target.merge_attributes(source, mas, @matches, &@filter)
    end
def merge(source, target)
      # trivial case
      return target if source.equal?(target)
      # the domain attributes to merge
      mas = @mergeable.call(source)
      unless mas.empty? then
        logger.debug { "Merging #{source.qp} #{mas.to_series} into #{target.qp}..." }
      end
      # merge the non-domain attributes
      target.merge_attributes(source)
      # merge the source domain attributes into the target
      target.merge_attributes(source, mas, @matches, &@filter)
    end
Merges the given source object into the target object.

 @param [Resource] source the domain object to merge from
 @param [Resource] target the domain object to merge into
 @return [Resource] the merged target