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