class Tire::Search::MultiSort
EXAMPLE of using:
multi_sort sort, order do
by_default :premium by :date by :rating, invert(order) by :name, :title by :rating, :licensee_rating by :relevance, :_score by :category, :category_name by :distance, :_geo_distance, location: "test", unit: 'mi' by :premium, :premium, :desc by_collection :category, [:category, :name] by_collection :premium, [:premium, :relevance, :name]
end
Public Class Methods
new(sort_param, order, &block)
click to toggle source
Calls superclass method
# File lib/tire-multisort/tire/search/multi_sort.rb, line 30 def initialize(sort_param, order, &block) @collections = {} @fields = {} super(&block) @sort = sort_by(sort_param) @order = order fields_with_order.each { |opts| origin_by *opts } end
Public Instance Methods
by(sort, *options)
click to toggle source
# File lib/tire-multisort/tire/search/multi_sort.rb, line 53 def by(sort, *options) if options.blank? || [:desc, :asc].include?(options.first) @fields[sort] = options.unshift(sort) else @fields[sort] = options end end
Also aliased as: origin_by
by_collection(sort, collection)
click to toggle source
# File lib/tire-multisort/tire/search/multi_sort.rb, line 45 def by_collection(sort, collection) if collection.is_a? Array @collections[sort] = collection else raise ArgumentError, "expect Array (got #{collection.class}) for collection param" end end
by_default(sort_param)
click to toggle source
# File lib/tire-multisort/tire/search/multi_sort.rb, line 41 def by_default(sort_param) @default = sort_by(sort_param) end
invert(order)
click to toggle source
# File lib/tire-multisort/tire/search/multi_sort.rb, line 61 def invert(order) order.to_s == 'asc' ? :desc : :asc end
Private Instance Methods
add_order_to_field(field)
click to toggle source
# File lib/tire-multisort/tire/search/multi_sort.rb, line 67 def add_order_to_field(field) if field.size == 1 field.push @order elsif field.last.is_a?(Hash) && !field.last.has_key?(:order) field.last.merge!(order: @order) end field end
collections()
click to toggle source
# File lib/tire-multisort/tire/search/multi_sort.rb, line 87 def collections @sort.size == 1 ? (@collections[@sort.first] || @sort) : @sort end
fields()
click to toggle source
# File lib/tire-multisort/tire/search/multi_sort.rb, line 83 def fields collections.map { |name| @fields[name.to_sym] }.compact end
fields_with_order()
click to toggle source
# File lib/tire-multisort/tire/search/multi_sort.rb, line 77 def fields_with_order @sort = @default if fields.empty? fields.map { |field| add_order_to_field field.dup } end
sort_by(param)
click to toggle source
# File lib/tire-multisort/tire/search/multi_sort.rb, line 91 def sort_by(param) param.to_s.split(',').map { |s| s.strip.to_sym } end