Sha256: cabc52522e14a0335ecfe632ee3d9e6bdba122bbcd6e7d54e454f726a08d81ea

Contents?: true

Size: 1.25 KB

Versions: 32

Compression:

Stored size: 1.25 KB

Contents

module Spree
  module Products
    class Sort
      def initialize(scope, params, current_currency)
        @scope    = scope
        @sort     = params[:sort]
        @currency = params[:currency] || current_currency
      end

      def call
        products = updated_at(scope)
        products = price(products)

        products.distinct
      end

      private

      attr_reader :sort, :scope, :currency

      def desc_order
        @desc_order ||= String(sort)[0] == '-'
      end

      def sort_field
        @sort_field ||= desc_order ? sort[1..-1] : sort
      end

      def updated_at?
        sort_field == 'updated_at'
      end

      def price?
        sort_field == 'price'
      end

      def order_direction
        desc_order ? :desc : :asc
      end

      def updated_at(products)
        return products unless updated_at?

        products.order(updated_at: order_direction)
      end

      def price(products)
        return products unless price?

        products.joins(master: :prices).
          select("#{Spree::Product.table_name}.*, #{Spree::Price.table_name}.amount").
          distinct.
          where(spree_prices: { currency: currency }).
          order("#{Spree::Price.table_name}.amount #{order_direction}")
      end
    end
  end
end

Version data entries

32 entries across 32 versions & 1 rubygems

Version Path
spree_core-4.0.9 app/sorters/spree/products/sort.rb
spree_core-4.1.15 app/sorters/spree/products/sort.rb
spree_core-4.1.14 app/sorters/spree/products/sort.rb
spree_core-4.0.8 app/sorters/spree/products/sort.rb
spree_core-4.1.13.1 app/sorters/spree/products/sort.rb
spree_core-4.0.7.1 app/sorters/spree/products/sort.rb
spree_core-4.0.7 app/sorters/spree/products/sort.rb
spree_core-4.1.13 app/sorters/spree/products/sort.rb
spree_core-4.0.6 app/sorters/spree/products/sort.rb
spree_core-4.2.0.rc2 app/sorters/spree/products/sort.rb
spree_core-4.0.5 app/sorters/spree/products/sort.rb
spree_core-4.1.12 app/sorters/spree/products/sort.rb
spree_core-4.2.0.rc1 app/sorters/spree/products/sort.rb
spree_core-4.0.4 app/sorters/spree/products/sort.rb
spree_core-4.1.11 app/sorters/spree/products/sort.rb
spree_core-4.1.10 app/sorters/spree/products/sort.rb
spree_core-4.2.0.beta app/sorters/spree/products/sort.rb
spree_core-4.1.9 app/sorters/spree/products/sort.rb
spree_core-4.1.8 app/sorters/spree/products/sort.rb
spree_core-4.1.7 app/sorters/spree/products/sort.rb