module S3DB::Record
Attributes
data[RW]
Public Class Methods
new(data)
click to toggle source
Instantiate a new record.
data - Hash of data. Required.
returns a new instance of the record.
# File lib/s3db/record.rb, line 96 def initialize(data) hash = {} data.each_pair do |k,v| hash[k.to_s] = v end @data = hash end
Private Class Methods
included(host_class)
click to toggle source
When included, extend the class methods of the host class
# File lib/s3db/record.rb, line 190 def self.included(host_class) host_class.extend(ClassMethods) end
Public Instance Methods
_id()
click to toggle source
# File lib/s3db/record.rb, line 155 def _id @data['_id'] end
_id=(id)
click to toggle source
# File lib/s3db/record.rb, line 151 def _id=(id) @data['_id'] = id end
new_record?()
click to toggle source
# File lib/s3db/record.rb, line 105 def new_record? _id.nil? end
save()
click to toggle source
Save an instantiated record.
returns the record on success or failure.
# File lib/s3db/record.rb, line 112 def save _set_id return false if _id.nil? self.class._database.backend.write_record( self.class._database.name, self.class._collection.name, _filename, @data.to_json ) self end
save!()
click to toggle source
Save an instantiated record, raising an error on failure.
returns the record on success; raises an error on failure.
# File lib/s3db/record.rb, line 130 def save! save || raise(ArgumentError, 'failed to save!') end
update(data)
click to toggle source
Update the data for a record and save.
data - Hash of data for the record. Required.
returns save
.
# File lib/s3db/record.rb, line 139 def update(data) return false if _id.nil? # Copy the existing id to the new data, if it exists. data.merge('_id' => _id) # Update the dataset @data = data save end
Private Instance Methods
_filename()
click to toggle source
TODO: implement a missing method method for getter/setters
# File lib/s3db/record.rb, line 163 def _filename '%s.json' % [_id] end
_set_id()
click to toggle source
# File lib/s3db/record.rb, line 167 def _set_id return _id if !_id.nil? if self.class._id_generator.nil? || self.class._id_field.nil? self._id = UUIDTools::UUID.random_create.to_s else self._id = self.class._id_generator.call(@data[self.class._id_field]) end _id end
_valid?()
click to toggle source
# File lib/s3db/record.rb, line 179 def _valid? return false unless @data.keys.map(&:to_s).sort == self.class._schema.keys.map(&:to_s).sort @data.each_pair do |key, value| return false unless value.class.to_s == self.class._schema[key.to_s] end true end