class Hashie::Dash

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


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 = {})
  property_name = property_name.to_sym
  self.properties << property_name
  if options.has_key?(:default)
    self.defaults[property_name] = options[:default] 
  elsif self.defaults.has_key?(property_name)
    self.defaults.delete property_name
  end
  unless instance_methods.map { |m| m.to_s }.include?("#{property_name}=")
    class_eval <<-ACCESSORS
      def #{property_name}(&block)
        self.[](#{property_name.to_s.inspect}, &block)
      end
      def #{property_name}=(value)
        self.[]=(#{property_name.to_s.inspect}, value)
      end
    ACCESSORS
  end
  if defined? @subclasses
    @subclasses.each { |klass| klass.property(property_name, options) }
  end
end