# File lib/hashie/dash.rb, line 26
    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 "def \#{property_name}(&block)\nself.[](\#{property_name.to_s.inspect}, &block)\nend\n\ndef \#{property_name}=(value)\nself.[]=(\#{property_name.to_s.inspect}, value)\nend\n"
      end

      if defined? @subclasses
        @subclasses.each { |klass| klass.property(property_name, options) }
      end
    end