# File lib/hashie/dash.rb, line 30
    def self.property(property_name, options = {})
      property_name = property_name.to_sym

      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 { |m| m.to_s }.include?("#{property_name}=")
        define_method(property_name) { |&block| self.[](property_name.to_s, &block) }
        property_assignment = property_name.to_s.concat('=').to_sym
        define_method(property_assignment) { |value| self.[]=(property_name.to_s, value) }
      end

      if defined? @subclasses
        @subclasses.each { |klass| klass.property(property_name, options) }
      end
      required_properties << property_name if options.delete(:required)
    end