appirits/comable

View on GitHub
core/app/models/comable/inventory/adjuster.rb

Summary

Maintainability
A
35 mins
Test Coverage
module Comable
  module Inventory
    class Adjuster
      attr_accessor :packages
      attr_accessor :units

      def initialize(packages, units)
        @packages = packages.map(&:clone)
        @units = units
      end

      def adjusted_packages
        remove_duplicated_items
        packages
      end

      private

      def remove_duplicated_items
        units.each do |unit|
          remove_duplicated(unit)
        end
      end

      def remove_duplicated(unit)
        duplicated = false

        packages.each do |package|
          next unless package.find(unit)

          if duplicated
            package.remove(unit)
          else
            duplicated = true
          end
        end
      end
    end
  end
end