class OpalORM::SQLObject
Public Class Methods
all()
click to toggle source
# File lib/opal_orm/sql_object.rb, line 66 def self.all query = <<-SQL SELECT * FROM #{self.table_name} SQL objs = DBConnection.execute(query) parse_all(objs) end
columns()
click to toggle source
# File lib/opal_orm/sql_object.rb, line 17 def self.columns @cols ||= DBConnection.execute2(<<-SQL).first.map(&:to_sym) SELECT * FROM #{table_name} SQL end
define_getter(attr_name)
click to toggle source
# File lib/opal_orm/sql_object.rb, line 46 def self.define_getter(attr_name) define_method(attr_name) do attributes[attr_name] end end
define_setter(attr_name)
click to toggle source
# File lib/opal_orm/sql_object.rb, line 52 def self.define_setter(attr_name) define_method("#{attr_name}=") do |new_val| attributes[attr_name] = new_val end end
finalize!()
click to toggle source
# File lib/opal_orm/sql_object.rb, line 39 def self.finalize! columns.each do |col_sym| define_getter(col_sym) define_setter(col_sym) end end
find(id)
click to toggle source
# File lib/opal_orm/sql_object.rb, line 85 def self.find(id) result = DBConnection.execute(<<-SQL,id) SELECT * FROM #{table_name} WHERE id = ? SQL return nil if result.empty? new(result.first) end
is_column?(col_sym)
click to toggle source
# File lib/opal_orm/sql_object.rb, line 127 def self.is_column?(col_sym) self.columns.include?(col_sym) end
new(params = {})
click to toggle source
# File lib/opal_orm/sql_object.rb, line 6 def initialize(params = {}) params.each do |attribute,val| col_sym = attribute.to_sym if self.class.columns.include?(col_sym) self.send("#{col_sym}=",val) else raise "unknown attribute '#{attribute}'" end end end
parse_all(results)
click to toggle source
# File lib/opal_orm/sql_object.rb, line 77 def self.parse_all(results) objs = [] results.each do |obj| objs << new(obj) end objs end
table_name()
click to toggle source
# File lib/opal_orm/sql_object.rb, line 62 def self.table_name @table_name ||= self.to_s.downcase.pluralize end
table_name=(table_name)
click to toggle source
# File lib/opal_orm/sql_object.rb, line 58 def self.table_name=(table_name) @table_name = table_name end
Public Instance Methods
attribute_values()
click to toggle source
# File lib/opal_orm/sql_object.rb, line 102 def attribute_values self.class.columns.map do |col| attributes[col] end end
attributes()
click to toggle source
# File lib/opal_orm/sql_object.rb, line 98 def attributes @attributes ||= {} end
insert()
click to toggle source
# File lib/opal_orm/sql_object.rb, line 26 def insert columns = self.class.columns#.reject { |c| c.nil?} cols = columns.join(", ") placeholders = (["?"] * columns.length).join(", ") DBConnection.execute(<<-SQL,*attribute_values) INSERT INTO #{self.class.table_name}(#{cols}) VALUES (#{placeholders}) SQL attributes[:id] = DBConnection.last_insert_row_id end
method_missing(method_sym, *args)
click to toggle source
Calls superclass method
# File lib/opal_orm/sql_object.rb, line 131 def method_missing(method_sym, *args) if self.class.is_column?(method_sym) self.class.define_getter(method_sym) return send(method_sym) end setter_name = /(.*)=/.match(method_sym) if setter_name && self.class.is_column?(setter_name[1].to_sym) self.class.define_setter(setter_name[1].to_sym) p method_sym send(method_sym, args[0]) else super(method_sym, args) end end
save()
click to toggle source
# File lib/opal_orm/sql_object.rb, line 123 def save id.nil? ? insert : update end
update()
click to toggle source
# File lib/opal_orm/sql_object.rb, line 108 def update cols = self.class .columns .map { |col_name| "#{col_name} = ?"} .join(", ") DBConnection.execute(<<-SQL,*attribute_values - [:id], id) UPDATE #{self.class.table_name} SET #{cols} WHERE id = ? SQL end