Updating Extensions
How to upgrade your Spree extension to work with Spree 4
Zeitwerk compatibility
Zeitwerk is the new default code autoloader in Rails 6.
This doesn’t work well with the old approach to decorators files that name ends with decorator.rb, eg. app/models/spree/order_decorator.rb
using class_eval.
To fix this we need to convert all class_eval
decorators to modules and use Module.prepend. Also we need to name them properly according to Zeitwerk naming rules
Example of an old decorator:
app/models/spree/order_decorator.rb
the same decorator in the new notation:
app/models/your_extension_name/order_decorator.rb
Fixing Deface Overrides
Please remember to prepare versioned overrides for both Spree 3.x and 4.x, eg. https://github.com/spree-contrib/spree_static_content/commit/e4b9e4900024235158d0ec1a48a100b4732348ef
Spree 4 uses Bootstrap 4 and many partials and HTML structure changed compared to Spree 3.x.
Also - remember to add deface gem to gemspec as deface itself was removed as a dependency of Spree. eg. https://github.com/spree/spree_auth_devise/commit/d729689ca87d8586e541ffcc865ef1e0a5a79fe4
Migrate to Spree Dev Tools
Replace all development dependencies with:
Replace spec_helper.rb
contents with:
Example migrations:
Was this page helpful?