class SQLObject

Public Class Methods

all() click to toggle source
# File lib/easy_save/sql_object.rb, line 43
  def self.all
    sql = <<-SQL
      SELECT
        *
      FROM
        #{self.table_name}
    SQL

    results = DBConnection.execute(sql)
    self.parse_all(results)
  end
columns() click to toggle source
# File lib/easy_save/sql_object.rb, line 23
def self.columns
  self.first_row 
  @results.first.map(&:to_sym)
end
finalize!() click to toggle source
# File lib/easy_save/sql_object.rb, line 28
def self.finalize!
  self.columns.each do |col|
    define_method(col) { attributes[col] }
    define_method("#{col}=") { |val| attributes[col] = val }
  end
end
find(id) click to toggle source
# File lib/easy_save/sql_object.rb, line 59
  def self.find(id)
    sql = <<-SQL
      SELECT
        *
      FROM
        #{self.table_name}
      WHERE
        id = ?
    SQL

    result = DBConnection.execute(sql, id).first
    result ? new(result) : nil
  end
first() click to toggle source
# File lib/easy_save/sql_object.rb, line 73
  def self.first 
    sql = <<-SQL 
      SELECT 
        * 
      FROM 
        #{self.table_name}
    SQL
    result = DBConnection.execute(sql).first
    result ? new(result) : nil
  end
first_row() click to toggle source
# File lib/easy_save/sql_object.rb, line 12
  def self.first_row
    sql = <<-SQL
    SELECT
      *
    FROM
      #{table_name}
    SQL

    @results ||= DBConnection.execute2(sql)
  end
new(params = {}) click to toggle source
# File lib/easy_save/sql_object.rb, line 86
def initialize(params = {})
  params.each do |attr_name, val|
    unless self.class.columns.include?(attr_name.to_sym)
      raise "unknown attribute '#{attr_name}'"
    end
    self.send("#{attr_name}=", val)
  end
end
parse_all(results) click to toggle source
# File lib/easy_save/sql_object.rb, line 55
def self.parse_all(results)
  results.inject([]) { |final, res|  final.push(new(res)) } 
end
table_name() click to toggle source
# File lib/easy_save/sql_object.rb, line 39
def self.table_name
  @table_name ||= self.to_s.tableize
end
table_name=(table_name) click to toggle source
# File lib/easy_save/sql_object.rb, line 35
def self.table_name=(table_name)
  @table_name = table_name
end

Public Instance Methods

attribute_values() click to toggle source
# File lib/easy_save/sql_object.rb, line 99
def attribute_values
  @attributes.values
end
attributes() click to toggle source
# File lib/easy_save/sql_object.rb, line 95
def attributes
  @attributes ||= {}
end
insert() click to toggle source
# File lib/easy_save/sql_object.rb, line 103
  def insert
    col_names = self.class.columns.drop(1).join(", ")
    question_marks = (["?"] * (self.class.columns.length - 1)).join(", ")

    col_names = "(#{col_names})"
    question_marks = "(#{question_marks})"

    sql = <<-SQL
      INSERT INTO
        #{self.class.table_name} #{col_names}
      VALUES
        #{question_marks}
    SQL

    DBConnection.execute(sql, attribute_values)
    self.id = DBConnection.last_insert_row_id
  end
save() click to toggle source
# File lib/easy_save/sql_object.rb, line 138
def save
  id.nil? ? insert : update
end
update() click to toggle source
# File lib/easy_save/sql_object.rb, line 121
  def update
    set_values = self.class.columns.map do |el|
      "#{el} = ?"
    end.join(', ')

    sql = <<-SQL
      UPDATE
        #{self.class.table_name}
      SET
        #{set_values}
      WHERE
        id = #{id}
    SQL

    DBConnection.execute(sql, *attribute_values)
  end