Class: Radical::Model
- Inherits:
-
Object
- Object
- Radical::Model
- Defined in:
- lib/radical/model.rb
Direct Known Subclasses
Class Attribute Summary collapse
-
.table_name ⇒ Object
Returns the value of attribute table_name.
Class Method Summary collapse
- .all ⇒ Object
- .columns ⇒ Object
- .db ⇒ Object
- .find(id) ⇒ Object
- .save_columns ⇒ Object
- .table(name) ⇒ Object
Instance Method Summary collapse
- #columns ⇒ Object
- #db ⇒ Object
- #delete ⇒ Object
-
#initialize(params = {}) ⇒ Model
constructor
A new instance of Model.
- #save ⇒ Object
- #save_columns ⇒ Object
- #saved? ⇒ Boolean
- #table_name ⇒ Object
- #update(params) ⇒ Object
Constructor Details
#initialize(params = {}) ⇒ Model
Returns a new instance of Model.
49 50 51 52 53 54 |
# 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 |
Class Attribute Details
.table_name ⇒ Object
Returns the value of attribute table_name.
10 11 12 |
# File 'lib/radical/model.rb', line 10 def table_name @table_name end |
Class Method Details
.all ⇒ Object
40 41 42 43 44 45 46 |
# 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 ⇒ Object
20 21 22 23 24 |
# 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 ⇒ Object
12 13 14 |
# File 'lib/radical/model.rb', line 12 def db Database.connection end |
.find(id) ⇒ Object
30 31 32 33 34 35 36 37 38 |
# 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 |
.save_columns ⇒ Object
26 27 28 |
# File 'lib/radical/model.rb', line 26 def save_columns columns.reject { |c| %w[id created_at updated_at].include?(c) } end |
.table(name) ⇒ Object
16 17 18 |
# File 'lib/radical/model.rb', line 16 def table(name) self.table_name = name end |
Instance Method Details
#columns ⇒ Object
56 57 58 |
# File 'lib/radical/model.rb', line 56 def columns self.class.columns end |
#db ⇒ Object
64 65 66 |
# File 'lib/radical/model.rb', line 64 def db self.class.db end |
#delete ⇒ Object
72 73 74 75 76 77 78 |
# 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 ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# 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 ⇒ Object
60 61 62 |
# File 'lib/radical/model.rb', line 60 def save_columns self.class.save_columns end |
#saved? ⇒ Boolean
115 116 117 |
# File 'lib/radical/model.rb', line 115 def saved? !id.nil? end |
#table_name ⇒ Object
68 69 70 |
# File 'lib/radical/model.rb', line 68 def table_name self.class.table_name end |
#update(params) ⇒ Object
80 81 82 83 84 |
# File 'lib/radical/model.rb', line 80 def update(params) save_columns.each { |c| instance_variable_set("@#{c}", params[c]) } save end |