# File lib/flexirecord.rb, line 950
950:       def read(attr, *arguments)
951:         attr = attr.to_s
952:         self.class.prepare_read_parameters(attr, arguments)
953:         data_hash_key = [attr] + arguments
954:         reader = self.class.reader(attr)
955:         loader = self.class.loader(attr)
956:         synchronize do
957:           if reader
958:             return reader.call(self, arguments)
959:           elsif @data_hash.has_key?(data_hash_key)
960:             return @data_hash[data_hash_key]
961:           elsif loader
962:             loader.call(FlexiRecord::RecordArray.new(self.class, [self]), arguments)
963:             unless @data_hash.has_key?(data_hash_key)
964:               raise "Record loader failed."
965:             end
966:           end
967:           return @data_hash[data_hash_key]
968:         end
969:       end