Class: Workarea::AdminSearchQueryWrapper

Inherits:
Object
  • Object
show all
Includes:
GlobalID::Identification, Search::Pagination
Defined in:
app/queries/workarea/admin_search_query_wrapper.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Search::Pagination

#each_by, #from, #page, #per_page, #size

Constructor Details

#initialize(params = {}) ⇒ AdminSearchQueryWrapper

Returns a new instance of AdminSearchQueryWrapper.



15
16
17
18
# File 'app/queries/workarea/admin_search_query_wrapper.rb', line 15

def initialize(params = {})
  @params = params.with_indifferent_access
  @params[:model_type] = @params[:model_type].to_s # ensures ID serialization works for it
end

Instance Attribute Details

#paramsObject (readonly)

Returns the value of attribute params.



9
10
11
# File 'app/queries/workarea/admin_search_query_wrapper.rb', line 9

def params
  @params
end

Class Method Details

.find(id) ⇒ Object



11
12
13
# File 'app/queries/workarea/admin_search_query_wrapper.rb', line 11

def self.find(id)
  new(JSON.parse(id))
end

Instance Method Details

#filtersObject



46
47
48
# File 'app/queries/workarea/admin_search_query_wrapper.rb', line 46

def filters
  params[:query_params]
end

#idObject



20
21
22
# File 'app/queries/workarea/admin_search_query_wrapper.rb', line 20

def id
  params.to_json
end

#klassObject



24
25
26
# File 'app/queries/workarea/admin_search_query_wrapper.rb', line 24

def klass
  params[:model_type].constantize
end

#klass_criteriaObject



41
42
43
44
# File 'app/queries/workarea/admin_search_query_wrapper.rb', line 41

def klass_criteria
  return klass.all unless params[:q].present? && klass.respond_to?(:search)
  klass.search(params[:q])
end

#resultsObject



28
29
30
31
32
# File 'app/queries/workarea/admin_search_query_wrapper.rb', line 28

def results
  criteria = klass_criteria
  criteria = criteria.where(filters) if filters.present?
  criteria.order_by(sort).page(page).per(per_page)
end

#scroll(options = {}, &block) ⇒ Object

to match Search::Query method arguments



34
35
36
37
38
39
# File 'app/queries/workarea/admin_search_query_wrapper.rb', line 34

def scroll(options = {}, &block) # to match Search::Query method arguments
  criteria = results
  criteria.total_pages.times do |page|
    yield criteria.page(page + 1).per(per_page).to_a
  end
end

#sortObject



54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'app/queries/workarea/admin_search_query_wrapper.rb', line 54

def sort
  if klass.respond_to?(:sorts)
    result = params[:sort].presence || klass.sorts.first.to_s

    klass.sorts.map do |sortable|
      if sortable.to_s == result.to_s
        return [sortable.field, sortable.direction]
      end
    end
  end

  [:created_at, :desc]
end

#totalObject



50
51
52
# File 'app/queries/workarea/admin_search_query_wrapper.rb', line 50

def total
  results.count
end