Overview
With Dependencies, you can easily replace parts of Spree core with your custom code. You can replace Services, CanCanCan Abilities (user for Permissions), and API Serializers (used for generating JSON API responses).Application (global) customization
This will change every aspect of the application (both APIs, Admin Panel, and Storefront). In yourconfig/initializers/spree.rb
file, you can set the following:
- Inherit from
Spree::Cart::AddItem
- Override the
call
method to add your custom logic - Call
run :add_to_line_item
to add the item to the cart - Call
run Spree::Dependencies.cart_recalculate_service.constantize
to recalculate the cart - Call
run :update_in_external_system
to execute your custom logic, eg. updating Order in an external system such as ERP
Values set in the initializer have to be strings, eg.
'MyNewAwesomeAddItemToCart'
Controller level customization
If you need to replace serializers or Services in a specific API endpoint you can create a code decorator:MyNewAwesomeCartSerializer
and also it will swap the default add_item_service
to MyNewAwesomeAddItemToCart
.
Different API endpoints can have different dependency injection points. You can review their source code to see what you can replace.
API level customization
Storefront API and Platform API have separate Dependencies injection points so you can easily customize one without touching the other. In your Spree initializer (config/initializers/spree.rb
) please add:
AnotherAddItemToCart
and the rest of the application will use MyNewAwesomeAddItemToCart