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
# File lib/orm/active_record.rb, line 39
def self.primary_key_query(value = false)
  "PRIMARY KEY AUTOINCREMENT" if value
end
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