Parent

RBase::Record

Class that contains data for particular table row. Should not be created explicitly (use Table#create to create records)

Accessing attributes

You can read and assign values to row's columns using simple property syntax:

user = users_table[0]
user.name = 'Bob'
user.birth_date = Date.new(1980, 2, 29)
user.save

puts user.name
puts user.birth_date

Attributes

index[R]
table[R]

Public Class Methods

new(table, attributes = {}) click to toggle source
# File lib/rbase/record.rb, line 41
def initialize(table, attributes = {})
  @table = table
  @values_cached = {}
  @values_changed = {}

  attributes.each { |k, v| @values_changed[k.to_s.upcase] = v }
end

Public Instance Methods

clone() click to toggle source

Clone record.

# File lib/rbase/record.rb, line 82
def clone
  c = self.class.new(@table, @values_changed)
  c.instance_variable_set("@values_cached", @values_cached)
  c.instance_variable_set("@data", @data)
  c
end
delete() click to toggle source

Delete record from database.

# File lib/rbase/record.rb, line 71
def delete
  @deleted = true
  save
end
deleted?() click to toggle source

Returns true if record was marked as deleted; otherwise return false.

# File lib/rbase/record.rb, line 77
def deleted?
  @deleted ||= new_record? ? false : @data[0, 1] == '*'
end
method_missing(sym, *args) click to toggle source
# File lib/rbase/record.rb, line 89
def method_missing(sym, *args)
  name = sym.to_s
  if /=$/ =~ name && args.size == 1
    set_value(name[0..-2], args.first)
  else
    get_value(name)
  end
end
new_record?() click to toggle source

Returns true if record was never saved to database; otherwise return false.

# File lib/rbase/record.rb, line 60
def new_record?
  @data.nil?
end
save() click to toggle source

Save record to database.

# File lib/rbase/record.rb, line 65
def save
  record = self
  @table.instance_eval { save(record) }
end
serialize() click to toggle source
# File lib/rbase/record.rb, line 98
def serialize
  if new_record?
    @data = deleted? ? '*' : ' '
    @data << @table.columns.collect do |column|
      column.pack(@values_changed[column.name])
    end.join
  else
    @data[0, 1] = deleted? ? '*' : ' '
    @values_changed.each do |k, v|
      column = @table.column(k)
      raise UnknownColumnError.new(k) unless column
      begin
        @data[column.offset, column.size] = column.pack(v)
      rescue Object => e
        raise InvalidValueError.new(column, v)
      end
      @values_cached[k] = v
    end
  end
  @data
end

Protected Instance Methods

get_value(name) click to toggle source

Returns value of specified column

# File lib/rbase/record.rb, line 123
def get_value(name)
  name = name.to_s.upcase.to_sym
  return @values_changed[name] if @values_changed.has_key?(name)
  return nil if new_record?
  column = @table.column(name)
  raise UnknownColumnError.new(name) unless column
  @values_cached[name] ||= column.unpack(@data[column.offset, column.size])
end
set_value(name, value) click to toggle source

Sets value of specified column.

# File lib/rbase/record.rb, line 133
def set_value(name, value)
  name = name.to_s.upcase.to_sym
  raise UnknownColumnError.new(name) unless @table.column(name)
  @values_changed[name] = value
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.