tmud-3.0.0/benchmark/
tmud-3.0.0/cmd/
tmud-3.0.0/cmd/objects/
tmud-3.0.0/cmd/tiny/
tmud-3.0.0/doc/SQLite/
tmud-3.0.0/doc/SQLite3/
tmud-3.0.0/doc/TernaryTrie/
tmud-3.0.0/farts/
tmud-3.0.0/lib/
tmud-3.0.0/lib/engine/
tmud-3.0.0/lib/farts/
tmud-3.0.0/logs/
#
# file::    properties.rb
# author::  Jon A. Lambert
# version:: 2.8.0
# date::    01/19/2006
#
# This source code copyright (C) 2005, 2006 by Jon A. Lambert
# All rights reserved.
#
# Released under the terms of the TeensyMUD Public License
# See LICENSE file for additional information.
#
$:.unshift "lib" if !$:.include? "lib"
$:.unshift "vendor" if !$:.include? "vendor"

require 'utility/configuration'

class Module

# Properties modifies class Module by adding the property method which:
# 1. creates read/write accessors for each symbol.
# 2. defines the to_yaml_properties for use by the database for all symbols.
# 3. defines the :id attribute
#
# [+sym+] an arrays of symbols representing the attributes on the object.
  def property(*sym)
    if Configuration.instance.options['props_are_accessors_only']
      attr_accessor(*sym)
=begin
      class_eval <<-EOD
        def id
          @id ||= Engine.instance.db.getid
        end
      EOD
=end
      return
    end
    sym.each do |s|
      class_eval <<-EOD
        def #{s}
          @props ||= {}
          if options['safe_read'] && !@props[:#{s}].kind_of?(Numeric)
            Engine.instance.db.mark(self.id)
            @props[:updated_on] = Time.now
          end
          @props[:#{s}]
        end
        def #{s}=(val)
          @props ||= {}
          Engine.instance.db.mark(self.id)
          @props[:updated_on] = Time.now
          @props[:#{s}] = val
        end
      EOD
    end
    class_eval <<-EOD
      def to_yaml_properties
        ['@props']
      end
      def id
        @props ||= {}
        @props[:id] ||= Engine.instance.db.getid
      end
      def _dump(depth)
        Marshal.dump(@props)
      end
      def self._load(str)
        obj = allocate
        obj.instance_variable_set(:@props,Marshal.load(str))
        obj
      end
    EOD
  end

end