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 = " update \#{table_name} set \#{save_columns.map { |c| \"\#{c}=?\" }.join(',')}, updated_at = ? where id = ?\n SQL\n\n db.transaction do |t|\n t.execute sql, values + [Time.now.to_i, id]\n self.class.find(id)\n end\n else\n sql = <<-SQL\n insert into \#{table_name} (\n \#{save_columns.join(',')}\n )\n values (\n \#{save_columns.map { '?' }.join(',')}\n )\n SQL\n\n db.transaction do |t|\n t.execute sql, values\n self.class.find t.last_insert_row_id\n end\n end\nend\n" |
#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 |