Solidus 2.1.0
John Hawthorn
17 Jan 2017 - 6 mins read

2.1.0 on github 2.1.0 on rubygems
I'm happy to announce the release of Solidus 2.1.0!
An exciting change in this release is taxes are now always fully recalculated on an order.update!. order.create_tax_charge! is no longer required! We hope that this is simpler for developers and should help us better support external tax services in the future.
Also notable in this release the removal of methods which were deprecated before Solidus 1.4. We've also extracted solidus_prototype and solidus_trackers into separate extensions.
Changelog
-
The OrderUpdater (as used by
order.update!) now fully updates taxes.Previously there were two different ways taxes were calculated: a "full" and a "quick" calculation. The full calculation was performed with
order.create_tax_charge!and would determine which tax rates applied and add taxes to items. The "quick" calculation was performed as part of an order update, and would only update the tax amounts on existing line items with taxes.Now
order.update!will perform the full calculation every time.order.create_tax_charge!is now deprecated and has been made equivalent toorder.update!. -
ItemAdjustmentshas been merged into theOrderUpdaterThe previous behaviour between these two classes was to iterate over each item calculating promotions, taxes, and totals for each before moving on to the next item. To better support external tax services, we now calculate promotions for all items, followed by taxes for all items, etc.
-
Make frontend prices depend on
store.cart_tax_country_isoPrices in the frontend now depend on
store.cart_tax_country_isoinstead ofSpree::Config.admin_vat_country_iso. -
Deprecate methods related to Spree::Order#tax_zone
We're not using
Spree::Order#tax_zone,Spree::Zone.default_tax,Spree::Zone.match, orSpree::Zone#contains?in our code base anymore. They will be removed soon. Please useSpree::Order#tax_address,Spree::Zone.for_address, andSpree::Zone.include?, respectively, instead. -
Product Prototypes have been removed from Solidus itself.
The new
solidus_prototypeextension provides the existing functionality. #1517 -
Analytics trackers have been removed from Solidus itself.
The new
solidus_trackersextension provides the existing functionality. #1438 -
Bootstrap row and column classes have replaced the legacy skeleton classes throughout the admin. #1484
-
Remove
currencyfrom line items.It's no longer allowed to have line items with different currencies on the same order. This makes storing the currency on line items redundant, since it will always be considered the same as the order currency.
It will raise an exception if a line item with the wrong currency is added.
This change also deletes the
currencydatabase field (String) from theline_itemstable, since it will not be used anymore. -
Add
Spree::Promotion#remove_fromandSpree::PromotionAction#remove_fromThis will allow promotions to be removed from orders and allows promotion actions to define how to reverse their side effects on an order.
For now
PromotionActionprovides a default remove_from method, with a deprecation warning that subclasses should define their own remove_from method. -
Remove
is_defaultboolean fromSpree::PricemodelThis boolean used to mean "the price to be used". With the new pricing architecture introduced in 1.3, it is now redundant and can be reduced to an order clause in the currently valid prices scope.
-
Remove callback
Spree::LineItem.after_create :update_tax_chargeAny code that creates
LineItems outside the context of OrderContents should ensure that it callsorder.update!after doing so. -
Mark
Spree::Tax::ItemAdjusteras api-private #1463 -
Updated Credit Card brand server-side detection regex to support more brands and MasterCard's new BIN range. #1477
Note: Most stores will be using client-side detection which was updated in Solidus 1.2
-
CreditCard'sverification_valuefield is now converted to a string and has whitespace removed on assignment instead of before validations. -
The
lastnamefield onAddressis now optional. #1369 -
The admin prices listings page now shows master and variant prices seperately. This changes
@pricesto@master_pricesand@variant_pricesin prices_controller -
Admin javascript assets are now individually
required using sprockets directives instead of usingrequire_tree. This should fix issues where JS assets could not be overridden in applications. #1613 -
The admin has an improved image upload interface with drag and drop. #1553
-
PaymentMethod's
display_oncolumn has been replaced withavailable_to_usersandavailable_to_admin. The existing attributes and scopes have been deprecated. -
ShippingMethod's
display_oncolumn has been replaced withavailable_to_users. The existing attributes and scopes have been deprecated. -
Added experimental Spree::Config.tax_adjuster_class
To allow easier customization of tax calculation in extensions or applications.
This API is experimental and is likely to change in a future version.
-
Removals
-
Removed deprecated
STYLE_imagehelpers from BaseHelper #1623 -
Removed deprecated method
Spree::TaxRate.adjust(not to be confused with Spree::TaxRate#adjust) in favor ofSpree::Config.tax_adjuster_class. -
Removed deprecated method
Promotion#expired?in favor ofPromotion#inactive? -
Removed nested attribute helpers
generate_template,generate_html, andremove_nested. Also removes some javascript bound to selectors.remove,a[id*=nested]. -
Removed
accept_alertanddismiss_alertfrom CapybaraExt.accept_alertis now a capybara builtin (that we were overriding) anddismiss_alertcan be replaced withdismiss_prompt. -
Removed deprecated delegate_belongs_to
-