Class: Quiver::Mapper::SimpleQueryBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/quiver/mapper/simple_query_builder.rb

Instance Method Summary collapse

Constructor Details

#initialize(mapper) ⇒ SimpleQueryBuilder

Returns a new instance of SimpleQueryBuilder.



4
5
6
7
8
9
10
# File 'lib/quiver/mapper/simple_query_builder.rb', line 4

def initialize(mapper)
  self.mapper = mapper

  self._filter = {}
  self._sort = {}
  self._paginate = {}
end

Instance Method Details

#filter(params) ⇒ Object



34
35
36
37
# File 'lib/quiver/mapper/simple_query_builder.rb', line 34

def filter(params)
  self._filter = params.to_h
  self
end

#paginate(params) ⇒ Object



52
53
54
55
# File 'lib/quiver/mapper/simple_query_builder.rb', line 52

def paginate(params)
  self._paginate = params.to_h.slice('limit', 'offset')
  self
end

#sort(params) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/quiver/mapper/simple_query_builder.rb', line 39

def sort(params)
  params ||= ''
  self._sort = params.split(',').map do |k|
    asc = k[0] != '-'
    k = k[1..-1] if !asc

    [k, asc]
  end.reject do |(k, _)|
    !allowed_sorts.include?(k.to_sym)
  end
  self
end

#to_resultObject



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/quiver/mapper/simple_query_builder.rb', line 12

def to_result
  filter_errors = _filter.reduce(Quiver::ErrorCollection.new) do |errors, (k, v)|
    if v
      errors + v.errors.each_with_object(Quiver::ErrorCollection.new) do |error, collection|
        collection << Quiver::Action::FilterError.new("#{k}: #{error.detail}")
      end
    else
      errors
    end
  end

  if filter_errors.any?
    return Quiver::Mapper::MapperResult.new([], filter_errors)
  end

  mapper.send(:query,
    filter: mapper.class.send(:default_filter).merge(_filter),
    sort: _sort,
    page: _paginate
  )
end