def set_attrs(hash, clobber = true, target = nil)
      target ||= @attrs
      if clobber
        target.merge!(hash)
        hash
      else
        hash.each do |k, v|
          if v.is_a?(Hash)
            set_attrs(v, clobber, target[k])
          else
            target[k] = v
          end
        end
      end
    end
def set_attrs(hash, clobber = true, target = nil)
      target ||= @attrs
      if clobber
        target.merge!(hash)
        hash
      else
        hash.each do |k, v|
          if v.is_a?(Hash)
            set_attrs(v, clobber, target[k])
          else
            target[k] = v
          end
        end
      end
    end
Set the current attributes from a hash.  If clobber is true, any existing
 hash values will be clobbered by the new hash, otherwise the hash will
 be deeply merged into attrs.  The target paramater is for internal use only
 and should not be used.