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