Skip to content

Instantly share code, notes, and snippets.

@kule
Last active June 9, 2022 11:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kule/6623281 to your computer and use it in GitHub Desktop.
Save kule/6623281 to your computer and use it in GitHub Desktop.
service object example
class StockManager
def initialize(cart_item)
@cart_item = cart_item
end
def save_and_update_stock
if @cart_item.quantity_changed?
ActiveRecord::Base.transaction do
new_quantity = @cart_item.product.quantity
if @cart_item.quantity_was.to_i > @cart_item.quantity
new_quantity += self.quantity_was.to_i - @cart_item.quantity
elsif @cart_item.quantity_was.to_i < @cart_item.quantity
new_quantity -= @cart_item.quantity - @cart_item.quantity_was.to_i
end
@cart_item.save!
@cart_item.product.update_attributes!(:quantity => new_quantity)
end
end
end
end
# controller
@cart_item = CartItem.new(params[:cart_item]) # or CartItem.find(params[:id])
stock_manager = StockManager.new(@cart_item)
stock_manager.save_and_update_stock
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment