class PaginationSearch::BaseRelation

Public Class Methods

new(relation, params, attribute_set) click to toggle source
# File lib/pagination_search/base_relation.rb, line 3
def initialize(relation, params, attribute_set)
  @relation = relation
  @params = params
  @attribute_set = attribute_set
end

Public Instance Methods

process() click to toggle source
# File lib/pagination_search/base_relation.rb, line 9
def process
  searched
  sorted
  @relation
end

Private Instance Methods

join_all_tables() click to toggle source
# File lib/pagination_search/base_relation.rb, line 57
def join_all_tables
  @attribute_set.foreign_attributes.each do |attribute|
    left_outer_join(attribute.association_name)
  end
end
join_tables_for_traits(traits) click to toggle source
# File lib/pagination_search/base_relation.rb, line 63
def join_tables_for_traits(traits)
  attributes_to_join = @attribute_set.foreign_attributes.select { |attribute| traits.include?(attribute.name.to_s) }
  attributes_to_join.each do |attribute|
    left_outer_join(attribute.association_name)
  end
end
left_outer_join(association_name) click to toggle source
# File lib/pagination_search/base_relation.rb, line 70
def left_outer_join(association_name)
  @relation = @relation.includes(association_name).references(association_name)
end
searched() click to toggle source
# File lib/pagination_search/base_relation.rb, line 17
def searched
  return unless @params[:search].present?
  search_conditions = SearchConditions.process(@params[:search])
  search(search_conditions) unless search_conditions.nil?
end
sorted() click to toggle source
# File lib/pagination_search/base_relation.rb, line 23
def sorted
  order_type = @params[:sort_descending].to_bool ? :desc : :asc

  if @params[:sort_by].present? && sort_attr = @attribute_set[@params[:sort_by].to_sym]
    left_outer_join(sort_attr.association_name) if @attribute_set.foreign_attributes.include?(sort_attr)
    select(sort_attr.column)
    order(sort_attr.column.public_send(order_type))
  else
    select(:created_at)
    order(created_at: order_type)
  end
end