module Persistable::InstanceMethods

Instance methods for ORM persistence

Public Class Methods

included(base) click to toggle source
# File lib/soil_sample_orm/concerns/persistable.rb, line 76
def self.included(base) # Hook
  puts "#{base} has mixed in #{self}"
end
new(options = {}) click to toggle source
# File lib/soil_sample_orm/concerns/persistable.rb, line 80
def initialize(options = {})
  options.each do |key, value|
    self.send("#{key}=", value)
  end
end

Public Instance Methods

attribute_values() click to toggle source
# File lib/soil_sample_orm/concerns/persistable.rb, line 86
def attribute_values
  self.class.attributes.keys[1..-1].collect do |attr_name|
    self.send(attr_name)
  end
end
destroy() click to toggle source
# File lib/soil_sample_orm/concerns/persistable.rb, line 105
    def destroy
      sql = <<-SQL
        DELETE FROM #{self.class.table_name} WHERE id = ?
      SQL

      DB[:conn].execute(sql, self.id)
    end
insert() click to toggle source
# File lib/soil_sample_orm/concerns/persistable.rb, line 96
    def insert
      sql = <<-SQL
        INSERT INTO #{self.class.table_name} (#{self.class.attribute_names_for_insert})
        VALUES (#{self.class.question_marks_for_insert})
      SQL
      DB[:conn].execute(sql, *attribute_values)
      self.id = DB[:conn].execute('SELECT last_insert_rowid();')[0][0]
    end
persisted?() click to toggle source
# File lib/soil_sample_orm/concerns/persistable.rb, line 92
def persisted?
  !!self.id
end
save() click to toggle source
# File lib/soil_sample_orm/concerns/persistable.rb, line 122
def save
  persisted? ? update : insert
end
update() click to toggle source
# File lib/soil_sample_orm/concerns/persistable.rb, line 113
    def update
      sql = <<-SQL
        UPDATE #{self.class.table_name}
        SET #{self.class.sql_for_update} WHERE id = ?
      SQL

      DB[:conn].execute(sql, *attribute_values, self.id)
    end