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