From 219c982db7ee6c7c8cc6b20a376589a9f09aa433 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 23 Jan 2021 15:14:11 +0000 Subject: [PATCH] Re-implement pre-Rails-5 versions of #implement! and #decrement! on Spree::LineItem Rails 5 introduced some breaking changes to these built-in methods, and the new versions no longer work correctly in relation to decrementing stock with VariantOverrides. --- .../concerns/line_item_stock_changes.rb | 19 +++++++++++++++++++ app/models/spree/line_item.rb | 1 + 2 files changed, 20 insertions(+) create mode 100644 app/models/concerns/line_item_stock_changes.rb diff --git a/app/models/concerns/line_item_stock_changes.rb b/app/models/concerns/line_item_stock_changes.rb new file mode 100644 index 0000000000..a61bb21be3 --- /dev/null +++ b/app/models/concerns/line_item_stock_changes.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +# Rails 5 introduced some breaking changes to these built-in methods, and the new versions +# no longer work correctly in relation to decrementing stock with LineItems / VariantOverrides. +# The following methods re-instate the pre-Rails-5 versions, which work as expected. +# https://apidock.com/rails/v4.2.9/ActiveRecord/Persistence/increment%21 +# https://apidock.com/rails/v4.2.9/ActiveRecord/Persistence/decrement%21 + +module LineItemStockChanges + extend ActiveSupport::Concern + + def increment!(attribute, by = 1) + increment(attribute, by).update_attribute(attribute, self[attribute]) + end + + def decrement!(attribute, by = 1) + decrement(attribute, by).update_attribute(attribute, self[attribute]) + end +end diff --git a/app/models/spree/line_item.rb b/app/models/spree/line_item.rb index c2da5814d6..6b502e1bcd 100644 --- a/app/models/spree/line_item.rb +++ b/app/models/spree/line_item.rb @@ -6,6 +6,7 @@ require 'variant_units/variant_and_line_item_naming' module Spree class LineItem < ActiveRecord::Base include VariantUnits::VariantAndLineItemNaming + include LineItemStockChanges include LineItemBasedAdjustmentHandling belongs_to :order, class_name: "Spree::Order", inverse_of: :line_items