Class: EasyMapper::DbRepository

Inherits:
Object
  • Object
show all
Defined in:
lib/easy_mapper/db_repository.rb

Instance Method Summary collapse

Constructor Details

#initialize(model, db_adapter) ⇒ DbRepository

Returns a new instance of DbRepository.



7
8
9
10
11
12
13
# 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

Instance Method Details

#aggregate(aggregation, field, where_clause) ⇒ Object



65
66
67
68
69
70
71
72
73
74
# 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) ⇒ Object



15
16
17
18
19
20
21
22
# 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) ⇒ Object



24
25
26
27
28
29
30
31
# 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) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# 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_idObject



61
62
63
# File 'lib/easy_mapper/db_repository.rb', line 61

def next_id
  @db_adapter.next_id(@model.table_name)
end

#update(id, record) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
# 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