Class: Raamen::SQLObject
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Searchable
where
assoc_options, belongs_to, has_many, has_one_through
Constructor Details
#initialize(params = {}) ⇒ SQLObject
Returns a new instance of SQLObject.
68
69
70
71
72
73
74
|
# File 'lib/raamen/sql_object.rb', line 68
def initialize(params = {})
params.each do |col, value|
col = col.to_sym
raise "unknown attribute '#{col}'" unless self.class.columns.include?(col)
self.send("#{col}=", value)
end
end
|
Class Method Details
.all ⇒ Object
42
43
44
45
46
47
48
49
|
# File 'lib/raamen/sql_object.rb', line 42
def self.all
parse_all(results = DBConnection.execute(<<-SQL))
SELECT
*
FROM
#{self.table_name}
SQL
end
|
.columns ⇒ Object
11
12
13
14
15
16
17
18
19
20
|
# File 'lib/raamen/sql_object.rb', line 11
def self.columns
@columns ||= DBConnection.execute2(<<-SQL).first.map(&:to_sym)
SELECT
*
FROM
#{self.table_name}
LIMIT
0
SQL
end
|
.finalize! ⇒ Object
22
23
24
25
26
27
28
29
30
31
32
|
# File 'lib/raamen/sql_object.rb', line 22
def self.finalize!
self.columns.each do |col|
define_method(col) do
attributes[col]
end
define_method("#{col}=") do |value|
attributes[col] = value
end
end
end
|
.find(id) ⇒ Object
57
58
59
60
61
62
63
64
65
66
|
# File 'lib/raamen/sql_object.rb', line 57
def self.find(id)
parse_all(DBConnection.execute(<<-SQL, id)).first
SELECT
*
FROM
#{self.table_name}
WHERE
id = ?
SQL
end
|
.parse_all(results) ⇒ Object
51
52
53
54
55
|
# File 'lib/raamen/sql_object.rb', line 51
def self.parse_all(results)
results.map do |result|
self.new(result)
end
end
|
.table_name ⇒ Object
38
39
40
|
# File 'lib/raamen/sql_object.rb', line 38
def self.table_name
@table_name || self.name.tableize
end
|
.table_name=(table_name) ⇒ Object
34
35
36
|
# File 'lib/raamen/sql_object.rb', line 34
def self.table_name=(table_name)
@table_name = table_name
end
|
Instance Method Details
#attribute_values ⇒ Object
80
81
82
83
84
|
# File 'lib/raamen/sql_object.rb', line 80
def attribute_values
self.class.columns.map do |col|
self.send(col)
end
end
|
#attributes ⇒ Object
76
77
78
|
# File 'lib/raamen/sql_object.rb', line 76
def attributes
@attributes ||= {}
end
|
#insert ⇒ Object
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
# File 'lib/raamen/sql_object.rb', line 86
def insert
columns = self.class.columns.drop(1)
col_names = columns.map(&:to_sym).join(", ")
question_marks = (["?"] * columns.count).join(", ")
DBConnection.execute(<<-SQL, attribute_values.drop(1))
INSERT INTO
#{self.class.table_name} (#{col_names})
VALUES
(#{question_marks})
SQL
self.id = DBConnection.last_insert_row_id
end
|
#save ⇒ Object
116
117
118
|
# File 'lib/raamen/sql_object.rb', line 116
def save
id.nil? ? insert : update
end
|
#update ⇒ Object
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
# File 'lib/raamen/sql_object.rb', line 101
def update
set_line = self.class.columns.map do |col|
"#{col}= ?"
end.join(", ")
DBConnection.execute(<<-SQL, *attribute_values, id)
UPDATE
#{self.class.table_name}
SET
#{set_line}
WHERE
id = ?
SQL
end
|