module Persistable::ClassMethods
Class methods for ORM persistence
Public Class Methods
extended(base)
click to toggle source
# File lib/soil_sample_orm/concerns/persistable.rb, line 5 def self.extended(base) # Hook puts "#{base} has been extended by #{self}" end
Public Instance Methods
attribute_names_for_insert()
click to toggle source
# File lib/soil_sample_orm/concerns/persistable.rb, line 26 def attribute_names_for_insert self.attributes.keys[1..-1].join(',') end
attributes()
click to toggle source
# File lib/soil_sample_orm/concerns/persistable.rb, line 22 def attributes self::ATTRIBUTES end
column_names()
click to toggle source
# File lib/soil_sample_orm/concerns/persistable.rb, line 9 def column_names DB[:conn].results_as_hash = true sql = "pragma table_info('#{table_name}')" table_info = DB[:conn].execute(sql) column_names = [] table_info.each do |row| column_names << row['name'] end column_names.compact end
create_sql()
click to toggle source
# File lib/soil_sample_orm/concerns/persistable.rb, line 42 def create_sql self.attributes.collect do |attr_name, schema| "#{attr_name} #{schema}" end.join(',') end
create_table()
click to toggle source
# File lib/soil_sample_orm/concerns/persistable.rb, line 48 def create_table sql = <<-SQL CREATE TABLE IF NOT EXISTS #{self.table_name} ( #{self.create_sql} ) SQL DB[:conn].execute(sql) end
find(id)
click to toggle source
# File lib/soil_sample_orm/concerns/persistable.rb, line 57 def find(id) DB[:conn].results_as_hash = false sql = <<-SQL SELECT * FROM #{self.table_name} WHERE id = ? SQL row = DB[:conn].execute(sql, id).flatten row.first ? self.reify_from_row(row) : nil end
question_marks_for_insert()
click to toggle source
# File lib/soil_sample_orm/concerns/persistable.rb, line 30 def question_marks_for_insert (self.attributes.keys.size - 1).times.collect { '?' }.join(',') end
reify_from_row(row)
click to toggle source
# File lib/soil_sample_orm/concerns/persistable.rb, line 66 def reify_from_row(row) options = {} Sample.column_names.each.with_index do |k, v| options[:"#{k}"] = row[v] end Sample.new(options) end
sql_for_update()
click to toggle source
# File lib/soil_sample_orm/concerns/persistable.rb, line 34 def sql_for_update self.attributes.keys[1..-1].collect{ |attr_name| "#{attr_name} = ?" }.join(',') end
table_name()
click to toggle source
# File lib/soil_sample_orm/concerns/persistable.rb, line 38 def table_name "#{self.to_s.downcase}s" end