def copy(*attributes)
      if attributes.empty? then
        attributes = self.class.nondomain_attributes
      elsif Enumerable === attributes.first then
        raise ArgumentError.new("#{qp} copy attributes argument is not a Symbol: #{attributes.first}") unless attributes.size == 1
        attributes = attributes.first
      end
      self.class.new.merge_attributes(self, attributes)
    end
def copy(*attributes)
      if attributes.empty? then
        attributes = self.class.nondomain_attributes
      elsif Enumerable === attributes.first then
        raise ArgumentError.new("#{qp} copy attributes argument is not a Symbol: #{attributes.first}") unless attributes.size == 1
        attributes = attributes.first
      end
      self.class.new.merge_attributes(self, attributes)
    end
Returns a new domain object with the given attributes copied from this domain object.
 The attributes argument consists of either attribute Symbols or a single Enumerable
 consisting of Symbols.
 The default attributes are the {Propertied#nondomain_attributes}.

 @param [<Symbol>, (<Symbol>)] attributes the attributes to copy
 @return [Resource] a copy of this domain object