class RailzLite::SQLObject

Public Class Methods

all() click to toggle source
# File lib/railz_lite/models/sql_object.rb, line 40
    def self.all
      results = DBConnection.execute(<<-SQL)
      SELECT
        *
      FROM
        #{table_name};
    SQL
      parse_all(results)
    end
columns() click to toggle source
# File lib/railz_lite/models/sql_object.rb, line 11
    def self.columns
      @columns ||= DBConnection.execute2(<<-SQL)
      SELECT
        *
      FROM
        #{table_name};
    SQL
      @columns.first.map(&:to_sym)
    end
columns_sans_id() click to toggle source

for insert statements we don't want to include the id field

# File lib/railz_lite/models/sql_object.rb, line 69
def self.columns_sans_id
  self.columns.reject { |col| col == :id }
end
finalize!() click to toggle source
# File lib/railz_lite/models/sql_object.rb, line 21
def self.finalize!
  columns.each do |name|
    define_method(name) do
      attributes[name]
    end
    define_method("#{name}=") do |val|
      attributes[name] = val
    end
  end
end
find(id) click to toggle source
# File lib/railz_lite/models/sql_object.rb, line 54
    def self.find(id)
      target = DBConnection.execute(<<-SQL, id)
      SELECT
        *
      FROM
        #{table_name}
      WHERE
        ID = ?;
    SQL

      return nil if target.empty?
      self.new(target.first)
    end
new(params = {}) click to toggle source
# File lib/railz_lite/models/sql_object.rb, line 73
def initialize(params = {})
  params.each do |attr_name, val|
    name_sym = attr_name.to_sym
    raise Exception.new "unknown attribute '#{attr_name}'" unless self.class.columns.include?(name_sym)
    send("#{name_sym}=", val)
  end
end
parse_all(results) click to toggle source
# File lib/railz_lite/models/sql_object.rb, line 50
def self.parse_all(results)
  results.map { |attrs| self.new(attrs) }
end
table_name() click to toggle source
# File lib/railz_lite/models/sql_object.rb, line 36
def self.table_name
  @table_name || self.name.tableize 
end
table_name=(table_name) click to toggle source
# File lib/railz_lite/models/sql_object.rb, line 32
def self.table_name=(table_name)
  @table_name = table_name
end

Public Instance Methods

attribute_values() click to toggle source
# File lib/railz_lite/models/sql_object.rb, line 85
def attribute_values
  self.class.columns.map { |attr| send(attr) }
end
attribute_values_sans_id() click to toggle source

see columns_sans_id

# File lib/railz_lite/models/sql_object.rb, line 90
def attribute_values_sans_id
  self.class.columns_sans_id.map { |attr| send(attr) }
end
attributes() click to toggle source
# File lib/railz_lite/models/sql_object.rb, line 81
def attributes
  @attributes ||= {}
end
insert() click to toggle source
# File lib/railz_lite/models/sql_object.rb, line 94
    def insert
      last_row_id = DBConnection.insert(<<-SQL, *attribute_values_sans_id)
      INSERT INTO
        #{self.class.table_name}(#{self.class.columns_sans_id.join(',')})
      VALUES
        (#{(["?"] * attribute_values_sans_id.length).join(',')});
    SQL
      self.id = last_row_id
    end
save() click to toggle source
# File lib/railz_lite/models/sql_object.rb, line 115
def save
  if self.id.nil?
    insert
  else
    update
  end
end
update() click to toggle source
# File lib/railz_lite/models/sql_object.rb, line 104
    def update
      DBConnection.execute(<<-SQL, *attribute_values_sans_id, self.id)
      UPDATE
        #{self.class.table_name}
      SET
        #{self.class.columns_sans_id.map { |attr_name| "#{attr_name}=?"}.join(',')}
      WHERE
        id = ?;
    SQL
    end