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