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 unless instance_methods.map(&:to_s).include?("#{property_name}=") define_method(property_name) { |&block| self.[](property_name, &block) } property_assignment = "#{property_name}=".to_sym define_method(property_assignment) { |value| self.[]=(property_name, value) } end if defined? @subclasses @subclasses.each { |klass| klass.property(property_name, options) } end condition = options.delete(:required) if condition message = options.delete(:message) || "is required for #{name}." required_properties[property_name] = { condition: condition, message: message } else fail ArgumentError, 'The :message option should be used with :required option.' if options.key?(:message) end end