# File lib/orm/active_record.rb, line 39 def self.primary_key_query(value = false) "PRIMARY KEY AUTOINCREMENT" if value end
class Mgt::ActiveRecord
Public Class Methods
all()
click to toggle source
# File lib/orm/query_generator.rb, line 11 def self.all data = Database.execute "SELECT #{attributes_keys.join(',')} FROM #{@table} ORDER BY id DESC" data.map do |row| map_object(row) end end
attribute(column_name, args)
click to toggle source
# File lib/orm/active_record.rb, line 13 def self.attribute(column_name, args) @attributes ||= {} @attributes[column_name] = args end
attributes_keys()
click to toggle source
# File lib/orm/active_record.rb, line 51 def self.attributes_keys @attributes.keys end
create_table()
click to toggle source
# File lib/orm/active_record.rb, line 18 def self.create_table all_attributes = [] @attributes.each do |key, value| attributes ||= [] attributes << key.to_s value.each do |name, type| attributes << send("#{name.downcase}_query", type) end all_attributes << attributes.join(" ") end query = "CREATE TABLE IF NOT EXISTS #{@table} (#{all_attributes.join(', ')})" Database.execute(query) make_methods end
destroy(id)
click to toggle source
# File lib/orm/query_generator.rb, line 45 def self.destroy(id) Database.execute "DELETE FROM #{table_name} WHERE id = ?", id end
destroy_all()
click to toggle source
# File lib/orm/query_generator.rb, line 71 def self.destroy_all Database.execute "DELETE FROM #{@table}" end
find(id)
click to toggle source
# File lib/orm/query_generator.rb, line 39 def self.find(id) row = Database.execute("SELECT #{attributes_keys.join(',')} FROM #{@table} WHERE id = ?", id).first map_object(row) end
find_by(finder)
click to toggle source
# File lib/orm/query_generator.rb, line 3 def self.find_by(finder) key = finder.keys[0].to_s value = finder.values[0].to_s row = Database.execute("SELECT #{attributes_keys.join(',')} FROM #{@table} WHERE #{key} = ?", value).first map_object(row) end
first()
click to toggle source
# File lib/orm/query_generator.rb, line 33 def self.first query = "SELECT * FROM #{@table} ORDER BY id LIMIT 1" row = (Database.execute query).first map_object(row) end
last()
click to toggle source
# File lib/orm/query_generator.rb, line 27 def self.last query = "SELECT * FROM #{@table} ORDER BY id DESC LIMIT 1" row = (Database.execute query).first map_object(row) end
make_methods()
click to toggle source
# File lib/orm/active_record.rb, line 34 def self.make_methods mtds = @attributes.keys.map(&:to_sym) mtds.each { |mtd| attr_accessor mtd } end
map_object(row)
click to toggle source
# File lib/orm/active_record.rb, line 55 def self.map_object(row) model_name = new @attributes.each_key.with_index do |value, index| model_name.send("#{value}=", row[index]) end model_name end
nullable_query(value = true)
click to toggle source
# File lib/orm/active_record.rb, line 43 def self.nullable_query(value = true) "NOT NULL" unless value end
primary_key_query(value = false)
click to toggle source
table(table_name)
click to toggle source
# File lib/orm/active_record.rb, line 5 def self.table(table_name) @table = table_name end
table_name()
click to toggle source
# File lib/orm/active_record.rb, line 9 def self.table_name @table end
type_query(value)
click to toggle source
# File lib/orm/active_record.rb, line 47 def self.type_query(value) value.to_s end
where(query_pattern, value)
click to toggle source
# File lib/orm/query_generator.rb, line 19 def self.where(query_pattern, value) data = Database.execute "SELECT #{attributes_keys.join(',')} FROM #{@table} WHERE #{query_pattern}", value data.map do |row| map_object(row) end end
Public Instance Methods
destroy()
click to toggle source
# File lib/orm/query_generator.rb, line 66 def destroy table_name = self.class.table_name Database.execute "DELETE FROM #{table_name} WHERE id = ?", id end
get_columns()
click to toggle source
# File lib/orm/active_record.rb, line 63 def get_columns columns = self.class.attributes_keys columns.delete(:id) columns.join(",") end
get_values()
click to toggle source
# File lib/orm/active_record.rb, line 69 def get_values attributes = self.class.attributes_keys attributes.delete(:id) attributes.map { |method| send(method) } end
new_record_placeholders()
click to toggle source
# File lib/orm/active_record.rb, line 87 def new_record_placeholders attributes = self.class.attributes_keys (["?"] * (attributes.size - 1)).join(",") end
new_record_value()
click to toggle source
# File lib/orm/active_record.rb, line 75 def new_record_value get_values end
save()
click to toggle source
# File lib/orm/query_generator.rb, line 49 def save table_name = self.class.table_name if id Database.execute "UPDATE #{table_name} SET #{update_records_placeholders} WHERE id = ?", update_records else Database.execute "INSERT INTO #{table_name} (#{get_columns}) VALUES (#{new_record_placeholders})", new_record_value end end
update(params)
click to toggle source
# File lib/orm/query_generator.rb, line 60 def update(params) table_name = self.class.table_name Database.execute "UPDATE #{table_name} SET #{update_values_placeholders(params)} WHERE id=?", update_values(params) end
update_records()
click to toggle source
# File lib/orm/active_record.rb, line 79 def update_records get_values << send(:id) end
update_records_placeholders()
click to toggle source
# File lib/orm/active_record.rb, line 98 def update_records_placeholders columns = self.class.attributes_keys columns.delete(:id) columns.map { |col| "#{col}=?" }.join(",") end
update_values(params)
click to toggle source
# File lib/orm/active_record.rb, line 83 def update_values(params) params.values << id end
update_values_placeholders(params)
click to toggle source
# File lib/orm/active_record.rb, line 92 def update_values_placeholders(params) columns = params.keys columns.delete(:id) columns.map { |col| "#{col}=?" }.join(",") end