module SearchFlip::Sortable

The SearchFlip::Sortable mixin provides the chainable methods sort as well as resort

Public Class Methods

included(base) click to toggle source
# File lib/search_flip/sortable.rb, line 6
def self.included(base)
  base.class_eval do
    attr_accessor :sort_values

    alias_method :order, :sort
  end
end

Public Instance Methods

reorder(*args)
Alias for: resort
resort(*args) click to toggle source

Specify the sort order you want Elasticsearch to use for sorting the results with already existing sort orders being removed.

@example

CommentIndex.sort(user_id: "asc").resort(id: "desc")

# Same as

CommentIndex.sort(id: "desc")

@return [SearchFlip::Criteria] A newly created extended criteria

@see sort See sort for more details

# File lib/search_flip/sortable.rb, line 61
def resort(*args)
  fresh.tap do |criteria|
    criteria.sort_values = args
  end
end
Also aliased as: reorder
sort(*args) click to toggle source

Specify the sort order you want Elasticsearch to use for sorting the results. When you call this multiple times, the sort orders are appended to the already existing ones. The sort arguments get passed to Elasticsearch without modifications, such that you can use sort by script, etc here as well.

@example Default usage

CommentIndex.sort(:user_id, :id)

# Same as

CommentIndex.sort(:user_id).sort(:id)

@example Default hash usage

CommentIndex.sort(user_id: "asc").sort(id: "desc")

# Same as

CommentIndex.sort({ user_id: "asc" }, { id: "desc" })

@example Sort by native script

CommentIndex.sort("_script" => "sort_script", lang: "native", order: "asc", type: "number")

@param args The sort values that get passed to Elasticsearch

@return [SearchFlip::Criteria] A newly created extended criteria

# File lib/search_flip/sortable.rb, line 41
def sort(*args)
  fresh.tap do |criteria|
    criteria.sort_values = (sort_values || []) + args
  end
end