class Elasticband::Sort

Attributes

sort_by[R]

Public Class Methods

new(sort_by) click to toggle source
# File lib/elasticband/sort.rb, line 31
def initialize(sort_by)
  @sort_by = sort_by
end
parse(options) click to toggle source

Parses sort option to a Elasticsearch syntax.

#### Options

  • ‘sort:` List of sort params.

#### Examples “‘ Sort.parse(sort: { name: :desc })

> { sort: [{ name: :desc }] }

Sort.parse(sort: [{ name: :desc }, { created_at: :asc }])

> { sort: [{ name: :desc }, { created_at: :asc }] }

Sort.parse(sort: ‘-name,+created_at,id’)

> { sort: [{ name: :desc }, { created_at: :asc }, { id: :asc }] }

Sort.parse(sort: [‘-name’, ‘+created_at’, ‘id’])

> { sort: [{ name: :desc }, { created_at: :asc }, { id: :asc }] }

“‘

# File lib/elasticband/sort.rb, line 24
def parse(options)
  new(options[:sort]).parse
end

Public Instance Methods

parse() click to toggle source
# File lib/elasticband/sort.rb, line 35
def parse
  return if sort_by.blank?
  return [sort_by] if sort_by.is_a?(Hash)

  @sort_by = sort_by.split(','.freeze) if sort_by.is_a?(String)
  sort_by.map { |param| parse_param(param) }
end

Private Instance Methods

direction(param) click to toggle source
# File lib/elasticband/sort.rb, line 55
def direction(param)
  param.start_with?('-'.freeze) ? :desc : :asc
end
field(param) click to toggle source
# File lib/elasticband/sort.rb, line 51
def field(param)
  param.start_with?('-'.freeze) || param.start_with?('+'.freeze) ? param[1..-1] : param
end
parse_param(param) click to toggle source
# File lib/elasticband/sort.rb, line 45
def parse_param(param)
  return param if param.is_a?(Hash)

  { field(param).to_sym => direction(param) }
end