Sha256: eb09e6aa621cb4aacf0b5274130c8a0795a27b0d177a69ea1f30c2ceb756ed7b

Contents?: true

Size: 1.07 KB

Versions: 7

Compression:

Stored size: 1.07 KB

Contents

module Elastic::Nodes::Concerns
  module Sortable
    ORDER = [:asc, :desc]
    MODES = [:min, :max, :sum, :avg, :median]

    def clone
      copy_sorts super
    end

    def simplify
      copy_sorts super
    end

    def sorts
      registered_sorts.dup
    end

    def add_sort(_field, order: :asc, mode: nil, missing: nil)
      raise ArgumentError, "invalid sort order #{order}" unless ORDER.include?(order.to_sym)
      raise ArgumentError, "invalid sort mode #{mode}" if mode && !MODES.include?(mode.to_sym)

      options = { 'order' => order.to_s }
      options['mode'] = mode.to_s if mode.present?
      options['missing'] = missing if missing.present?

      registered_sorts << { _field.to_s => options.freeze }.freeze
      self
    end

    def reset_sorts
      @registered_sorts = nil
      self
    end

    protected

    attr_writer :registered_sorts

    private

    def copy_sorts(_clone)
      _clone.registered_sorts = sorts
      _clone
    end

    def render_sorts
      sorts
    end

    def registered_sorts
      @registered_sorts ||= []
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
elastic-rails-1.0.4 lib/elastic/nodes/concerns/sortable.rb
elastic-rails-1.0.3 lib/elastic/nodes/concerns/sortable.rb
elastic-rails-1.0.2 lib/elastic/nodes/concerns/sortable.rb
elastic-rails-1.0.1 lib/elastic/nodes/concerns/sortable.rb
elastic-rails-1.0.0 lib/elastic/nodes/concerns/sortable.rb
elastic-rails-0.8.7 lib/elastic/nodes/concerns/sortable.rb
elastic-rails-0.8.6 lib/elastic/nodes/concerns/sortable.rb