Class: Radical::Model

Inherits:
Object
  • Object
show all
Defined in:
lib/radical/model.rb

Direct Known Subclasses

Model

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

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_nameObject

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

.allObject



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

.columnsObject



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

.dbObject



12
13
14
# File 'lib/radical/model.rb', line 12

def db
  Database.connection
end

.find(id) ⇒ Object

Raises:



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_columnsObject



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

#columnsObject



56
57
58
# File 'lib/radical/model.rb', line 56

def columns
  self.class.columns
end

#dbObject



64
65
66
# File 'lib/radical/model.rb', line 64

def db
  self.class.db
end

#deleteObject



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

#saveObject



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_columnsObject



60
61
62
# File 'lib/radical/model.rb', line 60

def save_columns
  self.class.save_columns
end

#saved?Boolean

Returns:

  • (Boolean)


115
116
117
# File 'lib/radical/model.rb', line 115

def saved?
  !id.nil?
end

#table_nameObject



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