gem install interactor2
| Method | Summary |
|---|---|
| Interactor2.perform | ::new and then #perform, all arguments will be passed to #initialize. |
| Interactor2#fail! | Fail the interactor. |
| Interactor2#perform | Must be overridden in child class, and should not call it directly, use ::perform instead. |
| Interactor2#error | Returns the error message. |
| Interactor2#success? | Returns true if there is no error. |
require 'interactor2'
class AddToCart < Interactor2
attr_reader :line_item, :cart # should be any attribute you want to expose
def initialize(product, cart)
@cart = cart
@line_item = cart.line_items.new(product: product)
end
# business logic here.
def perform
unless @line_item.save
fail! 'oops'
end
end
end add_to_cart = AddToCart.perform(@product)
if add_to_cart.success?
add_to_cart.item
add_to_cart.cart
else
add_to_cart.error # => 'oops'
end