class Raamen::SQLObject

Public Class Methods

all() click to toggle source
# File lib/raamen/sql_object.rb, line 42
    def self.all
      parse_all(results = DBConnection.execute(<<-SQL))
        SELECT
          *
        FROM
          #{self.table_name}
      SQL
    end
columns() click to toggle source
# File lib/raamen/sql_object.rb, line 11
    def self.columns
      @columns ||= DBConnection.execute2(<<-SQL).first.map(&:to_sym)
        SELECT
          *
        FROM
          #{self.table_name}
        LIMIT
          0
      SQL
    end
finalize!() click to toggle source
# File lib/raamen/sql_object.rb, line 22
def self.finalize!
  self.columns.each do |col|
    define_method(col) do
      attributes[col]
    end

    define_method("#{col}=") do |value|
      attributes[col] = value
    end
  end
end
find(id) click to toggle source
# File lib/raamen/sql_object.rb, line 57
    def self.find(id)
      parse_all(DBConnection.execute(<<-SQL, id)).first
        SELECT
          *
        FROM
          #{self.table_name}
        WHERE
          id = ?
      SQL
    end
new(params = {}) click to toggle source
# File lib/raamen/sql_object.rb, line 68
def initialize(params = {})
  params.each do |col, value|
    col = col.to_sym
    raise "unknown attribute '#{col}'" unless self.class.columns.include?(col)
    self.send("#{col}=", value)
  end
end
parse_all(results) click to toggle source
# File lib/raamen/sql_object.rb, line 51
def self.parse_all(results)
  results.map do |result|
    self.new(result)
  end
end
table_name() click to toggle source
# File lib/raamen/sql_object.rb, line 38
def self.table_name
  @table_name || self.name.tableize
end
table_name=(table_name) click to toggle source
# File lib/raamen/sql_object.rb, line 34
def self.table_name=(table_name)
  @table_name = table_name
end

Public Instance Methods

attribute_values() click to toggle source
# File lib/raamen/sql_object.rb, line 80
def attribute_values
  self.class.columns.map do |col|
    self.send(col)
  end
end
attributes() click to toggle source
# File lib/raamen/sql_object.rb, line 76
def attributes
  @attributes ||= {}
end
insert() click to toggle source
# File lib/raamen/sql_object.rb, line 86
    def insert
      columns = self.class.columns.drop(1)
      col_names = columns.map(&:to_sym).join(", ")
      question_marks = (["?"] * columns.count).join(", ")

      DBConnection.execute(<<-SQL, attribute_values.drop(1))
        INSERT INTO
          #{self.class.table_name} (#{col_names})
        VALUES
          (#{question_marks})
      SQL

      self.id = DBConnection.last_insert_row_id
    end
save() click to toggle source
# File lib/raamen/sql_object.rb, line 116
def save
  id.nil? ? insert : update
end
update() click to toggle source
# File lib/raamen/sql_object.rb, line 101
    def update
      set_line = self.class.columns.map do |col|
        "#{col}= ?"
      end.join(", ")

      DBConnection.execute(<<-SQL, *attribute_values, id)
        UPDATE
          #{self.class.table_name}
        SET
          #{set_line}
        WHERE
          id = ?
      SQL
    end