def key(*keys)
      options = keys.extract_options!
      raise ArgumentError.new("has_settings: Option :defaults expected, but got #{options.keys.join(', ')}") unless options.blank? || (options.keys == [:defaults])
      keys.each do |key_name|
        unless key_name.is_a?(Symbol) || key_name.is_a?(String)
          raise ArgumentError.new("has_settings: symbol or string expected, but got a #{key_name.class}")
        end
      end

      options[:defaults].each do |k, v|
        has_settings(*keys).attr(k, default: v)
      end
    end
def key(*keys)
      options = keys.extract_options!
      raise ArgumentError.new("has_settings: Option :defaults expected, but got #{options.keys.join(', ')}") unless options.blank? || (options.keys == [:defaults])
      keys.each do |key_name|
        unless key_name.is_a?(Symbol) || key_name.is_a?(String)
          raise ArgumentError.new("has_settings: symbol or string expected, but got a #{key_name.class}")
        end
      end

      options[:defaults].each do |k, v|
        has_settings(*keys).attr(k, default: v)
      end
    end
Declare a key, with default values

 @param [Symbol] keys
 @param [Hash] options, the last param must be an option with a defaults hash