Class: DocumentMapper::Query

Inherits:
Object
  • Object
show all
Defined in:
lib/document_mapper/query.rb

Instance Method Summary collapse

Constructor Details

#initialize(model) ⇒ Query

Returns a new instance of Query.



5
6
7
8
9
10
11
# File 'lib/document_mapper/query.rb', line 5

def initialize(model)
  @model = model
  @where = {}
  @limit = nil
  @offset = nil
  @order_by = nil
end

Instance Method Details

#allObject



47
48
49
50
51
52
# File 'lib/document_mapper/query.rb', line 47

def all
  result = @model.select(where: @where, order_by: @order_by)
  result = result.last([result.size - @offset, 0].max) if @offset.present?
  result = result.first(@limit) if @limit.present?
  result
end

#firstObject



39
40
41
# File 'lib/document_mapper/query.rb', line 39

def first
  all.first
end

#lastObject



43
44
45
# File 'lib/document_mapper/query.rb', line 43

def last
  all.last
end

#limit(number) ⇒ Object



34
35
36
37
# File 'lib/document_mapper/query.rb', line 34

def limit(number)
  @limit = number
  self
end

#offset(number) ⇒ Object



29
30
31
32
# File 'lib/document_mapper/query.rb', line 29

def offset(number)
  @offset = number
  self
end

#order_by(field) ⇒ Object



24
25
26
27
# File 'lib/document_mapper/query.rb', line 24

def order_by(field)
  @order_by = field.is_a?(Symbol) ? { field => :asc } : field
  self
end

#where(constraints_hash) ⇒ Object



13
14
15
16
17
18
19
20
21
22
# File 'lib/document_mapper/query.rb', line 13

def where(constraints_hash)
  selector_hash = constraints_hash.select { |key, _value| key.is_a? Selector }
  symbol_hash = constraints_hash.reject { |key, _value| key.is_a? Selector }
  symbol_hash.each do |attribute, value|
    selector = Selector.new(attribute: attribute, operator: 'equal')
    selector_hash.update({ selector => value })
  end
  @where.merge! selector_hash
  self
end