Class: Grimm::GrimmRecord
- Defined in:
- lib/grimm/orm/queries.rb,
lib/grimm/orm/grimm_record.rb
Class Method Summary collapse
- .all ⇒ Object
- .autoincrement_query(value = false) ⇒ Object
- .create_table ⇒ Object
- .delete(id) ⇒ Object
- .delete_all ⇒ Object
- .find(id) ⇒ Object
- .first ⇒ Object
- .last ⇒ Object
- .latest ⇒ Object
- .make_methods ⇒ Object
- .map_object(row) ⇒ Object
- .nullable_query(value = true) ⇒ Object
- .primary_key_query(value = false) ⇒ Object
- .properties_keys ⇒ Object
- .property(column_name, args) ⇒ Object
- .table_name ⇒ Object
- .to_table(table_name) ⇒ Object
- .type_query(value) ⇒ Object
Instance Method Summary collapse
- #get_columns ⇒ Object
- #get_values ⇒ Object
- #new_record_placeholders ⇒ Object
- #new_record_value ⇒ Object
- #save ⇒ Object
- #update_records ⇒ Object
- #update_records_placeholders ⇒ Object
Class Method Details
.all ⇒ Object
10 11 12 13 14 15 16 |
# File 'lib/grimm/orm/queries.rb', line 10 def self.all data = DatabaseConnector.execute "SELECT #{properties_keys.join(',')} FROM #{@table}" data.map do |row| map_object(row) end end |
.autoincrement_query(value = false) ⇒ Object
41 42 43 |
# File 'lib/grimm/orm/grimm_record.rb', line 41 def self.autoincrement_query(value = false) "AUTOINCREMENT" if value end |
.create_table ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/grimm/orm/grimm_record.rb', line 17 def self.create_table prop_array = [] @properties.each do |key, value| properties ||= [] properties << key.to_s value.each do |name, type| properties << send("#{name.downcase}_query", type) end prop_array << properties.join(" ") end query = "CREATE TABLE IF NOT EXISTS #{@table} (#{prop_array.join(', ')})" DatabaseConnector.execute(query) make_methods end |
.delete(id) ⇒ Object
26 27 28 |
# File 'lib/grimm/orm/queries.rb', line 26 def self.delete(id) DatabaseConnector.execute "DELETE FROM #{@table} WHERE id = ?", id end |
.delete_all ⇒ Object
30 31 32 |
# File 'lib/grimm/orm/queries.rb', line 30 def self.delete_all DatabaseConnector.execute "DELETE FROM #{@table}" end |
.find(id) ⇒ Object
4 5 6 7 8 |
# File 'lib/grimm/orm/queries.rb', line 4 def self.find(id) row = DatabaseConnector.execute("SELECT #{properties_keys.join(',')} FROM #{@table} WHERE id = ?", id).first map_object(row) end |
.first ⇒ Object
39 40 41 42 |
# File 'lib/grimm/orm/queries.rb', line 39 def self.first query = "SELECT * FROM #{@table} ORDER BY id LIMIT 1" (DatabaseConnector.execute query).first end |
.last ⇒ Object
34 35 36 37 |
# File 'lib/grimm/orm/queries.rb', line 34 def self.last query = "SELECT * FROM #{@table} ORDER BY id DESC LIMIT 1" (DatabaseConnector.execute query).first end |
.latest ⇒ Object
18 19 20 21 22 23 24 |
# File 'lib/grimm/orm/queries.rb', line 18 def self.latest data = DatabaseConnector.execute "SELECT #{properties_keys.join(',')} FROM #{@table} ORDER BY created_at DESC" data.map do |row| map_object(row) end end |
.make_methods ⇒ Object
32 33 34 35 |
# File 'lib/grimm/orm/grimm_record.rb', line 32 def self.make_methods mtds = @properties.keys.map(&:to_sym) mtds.each { |mtd| attr_accessor mtd } end |
.map_object(row) ⇒ Object
88 89 90 91 92 93 94 |
# File 'lib/grimm/orm/grimm_record.rb', line 88 def self.map_object(row) model_name = new @properties.each_key.with_index do |value, index| model_name.send("#{value}=", row[index]) end model_name end |
.nullable_query(value = true) ⇒ Object
45 46 47 |
# File 'lib/grimm/orm/grimm_record.rb', line 45 def self.nullable_query(value = true) "NOT NULL" unless value end |
.primary_key_query(value = false) ⇒ Object
37 38 39 |
# File 'lib/grimm/orm/grimm_record.rb', line 37 def self.primary_key_query(value = false) "PRIMARY KEY AUTOINCREMENT" if value end |
.properties_keys ⇒ Object
53 54 55 |
# File 'lib/grimm/orm/grimm_record.rb', line 53 def self.properties_keys @properties.keys end |
.property(column_name, args) ⇒ Object
12 13 14 15 |
# File 'lib/grimm/orm/grimm_record.rb', line 12 def self.property(column_name, args) @properties ||= {} @properties[column_name] = args end |
.table_name ⇒ Object
44 45 46 |
# File 'lib/grimm/orm/queries.rb', line 44 def self.table_name @table end |
.to_table(table_name) ⇒ Object
8 9 10 |
# File 'lib/grimm/orm/grimm_record.rb', line 8 def self.to_table(table_name) @table = table_name end |
.type_query(value) ⇒ Object
49 50 51 |
# File 'lib/grimm/orm/grimm_record.rb', line 49 def self.type_query(value) value.to_s end |
Instance Method Details
#get_columns ⇒ Object
69 70 71 72 73 |
# File 'lib/grimm/orm/grimm_record.rb', line 69 def get_columns columns = self.class.properties_keys columns.delete(:id) columns.join(",") end |
#get_values ⇒ Object
57 58 59 60 61 |
# File 'lib/grimm/orm/grimm_record.rb', line 57 def get_values attributes = self.class.properties_keys attributes.delete(:id) attributes.map { |method| send(method) } end |
#new_record_placeholders ⇒ Object
83 84 85 86 |
# File 'lib/grimm/orm/grimm_record.rb', line 83 def new_record_placeholders properties = self.class.properties_keys (["?"] * (properties.size - 1)).join(",") end |
#new_record_value ⇒ Object
79 80 81 |
# File 'lib/grimm/orm/grimm_record.rb', line 79 def new_record_value get_values end |
#save ⇒ Object
48 49 50 51 52 53 54 55 56 57 |
# File 'lib/grimm/orm/queries.rb', line 48 def save table_name = self.class.table_name if id DatabaseConnector.execute "UPDATE #{table_name} SET #{update_records_placeholders} WHERE id = ?", update_records else DatabaseConnector.execute "INSERT INTO #{table_name} (#{get_columns}) VALUES (#{new_record_placeholders})", new_record_value end end |
#update_records ⇒ Object
75 76 77 |
# File 'lib/grimm/orm/grimm_record.rb', line 75 def update_records get_values << send(:id) end |
#update_records_placeholders ⇒ Object
63 64 65 66 67 |
# File 'lib/grimm/orm/grimm_record.rb', line 63 def update_records_placeholders columns = self.class.properties_keys columns.delete(:id) columns.map { |col| "#{col}=?" }.join(",") end |