class Quiver::Mapper::SimpleQueryBuilder

Attributes

_filter[RW]
_paginate[RW]
_sort[RW]
adapter[RW]
mapper[RW]

Public Class Methods

new(mapper) click to toggle source
# File lib/quiver/mapper/simple_query_builder.rb, line 4
def initialize(mapper)
  self.mapper = mapper

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

Public Instance Methods

filter(params) click to toggle source
# File lib/quiver/mapper/simple_query_builder.rb, line 34
def filter(params)
  self._filter = params.to_h
  self
end
paginate(params) click to toggle source
# 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) click to toggle source
# 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_result() click to toggle source
# 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

Private Instance Methods

allowed_filters() click to toggle source
# File lib/quiver/mapper/simple_query_builder.rb, line 61
def allowed_filters
  mapper.class.send(:filters)
end
allowed_sorts() click to toggle source
# File lib/quiver/mapper/simple_query_builder.rb, line 65
def allowed_sorts
  mapper.class.send(:sorts)
end