Sha256: 3eaf7b3047ead52c90875c94cfa5ebd415c44b518bebcaba36aa4ab477d2734a
Contents?: true
Size: 1.3 KB
Versions: 1
Compression:
Stored size: 1.3 KB
Contents
module Spree module Products class Sort < ::Spree::BaseSorter def initialize(scope, current_currency, params = {}, allowed_sort_attributes = []) super(scope, params, allowed_sort_attributes) @currency = params[:currency] || current_currency end def call products = by_param_attributes(scope) products = by_price(products) products = by_sku(products) products.distinct end private attr_reader :sort, :scope, :currency, :allowed_sort_attributes def by_price(scope) return scope unless (value = sort_by?('price')) scope.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 #{value[1]}") end def by_sku(scope) return scope unless (value = sort_by?('sku')) scope.joins(:master). select("#{Spree::Product.table_name}.*, #{Spree::Variant.table_name}.sku"). where(Spree::Variant.table_name.to_s => { is_master: true }). order("#{Spree::Variant.table_name}.sku #{value[1]}") end def sort_by?(field) sort.detect { |s| s[0] == field } end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
spree_core-4.3.0.rc3 | app/sorters/spree/products/sort.rb |