Sha256: 8f8d5114a2cce9d0940b83ff12f6475d3119d822569c404db05be3d0e8f21c0a

Contents?: true

Size: 642 Bytes

Versions: 2

Compression:

Stored size: 642 Bytes

Contents

require 'active_support'

module CollectionSorter
  module Sorter
    extend ActiveSupport::Concern

    included do
      class_eval do
        class_attribute :sorters
      end
    end

    module ClassMethods
      def sort_with(name, &block)
        self.sorters = self.sorters || {}
        self.sorters[name] = block
      end
    end

    def apply_sort(scope, default=nil)
      params = {} unless params
      sorter = params[:sort] || default || (return scope)
      sorter = default unless self.sorters.include?(sorter.to_sym)

      return self.sorters[sorter.to_sym].call(scope) if sorter.present?
      scope
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
collection_sorter-0.0.2 lib/collection_sorter/sorter.rb
collection_sorter-0.0.1 lib/collection_sorter/sorter.rb