class ASeriesOfTubes::TubeRecord::SQLObject
Public Class Methods
all()
click to toggle source
# File lib/a_series_of_tubes/tube_record/sql_object.rb, line 13 def self.all self.parse_all(DBConnection.execute(<<-SQL)) SELECT * FROM #{self.table_name} SQL end
columns()
click to toggle source
# File lib/a_series_of_tubes/tube_record/sql_object.rb, line 4 def self.columns @columns ||= DBConnection.execute2(<<-SQL).first.map(&:to_sym) SELECT * FROM #{self.table_name} SQL end
finalize!()
click to toggle source
# File lib/a_series_of_tubes/tube_record/sql_object.rb, line 41 def self.finalize! self.columns.each do |column| define_method(column) { self.attributes[column] } define_method("#{column}=") { |value| self.attributes[column] = value } end end
find(id)
click to toggle source
# File lib/a_series_of_tubes/tube_record/sql_object.rb, line 26 def self.find(id) result = DBConnection.execute(<<-SQL, id: id).first SELECT * FROM #{self.table_name} WHERE #{self.table_name}.id = :id LIMIT 1 SQL self.new(result) if result end
new(params = {})
click to toggle source
# File lib/a_series_of_tubes/tube_record/sql_object.rb, line 56 def initialize(params = {}) params.each do |attr_name, value| if self.class.columns.include?(attr_name.to_sym) self.send("#{attr_name}=", value) else raise "unknown attribute '#{attr_name}'" end end end
parse_all(results)
click to toggle source
# File lib/a_series_of_tubes/tube_record/sql_object.rb, line 22 def self.parse_all(results) results.map { |params| self.new(params) } end
table_name()
click to toggle source
# File lib/a_series_of_tubes/tube_record/sql_object.rb, line 48 def self.table_name @table_name ||= self.to_s.tableize end
table_name=(table_name)
click to toggle source
# File lib/a_series_of_tubes/tube_record/sql_object.rb, line 52 def self.table_name=(table_name) @table_name = table_name end
Public Instance Methods
attribute_values()
click to toggle source
# File lib/a_series_of_tubes/tube_record/sql_object.rb, line 70 def attribute_values @attributes.keys.map { |k| @attributes[k] } end
attributes()
click to toggle source
# File lib/a_series_of_tubes/tube_record/sql_object.rb, line 66 def attributes @attributes ||= {} end
destroy()
click to toggle source
# File lib/a_series_of_tubes/tube_record/sql_object.rb, line 106 def destroy return unless self.id ASeriesOfTubes::TubeRecord::DBConnection.execute(<<-SQL) DELETE FROM #{self.class.table_name} WHERE id = #{self.id} SQL end
insert()
click to toggle source
# File lib/a_series_of_tubes/tube_record/sql_object.rb, line 74 def insert columns = self.class.columns.drop(1) question_marks = (['?'] * columns.length) ASeriesOfTubes::TubeRecord::DBConnection.execute(<<-SQL, *attribute_values) INSERT INTO #{self.class.table_name} (#{columns.join(',')}) VALUES (#{question_marks.join(',')}) SQL self.id = ASeriesOfTubes::TubeRecord::DBConnection.last_insert_row_id end
save()
click to toggle source
# File lib/a_series_of_tubes/tube_record/sql_object.rb, line 102 def save self.id ? self.update : self.insert end
update()
click to toggle source
# File lib/a_series_of_tubes/tube_record/sql_object.rb, line 88 def update columns = self.class.columns set_values = columns.map { |attr_name| "#{attr_name} = ?" } ASeriesOfTubes::TubeRecord::DBConnection.execute(<<-SQL, *attribute_values) UPDATE #{self.class.table_name} SET #{set_values.join(',')} WHERE id = #{self.id} SQL end