class Algernon::Model

Constants

DB

Attributes

fields[R]
table_name[R]

Public Class Methods

columns() click to toggle source
# File lib/algernon/model/model.rb, line 89
def columns
  @model_columns ||= fields.keys
end
create_table() click to toggle source
# File lib/algernon/model/model.rb, line 83
def create_table
  query = "CREATE TABLE IF NOT EXISTS #{@table_name}"\
          "(#{fields_builder(@fields)})"
  DB.execute(query)
end
property(field_name, options = {}) click to toggle source
# File lib/algernon/model/model.rb, line 78
def property(field_name, options = {})
  @fields[field_name] = options
  attr_accessor field_name
end
to_table(table_name) click to toggle source
# File lib/algernon/model/model.rb, line 72
def to_table(table_name)
  @table_name = table_name.to_s
  @fields = {}
  property :id, type: :integer, primary_key: true
end

Public Instance Methods

destroy() click to toggle source
# File lib/algernon/model/model.rb, line 36
def destroy
  DB.execute("DELETE FROM #{self.class.table_name} WHERE id= ?", id)
end
save() click to toggle source
# File lib/algernon/model/model.rb, line 11
def save
  if id
    query = "UPDATE #{self.class.table_name} "\
            "SET #{update_field_set} "\
            "WHERE id = ?"
    DB.execute(query, table_values, id)
  else
    query = "INSERT INTO #{self.class.table_name} "\
            "(#{table_fields}) "\
            "VALUES(#{values_placeholders})"
    DB.execute(query, table_values)

    self.id = DB.execute("SELECT last_insert_rowid()")
  end
  self.class.find(id)
end
update(parameters) click to toggle source
# File lib/algernon/model/model.rb, line 28
def update(parameters)
  parameters.each do |key, value|
    send("#{key}=", value)
  end

  save
end

Private Instance Methods

columns_except_id() click to toggle source
# File lib/algernon/model/model.rb, line 44
def columns_except_id
  self.class.columns.without_id.with_value(self)
end
table_fields() click to toggle source
# File lib/algernon/model/model.rb, line 40
def table_fields
  columns_except_id.join(", ")
end
table_values() click to toggle source
# File lib/algernon/model/model.rb, line 53
def table_values
  values = []
  columns_except_id.each do |field|
    values << send(field)
  end
  values
end
update_field_set() click to toggle source
# File lib/algernon/model/model.rb, line 61
def update_field_set
  values = []
  columns_except_id.each do |field|
    values << "#{field} = ? "
  end
  values.join(", ")
end
values_placeholders() click to toggle source
# File lib/algernon/model/model.rb, line 48
def values_placeholders
  count = columns_except_id.count
  (["?"] * count).join(", ")
end