# File lib/flexirecord.rb, line 1018
1018:       def method_missing(method_symbol, *arguments)
1019:         synchronize do
1020:           attr = method_symbol.to_s
1021:           if attr[-1, 1] == '='
1022:             attr = attr[0, attr.length-1]
1023:             mode = :write
1024:             value = arguments.pop
1025:           else
1026:             mode = :read
1027:           end
1028:           reader                = self.class.reader(attr)
1029:           loader                = self.class.loader(attr)
1030:           table_column_existent = self.class.columns.include?(attr)
1031:           if mode == :write
1032:             data_hash_key        = [attr] + arguments
1033:             setter = self.class.setter(attr)
1034:             if setter
1035:               setter.call(self, value)
1036:               return nil
1037:             elsif @data_hash.has_key?(data_hash_key) or reader or loader or table_column_existent
1038:               @data_hash[data_hash_key] = value
1039:               return nil
1040:             end
1041:           elsif mode == :read
1042:             self.class.prepare_read_parameters(attr, arguments)
1043:             data_hash_key = [attr] + arguments
1044:             if reader
1045:               return reader.call(self, arguments)
1046:             elsif @data_hash.has_key?(data_hash_key)
1047:               return @data_hash[data_hash_key]
1048:             elsif loader
1049:               loader.call(FlexiRecord::RecordArray.new(self.class, [self]), arguments)
1050:               unless @data_hash.has_key?(data_hash_key)
1051:                 puts data_hash_key.inspect
1052:                 raise "Record loader failed."
1053:               end
1054:               return @data_hash[data_hash_key]
1055:             elsif table_column_existent
1056:               unless arguments.empty?
1057:                 raise ArgumentError, "Attribute getter method does not support arguments."
1058:               end
1059:               return nil
1060:             end
1061:           end
1062:           return super
1063:         end
1064:       end