Class: 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.
85
86
87
88
89
90
91
92
|
# File 'lib/easy_save/sql_object.rb', line 85
def initialize(params = {})
params.each do |attr_name, val|
unless self.class.columns.include?(attr_name.to_sym)
raise "unknown attribute '#{attr_name}'"
end
self.send("#{attr_name}=", val)
end
end
|
Class Method Details
.all ⇒ Object
42
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/easy_save/sql_object.rb', line 42
def self.all
sql = <<-SQL
SELECT
*
FROM
#{self.table_name}
SQL
results = DBConnection.execute(sql)
self.parse_all(results)
end
|
.columns ⇒ Object
22
23
24
25
|
# File 'lib/easy_save/sql_object.rb', line 22
def self.columns
self.first_row
@results.first.map(&:to_sym)
end
|
.finalize! ⇒ Object
27
28
29
30
31
32
|
# File 'lib/easy_save/sql_object.rb', line 27
def self.finalize!
self.columns.each do |col|
define_method(col) { attributes[col] }
define_method("#{col}=") { |val| attributes[col] = val }
end
end
|
.find(id) ⇒ Object
58
59
60
61
62
63
64
65
66
67
68
69
70
|
# File 'lib/easy_save/sql_object.rb', line 58
def self.find(id)
sql = <<-SQL
SELECT
*
FROM
#{self.table_name}
WHERE
id = ?
SQL
result = DBConnection.execute(sql, id).first
result ? new(result) : nil
end
|
.first ⇒ Object
72
73
74
75
76
77
78
79
80
81
|
# File 'lib/easy_save/sql_object.rb', line 72
def self.first
sql = <<-SQL
SELECT
*
FROM
#{self.table_name}
SQL
result = DBConnection.execute(sql).first
result ? new(result) : nil
end
|
.first_row ⇒ Object
11
12
13
14
15
16
17
18
19
20
|
# File 'lib/easy_save/sql_object.rb', line 11
def self.first_row
sql = <<-SQL
SELECT
*
FROM
#{table_name}
SQL
@results ||= DBConnection.execute2(sql)
end
|
.parse_all(results) ⇒ Object
54
55
56
|
# File 'lib/easy_save/sql_object.rb', line 54
def self.parse_all(results)
results.inject([]) { |final, res| final.push(new(res)) }
end
|
.table_name ⇒ Object
38
39
40
|
# File 'lib/easy_save/sql_object.rb', line 38
def self.table_name
@table_name ||= self.to_s.tableize
end
|
.table_name=(table_name) ⇒ Object
34
35
36
|
# File 'lib/easy_save/sql_object.rb', line 34
def self.table_name=(table_name)
@table_name = table_name
end
|
Instance Method Details
#attribute_values ⇒ Object
98
99
100
|
# File 'lib/easy_save/sql_object.rb', line 98
def attribute_values
@attributes.values
end
|
#attributes ⇒ Object
94
95
96
|
# File 'lib/easy_save/sql_object.rb', line 94
def attributes
@attributes ||= {}
end
|
#insert ⇒ Object
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
# File 'lib/easy_save/sql_object.rb', line 102
def insert
col_names = self.class.columns.drop(1).join(", ")
question_marks = (["?"] * (self.class.columns.length - 1)).join(", ")
col_names = "(#{col_names})"
question_marks = "(#{question_marks})"
sql = <<-SQL
INSERT INTO
#{self.class.table_name} #{col_names}
VALUES
#{question_marks}
SQL
DBConnection.execute(sql, attribute_values)
self.id = DBConnection.last_insert_row_id
end
|
#save ⇒ Object
137
138
139
|
# File 'lib/easy_save/sql_object.rb', line 137
def save
id.nil? ? insert : update
end
|
#update ⇒ Object
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
# File 'lib/easy_save/sql_object.rb', line 120
def update
set_values = self.class.columns.map do |el|
"#{el} = ?"
end.join(', ')
sql = <<-SQL
UPDATE
#{self.class.table_name}
SET
#{set_values}
WHERE
id = #{id}
SQL
DBConnection.execute(sql, *attribute_values)
end
|