class Radical::Model

Attributes

table_name[RW]

Public Class Methods

all() click to toggle source
# File lib/radical/model.rb, line 40
def all
  sql = "select * from #{table_name} order by id"

  rows = db.execute sql

  rows.map { |r| new(r) }
end
columns() click to toggle source
# File lib/radical/model.rb, line 20
def columns
  sql = "select name from pragma_table_info('#{table_name}');"

  @columns ||= db.execute(sql).map { |r| r['name'] }
end
db() click to toggle source
# File lib/radical/model.rb, line 12
def db
  Database.connection
end
find(id) click to toggle source
# File lib/radical/model.rb, line 30
def find(id)
  sql = "select * from #{table_name} where id = ? limit 1"

  row = db.get_first_row sql, [id.to_i]

  raise ModelNotFound, 'Record not found' unless row

  new(row)
end
new(params = {}) click to toggle source
# File lib/radical/model.rb, line 49
def initialize(params = {})
  columns.each do |column|
    self.class.attr_accessor column.to_sym
    instance_variable_set "@#{column}", (params[column] || params[column.to_sym])
  end
end
save_columns() click to toggle source
# File lib/radical/model.rb, line 26
def save_columns
  columns.reject { |c| %w[id created_at updated_at].include?(c) }
end
table(name) click to toggle source
# File lib/radical/model.rb, line 16
def table(name)
  self.table_name = name
end

Public Instance Methods

columns() click to toggle source
# File lib/radical/model.rb, line 56
def columns
  self.class.columns
end
db() click to toggle source
# File lib/radical/model.rb, line 64
def db
  self.class.db
end
delete() click to toggle source
# File lib/radical/model.rb, line 72
def delete
  sql = "delete from #{table_name} where id = ? limit 1"

  db.execute sql, id.to_i

  self
end
save() click to toggle source
# File lib/radical/model.rb, line 86
    def save
      values = save_columns.map { |c| instance_variable_get("@#{c}") }

      if saved?
        sql = <<-SQL
          update #{table_name} set #{save_columns.map { |c| "#{c}=?" }.join(',')}, updated_at = ? where id = ?
        SQL

        db.transaction do |t|
          t.execute sql, values + [Time.now.to_i, id]
          self.class.find(id)
        end
      else
        sql = <<-SQL
          insert into #{table_name} (
            #{save_columns.join(',')}
          )
          values (
            #{save_columns.map { '?' }.join(',')}
          )
        SQL

        db.transaction do |t|
          t.execute sql, values
          self.class.find t.last_insert_row_id
        end
      end
    end
save_columns() click to toggle source
# File lib/radical/model.rb, line 60
def save_columns
  self.class.save_columns
end
saved?() click to toggle source
# File lib/radical/model.rb, line 115
def saved?
  !id.nil?
end
table_name() click to toggle source
# File lib/radical/model.rb, line 68
def table_name
  self.class.table_name
end
update(params) click to toggle source
# File lib/radical/model.rb, line 80
def update(params)
  save_columns.each { |c| instance_variable_set("@#{c}", params[c]) }

  save
end