def attr(value, options = {})
      unless value.is_a?(Symbol) || value.is_a?(String)
        raise ArgumentError.new("has_settings: symbol expected, but got a #{value.class}")
      end
      raise ArgumentError.new("has_settings: Option :default expected, but got #{options.keys.join(', ')}") unless options.blank? || (options.keys == [:default])

      default_value = options[:default]
      raise 'Error' unless value.to_s =~ REGEX_ATTR

      _set_value(value.to_s, default_value)
    end
def attr(value, options = {})
      unless value.is_a?(Symbol) || value.is_a?(String)
        raise ArgumentError.new("has_settings: symbol expected, but got a #{value.class}")
      end
      raise ArgumentError.new("has_settings: Option :default expected, but got #{options.keys.join(', ')}") unless options.blank? || (options.keys == [:default])

      default_value = options[:default]
      raise 'Error' unless value.to_s =~ REGEX_ATTR

      _set_value(value.to_s, default_value)
    end
Declare an attribute with default value

 @param [Symbol] value
 @param [Hash] options, options with a default Hash