class EasyMapper::DbRepository

Public Class Methods

new(model, db_adapter) click to toggle source
# File lib/easy_mapper/db_repository.rb, line 7
def initialize(model, db_adapter)
  @model = model
  @db_adapter = db_adapter
  @sql = db_adapter.sql_builder

  @db_adapter.connect
end

Public Instance Methods

aggregate(aggregation, field, where_clause) click to toggle source
# File lib/easy_mapper/db_repository.rb, line 65
def aggregate(aggregation, field, where_clause)
  sql_builder = @sql.select
                    .from(@model.table_name)
                    .aggregation(aggregation, field)

  sql_builder.where(where_clause) unless where_clause.empty?

  sql_query = sql_builder.build
  @db_adapter.execute(sql_query).single_value
end
create(record) click to toggle source
# File lib/easy_mapper/db_repository.rb, line 15
def create(record)
  query = @sql.insert
              .into(@model.table_name)
              .record(record)
              .build

  @db_adapter.execute(query)
end
delete(query_filters) click to toggle source
# File lib/easy_mapper/db_repository.rb, line 24
def delete(query_filters)
  query = @sql.delete
              .from(@model.table_name)
              .where(query_filters)
              .build

  @db_adapter.execute(query)
end
find(query) click to toggle source
# File lib/easy_mapper/db_repository.rb, line 45
def find(query)
  sql_builder = @sql.select
                    .column('*', from: 'model')
                    .from(@model.table_name, aliaz: 'model')

  build_join(sql_builder)

  sql_builder.where(query.where) unless query.where.empty?
  sql_builder.order(query.order) unless query.order.empty?
  sql_builder.limit(query.limit) if query.limit
  sql_builder.offset(query.offset) if query.offset

  sql_query = sql_builder.build
  @db_adapter.execute(sql_query).list
end
next_id() click to toggle source
# File lib/easy_mapper/db_repository.rb, line 61
def next_id
  @db_adapter.next_id(@model.table_name)
end
update(id, record) click to toggle source
# File lib/easy_mapper/db_repository.rb, line 33
def update(id, record)
  values_to_update = record.reject { |key, _value| key.eql? :id }.to_h

  query = @sql.update
              .table(@model.table_name)
              .where(id: id)
              .set(values_to_update)
              .build

  @db_adapter.execute(query)
end

Private Instance Methods

build_join(sql_builder) click to toggle source
# File lib/easy_mapper/db_repository.rb, line 78
def build_join(sql_builder)
  @model.associations_to_one.each do |assoc|
    column = assoc.id_column.to_sym

    assoc.cls.attributes.each do |attr|
      sql_builder.column(
        attr.to_s,
        from: assoc.name.to_s,
        as: "#{assoc.name}.#{attr}"
      )
    end

    sql_builder.join(assoc.cls.table_name, on: { column => :id })
  end
end