class Peictt::DatabaseMapper

Attributes

table[RW]

Public Class Methods

new(model, action = :create) click to toggle source
# File lib/peictt/orm/database_mapper.rb, line 9
def initialize(model, action = :create)
  self.class.table = model.class.to_s.downcase.pluralize
  @model = model
  @action = action
  @variables = model.instance_variables
  set_columns_and_values
  add_timestamps if create?
  self
end

Public Instance Methods

save() click to toggle source
# File lib/peictt/orm/database_mapper.rb, line 19
def save
  Database.execute_query query, @values
  true
end

Private Instance Methods

add_timestamps() click to toggle source
# File lib/peictt/orm/database_mapper.rb, line 50
def add_timestamps
  @placeholders << "?"
  @placeholders << "?"
  @columns << "created_at"
  @columns << "updated_at"
  @values << Time.now.to_s
  @values << Time.now.to_s
end
build_create_query() click to toggle source
# File lib/peictt/orm/database_mapper.rb, line 59
def build_create_query
  "INSERT INTO #{self.class.table} (#{@columns.join(', ')})"\
  "VALUES (#{@placeholders.join(', ')})"
end
build_update_query() click to toggle source
# File lib/peictt/orm/database_mapper.rb, line 64
def build_update_query
  prepare_columns_and_values_for_update
  columns_and_placeholders = @columns.zip(@placeholders[1..-1]).
                             map { |pair| pair.join " = " }
  "UPDATE #{self.class.table} SET #{columns_and_placeholders.join(', ')} "\
  "WHERE id = ?"
end
create?() click to toggle source
# File lib/peictt/orm/database_mapper.rb, line 34
def create?
  @action == :create
end
prepare_columns_and_values_for_update() click to toggle source
# File lib/peictt/orm/database_mapper.rb, line 43
def prepare_columns_and_values_for_update
  id_index = @columns.index "id"
  @columns.delete_at(id_index)
  id_value = @values.delete_at id_index
  @values << id_value
end
query() click to toggle source
# File lib/peictt/orm/database_mapper.rb, line 26
def query
  if create?
    return build_create_query
  else
    return build_update_query
  end
end
set_columns_and_values() click to toggle source
# File lib/peictt/orm/database_mapper.rb, line 38
def set_columns_and_values
  @placeholders, @columns = self.class.set_columns_for_instance @variables
  @values = self.class.get_values_for_instance(@model, @variables)
end