Solidus v2.11.0 Release Notes

Release Date: 2020-10-23 // over 3 years ago
  • 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
    0๏ธโƒฃ 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

    • โž• Add ability to run validations in order updater #3645 (kennyadsl)

    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

    0๏ธโƒฃ It's now possible to mark an address as default for billing with the
    0๏ธโƒฃ 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
    0๏ธโƒฃ 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:

    • 0๏ธโƒฃ 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 = falseend
    

    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