Sha256: b0dbe9d1e8daea78f6e82cb942f5a54129cc29b42c8132c28856f92ce52ed2bc
Contents?: true
Size: 1.12 KB
Versions: 8
Compression:
Stored size: 1.12 KB
Contents
# frozen_string_literal: true module ApiMe class Sorting attr_accessor :sort_criteria, :sort_reverse, :scope def initialize(scope:, sort_params:) self.scope = scope return unless sort_params self.sort_criteria = sort_params[:criteria] || default_sort_criteria self.sort_reverse = sort_params[:reverse] || false end def results sorting? ? sort(sort_criteria).scope : scope end def sort_meta return {} unless sorting? { criteria: sort_meta_criteria, reverse: sort_reverse } end protected def sort_meta_criteria if sort_criteria.blank? default_sort_criteria else sort_criteria end end def sort(criteria = default_sort_criteria) self.scope = sorted_scope(criteria) self end def sorted_scope(criteria) if sort_reverse === 'true' scope.order(criteria => :desc) else scope.order(criteria => :asc) end end private def default_sort_criteria 'id' end def sorting? sort_criteria || sort_reverse end end end
Version data entries
8 entries across 8 versions & 1 rubygems