class LarisrecordBase

Public Class Methods

columns() click to toggle source
# File lib/laris/larisrecord/larisrecord_base.rb, line 2
def self.columns
  return @columns if @columns

  @columns = DBConnection.columns(table_name)
end
destroy(row) click to toggle source
# File lib/laris/larisrecord/larisrecord_base.rb, line 12
def self.destroy(row)
  row = find(row) if row.is_a?(Integer)
  row.destroy
end
destroy_all() click to toggle source
# File lib/laris/larisrecord/larisrecord_base.rb, line 8
def self.destroy_all
  all.each { |row| row.destroy }
end
laris_finalize!() click to toggle source
# File lib/laris/larisrecord/larisrecord_base.rb, line 17
def self.laris_finalize!
  columns.each do |attr_name|
    define_method(attr_name) do
      attributes[attr_name]
    end

    define_method("#{attr_name}=") do |value|
      attributes[attr_name] = value
    end
  end
end
new(params = {}) click to toggle source
# File lib/laris/larisrecord/larisrecord_base.rb, line 37
def initialize(params = {})
  params.each do |attr_name, value|
    if self.class.columns.include?(attr_name.to_sym)
      send("#{attr_name}=", value)
    else
      raise "unknown attribute '#{attr_name}'"
    end
  end
end
table_name() click to toggle source
# File lib/laris/larisrecord/larisrecord_base.rb, line 33
def self.table_name
  @table_name ||= self.to_s.tableize
end
table_name=(table_name) click to toggle source
# File lib/laris/larisrecord/larisrecord_base.rb, line 29
def self.table_name=(table_name)
  @table_name = table_name
end

Public Instance Methods

attribute_values() click to toggle source
# File lib/laris/larisrecord/larisrecord_base.rb, line 51
def attribute_values
  columns.map { |attr_name| send(attr_name) }
end
attributes() click to toggle source
# File lib/laris/larisrecord/larisrecord_base.rb, line 47
def attributes
  @attributes ||= {}
end
destroy() click to toggle source
# File lib/laris/larisrecord/larisrecord_base.rb, line 55
  def destroy
    DBConnection.execute(<<-SQL, [id])
      DELETE FROM
        #{table_name}
      WHERE
        #{table_name}.id = ?
    SQL

    self
  end
insert() click to toggle source
# File lib/laris/larisrecord/larisrecord_base.rb, line 66
  def insert
    cols = columns.reject { |col| col == :id }
    col_values = cols.map { |attr_name| send(attr_name) }
    col_names = cols.join(", ")
    question_marks = (["?"] * cols.size).join(", ")

    result = DBConnection.execute(<<-SQL, col_values)
      INSERT INTO
        #{table_name} (#{col_names})
      VALUES
        (#{question_marks})
      RETURNING id
    SQL

    self.id = result.first['id']
    # DBConnection.last_insert_row_id

    true
  end
save() click to toggle source
# File lib/laris/larisrecord/larisrecord_base.rb, line 86
def save
  id ? update : insert
end
update() click to toggle source
# File lib/laris/larisrecord/larisrecord_base.rb, line 90
  def update
    set_sql = columns.map { |attr_name| "#{attr_name} = ?" }.join(", ")

    result = DBConnection.execute(<<-SQL, attribute_values << id)
      UPDATE
        #{table_name}
      SET
        #{set_sql}
      WHERE
        #{table_name}.id = ?
    SQL

    true
  end

Private Instance Methods

columns() click to toggle source
# File lib/laris/larisrecord/larisrecord_base.rb, line 106
def columns
  self.class.columns
end
table_name() click to toggle source
# File lib/laris/larisrecord/larisrecord_base.rb, line 110
def table_name
  self.class.table_name
end