Skip to content

v2.11.0

Compare
Choose a tag to compare
@spaghetticode spaghetticode released this 23 Oct 13:31

Major Changes

Removed support for Rails 5.1

Rails 5.1 is not maintained anymore, we deprecated it in 2.10 so it's time to
remove it entirely.

Add billing_address_required preference

The new preference controls whether validations will require the presence of
the billing address.

  • Allow to specify if billing address is required for orders #3658 (softr8)

Add BCC email to order confirmation emails

Spree::Store model now accepts a BCC email field that, when present, will be
used in order confirmation emails.

Order merger and order updater now require valid order

The order merger and order updater will complete successfully only on valid
orders. This new behavior is opt-in with this release, but will become the
default from Solidus 3.0.

You can enable this feature right now by setting the preference with
Spree::Config.run_order_validations_on_order_updater = true

Stop calling Spree::Refund#perform! after creating a refund

From Solidus v3.0 onwards, #perform! will need to be explicitly called when
creating new refunds. Please, change your code from:

Spree::Refund.create(your: attributes)

to:

Spree::Refund.create(your: attributes, perform_after_creation: false).perform!

The perform_after_creation attribute will be deprecated in Solidus 3.x.

  • Stop calling perform! as Spree::Refund after_create callback #3641 (kennyadsl)

Allow to configure guest_token cookie options

The guest_token cookie is currently always only allowed for the current domain,
including subdomain. If you want to use the cookie on a different subdomain you
can use the preference guest_token_cookie_options.

  • Allow to configure guest_token cookie options #3621 (tvdeyen)

Add event subscribers automatically

Event subscribers are now loaded automatically when their source file
is placed under the directory app/subscribers and filename ends with
_subscriber.rb. This works both for Solidus core, Solidus extensions
and the store app.

If you have any custom subscribers with an explicit subscription (i.e. MyCustomSubscriber.subscribe!) ensure they're under app/subscribers path and remove the explicit subscriptions from your app initializer (i.e MyCustomSubscriber.subscribe!).

Add address default for billing as well

It's now possible to mark an address as default for billing with the
column default_billing.

  • Uniform bill_address and ship_address behaviour in Spree::UserAddressBook module #3563 (oldjackson)

Getting closer to completely replace Paranoia with Discard

We're getting closer to fully replace Paranoia with Discard. Paranoia
methods have been fully deprecated, so you're encouraged to switch to
Discard also in your store codebase.

  • DRY paranoia and discard inclusion into models #3555 (cedum)
  • Replace Paranoia methods with Discard equivalents #3554 (cedum)

Add ActiveStorage adapter

From Rails 6.1 ActiveStorage will support public blob URLs and Solidus
should be ready to offer an ActiveStorage adapter to new stores.

Introduce Address#name

We're going to introduce the new column name for addresses that will
replace the existing first_name and last_name. In preparation of
this, we're now introducing a virtual attribute name that works like
and replaces #full_name.

Replace Spree.routes with Spree.pathFor
The use of Spree.routes is now deprecated. You can check in your
browser developer tools console for deprecation messages.

Configurable order state machine with new default
The order state machine class is now configurable, just like other models state machines. Also, a simplified version of the current state machine will
be the new default in Solidus 3.x.

  • Configurable order state machine and reduce the number of possible transitions #3542 (mamhoff)

Include payment methods in installer
Solidus installer has now a section for installing payment method gems out of the box.
Currently, the only available gem is solidus_paypal_commerce_platform.

  • Add payment method selection to the install generator #3731 (elia)

Remove CanCanCan custom actions aliases
CanCanCan custom action aliases have been deprecated and replaced with default ones to make it easier upgrading to newer versions of CanCanCan.
A new application preference has been introduced: use_custom_cancancan_actions which when set to:

  • true will still accept using custom aliases (default for existing applications);
  • false any custom aliases defined previously won't be handled anymore by Solidus.

Ensure double-checking all the custom defined permissions in your application before switching to use_custom_cancancan_actions preference to false.

Introduce encrypted preference type
A new preference type encrypted_string has been introduced allowing to encrypt the value assigned to the preference to avoid exposing it in case a malicious user gets access to the DB or a dump.
Check the related guide for more details https://guides.solidus.io/developers/preferences/add-model-preferences.html#details-for-encrypted_string-type .

Add "discontinue on" attribute to products
Adds a discontinue_on attribute to products. This accompanies the available_on attribute to complete the "Time Based Availability" feature. The Product.available scope and Product#avaliable? method take this new date field into account to calculate the availability of products.

Fixed how the default reimbursement store-credit category is fetched
Before this change the store-credit category for reimbursement was fetched by name using a missing translation (i.e. en.spree.store_credit_category.default) that resulted in the name "Default". If no category was found the code fell back on the first category from the database, which wasn't guaranteed to be the right one. Trying to update the translation to the desired category name was also useless due to how code was loaded.
Now it's possible to disable this legacy behavior and switch to a simpler one, in which the code will look for a CreditCategory named "Reimbursement". Here's a list of checks and fixes you can perform to ensure you can enable the correct implementation:

  • If you don't use reimbursements you're good to go, skip below to Disabling the legacy behavior
  • Ensure you didn't decorate or patched any of the involved code, especially:
    • Spree::StoreCreditCategory.reimbursement_category
    • Spree::StoreCreditCategory.reimbursement_category_name
  • Ensure your "production" environment is already returning the correct category, you can assess that by running this in your "production" console: Spree::StoreCreditCategory.reimbursement_category(nil).name == "Reimbursement"

Disabling the legacy behavior
If everything is sound, or you are ok with a different category name for newly created reimbursement store credits you can switch to the new behavior by configuring this Solidus preference in your spree.rb initializer:

Spree.config do |config|
  config.use_legacy_store_credit_reimbursement_category_name = false
end

If you had modifications in your codebase consider disabling the legacy behavior and porting them to a simple overwrite of Spree::Reimbursement#store_credit_category.
The legacy behavior will be removed in the next major version of Solidus.

  • Fix reimbursement_category_name ending up in a translation missing error #3507 (elia)

Do not consider promotions without actions as active

When considering to apply a promotion to an order we use the active scope.
This scope was including promotions without actions and we no longer are taking them into account.

To switch to the new behaviour which will be the only one accepted in Solidus 3.0 change the following preference Spree::Config.consider_actionless_promotion_active to false.

If you need to consider actionless promotions as active for any reason please implement your own scope for that.

Core

Backend

  • Fix Ruby 2.7 warnings on backend #3746 (stefano-sarioli)
  • Respect current ability in users controllers #3732 (igorbp)
  • [Admin] Disallow promotions with empty action type and discount rule #3724 (cnorm35)
  • Replace duplicate data-hook name #3705 (seand7565)
  • Change to true/false to yes/no in Auto Capture Select Text #3703 (michaelmichael)
  • [Admin] Fix Square Logos appearance #3702 (michaelmichael)
  • [Admin] Add filter feature for stock movements #3680 (jacquesporveau)
  • Display originator email in stock movement admin #3673 (jacquesporveau)
  • [Backend] More precise cancan validations for some resource links #3654 (spaghetticode)
  • Variant property rules to optionally match all conditions (cont.) #3653 (filippoliverani)
  • Eager loading countries when creating a new zone #3649 (softr8)
  • Remove unused XHR code #3642 (halilim)
  • Admin UI for shipping methods - stock locations association #3624 (cedum)
  • Refactoring Admin::ProductsController to use ResourcesController#update #3603 (softr8)
  • Rescuing from ActiveRecord::RecordInvalid in ResourcesController #3602 (softr8)
  • Adding missing paginator when listing all stock locations #3600 (softr8)
  • Show only active promotions filter #3595 (wildbillcat)
  • Unified Handling of Option Values and Product Properties List #3592 (hefan)
  • Do not pass non persistent new records when sorting tables by removing non numeric ids #3591 (hefan)
  • Check if promotions exist without extra db query #3586 (katafrakt)
  • Do not display non-eligible adjustments in the admin cart overview #3585 (coorasse)
  • Backend: more robust update_positions for resource controller #3581 (hefan)
  • [Backend] Handle errors and flash messages editing a taxon #3574 (softr8)
  • Remove non-existing middleware #3570 (coorasse)
  • Add ability to select multiple rows on Admin Tables #3565 (DanielePalombo)
  • Add support for prefill user address in new order #3558 (jaimelr)
  • replace link_to_add_fields usage and deprecate helper function #3547 (hefan)
  • Convert ES6 arrow syntax to ES5 for compatibility #3511 (pelargir)
  • Ensure payment methods are ordered correctly #3506 (AlistairNorman)
  • [Admin] Change shipment email checkbox label #3490 (kennyadsl)
  • Use RESTful routing for users' API key management #3442 (kennyadsl)
  • Fix issue 3164 - generate shipments for backend-added products when necessary #3197 (spaghetticode)
  • Fixes for consistent handling of resource errors on admin #3728 (ikraamg)
  • Expose js function: Spree.SortableTable.refresh #3754 (brunoao86)
  • Fix TaxCategory default not showing up in admin #3759 (vl3)
  • Make order customer email links consistent #3767 (brchristian)
  • Fix typo in comment in navigation_helper.rb #3770 (brchristian)
  • Make admin order event_links translatable #3772 (tvdeyen)
  • Display billing address to left of shipping address #3773 (brchristian)
  • Add hint to tax category default checkbox #3778 (pelargir)
  • Add link to stock movements page from variant stock display #3779 (seand7565)
  • Update backend New Image link for consistency #3786 (brchristian)
  • Show the admin/settings menu for any of its elements #3783 (elia)
  • Improve the developer experience with the new Ability deprecations #3801 (elia)
  • Ensure #resource_not_found mentions the right model #3798 (elia)
  • Add CSS selector for datetime-local #3792 (jacobherrington)
  • Remove CSS resizing logo when menu collapses #3791 (jacobherrington)

Frontend

  • Allow for HTML options on image partial #3741 (markmead)
  • Use a better name for CheckoutController#set_state_if_present #3496 (elia)
  • Replace with :all_adjustments.nonzero.any? #3787 (duartemvix)

API

Deprecations & Removals

Misc

Docs & Guides