Join the community and the conversation on Slack

Solidus 2.2.0

May 3, 2017 • John Hawthorn

2.2.0 on github 2.2.0 on rubygems

Announcing Solidus 2.2.0!

This release includes better support for non-credit-card payment sources, better promotion creation, and many other great changes.

Later this month is SolidusConf 2017 in London. Hope to see you there!

Major Changes

  • Spree::Wallet and Non credit card payment sources #1707 #1773 #1765 (chrisradford, jordan-brough, peterberkenbosch)

    This adds support for payment sources other than CreditCard, which can be used to better represent other (potentially reusable) payment sources, like PayPal or Bank accounts. Previously sources like this had to implement all behaviour themselves, or try their best to quack like a credit card.

    This adds a PaymentSource base class, which CreditCard now inherits, and a Wallet service class to help manage users' payment sources. A WalletPaymentSource join table is used to tie reusable payment sources to users, replacing the existing behaviour of allowing all credit cards with a stored payment profile.

  • Add promotion code batch #1524 (vladstoick)

    Prior to Solidus 1.0, each promotion had at most one code. Though we added the functionality to have many codes on one promotion, the UI for creation and management was lacking.

    In Solidus 2.2 we've added PromotionCodeBatch, a model to group a batch of promotion codes. This allows additional promotion codes to be generated after the Promotion's initial creation. Promotion codes are also now generated in a background job.

  • Admin UI Changes

    The admin UI was once again a focus in this release. We've made many incremental changes we think all users will appreciate. This includes an upgrade to Bootstrap 4.0.0.alpha6, changes to table styles, and a better select style.

    See the "Admin UI" section below for a full list of changes.


  • Spree::Order#available_payment_methods returns an ActiveRecord::Relation instead of an array #1802 (luukveenis)
  • Product slugs no longer have a minimum length requirement #1616 (fschwahn)
  • Spree::Money now includes Comparable and the <=> operator for comparisons. #1682 (graygilmore )
  • Allow destruction of shipments in the "ready" state. #1784 (mamhoff)
  • Do not consider pending inventory units cancelable #1800 (mamhoff)
  • Rewrite spree.js in plain JS #1754 (jhawthorn)
  • Make sensitive params filtering less eager #1755 (kennyadsl)
  • Use manifest.js to support Sprockets 4 #1759 (jhawthorn)
  • Update paperclip dependency #1749 (brchristian)
  • Update kaminari dependency to 1.x #1734 (jrochkind)
  • Allow twitter_cldr 4.x #1732 (jrochkind)
  • Added LineItem name to unavailable flash #1697 (ericsaupe)
  • Don't treat "unreturned exchanges" specially in checkout state machine flow #1690 (jhawthorn)
  • set_shipments_cost is now part of OrderUpdater #1689 (jhawthorn)
  • Methods other than update!, update_shipment_state, update_payment_state are now private on OrderUpdater #1689 (jhawthorn)
  • Use can_complete? instead of confirm? to check if Order can be completed #1833 (mamhoff)

Bug Fixes

  • AvailabilityValidator correctly detects out of stock with multiple shipments from the same stock location. #1693 (jhawthorn)
  • Fix missing close paren in variantAutocomplete #1832 (jhawthorn)
  • Set belongs_to_required_by_default = false #1807 (jhawthorn)
  • Fix loading transfer shipments #1781 (mamhoff)
  • Fix complete order factory to have non-pending inventory units #1787 (mamhoff)
  • Fix to cart URL for stores not mounted at root #1775 (funwhilelost)
  • Remove duplicated require in shipment factory #1769 (upinetree)
  • Fix an issue where updating a user in the admin without specifying roles in would clear the existing roles.#1747 (tvdeyen)
  • Fix the 'Send Mailer' checkbox selection #1716 (jhawthorn)
  • Rearrange AR relation declarations in order.rb in preparation for Rails 5.1 #1740 (jhawthorn)
  • Fix issue where OrderInventory creates superfluous InventoryUnits #1751 (jhawthorn)
  • Fix check for order.guest\_token presence #1705 (vfonic)
  • Fix shipped_order factory #1772 (tvdeyen)
  • Don't display inactive payment methods on frontend or backend #1801 (luukveenis)
  • Don't send email if PromotionCodeBatch email is unset #1699 (jhawthorn)



Admin UI


  • Extract expedited exchanges to an extension #1691 (jhawthorn)
  • Remove spree_store_credits column #1741 (jhawthorn)
  • Remove StockMovements#new action and view #1767 (jhawthorn)
  • Remove unused #1768 (jhawthorn)
  • Remove unused payment Javascript #1735 (jhawthorn)
  • Moved spree/admin/shared/_translations partial to spree/admin/shared/_js_locale_data.


  • Deprecate Order#has_step? in favour of has_checkout_step? #1667 (mamhoff)
  • Deprecate Order#set_shipments_cost, which is now done in Order#update! #1689 (jhawthorn)
  • Deprecate user.default_credit_card, user.payment_sources for user.wallet.default_wallet_payment_source and user.wallet.wallet_payment_sources
  • Deprecate CreditCard#default in favour of user.wallet.default_wallet_payment_source
  • Deprecate cache_key_for_taxons helper favour of cache [I18n.locale, @taxons]
  • Deprecate admin sass variables in favour of bootstrap alternatives #1780 (tvdeyen)
  • Deprecate Address#empty? #1686 (jhawthorn)
  • Deprecate fill_in_quantity capybara helper #1710 (jhawthorn)
  • Deprecate wait_for_ajax capybara helper #1668 (cbrunsdon)

Recent Articles

  1. Solidus 2.4-2.5 Technical Rundown
    Jan 15
  2. Version Maintenance/EOL policy
    Jan 4
  3. Solidus Community Roadmap - 2017/2018
    Sep 25
  4. Forking Spree - Solidus Two Years Later
    Aug 30
  5. Solidus 2.3.0
    Jul 31