Class: Backframe::Query

Inherits:
Object
  • Object
show all
Defined in:
lib/backframe/query.rb,
lib/backframe/query/sort.rb

Defined Under Namespace

Classes: Sort

Constant Summary collapse

EXCLUDE_IDS_REGEX =
/^[\d,]*$/
SORT_REGEX =
/^[\w\_\-,]*$/

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.perform(*args) ⇒ Object



12
13
14
# File 'lib/backframe/query.rb', line 12

def perform(*args)
  new.perform(*args)
end

Instance Method Details

#filter(records, _filters) ⇒ Object



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

def filter(records, _filters)
  records
end

#perform(records, params = {}) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/backframe/query.rb', line 18

def perform(records, params = {})
  filters = params.except([:exclude_ids,:fields,:page,:per_page,:sort])
  if filters.any?
    records = filter(records, filters)
  end
  if params.key?(:exclude_ids) && params[:exclude_ids] =~ EXCLUDE_IDS_REGEX
    table = records.arel_table.name
    records = records.where('"'+table+'"."id" NOT IN (?)', params[:exclude_ids].split(","))
  end
  if params.key?(:sort) && params[:sort] =~ SORT_REGEX
    sorts = Backframe::Query::Sort.parse(params[:sort])
    records = sort(records, sorts)
  end
  records
end

#sort(records, sorts) ⇒ Object



38
39
40
41
42
43
44
# File 'lib/backframe/query.rb', line 38

def sort(records, sorts)
  order = []
  sorts.each do |sort|
    order << sort[:key] + " " + sort[:order]
  end
  records.order(order.join(", "))
end