class Hashie::Dash

def self.property(property_name, options = {})


* :message - Specify custom error message for required property

required if the value is truthy.
property it represents must not be nil. The property is only
context of the Dash instance. If a Symbol is provided, the
existing Dash. If a Proc is provided, it will be run in the
property, to raise an error if a value is unset in a new or
* :required - Specify the value as required for this

Dash.
to be returned before a value is set on the property in a new
* :default - Specify a default value for this property,

as follows:
Defines a property on the Dash. Options are
def self.property(property_name, options = {})
  properties << property_name
  if options.key?(:default)
    defaults[property_name] = options[:default]
  elsif defaults.key?(property_name)
    defaults.delete property_name
  end
  define_getter_for(property_name)
  define_setter_for(property_name)
  @subclasses.each { |klass| klass.property(property_name, options) } if defined? @subclasses
  condition = options.delete(:required)
  if condition
    message = options.delete(:message) || "is required for #{name}."
    required_properties[property_name] = { condition: condition, message: message }
  elsif options.key?(:message)
    raise ArgumentError, 'The :message option should be used with :required option.'
  end
end