Sha256: e8a95f655b3cb3968790b6fd4ad774618da0997569aa4e1687a014d2700ddcc1

Contents?: true

Size: 1.96 KB

Versions: 3

Compression:

Stored size: 1.96 KB

Contents

require 'spotlight_search/engine'
require 'spotlight_search/version'
require 'spotlight_search/railtie' if defined?(Rails)

module SpotlightSearch
  extend ActiveSupport::Concern
  module ClassMethods
    def filter_by(page, filter_params = {}, sort_params = {})
      filtered_result = OpenStruct.new
      sort_column = self.column_names.include?(sort_params[:sort_column]) ? sort_params[:sort_column] : "created_at"
      sort_direction = %w[asc desc].include?(sort_params[:sort_direction]) ? sort_params[:sort_direction] : "asc"
      sort_params = {sort_column: sort_column, sort_direction: sort_direction}
      raw_data = self.filter(filter_params).sort_list(sort_column, sort_direction)
      filtered_result.data = raw_data.page(page).per(30)
      filtered_result.facets = self.paginate(page, raw_data.size)
      filtered_result.sort = sort_params
      return filtered_result
    end

    def filter(filter_params)
      data = self
      if filter_params.present? && filter_params.class == ActiveSupport::HashWithIndifferentAccess
        filter_params.each do |key, value|
          data = data.send(key, value)
        end
      else
        data = self.all
      end
      return data
    end

    def sort_list(sort_column, sort_direction)
      return self.order(sort_column + " " + sort_direction)
    end

    def paginate(page, total_count)
      page = page.presence || 1
      per_page = 30
      facets = OpenStruct.new # initializing OpenStruct instance
      facets.total_count = total_count
      facets.filtered_count = total_count
      facets.total_pages = (total_count/per_page.to_f).ceil
      facets.current_page = page.to_i
      # Previous Page
      if facets.current_page - 1 == 0
        facets.previous_page = false
      else
        facets.previous_page = true
      end
      # Next Page
      if facets.current_page + 1 > facets.total_pages
        facets.next_page = false
      else
        facets.next_page = true
      end
      return facets
    end
  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
spotlight_search-0.1.2 lib/spotlight_search.rb
spotlight_search-0.1.1 lib/spotlight_search.rb
spotlight_search-0.1.0 lib/spotlight_search.rb