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