Class: Twimock::Database::Table
- Inherits:
-
Object
- Object
- Twimock::Database::Table
show all
- Defined in:
- lib/twimock/database/table.rb
Constant Summary
collapse
- TABLE_NAME =
以下は継承先でオーバーライド必須
* TABLE_NAME, COLUMN_NAMES
* initialize()
:tables
- COLUMN_NAMES =
[:id, :text, :active, :number, :created_at]
- CHILDREN =
[]
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(options = {}) ⇒ Table
Returns a new instance of Table.
15
16
17
18
19
20
21
22
|
# File 'lib/twimock/database/table.rb', line 15
def initialize(options={})
opts = Hashie::Mash.new(options)
self.id = opts.id
self.text = opts.text
self.active = opts.active || false
self.number = opts.number
self.created_at = opts.created_at
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args) ⇒ Object
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
# File 'lib/twimock/database/table.rb', line 57
def method_missing(name, *args)
method_name = name.to_s.include?("=") ? name.to_s[0...-1].to_sym : name
case name
when :identifier then return send(:id)
when :identifier= then return send(:id=, *args)
else
if column_names.include?(method_name) && args.size <= 1
if !name.to_s.include?("=") && args.empty?
define_column_getter(name)
return send(name)
else
define_column_setter(name)
return send(name, args.first)
end
else
super
end
end
end
|
Class Method Details
.all ⇒ Object
83
84
85
86
|
# File 'lib/twimock/database/table.rb', line 83
def self.all
records = execute "SELECT * FROM #{table_name};"
records_to_objects(records)
end
|
.children ⇒ Object
137
138
139
|
# File 'lib/twimock/database/table.rb', line 137
def self.children
self::CHILDREN
end
|
.column_names ⇒ Object
133
134
135
|
# File 'lib/twimock/database/table.rb', line 133
def self.column_names
self::COLUMN_NAMES
end
|
.column_type(column_name) ⇒ Object
141
142
143
144
|
# File 'lib/twimock/database/table.rb', line 141
def self.column_type(column_name)
return nil unless column_names.include?(column_name.to_s.to_sym)
table_info.send(column_name).type
end
|
.create!(options = {}) ⇒ Object
77
78
79
80
81
|
# File 'lib/twimock/database/table.rb', line 77
def self.create!(options={})
instance = self.new(options)
instance.save!
instance
end
|
.first ⇒ Object
88
89
90
91
|
# File 'lib/twimock/database/table.rb', line 88
def self.first
records = execute "SELECT * FROM #{table_name} LIMIT 1;"
record_to_object(records.first)
end
|
.last ⇒ Object
93
94
95
96
|
# File 'lib/twimock/database/table.rb', line 93
def self.last
records = execute "SELECT * FROM #{table_name} ORDER BY ID DESC LIMIT 1 ;"
record_to_object(records.first)
end
|
.method_missing(name, *args) ⇒ Object
107
108
109
110
111
112
113
114
115
|
# File 'lib/twimock/database/table.rb', line 107
def self.method_missing(name, *args)
if ((name =~ /^find_by_(.+)/ || name =~ /^find_all_by_(.+)/) &&
(column_name = $1) && column_names.include?(column_name.to_sym))
raise ArgumentError, "wrong number of arguments (#{args.size} for 1)" unless args.size == 1
define_find_method(name, column_name) ? send(name, args.first) : super
else
super
end
end
|
.table_info ⇒ Object
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
|
# File 'lib/twimock/database/table.rb', line 146
def self.table_info
sql = "PRAGMA TABLE_INFO(#{table_name});"
records = execute sql
info = Hashie::Mash.new
records.each do |record|
column_info = Hashie::Mash.new(
{ cid: record[0],
name: record[1].to_sym,
type: record[2],
notnull: (record[3] == 1),
dflt_value: record[4],
pk: (record[5] == 1) }
)
info.send(record[1] + "=", column_info)
end
info
end
|
.table_name ⇒ Object
129
130
131
|
# File 'lib/twimock/database/table.rb', line 129
def self.table_name
self::TABLE_NAME
end
|
.where(column) ⇒ Object
98
99
100
101
102
103
104
105
|
# File 'lib/twimock/database/table.rb', line 98
def self.where(column)
column_name = column.keys.first
value = column.values.first
column_value = (value.kind_of?(String)) ? "'" + value + "'" : value.to_s
records = execute "SELECT * FROM #{table_name} WHERE #{column_name} = #{column_value};"
records_to_objects(records)
end
|
Instance Method Details
#column_names ⇒ Object
121
122
123
|
# File 'lib/twimock/database/table.rb', line 121
def column_names
self.class.column_names
end
|
#destroy ⇒ Object
34
35
36
37
38
39
40
41
42
43
44
45
|
# File 'lib/twimock/database/table.rb', line 34
def destroy
raise unless persisted?
self.class.children.each do |klass|
klass_last_name = self.class.name.split("::").last.downcase
find_method_name = "find_all_by_#{klass_last_name}_id"
objects = klass.send(find_method_name, self.id)
objects.each{|object| object.destroy }
end
execute "DELETE FROM #{table_name} WHERE ID = #{self.id};"
self
end
|
#fetch ⇒ Object
47
48
49
50
51
52
53
54
55
|
# File 'lib/twimock/database/table.rb', line 47
def fetch
if persisted?
sql = "SELECT * FROM #{table_name} WHERE ID = #{self.id} LIMIT 1;"
records = execute sql
return nil unless record = records.first
set_attributes_from_record(record)
self
end
end
|
#persisted? ⇒ Boolean
125
126
127
|
# File 'lib/twimock/database/table.rb', line 125
def persisted?
!!(self.id && !(self.class.find_by_id(self.id).nil?))
end
|
#save!(options = {}) ⇒ Object
24
25
26
|
# File 'lib/twimock/database/table.rb', line 24
def save!(options={})
persisted? ? update!(options) : insert!(options)
end
|
#table_name ⇒ Object
117
118
119
|
# File 'lib/twimock/database/table.rb', line 117
def table_name
self.class.table_name
end
|
#update_attributes!(options) ⇒ Object
28
29
30
31
32
|
# File 'lib/twimock/database/table.rb', line 28
def update_attributes!(options)
options.each_key {|key| self.send(key) }
persisted? ? update!(options) : insert!(options)
end
|