Sha256: ecb0a45168ee29fc3a43a649c1d7f0e04dc7737964f99156931e06e855285fcd

Contents?: true

Size: 1.01 KB

Versions: 2

Compression:

Stored size: 1.01 KB

Contents

# frozen_string_literal: true
module Dayman
  class Request
    module Sorting
      SORT_ORDER_WHITELIST = [:asc, :desc].freeze

      # http://jsonapi.org/format/#fetching-sorting
      def sort(*args)
        Array(args).each do |sort_field|
          if sort_field.is_a?(Hash)
            sort_field, order = sort_field.first

            unless order.in?(SORT_ORDER_WHITELIST)
              raise ArgumentError, 'sort order must be :asc or :desc (defaults to :asc)'
            end
          else
            order = SORT_ORDER_WHITELIST.first
          end

          sort_fields.push(sort_field => order)
        end

        self
      end
      alias order sort

      private

      def sort_fields_to_query_parameters
        sort_fields = @sort_fields.uniq.compact.map do |sort_field|
          field, order = sort_field.first
          "#{'-' if order == :desc}#{field}"
        end

        if sort_fields.blank?
          {}
        else
          { sort: sort_fields.join(',') }
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
dayman-0.1.2 lib/dayman/request/sorting.rb
dayman-0.1.1 lib/dayman/request/sorting.rb