Skip to content

Instantly share code, notes, and snippets.

@radar
Created May 13, 2014 03:31
Show Gist options
  • Save radar/315d4101dae7727d23fa to your computer and use it in GitHub Desktop.
Save radar/315d4101dae7727d23fa to your computer and use it in GitHub Desktop.
module Spree
module Stock
module Splitter
class OneItemPerPackage < Base
cattr_accessor :shipping_category_names do
[]
end
def split(packages)
packages_to_be_processed = packages.select do |package|
package.contents.any? do |item|
self.class.shipping_category_names.include?(item.line_item.variant.shipping_category.name)
end
end
packages_to_be_processed.each do |package|
packages.delete(package)
package.contents.each do |item|
item.quantity.times do
packages << build_package([item])
end
end
end
packages
end
end
end
end
end
require 'spec_helper'
module Spree
module Stock
module Splitter
describe OneItemPerPackage do
let(:line_item1) do
line_item = build(:line_item, variant: build(:variant))
line_item.variant.product.shipping_category = create(:shipping_category, name: 'Mattress')
line_item
end
before do
Spree::Stock::Splitter::OneItemPerPackage.shipping_category_names = ["Mattress"]
end
let(:packer) { build(:stock_packer) }
subject { Spree::Stock::Splitter::OneItemPerPackage.new(packer) }
it "allows only one item in each package from the 'Mattress' shipping category" do
package1 = Package.new(packer.stock_location, packer.order)
package1.add line_item1, 2
packages = subject.split([package1])
expect(packages.count).to eq(2)
end
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment