class Bartleby::Objectifier
Public Class Methods
all()
click to toggle source
# File lib/bartleby/objectifier.rb, line 38 def self.all results = Connection.execute(<<-SQL) SELECT * FROM '#{table_name}' SQL parse_all(results) end
columns()
click to toggle source
# File lib/bartleby/objectifier.rb, line 11 def self.columns return @columns.dup if @columns # ... @columns = Connection.execute2(<<-SQL).first.map(&:to_sym) SELECT * FROM '#{table_name}' SQL @columns.dup end
finalize!()
click to toggle source
# File lib/bartleby/objectifier.rb, line 23 def self.finalize! columns.each do |column| create_getter!(column) create_setter!(column) end end
find(id)
click to toggle source
# File lib/bartleby/objectifier.rb, line 53 def self.find(id) result = Connection.execute(<<-SQL, id) SELECT * FROM '#{table_name}' WHERE id = ? SQL result.empty? ? nil : self.new(result.first) end
new(params = {})
click to toggle source
# File lib/bartleby/objectifier.rb, line 66 def initialize(params = {}) params.each do |attr_name, value| raise "unknown attribute '#{attr_name}'" unless valid_attribute? attr_name send("#{attr_name}=".to_sym, value) end end
parse_all(results)
click to toggle source
# File lib/bartleby/objectifier.rb, line 49 def self.parse_all(results) results.map { |result| self.new(result) } end
table_name()
click to toggle source
# File lib/bartleby/objectifier.rb, line 34 def self.table_name @table_name || self.name.tableize end
table_name=(table_name)
click to toggle source
# File lib/bartleby/objectifier.rb, line 30 def self.table_name=(table_name) @table_name = table_name end
Private Class Methods
create_getter!(column)
click to toggle source
# File lib/bartleby/objectifier.rb, line 124 def self.create_getter!(column) define_method(column) do attributes[column] end end
create_setter!(column)
click to toggle source
# File lib/bartleby/objectifier.rb, line 130 def self.create_setter!(column)! setter_name = "#{column}=".to_sym define_method(setter_name) do |value| attributes[column] = value end end
Public Instance Methods
attribute_values()
click to toggle source
# File lib/bartleby/objectifier.rb, line 77 def attribute_values self.class.columns.map { |col| send(col) } end
attributes()
click to toggle source
# File lib/bartleby/objectifier.rb, line 73 def attributes @attributes ||= {} end
insert()
click to toggle source
# File lib/bartleby/objectifier.rb, line 81 def insert cols = self.class.columns cols.delete(:id) col_names = cols.join(", ") question_marks = (["?"] * (self.class.columns.count - 1)).join(", ") id_idx = self.class.columns.index(:id) values = attribute_values values.delete_at(id_idx) query_string = <<-SQL INSERT INTO #{self.class.table_name} (#{col_names}) VALUES (#{question_marks}) SQL Connection.execute(query_string, *values) self.id = Connection.last_insert_row_id end
save()
click to toggle source
# File lib/bartleby/objectifier.rb, line 118 def save id.nil? ? insert : update end
update()
click to toggle source
# File lib/bartleby/objectifier.rb, line 101 def update cols = self.class.columns cols.delete(:id) set_string = cols.map { |col| "#{col} = :#{col}"}.join(", ") query_string = <<-SQL UPDATE #{self.class.table_name} SET #{set_string} WHERE id = :id SQL Connection.execute(query_string, attributes) end
Private Instance Methods
valid_attribute?(attr_name)
click to toggle source
# File lib/bartleby/objectifier.rb, line 137 def valid_attribute?(attr_name) self.class.columns.include? attr_name.to_sym end