Sha256: 58fcd9cd6d64fcedea2840662abc116d6556d423b759ccacf07d83e261167e35

Contents?: true

Size: 1.28 KB

Versions: 122

Compression:

Stored size: 1.28 KB

Contents

module Spree
  module Stock
    class Prioritizer
      attr_reader :packages

      def initialize(packages, adjuster_class = Adjuster)
        @packages = packages
        @adjuster_class = adjuster_class
        @adjusters = {}
      end

      def prioritized_packages
        sort_packages
        adjust_packages
        prune_packages
        packages
      end

      private

      def adjust_packages
        packages.each do |package|
          package.contents.each do |item|
            adjuster = find_adjuster(item)
            adjuster = build_adjuster(item, package) if adjuster.nil?
            adjuster.adjust(package, item)
          end
        end
      end

      def build_adjuster(item, _package)
        @adjusters[hash_item item] = @adjuster_class.new(item.inventory_unit)
      end

      def find_adjuster(item)
        @adjusters[hash_item item]
      end

      def sort_packages
        # order packages by preferred stock_locations
      end

      def prune_packages
        packages.reject!(&:empty?)
      end

      def hash_item(item)
        shipment = item.inventory_unit.shipment
        variant  = item.inventory_unit.variant
        if shipment.present?
          variant.hash ^ shipment.hash
        else
          variant.hash
        end
      end
    end
  end
end

Version data entries

122 entries across 122 versions & 1 rubygems

Version Path
spree_core-4.10.1 app/models/spree/stock/prioritizer.rb
spree_core-4.10.0 app/models/spree/stock/prioritizer.rb
spree_core-4.9.0 app/models/spree/stock/prioritizer.rb
spree_core-4.8.3 app/models/spree/stock/prioritizer.rb
spree_core-4.8.2 app/models/spree/stock/prioritizer.rb
spree_core-4.7.3 app/models/spree/stock/prioritizer.rb
spree_core-4.6.6 app/models/spree/stock/prioritizer.rb
spree_core-4.5.5 app/models/spree/stock/prioritizer.rb
spree_core-4.0.9 app/models/spree/stock/prioritizer.rb
spree_core-4.1.15 app/models/spree/stock/prioritizer.rb
spree_core-4.2.7 app/models/spree/stock/prioritizer.rb
spree_core-4.3.3 app/models/spree/stock/prioritizer.rb
spree_core-4.4.1 app/models/spree/stock/prioritizer.rb
spree_core-4.5.4 app/models/spree/stock/prioritizer.rb
spree_core-4.6.5 app/models/spree/stock/prioritizer.rb
spree_core-4.7.2 app/models/spree/stock/prioritizer.rb
spree_core-4.7.1 app/models/spree/stock/prioritizer.rb
spree_core-4.6.4 app/models/spree/stock/prioritizer.rb
spree_core-4.7.0 app/models/spree/stock/prioritizer.rb
spree_core-4.6.3 app/models/spree/stock/prioritizer.rb