class Tablets::Data::Query

Incapsulates database query

Attributes

columns[R]
params[R]
relation[R]

Public Class Methods

new(relation, params, columns) click to toggle source

Initializes query with relation, params and columns

# File lib/tablets/data/query.rb, line 12
def initialize(relation, params, columns)
  @relation = relation
  @params = params
  @columns = columns
end

Public Instance Methods

fetch() click to toggle source

Applies all processings on relation and returns it

# File lib/tablets/data/query.rb, line 19
def fetch
  paginate filter order relation
end
filtered() click to toggle source

Returns records count after filter is applied but before pagination

# File lib/tablets/data/query.rb, line 29
def filtered
  filter(relation).count(:all)
end
total() click to toggle source

Returns total records count before filter and pagination is applied

# File lib/tablets/data/query.rb, line 24
def total
  relation.count(:all)
end

Private Instance Methods

filter(records) click to toggle source

Applies filter processing

# File lib/tablets/data/query.rb, line 45
def filter(records)
  return records unless params[:search].present?

  Tablets::Data::Processing::Filter.apply(params, columns, records)
end
order(records) click to toggle source

Applies order processing

# File lib/tablets/data/query.rb, line 38
def order(records)
  return records unless params[:order].present?

  Tablets::Data::Processing::Order.apply(params, columns, records)
end
paginate(records) click to toggle source

Applies paginate processing

# File lib/tablets/data/query.rb, line 52
def paginate(records)
  return records if params[:length] == '-1'

  Tablets::Data::Processing::Paginate.apply(params, columns, records)
end