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