- Introduced level enum to
Spree::TaxRate
to allow for order-level taxes #4491 (adammathys) - Added
Spree::Calculator::FlatFee
tax calculator #4491 (adammathys)
With the introduction of the Spree::Calculator::FlatFee
and Spree::TaxRate#level
, we now have the ability to support the new Colorado Delivery Fee. There's also a new rake task provided to help setup the requisite models to support the fee:
rake taxes:colorado_delivery_fee
- Don't remove non-accessible roles when assigning new accessible roles (waiting-for-dev)
- Delegate
--auto-accept
installer option to solidus_frontend (waiting-for-dev)
- [v3.2] Only default to activestorage adapter if Rails version is supported #4564 (tvdeyen)
- Remove duplicated attributes from API docs (kennyadsl)
Remember to run bin/rails g solidus:update
to support you during the upgrade
process.
You can read more about how to upgrade solidus in our guides.
A completely new Event Bus has been introduced. It has better support for async subscribers, testability, observability, and many other features. It's been developed as a separated gem, omnes. Check its README for everything it supports!
Don't forget to consult the upgrade guide from the legacy event system to omnes.
While the legacy event system is still supported, it'll be removed on Solidus v4.
For fresh Solidus applications, we now recommend you use solidus_starter_frontend.
solidus_frontend will be removed from the solidus meta-package gem in Solidus
v4. Furthermore, its code has been extracted from
https://github.com/solidusio/solidus to
https://github.com/solidusio/solidus_frontend. Once removed, you'll need to
explicitly add solidus_frontend
to your Gemfile in order to continue using
it.
Meanwhile, the Solidus installer allows you to choose which one you want to use as the storefront.
The guides that used to live at solidusio/solidus
have been deprecated. You
can still find them at https://github.com/solidusio/legacy-guides, but a great
effort is in progress to make first-class documentation on
https://github.com/solidusio/edgeguides.
You can check them live in https://edgeguides.solidus.io/.
New Solidus applications won't autoload files matching app/**/*_decorator*.rb
pattern anymore. For previous Solidus applications, it's something that will
keep working as the responsible code was added to your config/application.rb
when Solidus was installed. That code is intended to work with Rails' classic
autoloader, deprecated on Rails 6 and removed on Rails 7. It keeps working
because of a compatibility
layer
which is also deprecated. However, it may be eventually removed, so you're
better off updating your application.rb
file. You should substitute:
config.to_prepare do
Dir.glob(Rails.root.join('app/**/*_decorator*.rb')) do |path|
require_dependency(path)
end
end
With:
overrides = "#{Rails.root}/app/overrides" # use your actual directory here
Rails.autoloaders.main.ignore(overrides)
config.to_prepare do
Dir.glob("#{overrides}/**/*_decorator*.rb").each do |override|
load override
end
end
You may also want to stop using the decorator
naming, as it's no longer part
of Solidus recommendations (that files are monkey patches; they don't use the
decorator pattern). E.g.,
you can place those files in app/overrides/
and remove the decorator
suffix.
Promotions with a match_policy
of any
are deprecated. If you have promotions
with such a match policy, try running the following rake task:
bin/rake solidus:split_promotions_with_any_match_policy
This will create separate promotions for each of the rules of your promotions with any
match policy, which should have the same outcome for customers.
Creating new promotions with any
match policy is turned off by default. If you still want
to create promotions like that (knowing they will not be supported in the future), you can
set a temporary flag in your config/initializers/spree.rb
file:
# Allow creating new promotions with an `any` match policy. Unsupported in the future.
config.allow_promotions_any_match_policy = true
Rails 7 no longer supports referring autoloadable classes within an initializer.
Because of that, we need to change the way we configure static preference sources.
Before:
# config/initializers/spree.rb
Spree.config do |config|
config.static_model_preferences.add(
AmazingStore::AmazingPaymentMethod,
'amazing_payment_method_credentials',
credentials: ENV['AMAZING_PAYMENT_METHOD_CREDENTIALS'],
server: Rails.env.production? ? 'production' : 'test',
test_mode: !Rails.env.production?
)
end
Now:
# config/initializers/spree.rb
Rails.application.config.to_prepare do
Spree::Config.static_model_preferences.add(
AmazingStore::AmazingPaymentMethod,
'amazing_payment_method_credentials',
credentials: ENV['AMAZING_PAYMENT_METHOD_CREDENTIALS'],
server: Rails.env.production? ? 'production' : 'test',
test_mode: !Rails.env.production?
)
end
- Monkey patch Authentication Bypass by CSRF Weakness vulnerability on solidus_auth_devise for extra security GHSA-5629-8855-gf4g
- Fix ReDos vulnerability on Spree::EmailValidator::EMAIL_REGEXP GHSA-qxmr-qxh6-2cc9
- Fix CSRF forgery protection bypass for Spree::OrdersController#populate GHSA-h3fg-h5v3-vf8m
- Introduce a configuration value for
migration_path
#4190 (forkata) - Deprecate Promotion
any
Match Policy #4304 (mamhoff) - Fix key in the locale file #4512 (waiting-for-dev)
- Run auth generator when starter frontend installs the gem #4511 (waiting-for-dev)
- Translate price country names #4508 (tvdeyen)
- Tweaks for the Solidus installer #4504 (waiting-for-dev)
- Include discarded prices in delete_prices_with_nil_amount task #4495 (spaghetticode)
- Remove PayPal as an option during the installation process #4494 (waiting-for-dev)
- Deprecate solidus_frontend & allow installing solidus_starter_frontend #4490 (waiting-for-dev)
- Fix incorrect validation message for missing store credit category #4481 (johnpitchko)
- Add basic support for order-level taxes #4477 (adammathys)
- Allow to extend user deletion logic #4471 (tvdeyen)
- Fix stores with no authentication #4456 (waiting-for-dev)
- Support CVE-2022-32224 Rails security updates #4451 (gsmendoza)
- Support code reloading when configuring static preferences sources #4449 (waiting-for-dev)
- Deprecate Ruby 2.5 & Ruby 2.6 #4442 (waiting-for-dev)
- Deprecate Rails 5.2 #4439 (waiting-for-dev)
- Sanitize i18n keys using i18n-tasks gem issue: #3978 #4437 (waiting-for-dev)
- Update CircleCI configuration #4435 (waiting-for-dev)
- Fail with
raise
when the storage adapter is not supported #4434 (waiting-for-dev) - Skip failing test because of unsupported feature on Rails < 6.1 #4432 (waiting-for-dev)
- Fix Order#tax_address method #4429 (spaghetticode)
- Add display shipment total before tax #4423 (mamhoff)
- Fix deprecation of active payment methods #4414 (waiting-for-dev)
- Fix: common:test_app should change Rails.env to test #4411 (gsmendoza)
- Only install ActiveStorage adapter on supported Rails versions #4402 (tvdeyen)
- Fix user restricted stock management v3.1 #4400 (rmparr)
- Make more stock classes configurable #4395 (jarednorman)
- Fix creating store credit with amount in foreign format #4390 (tvdeyen)
- Allow user stock locations to be deleted #4389 (rmparr)
- Deprecate duplicated variant routes #4388 (waiting-for-dev)
- Add missing sprockets-rails dependency #4382 (waiting-for-dev)
- Fix issues loading serialized logs #4376 (waiting-for-dev)
- Fix update generator taking non-comparable values as changes in a default #4375 (waiting-for-dev)
- Add flexibility to
Spree::Order#restart_checkout_flow
#4369 (spaghetticode) - Support for Ruby 3.1 #4366 (waiting-for-dev)
- Readd
config.cache_classes
on test env and removewith_model
dep #4358 (waiting-for-dev) - Fix creating refund with amount in foreign format #4344 (tvdeyen)
- Use Omnes for pub/sub #4342 (waiting-for-dev)
- Respect new preloader API in Rails 7 #4338 (mamhoff)
- Update in-memory shipments of order in order_shipping #4334 (tvdeyen)
- Bugfix: Changing Default Addresses #4332 (mamhoff)
- Fix install generator on namespaced extensions #4327 (nvandoorn)
- Fixes defining thumbnail sizes through ActiveStorage adapter #4318 (waiting-for-dev)
- Fixes using ActiveStorage adapter with libvips as variant processor #4317 (waiting-for-dev)
- Fix flaky spec for Spree::ShippingMethod#available_to_store #4313 (mamhoff)
- Allow kt-paperclip v7 #4310 (tvdeyen)
- Refactor promotion usage counts #4307 (mamhoff)
- OrderInventory: Use variant stock items #4303 (mamhoff)
- Fix:
extension:test_app
rake task should detect if Solidus engines are available #4302 (gsmendoza) - OrderContents: Initialize line item with empty adjustments #4286 (mamhoff)
- Promotion Rule CreateItemAdjustments: Use in-memory objects #4285 (mamhoff)
- Deprecate Spree::PromotionRule.for #4284 (mamhoff)
- Product Promotion Rule: Use in-memory objects #4282 (mamhoff)
- Optimize Spree::PromotionHandler::Cart #4281 (mamhoff)
- Remove n+1 in Spree::Tax::TaxLocation class #4280 (mamhoff)
- Fix n+1 possibilities in Promotion#blacklisted? #4275 (mamhoff)
- Replace expired GPG key for mysql install in dev Dockerfile #4274 (nemeth)
- Fix order create permissions #4261 (spaghetticode)
- Deprecate public visibility of order#finalize! #4260 (waiting-for-dev)
- Fix test assertion due to staled cache #4259 (waiting-for-dev)
- Relax Factory Bot version constraint #4255 (jarednorman)
- Add public interface to fetch registered events #4252 (waiting-for-dev)
- Fix: solidus:install adds the frontend assets even if the repo does not have solidus_frontend #4251 (gsmendoza)
- Cosmetic changes to the unknown event message #4246 (waiting-for-dev)
- Stop generating code to autoload overrides #4231 (waiting-for-dev)
- Accept nested addresses attributes for User #4229 (kennyadsl)
- Ensure promotion codes don't trigger ActiveRecord::RecordNotUnique errors on save #4228 (jcsanti)
- Reintroduce inverse_of: :product for variants association #4227 (spaghetticode)
- Enforce event registration #4226 (waiting-for-dev)
- Add Rails 7 support #4220 (peterberkenbosch)
- Use default spree event adapter #4216 (peterberkenbosch)
- Update warning with copy/pastable code #4215 (peterberkenbosch)
- Add stubbing test helpers for the event bus #4214 (waiting-for-dev)
- Use SSL on fonts.googleapis.com scss import #4209 (RyanofWoods)
- Enable rubygems_mfa_required on solidus #4206 (gsmendoza)
- A couple of small fixes #4205 (elia)
- Introduce Spree::Event's test interface to run only selected listeners #4204 (waiting-for-dev)
- Adds observability to the new event bus #4203 (waiting-for-dev)
- List order customer returns only once #4196 (spaghetticode)
- Fix discarded duplicated products bug #4189 (Azeem838)
- Fix loading core on Rails < 6.1 #4179 (waiting-for-dev)
- Centralize legacy event bus deprecation and test legacy on CI #4176 (waiting-for-dev)
- Recalculate promotions after destroying/refreshing shipments #4172 (spaghetticode)
- Add deprecation path for arity-zero preference defaults #4170 (waiting-for-dev)
- Fix shipping_method_spec test flakiness #4169 (DianeLooney)
- Respect completed_at timestamp in order factories #4168 (DianeLooney)
- Update install templates to use jquery3 (vulnerability fix) #4167 (cpfergus1)
- Fix staled upgrade instructions on the Gemfile's post-install message #4166 (waiting-for-dev)
- Fix searching deleted products by SKU #4164 (adammathys)
- Change application-template generation script to use main branch #4163 (kennyadsl)
- Get Solidus ready for 3.2 #4162 (kennyadsl)
- Introduce new EventBus adapter #4130 (waiting-for-dev)
- Adds conditional validation to
ReturnItem
#4121 (Brian-Demon) - Add global Spree::Config.default_email_regexp #4022 (cesartalves)
- Deprecate try_spree_current_user #3923 (elia)
- Improve payment service providers switching errors #3837 (luca-landa)
- Sanitize i18n keys using i18n-tasks gem issue: #3978 #4437 (waiting-for-dev)
- Fix option_values nested attributes behavior on the API #4409 (waiting-for-dev)
- Add tax_category_id to variant's permitted attributes #4406 (waiting-for-dev)
- Deprecate creating new shipment with an item via API #4387 (kennyadsl)
- Deprecate dangling option_values and duplicated routes #4385 (waiting-for-dev)
- Bugfix: Changing Default Addresses #4332 (mamhoff)
- Allow OrderWalkThrough to take a user #4292 (mamhoff)
- Refactor Stock Quantifier to use Enumerable #4291 (mamhoff)
- Fix(OrderMerger): Do not carry line item adjustments to new order #4290 (mamhoff)
- Add additional info for developers in docker logs #4288 (Palid)
- Use Variant Searcher for Autocomplete #4197 (adammathys)
- Clean request specs #4158 (biximilien)
- Switch orders name search to use contains instead of starts with #4496 (sbader)
- Provide support to fix locale selection in admin login page #4493 (gsmendoza)
- Fix expectations about solidus_auth_devise order in the Gemfile #4465 (waiting-for-dev)
- Translate price country names #4508 (tvdeyen)
- Sanitize i18n keys using i18n-tasks gem issue: #3978 #4437 (waiting-for-dev)
- Remove N+1 from admin users #4419 (tvdeyen)
- Fix delete response in admin users controller #4415 (tvdeyen)
- Remove unutilized coffee-rails dependency #4405 (cpfergus1)
- Make more room for long values in Order Summary #4352 (tvdeyen)
- Enhance refund admin UI #4348 (tvdeyen)
- feat(Variants Form): Add some visual structure #4323 (tvdeyen)
- Fix admin variants table UX #4322 (tvdeyen)
- Authorize uuid for existing object in sortable table #4287 (julienanne)
- Check for existence of
product_path
instead ofSpree::Frontend::Engine
#4278 (gsmendoza) - Admin permission fixes #4276 (spaghetticode)
- Incorrect display store credit reason #4268 (nbelzer)
- Fix for advancing carts correctly in admin checkout #4253 (tmtrademarked)
- fix backbone shipment item view when split #4250 (ccarruitero)
- Fix tests after two conflicting merges #4249 (waiting-for-dev)
- [Admin] Fix permission checks on some links #4244 (spaghetticode)
- Fix product prices table pagination #4243 (tvdeyen)
- Admin users did not work with custom user models #4238 (softr8)
- Adds the missing en-CA localization for the select2 dropdown in admin #4223 (jzisser9)
- Add filter and pagination to tax rates admin view #4222 (tvdeyen)
- Make display_price optional on admin variants list #4213 (luca-landa)
- Use SSL on fonts.googleapis.com scss import #4209 (RyanofWoods)
- Use Variant Searcher for Autocomplete #4197 (adammathys)
- Update install templates to use jquery3 (vulnerability fix) #4167 (cpfergus1)
- Fix searching deleted products by SKU #4164 (adammathys)
- Refactor and add specs to stock locations helper #3827 (gabrielbaldao)
- Remove frontend directory #4497 (waiting-for-dev)
- Fix expectations about solidus_auth_devise order in the Gemfile #4465 (waiting-for-dev)
- Make API docs deprecation warnings consistent #4397 (waiting-for-dev)
- Deprecate SolidusFrontend #4320 (gsmendoza)
- Bump follow-redirects from 1.14.7 to 1.14.8 in /guides #4269 (dependabot)
- Use SSL on fonts.googleapis.com scss import #4209 (RyanofWoods)
- Add explicit information about DB_* env variables to the README #4461 (chrean)
- Move legacy guides to a separate repository #4459 (aldesantis)
- Bump minimist from 1.2.0 to 1.2.6 in /guides #4314 (dependabot)
- Update customizing-assets.html.md #4312 (mapreal19)
- Removes Stoplight API docu auto build orb. #4311 (wintermeyer)
- Update README.md chromedriver link #4294 (Palid)
- Update API docs link to point to the new domain #4279 (kennyadsl)
- Update the Super Good logo #4258 (jarednorman)
- Update contributor logo on README.md #4257 (mfrecchiami)
- Update image settings documentation #4245 (nbelzer)
- Bump follow-redirects from 1.13.1 to 1.14.7 in /guides #4242 (dependabot)
- Documentation fixes #4241 (nbelzer)
- Make minor improvements to the "Payments" developer guides #4208 (benjaminwil)
- Fix typo in Payments Overview guide #4195 (nerfologist)
- [Doc] Good commit message link fixed #4186 (shubham9411)
- Bump axios from 0.21.1 to 0.21.2 in /guides #4171 (dependabot)
- [v3.1] Only default to activestorage adapter if Rails version is supported #4565 (tvdeyen)
- Fix key in the locale file #4513 (waiting-for-dev)
- [v3.1] Translate price country names #4509 (tvdeyen)
- [v3.1] Fix admin variants table UX #4506 (tvdeyen)
- [v3.1] Allow to extend user deletion logic #4472 (tvdeyen)
- Support CVE-2022-32224 Rails security updates - backport to v3.1 #4453 (gsmendoza)
- [v3.1] Remove N+1 from admin users #4420 (tvdeyen)
- [v3.1] Fix delete response in admin users controller #4416 (tvdeyen)
- [v3.1] Only install ActiveStorage adapter on supported Rails versions #4403 (tvdeyen)
- Fix user restricted stock management v3.1 #4400 (rmparr)
- [v3.1] Fix creating store credit with amount in foreign format #4391 (tvdeyen)
- [v3.1] Replace expired GPG key for mysql install in dev Dockerfile #4381 (waiting-for-dev)
- [v3.1] Fix refund form (again) #4360 (tvdeyen)
- [v3.1] Make more room for long values in Order Summary #4353 (tvdeyen)
- [v3.1] Enhance refund admin UI #4349 (tvdeyen)
- [v3.1] Fix creating refund with amount in foreign format #4345 (tvdeyen)
- [v3.1] Update in-memory shipments of order in order_shipping #4335 (tvdeyen)
- [3.1] Fixes using ActiveStorage adapter with libvips as variant processor #4324 (waiting-for-dev)
- Authorize uuid for existing object in sortable table #4301 (julienanne)
- Backport #4228 to V3.1 #4237 (jcsanti)
- [BACKPORT] Reintroduce inverse_of: :product for variants association #4236 (spaghetticode)
- Fix CSRF forgery protection bypass for Spree::OrdersController#populate GHSA-h3fg-h5v3-vf8m
- Fix ReDos vulnerability on Spree::EmailValidator::EMAIL_REGEXP GHSA-qxmr-qxh6-2cc9
- Use SSL on fonts.googleapis.com scss import #4210 RyanofWoods
- Monkey patch Authentication Bypass by CSRF Weakness vulnerability on solidus_auth_devise for extra security GHSA-5629-8855-gf4g
- Add deprecation path for arity-zero preference defaults #4170 (waiting-for-dev)
- Fix staled upgrade instructions on the Gemfile's post-install message #4166 (waiting-for-dev)
Spree.load_defaults
: preference defaults depending on the Solidus version
Solidus 3.1 brings a new feature where preference defaults can take different values depending on a specified Solidus version. It makes it possible to stop deprecating old defaults every time we introduce a change in the recommended value for a setting. After all, they're just that; recommendations. Instead, now users can explicitly ask for a given Solidus version defaults and, as before, override the preferences they want.
When upgrading to 3.1, you have to take action to adopt the new behavior.
You'll need to add Spree.load_defaults('3.1')
on the very top of your
spree.rb
initializer. As we're not changing any preference default on this
release, nothing will break. A warning will be emitted on boot-up until you do
it!
However, bumping the version given to load_defaults
straight away for future
upgrades will not be a safe option. Instead, you'll have to go through the new
update process detailed below.
- Allow using different preference defaults depending on a Solidus version #4064 (waiting-for-dev)
New update process
As aforementioned, preference defaults can change after a Solidus release. Once you have your defaults locked to the current Solidus version, a new upgrade won't break your application because of them. However, it's a good idea to adapt your application to the updated recommended settings. To help with this process, Solidus comes with a generator that you can execute like this:
bin/rails g solidus:update
That generator will create a new initializer called new_solidus_defaults.rb
,
which will preview all the defaults that have changed between versions, each on
a commented line. From that point, you can activate the new defaults one by one
and adapt your application incrementally. Once you're done with all of them,
you can bump the version given to Spree.load_defaults
in the spree.rb
initializer and remove the new_solidus_defaults.rb
initializer altogether.
You can read in more detail about this process on our guides.
- Introduce Solidus update process #4087 (waiting-for-dev)
Other important changes
Spree::Price#amount
field can no longer be nil
. Besides adding the
validation at the model layer, we ship with a task that will remove records
where the amount is NULL
in the database. You should run the task before
executing the new migrations:
bin/rails solidus:delete_prices_with_nil_amount
bin/rails railties:install:migrations
bin/rails db:migrate
If you're running migrations automatically on deploy, you should run the task before rolling out the new code. In that case, you first should make sure that you have affected records:
Spree::Price.where(amount: nil).any?
If the above code returns false
, you don't need to do anything else.
Otherwise, copy the
task
into your code, and deploy & execute it. Another option is to execute it
manually in your console in production. However, be extremely careful when
doing that!!
Spree::Price.where(amount: nil).delete_all
- Do not allow prices with nil amount #3987 (waiting-for-dev)
- Remove the upgrade task and point to additional steps from the update generator #4157 (waiting-for-dev)
- Make order-related service objects configurable #4138 (aldesantis)
- Remove unused
ShippingRateTaxer
service object #4136 (aldesantis) - Fix Ransack error when searching for orders by customer name #4135 (aldesantis)
- Exclude canceled orders in the #usage_count of promotions and promotion codes #4123 (ikraamg)
- Make clearer default answer in prompt #4101 (waiting-for-dev)
- Permit return_items_attributes return_reason_id #4080 (spaghetticode)
- Simplify
Variant#default_price
logic #4076 (waiting-for-dev) - Move currently_valid_prices to a method #4073 (waiting-for-dev)
- Support Ruby 3 #4072 (waiting-for-dev)
- Fix customer return validation for return items without inventory units #4068 (willianveiga)
- Add preferences to configure product and taxon images style #4062 (cpfergus1)
- Add UUID to StoreCredit#generate_authorization_code #4060 (spaghetticode)
- Fix Spree::Promotion.has_actions scope #4056 (mamhoff)
- Update defaults in dummy application #4047 (waiting-for-dev)
- Load defaults for the latest Rails minor version in the dummy app #4035 (waiting-for-dev)
- Handle permalink attribute on product create #4024 (nandita2010)
- Don't hack into ActionMailer to add our mail previews path #3961 (elia)
- Fix solidus stock locations sorting #3954 (ikraamg)
- Fix order checkout flow completion with custom steps #3950 (nerfologist)
- Add docker-compose development environment #3947 (waiting-for-dev)
- Allow Variant to check stock by stock_location #3884 (MadelineCollier)
- Normalize email required checks #3879 (elia)
- Improve the extensibility of Rules::ItemTotal #3431 (elia)
- Remove Pending Request Spec: Api Admin update payment state expectations. #4149 (jcowhigjr)
- Fix gateway_error when no order is defined #4156 (alexblackie)
- Moving API attribute helpers to API config #4039 (snada)
- Allow customer returns to reference existing
ReturnItem
s on create through API #4007 (forkata) - Let the PriceSelector return a Spree::Price #3925 (swively)
- Fix displaying of discarded variants in admin #4148 (luca-landa)
- Hide the master variants from stock management #4155 (tmtrademarked)
- Refactor frontend and backend locale_controllers #4126 (RyanofWoods)
- Fix admin portugues locale #4107 (ruipbarata)
- Add an HTML select element to filter orders by the shipment state #4089 (willianveiga)
- Fix detecting exec js version by adding minimal requirement for autoprefixer-rails #4077 (waiting-for-dev)
- Unhardcode admin base url in 'stock_location_stock_item' template #4063 (ok32)
- Fix "Cancel" URL link on reimbursement edit page #4061 (spaghetticode)
- [ADMIN] Properly format flash error message #3996 (spaghetticode)
- Consolidation of promotion code batch form fields into partial. #3957 (cpfergus1)
- Promotion rule product limit improvements #3934 (nirnaeth)
- eager load records instead of n+1 for update_positions #3875 (BenMorganIO)
- Update order_tabs Order number format #3835 (brchristian)
- Move frontend locale_controller_spec to correct directory #4127 (RyanofWoods)
- Refactor frontend and backend locale_controllers #4126 (RyanofWoods)
- Fix flaky product feature spec #4118 (gsmendoza)
- Use symbols in polymorphic path for event_links #4048 (tvdeyen)
- Fix small typo in the 'customizing permissions' guide #4147 (nerfologist)
- Bump tar from 2.2.1 to 2.2.2 in /guides #4142 (dependabot)
- Document REST API params to control nested taxons #4131 (kennyadsl)
- Bump addressable from 2.5.2 to 2.8.0 in /guides #4129 (dependabot)
- Document REST API filtering with Ransack #4128 (kennyadsl)
- Guides typo corrections #4120 (cesartalves)
- Shipment Setup Examples documentation - small correction to the amount of shipping categories needed #4115 (cesartalves)
- Fix broken URL in customer-flow guide #4096 (RyanofWoods)
- Fix the dark mode issue with the logo on README.md #4093 (mfrecchiami)
- Small English correction on Payments overview PSP doc #4088 (cesartalves)
- Update the Nebulab's logo on README.md #4079 (mfrecchiami)
- Fix Request Bodies in API Documentation #4066 (kennyadsl)
- Fix links in CHANGELOG.md #4057 (bogdanvlviv)
- Bump hosted-git-info from 2.7.1 to 2.8.9 in /guides #4053 (dependabot)
- Bump lodash from 4.17.19 to 4.17.21 in /guides #4051 (dependabot)
- Review install instructions in README and Guides #4034 (kennyadsl)
- Use more appropriate language for woman's t-shirt in sample data #4031 (Noah-Silvera)
- Improve Customizing Attributes documentation #3979 (dhughesbc)
- Improve Solidus events documentation #3819 (spaghetticode)
- [v3.0] Only default to activestorage adapter if Rails version is supported #4568 (tvdeyen)
- [v3.0] Fix Ransack error when searching for orders by customer name #4521 (tvdeyen)
- Fix key in the locale file #4514 (waiting-for-dev)
- [v3.0] Translate price country names #4510 (tvdeyen)
- [v3.0] Fix admin variants table UX #4507 (tvdeyen)
- [v3.0] Allow to extend user deletion logic #4473 (tvdeyen)
- Support CVE-2022-32224 Rails security updates - backport to v3.0 #4454 (gsmendoza)
- [v3.0] Remove N+1 from admin users #4421 (tvdeyen)
- [v3.0] Fix delete response in admin users controller #4417 (tvdeyen)
- [v3.0] Backport docker development environment #4407 (waiting-for-dev)
- [v3.0] Only install ActiveStorage adapter on supported Rails versions #4404 (tvdeyen)
- Fix user restricted stock management v3.0 #4399 (rmparr)
- Fix user restricted stock management v3.0 #4399 (rmparr)
- [v3.0] Fix creating store credit with amount in foreign format #4392 (tvdeyen)
- [v3.0] Fix refund form (again) #4361 (tvdeyen)
- [v3.0] Make more room for long values in Order Summary #4354 (tvdeyen)
- [v3.0] Enhance refund admin UI #4350 (tvdeyen)
- [v3.0] Fix creating refund with amount in foreign format #4346 (tvdeyen)
- [v3.0] Update in-memory shipments of order in order_shipping #4336 (tvdeyen)
- [3.0] Fixes using ActiveStorage adapter with libvips as variant processor #4325 (waiting-for-dev)
- Authorize uuid for existing object in sortable table #4300 (julienanne)
- [BACKPORT] Reintroduce inverse_of: :product for variants association #4235 (spaghetticode)
- Backport #4228 to V3.0 #4232 (jcsanti)
- Fix CSRF forgery protection bypass for Spree::OrdersController#populate GHSA-h3fg-h5v3-vf8m
- Fix ReDos vulnerability on Spree::EmailValidator::EMAIL_REGEXP GHSA-qxmr-qxh6-2cc9
- Use SSL on fonts.googleapis.com scss import #4211 RyanofWoods
- Monkey patch Authentication Bypass by CSRF Weakness vulnerability on solidus_auth_devise for extra security GHSA-5629-8855-gf4g
- Permit return_items_attributes return_reason_id #4091 (spaghetticode)
- Fix app and tests to work with ActiveRecord.has_many_inverse #4098 (waiting-for-dev)
- Support Ruby 3 #4072 (waiting-for-dev)
- Fix detecting exec js version by adding minimal requirement for autoprefixer-rails #4077 (waiting-for-dev)
Removal of all code deprecated during the 2.x series
The main change in this major version is the removal of all deprecated code that we introduced during the 2.x series. This means that if any code that was deprecated is still being used, the application will break. Following the deprecation messages in the application logs, it should be quite easy to spot what code needs to be changed.
The main things that could break a Solidus application are:
Paranoia gem has been replaced by Discard gem
All references to methods added to models by Paranoia will raise a NoMethodError exception now. Some of those methods are:
paranoia_destroy
paranoia_delete
with_deleted
only_deleted
really_destroy!
after_real_destroy
Pull Requests:
Removed core support to first_name and last_name in Spree::Address
In Solidus v2.11, we added a name
attribute to Spree::Address
, which is being populated combining
first_name
and last_name
values every time a new address is added to the system. We also provided
a rake tasks to update all existing records in order to get applications ready for Solidus 3.0.
With this major version, name
is the only supported attributes. first_name
and last_name
fields are already in the database
so if needed, a store can revert this change implementing their own logic.
See 3234 for the rationale behind this change.
Pull Requests:
- Move Spree::Address#name attribute to the db #3908 (filippoliverani)
- Remove deprecated name-related Address fields #3820 (filippoliverani)
All the other deprecations removal
For a complete reference to rest of the code removed, these PRs can be taken as reference:
- Remove deprecated attachment_partial_name #3974 (kennyadsl)
- Remove legacy address state validation logic #3847 (cedum)
- Raise canceling a payment when try_void is not implemented #3844 (kennyadsl)
- Remove all code deprecated in Solidus v2.x #3818 (kennyadsl)
Removal without deprecations
We also removed some code that didn't need a deprecation warning. Be sure that your codebase doesn't use any of the following:
Spree::LineItem::CurrencyMismatch
exception: we are not using it anymore since the behavior we had withSpree::Config.raise_with_invalid_currency = true
has been removed.Spree::Order::Checkout
is not used anymore.Spree::Core::StateMachines::Order
is identical.Spree::Admin::PaymentsHelper
module is empty after removing all deprecated methods inside it.UserPaymentSource
is empty after removing all deprecated methods inside it.Spree::Refund#perform_after_create
attribute, it was into a deprecated path. If you are still using it, please stop, it does nothing now.Spree::TaxCalculator#ShippingRate
: it is alwaysnil
now.Spree::Money::RUBY_NUMERIC_STRING
: was only used in a deprecated code path.
We also removed the following preferences without deprecations. They were just controlling a deprecated flow and have no effect so, assuming you already switched to the only accepted value, you can safely remove them from your initializer. You'll probably notice that because your app won't start.
Spree::Config.raise_with_invalid_currency
Spree::Config.redirect_back_on_unauthorized preference
Spree::Config.run_order_validations_on_order_updater preference
Spree::Config.use_legacy_order_state_machine
Spree::Config.use_legacy_store_credit_reimbursement_category_name
Spree::Config.consider_actionless_promotion_active
Spree::Config.use_legacy_address_state_validator
Spree::Config.use_combined_first_and_last_name_in_address
By default, do not require the whole Rails framework
This shouldn't give any issue in host applications, but if that happens,
it can be easily fixable opening config/application.rb
and add require 'rails/all'
or
the specific part of Rails needed by the application.
Switch Paperclip dependency to its maintained version
We recently added support for Active Support, which will be the default in Solidus 3.0. Paperclip will still be around and supported for a while because we don't want to force existing stores to accomplish the assets migration. While we support it, we want to use the maintained fork.
- Switch to maintained Paperclip fork #3913 (filippoliverani)
- Bump removal horizon for 3.x deprecations #4025 (kennyadsl)
- Add Post-Install message to Solidus 3.0 #3985 (kennyadsl)
- Add Active Storage in Dummy App for extensions #3969 (kennyadsl)
- Improve Active Storage configuration for in-memory Dummy App #3970 (kennyadsl)
- Allow users to create blank issues in GitHub #3943 (kennyadsl)
- Install Active Storage by default on new stores #3938 (kennyadsl)
- Avoid too many prompts during solidus:install generator #3937 (kennyadsl)
- Align Rubocop ruby version to gemspec #3935 (spaghetticode)
- Skip adding webpacker gem when generating dummyapp #3922 (SamuelMartini)
- allow customize database credentials for test app #3921 (ccarruitero)
- Bump redcarpet from 3.4.0 to 3.5.1 in /guides #3890 (dependabot)
- Adjust CircleCI config to reflect Rails versions that we support #3885 (kennyadsl)
- Bump axios from 0.18.1 to 0.21.1 in /guides #3881 (dependabot)
- Bump ini from 1.3.5 to 1.3.7 in /guides #3861 (dependabot)
- Drive community to GitHub Discussions when opening issues #3857 (kennyadsl)
- Update governance with latest changes to the organization #3836 (kennyadsl)
- Fix install instructions in Solidus Guides #3833 (ikraamg)
- Update install instructions after 2.11 release #3825 (kennyadsl)
- Move "thinking cat" fixture to lib folder #3824 (mamhoff)
- Update readme with Solidus demo URL #3822 (seand7565)
- Fix headers in changelog #3812 (jarednorman)
- Fixed typo with misspell #3811 (hsbt)
- V2.11 - Fix non auto populated customer info #4247 (nbelzer)
- [BACKPORT] Reintroduce inverse_of: :product for variants association #4234 (spaghetticode)
- Backport #4228 to V2.11 #4230 (jcsanti)
- v2.11 fix(Address): Set name from firstname and lastname on update #4224 (tvdeyen)
- Backport #3913 to V2.11 #4174 (spaghetticode)
- Fix CSRF forgery protection bypass for Spree::OrdersController#populate GHSA-h3fg-h5v3-vf8m
- Fix ReDos vulnerability on Spree::EmailValidator::EMAIL_REGEXP GHSA-qxmr-qxh6-2cc9
- Use SSL on fonts.googleapis.com scss import #4212 RyanofWoods
- Monkey patch Authentication Bypass by CSRF Weakness vulnerability on solidus_auth_devise for extra security GHSA-5629-8855-gf4g
- Revert "Raise canceling a payment when try_void" #4134 (senemsoy)
- Fix app and tests to work with ActiveRecord.has_many_inverse #4099 (waiting-for-dev)
- Update billing address migration tasks with batch limit #4104 (spaghetticode)
- Permit return_items_attributes return_reason_id #4090 (spaghetticode)
- Rescue FileNotFoundError exception on failed image downloads #4026 (cpfergus1)
- Image attachment content type validation fix for ActiveStorage #4021 (cpfergus1)
- Switch to the correct ActiveStorage variant syntax #4003 (filippoliverani)
- Only run spring stop in install generator if spring is available #3999 (Noah-Silvera)
- Fix double store credits creation when performing refunds #3989 (spaghetticode)
- Fix default billing address migration on sqlite #4020 (waiting-for-dev)
- Allow accessing preferences on models that do not have any set #3998 (kennyadsl)
- Fix for incorrect deprecation class #3991 (tmtrademarked)
- Improve address name migration task output #3982 (kennyadsl)
- Add Address name data migration rake task #3933 (spaghetticode)
- Add and start populating
spree_addresses.name
field #3962 (spaghetticode) - Fix circular reference in factory #3959 (waiting-for-dev)
- Remove Deprecation Warning in ActiveModel Errors #3946 (Azeem838)
- Only use #original_message in Api::BaseController#parameter_missing_error if defined #3940 (dividedharmony)
- Pre-select current tax category on product form #3936 (spaghetticode)
- Inline the attachment form for taxon icons #3932 (elia)
- Show 'guest' correctly in order customer details #3910 (nirebu)
- Relax Money dependency in development #3958 (kennyadsl)
- Lock money gem in development until next release #3909 (kennyadsl)
- Fix factory loading #3907 (elia)
- [Admin] Automatically check edited return items in RMA form #3904 (spaghetticode)
- Fix ActionMailer preview loading #3901 (aldesantis)
- Convert jQuery data attribute to number #3899 (spaghetticode)
- Add English variants to select2_local directory #3895 (michaelmichael)
- Remove awesome_nested_set override for Rails 6.1 compatibility #3893 (kennyadsl)
- Set dummy app forgery protection to false #3887 (FrancescoAiello01)
- Enable ActiveStorage specs against Rails 6.1 #3886 (kennyadsl)
- Migrate default billing addresses to address book #3838 (mamhoff)
- Update taxon icon to use present instead of exists #3869 (seand7565)
- Update canonical-rails syntax for latest version #3865 (brchristian)
- Add Rails 6.1 support #3862 (filippoliverani)
- Deprecate unused calculators #3863 (DanielePalombo)
- Remove ability to void invalid payments #3858 (vl3)
- Add soft-delete support for Api::ResourceController #3854 (cedum)
- Remove deprecated sass color-#{state} variables usage #3853 (kennyadsl)
- Remove the gray border inside a product image #3851 (mfrecchiami)
- Remove all usage of FooAbility and BarAbility when testing abilities #3850 (kennyadsl)
- Rename all occurrences of emails with spree username to solidus #3849 https://github.com/rubenochiavone
- Avoid
#method
shadowing #3846 (spaghetticode) - Move UserClassHandle to lib/ #3813 (elia)
- Fix use_legacy_address_state_validator deprecation message #3845 (kennyadsl)
- Fix the factories loading mechanism #3814 (elia)
- Fix reassign image to another variant in admin #3810 (felixyz)
- Remove seeds for images associated to master variant #3805 (aleph1ow)
- Check for edit permission when showing store credit edit link #3843 (spaghetticode)
- Use the right method in the AddApplyToAllToVariantPropertyRule migration #3815 (ok32)
- Fix permissions to see admin menu items #3840 (kennyadsl)
- Avoid asking user to run migration creating the sandbox #3839 (kennyadsl)
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.
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.
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
.
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!
).
- [Events] Add subscribers automatically #3571 (spaghetticode)
- [Events] Change internal mapping for event subscriber registrations #3758 (spaghetticode)
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.
- Always set ActiveStorage::Current.host in base controllers #3613 (filippoliverani)
- Add ActiveStorage adapter #3501 (filippoliverani)
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.
- Add name to Spree::Address #3458 (filippoliverani)
- Use Address name attribute in views and APIs #3524 (filippoliverani)
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.
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
.
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
.
- Remove CanCanCan custom actions aliases (cont.) #3701 (filippoliverani)
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 new type encrypted_string for preferences #3676 (stefano-sarioli)
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.
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.
- Do not consider promotions without actions as active #3749 (DanielePalombo)
- Don't combine splat and hash, just use the attribute form #3742 (marcrohloff)
- Fix rails 61 deprecations #3740 (marcrohloff)
- Fix ruby 2.7 warnings on core #3737 (stefano-sarioli)
- Make payment.rb methods more concise #3734 (brchristian)
- Refactor Product#available? to match docs #3733 (brchristian)
- Show a deprecation message for PaymentMethod::DISPLAY #3716 (cedum)
- Make Spree::Payment::Processing#handle_void_response public #3708 (spaghetticode)
- Fix typo in comment in promotion.rb #3693 (brchristian)
- Add Refund#perform_response and reintroduce @response ivar #3672 (spaghetticode)
- Fix bug related to free shipping not being applied correctly #3671 (jacquesporveau)
- Cancel authorized (pending) payments when cancelling an order (cont.) #3662 (filippoliverani)
- Allow Importer::Order to accept array of line items and stock_location_id #3655 (ccarruitero)
- Make Order#shipping_discount consider only credits #3640 (spaghetticode)
- Fixing mark default billing address #3634 (softr8)
- Remove the duplicated active scope and name validations #3629 (halilim)
- Added select on product's scopes for price sorting #3620 (thomasrossetto)
- Fix in_taxons scope when taxon is an ActiveRecord::Base #3617 (kennyadsl)
- Only perform regexes on Strings #3616 (jacquesporveau)
- Set canceled_at date when canceling an order with cancel (issue #3608) #3610 (gugaiz)
- Fix error message on email preview #3607 (coorasse)
- Remove Deface overrides initializer #3587 (aldesantis)
- Make Payment#gateway_order_id public #3583 (spaghetticode)
- Making simple coordinator insufficient stock to include a message #3577 (softr8)
- [Events] Add subscribers automatically #3571 (spaghetticode)
- Validate uniqueness with case_sensitive: true explicitly #3569 (kennyadsl)
- Add order_recalculated event #3553 (spaghetticode)
- Build default address with an existing method in checkout address #3548 (kennyadsl)
- Replace
Spree::Event#name_with_suffix
withadapter#normalize_name
#3519 (spaghetticode) - Spree::OptionValue#name delegates to Spree::OptionType even when nil #3517 (SamuelMartini)
- Improve unstocking inventory units from stock locations #3514 (AlessioRocco)
- Memoize Spree::User#wallet method #3513 (AlessioRocco)
- Allow multiple events subscription with regexp #3512 (spaghetticode)
- Only log basic response information #3508 (JDutil)
- Remove conditional code that targets Rails 5.1 #3505 (kennyadsl)
- Disable codes on apply automatically promo #3502 (MassimilianoLattanzio)
- Replace map.sum with sum #3498 (grzegorz-jakubiak)
- Calling to_proc is faster than argumentless method #3497 (grzegorz-jakubiak)
- Use create_if_necessary instead of a simple find_or_initialize #3494 (elia)
- Replace map.flatten with flat_map #3491 (grzegorz-jakubiak)
- Reintroduce and deprecate Order#deliver_order_confirmation_email #3485 (elia)
- Fix order state with customer returns when receiving return items #3483 (elia)
- Remove user address reference when removing address from the address #3482 (SamuelMartini)
- Use Spree::Base as models base class #3476 (filippoliverani)
- Deprecate raising an exception when order and line item currencies mismatch #3456 (kennyadsl)
- When a controller action fails to be authorized, redirect back or default to /unauthorized #3118 (genarorg)
- Add make_default method on AddPaymentSourcesToWallet class #2913 (vassalloandrea)
- Permit passing an address via payment source parameters #3713 (kennyadsl)
- Allow capturing or voiding payments only with positive amount #3761 (spaghetticode)
- Fix address validation having a country w/o states #3763 (cedum)
- Remove a N+1 query on shipment model #3598 (albanv)
- Fix Italy state seed generation #3722 (seand7565)
- Add preference for phone validation #3685 (seand7565)
- Refactor address state validation #3129 (cedum)
- Fix the singular translation for Spree::Role #3799 (elia)
- Fix the install generator #3777 (seand7565)
- TaxHelpers#rates_for_item now respects the validity period of tax rates #3768 (jugglinghobo)
- 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)
- 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)
- Return API Users with distinct result when using Ransack #3674 (hefan)
- Revert "API uploads images via URL" (#3573) #3622 (kennyadsl)
- [API] Remove country and state input from address-input doc #3589 (SamuelMartini)
- [API] Upgrade API docs to OpenAPI Specification 3.0 #3588 (filippoliverani)
- Add API endpoint for customer returns #3579 (seand7565)
- API uploads images via URL #3573 (calebhaye)
- Enable api checkout spec that was skipped #3551 (SamuelMartini)
- Remove code from Spree::Api::PromotionsController #3529 (SamuelMartini)
- [API] Add bang method when finding product property #3528 (SamuelMartini)
- Rescue state machine exception from api base controller #3520 (SamuelMartini)
- Scope image by product_id or variant_id in ImagesController #3510 (SamuelMartini)
- Api: move address books specs in the right folder #3499 (kennyadsl)
- Deprecate Spree::Address firstname, lastname and full_name #3584 (filippoliverani)
- Deprecate reimbursement hooks #3541 (spaghetticode)
- Explicit deprecation warning mocks #3753 (cedum)
- Set payment method to none #3751 (peterberkenbosch)
- Use CircleCI contexts in jobs that require secrets #3747 (kennyadsl)
- The install generator is no longer using Bundler::CLI #3739 (elia)
- Upgrade acts_as_list gem dependency to allow v1.x #3736 (marcrohloff)
- Speedup the CI #3699 (elia)
- Do not attempt to create multiple records with
global_zone
factory #3688 (spaghetticode) - Add changelog for v2.10.1 #3659 (tvdeyen)
- Add webdrivers gem #3657 (peterberkenbosch)
- Add factory_bot lint test to core #3647 (seand7565)
- Fix specs on Rails master/6.1.0.alpha #3614 (filippoliverani)
- Bump required Ruby version to 2.5 #3594 (peterberkenbosch)
- Fix Ambassadors formatting in README #3567 (kennyadsl)
- Add CircleCI job to run tests against Rails master #3557 (filippoliverani)
- Re-alphabetize app configuration prefs #3556 (elia)
- Add system specs configuration #3552 (blocknotes)
- Fix install generator auth option in common rake tasks #3549 (kennyadsl)
- Improve gemspecs of solidus and subcomponents #3546 (kennyadsl)
- Simplify Solidus installation steps #3545 (kennyadsl)
- Replace ActiveJob::TestHelper with own module. #3543 (jessetilro)
- Rename the installation generator to solidus:install #3538 (kennyadsl)
- Remove Engine from Ambassadors #3536 (kennyadsl)
- Add Rails 6.1.0.alpha/master support #3515 (filippoliverani)
- Improve sample data for the returned/reimbursed order #3495 (kennyadsl)
- Add some bin/ helpers #3489 (elia)
- Silence log messages from the capybara server #3484 (elia)
- Preparation for v2.11 #3479 (kennyadsl)
- Adjust Open Collective badges to display correctly #3764 (kennyadsl)
- Make spelling of 'email' consistent #3780 (brchristian)
- Add missing space to deprecation message #3790 (jacobherrington)
- Disable Rails master builds on CircleCI #3796 (tvdeyen)
- Bump elliptic from 6.4.1 to 6.5.3 in /guides #3723 (dependabot)
- Bump lodash from 4.17.14 to 4.17.19 in /guides #3714 (dependabot)
- Updating documentation around ransack #3709 (tmtrademarked)
- Fix minor typo in order overview docs #3665 (albertoalmagro)
- Fix typos in guides #3660 (RoelandMatthijssens)
- [guides] Fix awesome nested set gem link #3643 (spaghetticode)
- Generate stoplight doc on version with multiple digits #3632 (kennyadsl)
- Add missing link to RMAs docs in Inventory overview #3590 (cedum)
- Guides: add basic Google Analytics integration #3582 (kennyadsl)
- Fix api checkout flow documentation #3575 (SamuelMartini)
- Show v2.10 install instructions along with new ones #3562 (kennyadsl)
- [Guides] Add System Requirements page #3540 (kennyadsl)
- Replace wrong key and add parameters in product taxons endpoint doc #3531 (SamuelMartini)
- Replace http method in api doc #3530 (SamuelMartini)
- Fix typo in documentation #3525 (spaghetticode)
- Bump nokogiri from 1.10.4 to 1.10.8 in /guides #3523 (dependabot)
- [Guides] Improve extensions pages #3522 (kennyadsl)
- Link to solidus_dev_support instead of solidus_cmd #3521 (MFRWDesign)
- Improve endpoint description of some API endpoints #3509 (SamuelMartini)
- Add a missing link to the 2.10 changelog #3503 (elia)
- Update images sizes to the new defaults #3493 (elia)
- Fix stock configuration examples in documentation #3487 (gugaiz)
- Add links to the community guidelines #3437 (jacobherrington)
- Update custom search sample query #3396 (peterberkenbosch)
- Guides (API): Some additional API token info #3368 (felixyz)
- Add discontinue on to products guides #3795 (tvdeyen)
Added support for Rails 6
Solidus core now fully support Rails 6! After upgrading to the 2.10 you can follow the official Rails Upgrading Guide here: https://guides.rubyonrails.org/upgrading_ruby_on_rails.html#upgrading-from-rails-5-2-to-rails-6-0 Please note that Rails 6 requires Ruby 2.5.0 or newer.
- Add support for Rails 6 #3236 (aldesantis)
- Fix dummy app generator to skip Bootsnap and Webpack in Rails 6 #3327 (aldesantis)
- Handle deprecation for Rails 6 in DummyApp #3352 (cedum)
Deprecated support for Rails 5.1
Rails 5.1 is deprecated and we'll remove support to 5.1 on the next version. If you are still using it, a deprecation warning will be printed in your logs when the application boots.
Changed default images sizes
We update the images used by Solidus demo in the sample
gem. To update
those images we needed to change the default sizes of Spree::Image. They
changed from:
mini: '48x48>', small: '100x100>', product: '240x240>', large: '600x600>'
to
mini: '48x48>', small: '400x400>', product: '680x680>', large: '1200x1200>'
If your store relies on these sizes, you should change them back following the guide here: https://guides.solidus.io/developers/products-and-variants/product-images.html#paperclip-settings.
- Upload new sample images #3270 (mfrecchiami)
- Remove unused sample images #3397 (JDutil)
- Update sample imgs with wrong file extension #3343 (mfrecchiami)
State machines extracted into their own replaceable modules
This allows stores to replace the state machine completely with their own implementation, even with different gems or using custom code without any state machine gem. All the customizations previously made to the state machine should work smoothly, but it could be a good idea to check twice. You can read more about the suggested way to customize the state machine here: https://guides.solidus.io/developers/customizations/state-machines.html#state-machines
Display error if editing non-current order
In Solidus frontend users were able to input any order_id
in the
/orders/:order_id/edit
route and they were simply seeing the cart
(showing the current order and not the requested one) without any notice.
With this Solidus version we print an flash message and redirect users to
their cart.
Solidus now requires Ruby 2.4 or newer
Ruby 2.2 and 2.3 support has ended, Rubocop support for 2.2 ended and they are also about to drop 2.3. Also, we already introduced code that is not compliant with 2.2 anymore.
- Fix product discard and classifications issue #3439 (softr8)
- Let Address#build_default accept args and block #3429 (elia)
- Several small refactors to promotions code #3416 (kennyadsl)
- Document the real meaning of checkout#set_state_if_present #3406 (elia)
- Pass stock location to inventory unit factory #3375 (pelargir)
- Allow to easily extend
Auth#store_location
behavior #3369 (spaghetticode) - Replace update_attributes with update #3334 (aldesantis)
- Added location_filter_class as a writable attribute #3330 (ericsaupe)
- Make all belongs_to associations optional #3309 (tvdeyen)
- Raise exception if dividing by 0 #3305 (ericsaupe)
- Remove a duplicate method call #3295 (jacobherrington)
- Change nil check to use safe navigation operator #3293 (jacobherrington)
- Ensure cartons find soft deleted shipping methods #3165 (pelargir)
- Allow orders with different shipping categories #3130 (aitbw)
- Allow configuring VAT Price Generator class #3451 (kennyadsl)
- Refactor Spree::Address value_attributes #3465 (filippoliverani)
- Revert method removal and replace it with a deprecation #3477 (elia)
- Fix bug for billing address state value not changing with customer #3435 (spaghetticode)
- Set error flash when unsuccesful destroy using HTML format #3428 (mamhoff)
- Use proper fixture path for Backend file fixtures #3424 (JuanCrg90)
- Fixing admin store credit reasons tab not expanded #3401 (softr8)
- Add permission check for admins updating user passwords #3394 (JDutil)
- Add tooltips to admin calculators #3382 (codykaup)
- Add initial value to reduce function for tab widths #3377 (fastjames)
- Paginate master prices #3353 (mamhoff)
- Disable submit buttons after first click #3342 (spaghetticode)
- Add information about the variable_override file #3341 (mfrecchiami)
- Use relative path to specify layouts path #3335 (kennyadsl)
- Use default sass function to lighten colors #3331 (mfrecchiami)
- Style collapsing sidebar #3322 (mfrecchiami)
- Fix tab background color, too dark #3320 (Ajmal)
- Added empty cart button in admin cart #3316 (ericsaupe)
- Making taxon form to render attachment definitions dynamically #3308 (softr8)
- Fix hook attr name for settings tab item in admin #3301 (cedum)
- Update usage count in Promotion eligibility check #3297 (filippoliverani)
- Update cancel inventory tab for consistency #3289 (ericsaupe)
- Rename
_mixins.css
file to.scss
#3286 (mamhoff) - Use pluck(:value).first to avoid loading entire row and using try! #3282 (JDutil)
- Only display Store Credit links with permission #3276 (JDutil)
- Update Tab colors with its own variables #3274 (mfrecchiami)
- Remove "Add product" in admin order shipments page #3214 (spaghetticode)
- Add explicit closing div to admin order edit #3473 (peterberkenbosch)
- Fix issue with user breadcrumbs #3152 (jtapia)
- Remove RABL remnants #3425 (JuanCrg90)
- Mention solidus-sdk in the API readme #3409 (aldesantis)
- Use Kaminari's limit_value in API pagniation #3287 (ericsaupe)
- Remove unused route #3443 (kennyadsl)
- Remove Deprecated EmailValidator #3395 (JDutil)
- Fix deprecation message for Spree::CreditCard #3388 (spaghetticode)
- Fix Money gem deprecations #3453 (kennyadsl)
- update rubocop version #3449 (hmtanbir)
- Relax Paperclip dependency #3438 (mamhoff)
- Remove last migration's spec file #3415 (kennyadsl)
- Update one letter variables to be more descriptive #3400 (JDutil)
- Change variable names to enhance readability in helpers #3399 (juliannatetreault)
- Rename one letter variables #3292 (jacobherrington)
- More eager loading in admin and api #3398 (softr8)
- Reload product before assigning images to variants #3389 (JDutil)
- Ask to provide screenshots for PRs with visual changes #3385 (spaghetticode)
- Lock Sprockets to v3.x in development #3378 (spaghetticode)
- Fix Sprockets 4 support for extensions #3373 (aldesantis)
- Officialize new taxation system #3354 (kennyadsl)
- fix spelling of locale logged_in_successfully #3346 (nspinazz89)
- Remove duplicate Spree::Order.register_update_hook specs #3340 (kennyadsl)
- Fix responders gem dependency #3336 (kennyadsl)
- Avoid installing webpacker in sandbox #3326 (kennyadsl)
- Remove sqlite3 version lock in sandbox/development #3325 (kennyadsl)
- Add missing entries to en yml #3313 (delphaber)
- Add docs for partials that need to be provided #3300 (skukx)
- Add dimensions and weight to product samples #3291 (BravoSimone)
- Remove zombie promotion specs variables #3280 (cedum)
- Attempt to fix flaky specs #3278 (kennyadsl)
- Freeze preferences for Backend, Frontend and Api specs as well #3275 (kennyadsl)
- Make preferences usage uniform across all Solidus gems #3267 (kennyadsl)
- Improve line items params in the API documentation #3445 (kennyadsl)
- Updates Guides: Security and simple installation #3436 (kennyadsl)
- Update Slack links in README. #3433 (jrgifford)
- Guides: do not escape markdown headers in custom renderer #3432 (filippoliverani)
- Add list of events fired by default to Guides/Events #3430 (j-sm-n)
- Fix a typo in one old CHANGELOG entry #3419 (elia)
- Several Guides improvements #3418 (kennyadsl)
- Add max_line_length for Markdown files #3410 (aldesantis)
- Update guides and add mailer customization guide #3403 (michaelmichael)
- Update CONTRIBUTING.md #3402 (juliannatetreault)
- Document the config assigment for vat_country_iso #3386 (peterberkenbosch)
- Document contribution guidelines for API docs #3384 (aldesantis)
- Add steps for installing database gems in README #3380 (codykaup)
- Link to guides after installation instructions #3372 (jarednorman)
- Correct misspelling in API Documentation for Create Product #3370 (octoxan)
- Added a new page to the documentation for customizing model attributes #3360 (octoxan)
- Update guides node-sass dependency to be compatible with Node versions > v10 #3359 (octoxan)
- Update Open Collective info in the README #3332 (kennyadsl)
- Add Algolia Docsearch on Guides #3324 (tvdeyen)
- Move API documentation to solidus_api #3323 (aldesantis)
- Document contribution guidelines for API documentation #3318 (aldesantis)
- Bump/Lock a couple of npm libraries in /guides #3317 (kennyadsl)
- Lock js-yaml and debug packages versions in guides #3312 (kennyadsl)
- Bump bootstrap from 4.1.3 to 4.3.1 in /guides #3310 (dependabot)
- Bump nokogiri from 1.8.5 to 1.10.4 in /guides #3306 (dependabot)
- Bump JS libs for security vulnerabilities #3281 (jacobherrington)
- Link to documentation after sandbox task #3277 (jacobeubanks)
- Bump lodash for a security vulnerability #3273 (kennyadsl)
- Document security policy location #3266 (aldesantis)
- Update README.md header #3251 (davidedistefano)
- Add zone link in taxation guides page #3247 (jacobherrington)
Added Spree::Event
Solidus now includes an event library that allows to use different adapters.
The default adapter is based on ActiveSupport::Notifications
library.
Events should allow developers to customize and extend Solidus behavior
more easily by simply subscribing to certain events. Sending emails may be a
simple use case for this new feature.
- ActiveSupport notifications for Events Handling #3081 (spaghetticode)
- Support class reloading for Event Subscribers #3232 (elia)
Attachment adapters
This is the first step to support other files attachment libraries since Paperclip is no more maintained. Solidus will release the ActiveStorage support in core in the next releases or via an extension.
Add more fields to the API json response for shipments
This change adds more fields to the API endpoints that return a shipment
object. We had two partials to represent shipments:
small
and
big
but some of the small
fields were not present in the big
partial. Now they
are aligned but users that were using those partials could notice some
difference in how the API endpoints involved respond.
Deprecate reset_spree_preferences in test
Changing preferences and resetting them after any example is not a good practice and it's error-prone. The new standard is stubbing preferences and it's enforced with a deprecation of reset_spree_preferences. This way we can gradually align stores and extensions.
- Allow only stubbed changes to
Spree::Config
in specs #3220 (spaghetticode)
Changed payment method partials name convention
Payment methods partials filename are now expected to be the
Spree::PaymentMethod class underscored instead of downcased. This means that,
for example, for Spree::PaymentMethod::StoreCredit
the corresponding partial
files would be named _store_credit
and not _storecredit
. If you overrode
one of the following files, you should rename it now:
api/app/views/spree/api/payments/source_views/_storecredit.json.jbuilder → api/app/views/spree/api/payments/source_views/_store_credit.json.jbuilder
backend/app/views/spree/admin/payments/source_forms/_storecredit.html.erb → backend/app/views/spree/admin/payments/source_forms/_store_credit.html.erb
backend/app/views/spree/admin/payments/source_views/_storecredit.html.erb → backend/app/views/spree/admin/payments/source_views/_store_credit.html.erb
Also, if you've built your own payment method you may need to change the corresponding partials filename.
- Change payment method partial name convention #3217 (bitberryru)
Fix non thread safe gateway initialization
ActiveMerchant::Billing::Base.mode
is a global ActiveMerchant
preference
and we were setting it into each payment gateway initialization. This means
that if the last instantiated payment method's mode was different from the
other ones, the last one's mode will be applied to all of them. To fix this
issue we changed how we tell ActiveMerchant that one gateway is in test mode.
Please double check your production configuration for payment methods: only
payment methods where server
preference set to production and test_mode
turned off will work in "production" mode.
- Fix non thread safe gateway initialization #3216 (bitberryru)
Remove name from default ransackable attributes
Ransack needs a whitelist of attributes to perform a search against for security
reasons. We used to whitelist id
and name
for all the models but not all
models have the name
attribute/column making ransack search raise an error.
If you have a custom model and you are performing search against its name
,
now you have to manually add it to the ransackable whitelist for that resource.
Admin restyle
Solidus has a fresh Admin UI! Your eyes will thank you and this would not impact your store but if you added some custom CSS that matches the old Admin UI, you probaly have to make some change at it now.
- Update admin color palette and font #3192 (mfrecchiami)
- Add a color to menu selected items #3269 (mfrecchiami)
Changes to how returns are processed from a return item
It you are programmatically calling Spree::ReturnItem#process_inventory_unit!
please notice that it doesn't automatically process return anymore. To remove
the deprecation warning you have to set an attribute on your return_item
instance before calling process_inventory_unit!
:
return_item.skip_customer_return_processing = true
return_item.process_inventory_unit!
# here you should process the customer return manually
- Allow order with multiple line items to be marked as "Returned" #3199 (spaghetticode)
New REST API documentation
Our REST API is now documented using the Open API Specification. The documentation is part of the repository and published on https://solidus.docs.stoplight.io/.
- Document the API via OpenAPI #3252 (aldesantis)
- Refactor Promotions Environment Configuration #3239 (kennyadsl)
- Add preferred_reimbursement_type_id as permitted attributes for ReturnAuthorization #3215 (ibudiallo)
- Add OriginalPayment reimbursement type in seeds #3213 (kennyadsl)
- Fixes for discard 1.1.0 #3202 (kennyadsl)
- Improve error messages for wallet payment source #3196 (kennyadsl)
- Use taxon children when searching classification #3168 (fkoessler)
- Improve promotion statuses #3157 (JuanCrg90)
- Fix DB-specific, query-related exceptions #3156 (aitbw)
- Convert Tax Categories to discard #3154 (kennyadsl)
- Don't run validations in Order#record_ip_address #3145 (cedum)
- Align some deprecation messages in Order model #3135 (elia)
- Refactor order #refund_total #3134 (twist900)
- Remove code setter/getter from Spree::Promotion #3127 (kennyadsl)
- Do not allow successful checkout when order has only a void payment #3123 (spaghetticode)
- Add a stock locations filter configurable class #3116 (kennyadsl)
- Add migration to drop table/column from
20180710170104
#3114 (spaghetticode) - Fix migration
20161123154034
and20120411123334
#3113 (spaghetticode) - Remove destructive actions from migration 20180710170104 #3109 (spaghetticode)
- Fix remove code from promotions migration #3108 (kennyadsl)
- Fixing inventory unit finalizer #3094 (seand7565)
- Parameterize taxon's permalink also on update #3090 (loicginoux)
- Exclude line item additional taxes from unit cancel adjustment amount #3072 (mdesantis)
- Products at multiple Stock Locations appear as unique variants #3063 (mayanktap)
- Verify ownership of payment_source when creating WalletPaymentSource #3007 (ericsaupe)
- Remove user prereq from First Order promorule #2928 (fastjames)
- Remove belongs_to :return_authorization from InventoryUnit #2753 (snarfmason)
- Improve pricing options flexibility #2504 (softr8)
- Use
.take
in admin promotion index template #3224 (DianeLooney) - Remove unused variable assignment from Admin::OrdersController#index action #3170 (aitbw)
- Remove conditional when searching an order when creating a shipment #3169 (aitbw)
- Disable adjust stock field when user does not have the correct permission #3163 (seand7565)
- Fix stock item form to allow changing backorder value #3159 (kennyadsl)
- Promotion start/expiration times #3158 (aldesantis)
- Hide Master Price input when there's no default price #3155 (kennyadsl)
- When editing prices keep the currency locked. #3150 (peterberkenbosch)
- Hide link to delete users if they have orders #3139 (aitbw)
- Count only users completed orders in admin users page #3125 (brchristian)
- Remove unnecessary decimal conversion #3124 (brchristian)
- Set mininum line item quantity in admin cart #3115 (mamhoff)
- Adding else statement back in to show weight and dimensions on no-var… #3112 (seand7565)
- Admin payments UI cleanup #3101 (tvdeyen)
- Fix fieldset legend position in Firefox #3100 (tvdeyen)
- Add tests for locale switch on backend #3083 (coorasse)
- Add countries to state selection for zones #3037 (jacobherrington)
- Improve jbuilder serialization for Oj gem #3210 (kennyadsl)
- More error codes to apply_coupon_code api response #3193 (fkoessler)
- Deprecate @payment_sources ivar in checkout controller #3128 (kennyadsl)
- Deprecate core tasks and migration scripts #3080 (kennyadsl)
- Move Spree::AppConfiguration specs from app/ to lib/ #3238 (kennyadsl)
- Add a Sponsor button to our repository #3228 (kennyadsl)
- Improve JS linting, pt. 2 #3225 (aitbw)
- Improve JS linting #3212 (aitbw)
- Add basic tooling for JS linting #3167 (aitbw)
- Use a rails application template for Heroku + example-app #3206 (elia)
- Eval the custom Gemfile with file and line number #3204 (elia)
- Improve translation #3200 (spaghetticode)
- Increase Capybara window width size #3171 (aitbw)
- Enable extension developers to customize the namespace #3161 (mdesantis)
- Fix flaky specs around admin credit card filling #3160 (kennyadsl)
- Ensure return from CSS function #3146 (fastjames)
- Add missing I18n namespace #3144 (aitbw)
- Tentative fix for flaky specs #3141 (kennyadsl)
- Remove Devise translations #3132 (aitbw)
- Tenative fix for flaky spec #3110 (spaghetticode)
- Enable Docker for demoing purposes #3106 (kinduff)
- Fix sed call so it works on mac #3091 (peterberkenbosch)
- Fix flaky specs in
backend/spec/features/admin/users_spec.rb
#3089 (spaghetticode) - Lock sqlite3 version to 1.3 #3088 (mdesantis)
- Accept source as permitted attribute importing orders #3066 (jtapia)
- Testing tools improvements #3062 (kennyadsl)
- Add gem-release #3060 (kennyadsl)
- Normalize API I18n keys #2988 (aitbw)
- Document our governance model #3240 (aldesantis)
- Clarify README instructions for Sandbox #3231 (k1bs)
- Purify guides search terms before using them #3230 (kennyadsl)
- Add new Key Stakeholder in the README #3229 (davidedistefano)
- Bump fstream from 1.0.11 to 1.0.12 in /guides #3218 (dependabot)
- Add CodeTriage badge and fix OpenCollective badges links #3211 (mdesantis)
- Fix partner image #3203 (jarednorman)
- Add active merchant reference URL in Guides #3188 (jacquesporveau)
- Add promotion rules article for Solidus admins #3185 (benjaminwil)
- Update class methods to be instance methods. #3173 (jacquesporveau)
- Correct adjustment type application order in guide #3153 (BenAkroyd)
- Fix typo in "Addresses" developers guide #3147 (cedum)
- Update TaxLocation Namespace #3142 (JuanCrg90)
- Add Adjustment documentation reference links #3122 (JuanCrg90)
- Minor updates in promotions overview documentation #3121 (JuanCrg90)
- Add initial order documentation for end users #3105 (benjaminwil)
- Move misplaced end-user documentation #3104 (benjaminwil)
- Remove CHANGELOG entry from PR's template #3102 (kennyadsl)
- Update Solidus Guide footer #3097 (davidedistefano)
- Add support for multiple tables of contents in the Solidus Guides #3093 (kennyadsl)
- Add initial shipments documentation for end users #3092 (kennyadsl)
- Add payment state link in orders overview docs #3084 (JuanCrg90)
- Bug report template improvements #3069 (mdesantis)
- Improve Pull Request template #3058 (kennyadsl)
- Extend Decorator documentation #3045 (jacobherrington)
- Updating readme to include OpenCollective information #3042 (seand7565)
- Add documentation about taxons for end users #2760 (benjaminwil)
Added Api::CouponCodesController#destroy endpoint
A new endpoint has been added to Solidus API. It allows to remove a coupon code from an order. It has currently no backend or frontend implementation but it's common for custom stores to require it.
Moved Reports into an extension
We removed the reports section from admin to an extension. If you use it you have to add it back manually by adding
gem 'solidus_reports', github: "solidusio-contrib/solidus_reports"
Add a store credit reasons UI in Admin
The only way to manage store credit reasons was via console or using a data migration.
Skip forgery protection in api controllers
Rails is now enabling forgery protection by default so we need to explicitly disable it for api requests, as described here:
http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection.html
This PR also enables forgery protection by default in the specs dummy app so that we can really test that the api code is working in a real Rails 5.2+ environment.
Add a Gallery to handle variants and products images
All images that we send to the view layer is now using these classes that contain the logic to retrieve images and are easier to extend. If you have a lot of customization on how you display images you probably need to take a look at how this has been implemented.
Replace jquery_ujs with rails-ujs
This is the Rails standard now. There could be some action required, depending on if the manifest provided by solidus has been changed. Please read the PR description for more info.
Removed code from Spree::Promotion
Previously Solidus used code
column on spree_promotions
to add a code
to promotions that could be used as coupon code by users. This is no more a
thing since we support multiple coupon codes associated to a single promotion.
This change is important because it's quite common for old stores to have some
promotion with code
field still present in the database, even if it's not used.
When performing the migration present in this PR it will raise an exception if
there are records in the spree_promotions
table with that field present.
It's up to each store to understand how to handle this scenario before running
this migration. We also provide other two ways to handle this, and users can
just change the migration after it has been copied into their store.
It's just matter of changing the content of the
RemoveCodeFromSpreePromotions.promotions_with_code_handler
method and make it
return one of the following:
Solidus::Migrations::PromotionWithCodeHandlers::MoveToSpreePromotionCode
: it will convert Spree::Promotion#code to aSpree::PromotionCode
before removing thecode
column.Solidus::Migrations::PromotionWithCodeHandlers::DoNothing
: it will print a message to track what we are deleting.
Alternatively users can create their own class to handle data and return that
class. The new class could inherit from PromotionsWithCodeHandler
and
should respond to call
.
- Fix Spree::Variant inconsistency due to lack of product association #3043 (rubenochiavone)
- Make seed file fully idempotent #3033 (jontarg)
- Fix multiple Money deprecation warnings. Now using html_wrap option which causes each piece of the price to be wrapped in span tags with specific classes for easier styling, but this may break existing stores' custom styles. #2912 (JDutil)
- Remove update_totals/persist_totals delegation #3012 (jarednorman)
- Fix autoload issue. Replace require/load with require_dependency. #3008 (bitberryru)
- Enable partial doubles verification for RSpec #3005 (cedum)
- [v2.7] Fix deprecations to make Solidus work with Rails 5.2.2 #2992 (kennyadsl)
- Add acts_as_list to Spree::StockLocation #2953 (rymai)
- Add missing i18n English values #2942 (jacobherrington)
- Allow to bypass SKU validation #2937 (fastjames)
- Add translation for details attribute of LogEntry model #2925 (bitberryru)
- Spree::FulfilmentChanger stock allocation fix #2908 (spaghetticode)
- DRY Spree::OrderContents #2907 (spaghetticode)
- Improve trustworthiness of a content items price. #2897 (jacquesporveau)
- Use ActiveRecord relation for Spree::Shipment#line_items #2886 (spaghetticode)
- Round calculator values based on order currency #2877 (ericsaupe)
- Add an allocator class to extend the Solidus initial allocation logic #2810 (vassalloandrea)
- Remove default address dependency part 2 #2802 (kennyadsl)
- Stock location sorters #2783 (aldesantis)
- Recalculate order after reimbursement creation #2711 (DanielePalombo)
- Finalize shipment after inventory units are added to completed order #2331 (DanielePalombo)
- Use right language_locale_key #3044 (DanielePalombo)
- Fix missing image in autocomplete variant #3032 (rubenochiavone)
- Skip populating states select on default country not included in available countries #3030 (mdesantis)
- Add favicon to the admin layout #3025 (mdesantis)
- Standardize shared resource links #2997 (brchristian)
- Use Spree::Variant#should_track_inventory? to disable 'Count on hand' input #2977 (aitbw)
- Disable 'count on hand' input when 'track inventory' option is set to false #2960 (aitbw)
- Bug/remove mini image from admin view #2976 (nvh0412)
- Prevent multiple refund creations with accidental double clicks #2970 (spaghetticode)
- Fix "Stock" admin nav double highlight #2969 (tvdeyen)
- Added a link to the frontend product from the backend product edit page #2956 (seand7565)
- Use filter over search for filter options #2940 (jacobherrington)
- Add ordering to menu items #2939 (jacobherrington)
- Change new order creation link #2936 (jacobherrington)
- remove unused routes and actions from return authorizations #2929 (ccarruitero)
- Add response with error message on failure destroy action #2920 (bitberryru)
- Fix tab selection in sidebar navigation #2918 (bitberryru)
- Improve text in "new promotions" form for better usability #2917 (michaelmichael)
- fix closing tag mismatch #2901 (bitberryru)
- Fix a N+1 query problem in the orders controller #2894 (rymai)
- Show errors on admin shipment line item destroy failure #2892 (spaghetticode)
- Revert tooltip observer change as it does not work properly. #2890 (JDutil)
- Add a Master SKU field to the products form #2875 (jacobherrington)
- Create a new promotion code inside an existing promotion #2872 (stem)
- New stock management #2862 (tvdeyen)
- Fix highlighting on tax sub menu #2854 (jacobherrington)
- Fix a bug with the settings subnav #2853 (jacobherrington)
- allow multiple taxons on product creation #2840 (jacobherrington)
- add en-US locale to select2 #2805 (afdev82)
- Use two column layout for stock location form #2727 (tvdeyen)
- Fix N+1 problem on Api::TaxonsController#index #3011 (stem)
- Include records on API Order / Product queries #3002 (fastjames)
- Rescue from
Spree::Order::InsufficientStock
onfrontend
checkout flow #3023 (spaghetticode) - Fix coupon code placeholder value. #3009 (bitberryru)
- Fix closing td #2999 (lukasbischof)
- Add padding to the order summary #2903 (jacobherrington)
- Deprecate 'X-SPREE-TOKEN' header 2 #3029 (twist900)
- Update Jbuilder to v2.8 to fix deprecation warnings #2962 (aitbw)
- Deprecate existing coupon codes methods #2958 (aitbw)
- Fix deprecation warning for Spree::Shipment#reverse_chronological scope #2921 (aitbw)
- Add deprecation warning for Spree.t #2915 (JDutil)
- Update issues/PRs templates #3026 (kennyadsl)
- Explicitly require Bundler within Rakefile #3022 (mdesantis)
- Enable partial doubles verification for RSpec (part 2) #3015 (cedum)
- SVG images #2995 (elia)
- Add margin to billing fields #2985 (jacobherrington)
- Add criteria for merging a PR #2983 (jacobherrington)
- Lint ERB files via HoundCI #2982 (kennyadsl)
- Move script files to bin + documentation #2971 (elia)
- Upgrade rack to 2.0.6 for security reasons #2964 (tvdeyen)
- Add i18n-tasks and normalize translations #2963 (afdev82)
- Add script to skip CircleCI on guides #2955 (jacobherrington)
- Dont need to lockdown autoprefixer-rails. #2916 (JDutil)
- fix translations keys #2902 (bitberryru)
- symbol can't be argument for :count in east slavic locales #2900 (bitberryru)
- Fix reference to logo on heroku template #2896 (chukitow)
- Move to sassc-rails #2883 (jacobherrington)
- Update .travis.yml example to non EOL versions #2867 (jacobherrington)
- Setup Netlify site for yard docs #3019 (tvdeyen)
- Update
add-configuration
guide page #3001 (spaghetticode) - Expand the promotion rules implementation example #2954 (jacobherrington)
- Add missing doc links #2948 (jacobherrington)
- Add a table of contents to the readme #2945 (jacobherrington)
- Standardize capitalization #2943 (jacobherrington)
- improve decorators / contributing docs #2933 (elia)
- Guides improvements #2923 (kennyadsl)
- Add API section to developer guide table of contents #2909 (benjaminwil)
- Add a Netlify configuration for deploying guides site #2893 (tvdeyen)
- Use logo.svg in the README #2887 (jacobherrington)
- Fix a security vulnerability in guides #2885 (kennyadsl)
- Add comments to the issue template #2884 (jacobherrington)
- Update promotion actions documentation #2871 (jacobherrington)
- Add a reference to the Writing Extensions doc #2851 (jacobherrington)
- Add article that documents a Spree::Order journey #2803 (benjaminwil)
Rails 5.2.1
Added support for Rails 5.2.1. Solidus 2.7.0 supports either Rails 5.2.x or 5.1.
Guides
Added the new guides website code directly into the main repository. This way it should be simpler to keep guides up to date.
- Update guides ffi gem #2838 (kennyadsl)
- add documentation for making new Solidus extensions #2813 (jacobherrington)
- Fix guides typos and clean up example code blocks #2785 (benjaminwil)
- Update promotion-rules.md #2764 (bazfer)
- Add links to guides.solidus.io in Solidus's README.md and clean up README formatting #2763 (benjaminwil)
- Tweak documentation site Middleman configuration #2762 (benjaminwil)
- Add documentation about variants for end users #2761 (benjaminwil)
- Add documentation about product properties for end users #2759 (benjaminwil)
- Add initial stock documentation for end users #2757 (benjaminwil)
- Add promotion actions and promotion calculators documentation for end users #2755 (benjaminwil)
- Add Gemfile.lock to docs site project #2752 (jgayfer)
- Add initial zones documentation for end users #2750 (benjaminwil)
- Add initial taxation documentation for end users #2749 (benjaminwil)
- Fix security vulnerabilities in docs site #2747 (jgayfer)
- Add initial user management documentation for end users #2745 (benjaminwil)
- Update promotion-rules.md #2742 (bazfer)
- Move guides to new docs site #2740 (jgayfer)
- Add docs site shell #2739 (jgayfer)
- Add initial promotions documentation for end users #2735 (benjaminwil)
- Add initial product documentation for end users #2723 (benjaminwil)
- Overview documentation for the Solidus API #2714 (benjaminwil)
- Set correct quantity on order import #2837 (fastjames)
- Money#allocate calculates weights already #2836 (huoxito)
- Update user_class_handle.rb #2832 (bazfer)
- Allow customizing the promotion code batch mailer class #2796 (jtapia)
- Allow customizing the reimbursement mailer class #2795 (jtapia)
- Allow customizing the order mailer class #2792 (jtapia)
- Compatibility with Rails 5.2.1 & Ransack #2826 (kennyadsl)
- Move factory_bot static attrs to dynamic #2831 (fastjames)
- Use Spree.user_class.table_name instead of spree_users #2815 (masatooba)
- Fix a store credit spec that is time zone dependent #2778 (kennyadsl)
- Making sure order by columns do not collide with other tables #2774 (softr8)
- Fix permissions for users to change their own orders #2787 (kennyadsl)
- Fix space between taxons on admin taxonomies #2812 (jtapia)
- Fix issue not updating payment method type on admin #2788 (jtapia)
- Tracking Number link to Tracking URL page #2829 (JuanCrg90)
- make customer email field required when an admin is making a new order #2771 (jacobherrington)
- Fix bug with user address forms #2766 (jacobeubanks)
- Dynamically render ReportsController translations #2751 (stewart)
- Add missing data-hook on customer_returns tab #2738 (fkoessler)
- Require sass >= 3.5.2 #2734 (gmacdougall)
- The promotions "Advertise" checkbox and the "URL Path" promotion activation method have been removed from the admin UI because the features are not implemented in solidus_frontend #2737 (benjaminwil)
- Use a different session key for admin locale #2685 (jhawthorn)
- Disable backend footer profile edit link if role cannot edit users #2646 (gianlucarizzo)
- Improve admin return authorization controller #2420 (kennyadsl)
- The
TaxonsController#show
action loads now the@taxon
in abefore_action
callback. This means that if you overrode theshow
method you may be loading the@taxon
variable twice. You can now change the behaviour of how the@taxon
is loaded overriding theload_taxon
method instead. #2782 (coorasse) - Move checkout coupon code section into summary. Now passing [:order][:coupon_code] into any controller of the frontend will not perform any action, while it was trying to add a new coupon code before. It now only works in checkout and orders controller. #2327 (kennyadsl)
Rails 5.2
This is the first version of Solidus to support Rails 5.2. Solidus 2.6.0 supports either Rails 5.1 or 5.2. We're hoping this makes both upgrades as easy as possible since they can be done separately.
Merged solidus_i18n functionality
Much of solidus_i18n's functionality has been merged into Solidus itself. Solidus now allows configuring one or more locales per-store in the admin. Both users and admins can select their preferred locales on the frontend or admin respectively. More information on how to upgrade can be found in the solidus_i18n README.
Guides
A lot of work has gone into guides, which are now much more comprehensive. A website to host them is in the works but for now they can be seen on github
- Upgrade cancancan to 2.x #2731 (jhawthorn)
- Replace
uniq
withdistinct
for cartons association #2710 (DanielePalombo) - Allow #try_spree_current_user to search for private methods #2694 (spaghetticode)
- Remove assert_written_to_cache #2691 (jhawthorn)
- cleanup order validate_payments_attributes #2696 (ccarruitero)
- Load email validator from core instead of order #2669 (jhawthorn)
- Promo code batch join chars #2662 (gevann)
- Move EmailValidator under Spree namespace #2635 (tvdeyen)
- Remove protected_attributes warning #2615 (jhawthorn)
- Namespace all testing_support/ files under Spree::TestingSupport namespace #2629 (jhawthorn)
- Remove foreign key from promotion_rules_stores #2603 (jhawthorn)
- Generate new stores with MySQL timestamp precision 6 #2598 (jhawthorn)
- Add frozen_string_literal: true to all files #2586 (jhawthorn)
- Distribute over eligible line items #2582 (Sinetheta)
- Add mutable false to default refund reason record #2574 (mdesantis)
- Specify inheritance for Spree::Promotion #2572 (SamuelMartini)
- Remove foreign key from store_shipping_methods #2596 (jhawthorn)
- Add options to PromotionCode::BatchBuilder and spec for unique promotion code contention #2579 (jhawthorn)
- Set HttpOnly flag when sending guest_token cookie #2633 (luukveenis)
- Splitting shipment should update order totals/payment status #2555 (VzqzAc)
- Add store promotion rule #2552 (adammathys)
- Add association between stores and shipping #2557 (adammathys)
- Make partially shipped shipment able to be ready #2634 (jhawthorn)
- Remove order_stock_locations association #2672 (jhawthorn)
- Generate correct number of codes in BatchBuilder #2578 (jhawthorn)
- Add amount_remaining for Spree::StoreCreditEvent #1512 (mtylty)
- Add per-store configurable locales #2674 (jhawthorn)
- Move Spree::Taxon#applicable_filters (rebase) #2670 (jhawthorn)
- Translate reception states and fix translation key #2283 (rbngzlv)
- Remove hardcoded admin store attributes #2713 (jtapia)
- Improve the admin UX for a product's "Available On" field #2704 (benjaminwil)
- UI fixes for admin locale select #2684 (tvdeyen)
- Set model_class on admin promotion rules controller #2623 (luukveenis)
- Fix admin payment actions style table issue #2589 (jtapia)
- Allowing admin to show all countries regardless checkout zone #2588 (softr8)
- Add locale chooser to admin #2559 (jhawthorn)
- Fix css class in taxons #2705 (yono)
- Backend stock movements improvements #2612 (kennyadsl)
- adding link to product in backend order summary #2609 (loicginoux)
- Properly limit per-quantity calculator types #2590 (Sinetheta)
- Avoid frozen string error in button helper #2592 (jhawthorn)
- Deprecate payment_method_name helper #2657 (jhawthorn)
- Fix API url when editing image alt text #2625 (loicginoux)
- Replace button_link_to with either button_to or link_to #2601 (jhawthorn)
- Replace button helper with standard button_tag #2600 (jhawthorn)
- Negative count on hand red #2682 (gevann)
- Match a closing tag in order_summary #2681 (shikolay)
- Fixing the promotion categories error message #1346 (mgharbik)
- Remove promotion_code from adjustment_attributes #2663 (gevann)
- Clean CheckoutsController routes #2649 (gevann)
- Update no_objects_found partial to allow not show new resource link #2289 (ccarruitero)
- Fix view for orders api (Fixes Issue #2512) #2513 (skukx)
- Add meta_title to product response #2480 (loicginoux)
- Creating an order should activate promotions #2576 (loicginoux)
- Render shipment json when payment source is nil #2611 (loicginoux)
- Fix
<td>
closing tag #2703 (dportalesr) - Fix duplicate variants on product page #2630 (mamhoff)
- Fix error when listing products without price #2605 (jhawthorn)
- Fix redirect to cart #2585 (matteocellucci)
- Add locale selector to frontend nav bar #2683 (jhawthorn)
- Filter unpriced products in taxon_preview #2604 (jhawthorn)
- Improve frontend checkout forms html #2416 (kennyadsl)
- Make frontend's LocaleController compatible with solidus_i18n #2626 (jhawthorn)
- Indent nested taxon menues and highlight the selected taxons. #2316 (bofrede)
- Fix typos and formatting in Solidus guides #2729 (benjaminwil)
- Add a documentation contributors guide #2718 (benjaminwil)
- Make documentation clearer and fix invalid links #2717 (benjaminwil)
- Add multiple typo fixes in the guides #2716 (Shkrt)
- Add documentation for Spree::Reimbursements and Spree::ReimbursementTypes #2678 (benjaminwil)
- Add documentation for Spree::CustomerReturn model #2677 (benjaminwil)
- Add documentation of Spree::ReturnItem model #2676 (benjaminwil)
- Add initial Solidus upgrades documentation #2641 (benjaminwil)
- Add initial Spree migration article #2640 (benjaminwil)
- Fix YARD warnings throughout core #2636 (jhawthorn)
- Add yard rake task #2632 (jhawthorn)
- Fix typo in CheckoutController comment #2631 (jgayfer)
- Rewrite payment processing documentation; add Spree::Order#payment_states documentation #2624 (benjaminwil)
- Add documentation introducing payment service providers #2620 (benjaminwil)
- Add documentation for the Spree::Payment model #2619 (benjaminwil)
- Rewrite article documenting payment methods #2618 (benjaminwil)
- Add initial documentation about payment sources #2617 (benjaminwil)
- Rewrite payments overview documentation #2613 (benjaminwil)
- Documentation touchup #2591 (jormon)
- Add documentation for stock items and stock movements #2539 (benjaminwil)
- Add documentation overview of inventory #2538 (benjaminwil)
- Add a stub article that summarizes Solidus's built-in tax calculator #2526 (benjaminwil)
- Add documentation that summarizes Solidus's built-in shipping calculators #2525 (benjaminwil)
- Add documentation that summarizes Solidus's built-in promotion calculators #2524 (benjaminwil)
- Initial calculators documentation #2511 (benjaminwil)
- Initial orders documentation #2498 (benjaminwil)
- Addresses documentation #2471 (benjaminwil)
- Initial promotions documentation #2467 (benjaminwil)
- Adjustments documentation #2459 (benjaminwil)
- Guides: Links and syntax fixes #2709 (tvdeyen)
- Fix markdown link syntax in payment service provider guide #2708 (tvdeyen)
- Fix the code syntax in installation options guide #2707 (tvdeyen)
- Add a guides index and generator #2671 (tvdeyen)
- Split existing configuration guide #2488 (benjaminwil)
- add payments guide #2388 (ccarruitero)
- Add overview of returns system #2675 (benjaminwil)
- Port extension testing document from wiki #2642 (benjaminwil)
- Update Orders state machine doc removing confirmation_required text #2658 (kennyadsl)
- Improve PaymentMethod docs and add some deprecations #2650 (jhawthorn)
- Remove generators from YARD docs #2651 (jhawthorn)
- Add custom authentication (User model) setup article #2581 (benjaminwil)
- Add article about views for new Rails developers #2560 (benjaminwil)
Previously Solidus used paranoia
to handle soft-deletion.
paranoia
, on acts_as_paranoid
models, replaces ActiveRecord's delete
and destroy
methods and instead of deleting the record sets the deleted_at
column.
This has been the cause of some surprising behaviour for users old and new.
In this version we are beginning to deprecate this using the discard
gem.
- Use paranoia_ prefixed methods #2350 (jhawthorn)
- Convert store credits to discard #2489 (jhawthorn)
- Convert shipping methods, payment methods, and tax rates to discard #2487 (jhawthorn)
- Convert promotion actions from paranoia to discard #2398 (jhawthorn)
- Convert product, variant, stock item, prices to discard #2396 (jhawthorn)
solidus_stock_transfers provides an admin interface to transfer stock between two locations. This used to be included in core but has been extracted to a gem.
- Extract stock transfers to the solidus_stock_transfers gem. #2379 (jhawthorn)
- Generate correct number of codes in BatchBuilder #2578 (jhawthorn)
- Add mutable false to default refund reason record #2574 (mdesantis)
- Use carmen to translate
available_countries
helper #2537 (jhawthorn) - Introduce "suppliable" scope to represent any variant which can_supply?(1) #2536 (jhawthorn)
- Fix calculator class check bug #2501 (pelargir)
- Allow
remove_default_tax
migration to be reversible #2496 (brchristian) - Make credit card parameter filtering more specific #2481 (jordan-brough)
- Improve product -> master attributes delegation #2474 (kennyadsl)
- Make the install generator idempotent #2472 (tvdeyen)
- Update totals after order_with_totals create #2470 (BravoSimone)
- Fixes for MySQL #2468 (jhawthorn)
- Prepare for Rails 5.2 #2465 (jhawthorn)
- New preference to control available currencies #2461 (softr8)
- Avoid changing method visibility when deprecating a method #2449 (jordan-brough)
- Require kaminari ~> 1.1 and some related improvements #2443 (jhawthorn)
- remove redundant delegation from product model #2427 (brchristian)
- Use I18n date format for
pretty_time
helper #2419 (tvdeyen) - Use a single top-level Gemfile for test dependencies #2407 (jhawthorn)
- Unify how we create sample store in default and sample data #2405 (kennyadsl)
- Update
updated_at
timestamp on eligibility change #2390 (adaddeo) - Remove stringex as a dependency of core #2383 (swcraig)
- Fixes for custom user generator #2382 (tvdeyen)
- Remove order association from inventory units #2377 (mamhoff)
- Move role configuration into Spree::Config #2374 (jhawthorn)
- Avoid loading models when requiring factories #2369 (jhawthorn)
- Allow loading solidus_core without Sprockets #2358 (jhawthorn)
- Improve
selected_shipping_rate_id=
#2355 (jhawthorn) - Change
make_permalink
behaviour #2341 (jhawthorn) - Follow FactoryBot rename #2315 (mamhoff)
- Fix module/class nesting in calculator/* #2312 (cbrunsdon)
- Require only part of activemerchant #2311 (mamhoff)
- Replace Spree.t with plain I18n.t #2309 (jhawthorn)
- Improve
ShippingRate#display_price
with taxes #2306 (jhawthorn) - Allow access to
Spree::Core::Environment
throughSpree::Config
#2291 (cbrunsdon) - Explicitly require cancan where used #2290 (cbrunsdon)
- Update translation for Adjustment Label #2287 (gregdaynes)
- Fix restocking and unstocking backordered items in FulfilmentChanger #2286 (DanielePalombo)
- Fix return url after fire in return_authorizations controller #2284 (rbngzlv)
- Remove
after_rollback
from LogEntry #2280 #2277 (reidcooper jhawthorn) - Make
solidus_core
depend on actionmailer and activerecord instead of rails #2272 (BenMorganIO) - Improve performance of Taxon promotion rule #2258 (gmacdougall)
- Fix class definition of variant #2248 (cbrunsdon)
- Updating classification should touch product #2238 (loicginoux)
- Avoid duplicate queries when running estimator taxation. #2219 (jhawthorn)
- Add eligibility checking to automatic free shipping promotions #2187 (fylooi)
- Strip whitespace surrounding promotion codes. #1796 (eric1234)
- Add missing indexes for
Spree::Taxon
lft and rgt columns #1779 (vfonic) - Methods for
Spree::Taxon
for all products/variants from descendants #1761 (dgra) - Fix RMA amount calculator #1590 (DanielePalombo)
- Allow cancelling orders that have been fully refunded #1355 (Sinetheta)
- Simplify Coupon PromotionHandler #521 (jhawthorn)
- Splitting shipment should update order totals and payment status #2555 (VzqzAc
- Add mutable false to default refund reason record #2574 (mdesantis)
- Generate correct number of codes in BatchBuilder #2578 (jhawthorn)
- Remove
Spree::OrderUpdater#round_money
#2344 (swcraig) - Remove testing_support/i18n #2340 (jhawthorn)
- Remove ffaker #2339 (jhawthorn)
- Deprecate AdjustmentSource#deals_with_adjustments_for_deleted_source #2259 (cbrunsdon)
- Remove remnants of location configured packages #2270 (jhawthorn)
- Deprecate class method in
Calculator::FlexiRate
#2305 (swcraig) - Improve deprecation message for 'deprecated_method_type_override' #2494 (jordan-brough)
- Deprecate Searcher::Base method_missing properties magic #2464 (jhawthorn)
- Deprecate weird taxon product filters #2408 (cbrunsdon)
-
Replace frontend jquery validations with html5 #2264 (cbrunsdon, jhawthorn)
We've removed jquery validations on checkout address form, replacing them with html5 input validations. If your store relies on jquery validation you should re-add that library in your store. Otherwise, if you use the old view version (without
required: true
attributes on input) your address form will not be validated on client side. -
Add frontend login_bar_items placeholder partial #2308 (jhawthorn)
-
Remove required attribute from address lastname #2393 (kennyadsl)
-
Convert frontend's CoffeeScript to javascript #2378 (jhawthorn)
-
Convert Cart total/subtotal CSS colors to vars #2288 (gregdaynes)
-
Use empty? instead of length == 0 #2282 (brchristian)
-
Use
line_item_adjustments
inspree/shared/_order_details
#2257 (cbrunsdon) -
Fix error when listing products without price #2605 (jhawthorn)
- Change instances of "udpate" to "update" #2533 (dsojevic)
- Add default to address_requires_state #2532 (brchristian)
- Standardize documentation #2531 (brchristian)
- Shipments documentation #2353 (benjaminwil)
- Add initial RMA and return authorization documentation #2540 (benjaminwil)
- Update README.md summary about testing #2442 (benjaminwil)
- Improve master variant documentation #2521 (benjaminwil)
- Products and variants documentation #2437 (benjaminwil)
- Getting started documentation #2433 (benjaminwil)
- Assets documentation #2418 (benjaminwil)
- Taxation documentation #2403 (benjaminwil)
- Locations documentation #2375 (benjaminwil)
- Tweaks to override-solidus-assets.md #2482 (jhawthorn)
- Simplify instructions in README.md for testing all projects #2444 (jhawthorn)
- Add a reference to solidus_cmd in README #2349 (afdev82)
- Remove duplication in API variants controller #2301 (swcraig)
- Remove versioncake #2307 (jhawthorn)
- Reference full Spree::StockLocation class name in stock_items_controller.rb #2543 (VitaliyAdamkov)
- Deprecate JSTree api routes #2254 (kennyadsl)
- Avoid JSON serializing Float::INFINITY #2495 (jhawthorn)
- Creating an order should activate promotions #2565 (mathportillo)
- Add store select to payment method admin #2550 (adammathys)
- Refactor and convert Tabs component from CoffeeScript to JS #2549 (jhawthorn)
- Better organize stock management JS and convert from coffeescript #2548 (jhawthorn)
- Simplify store_credit memo edit JS #2547 (jhawthorn)
- Convert trivial coffee to plain JS #2546 (jhawthorn)
- Use backbone StateSelect view for stock locations form #2542 (jhawthorn)
- Simplify and improve stock locations form #1523 (jhawthorn)
- Allow use of Turbolinks in admin #1863 (tvdeyen)
- Change order search to using starts over cont #1660 (gmacdougall)
- Exclude canceled orders from sales report #2131 (brchristian)
- Default backend navigation footer #2261 (gregdaynes)
- Provide a default
_navigation_footer.html.erb
#1450 (jrochkind) - Improve HTTP usage in update_positions #2528 (jhawthorn)
- Add form submit events to several backbone views #2244 (tvdeyen)
- Add required to product master price field #2262 (gregdaynes)
- Upgrade bootstrap to 4.0.0 #2516 #2310 (jhawthorn)
- Remove unused admin helpers #2515 (jhawthorn)
- Remove jquery-ui datepicker #2510 (jhawthorn)
- Use datalist instead of jquery-ui/autocomplete #2509 (jhawthorn)
- Switch from jQuery UI datepicker to flatpickr #2506 (jhawthorn)
- Remove unused extra data in products controller #2505 (jhawthorn)
- Allow selecting admin-only shipping methods #2499 (jhawthorn)
- Use nested checkboxes and radio buttons all over admin #2429 (tvdeyen)
- Restore field for editing promotion per_code_usage_limit in admin #2497 (jordan-brough)
- Replace new product inline form with normal form #2493 (jhawthorn)
- Fix
preference_field_tag
when given no type #2278 (jhawthorn) - Generate
js_locale_data
usingJSON.dump
#2304 (jhawthorn) - Improve API key on user edit page #2243 (jhawthorn)
- Fix closing thead tag on store credit table #2274 (luukveenis)
- Create multiple page states for stock transfers #2263 (jtapia)
- Remove zombie tooltips with MutationObserver #2421 (kennyadsl)
- Simplify "inline" new image form #2391 (jhawthorn)
- Remove state.coffee #2392 (jhawthorn)
- Remove jQuery UI #2527 (jhawthorn)
- Replace jQuery ui's sortable with Sortable.js #2523 (jhawthorn)
- Promotions admin UI fixes #2400 (tvdeyen)
- Do not render complex preference types as form fields #2394 (tvdeyen)
- Re-enable bootstrap tooltips animations #2334 (kennyadsl)
- Store credit admin UI fixes #2426 (tvdeyen)
- Remove bourbon from admin #2491 (jhawthorn)
- Admin order shipments ui cleaning #2414 (tvdeyen)
- Admin line item ui fixes #2413 (tvdeyen)
- Fix select2 above styles #2412 (tvdeyen)
- Admin order payments ui cleanup #2411 (tvdeyen)
- Add data-action classes to admin orders cart templates #2384 (kennyadsl)
- Admin address fixes and extra address validation #2371 (jordan-brough)
- Explicitly define backend/promotions routes #2332 (vladstoick)
- Remove bottom border of non-form fieldsets #2425 (tvdeyen)
- Move editing of shipment method and tracking into JS views and templates #2225 (jhawthorn)
- Center "no objects found" messages #2424 (tvdeyen)
- Improve look of missing I18n strings #2333 (kennyadsl)
- Give line-item-select-variant a max-width #2492 (jhawthorn)
- Fix action classes on admin tables #2336 (kennyadsl)
- Remove useless before-highlight class from table lines #2335 (kennyadsl)
- Remove unused methods in stock_transfers_controller #2294 (ccarruitero)
- Fix issue loading select2 locale for es-MX #2356 #2365 (jtapia dportalesr)
- Remove delimiter on number with currency field #2428 (lgiacalone3)
- Allow ShipmentsController#remove on ready shipment #2385 (alepore)
- Use single quotes to workaround deface issue #2361 (afdev82)
- Display country correctly when editing price #2266 (jhawthorn)
-
Replace RABL with Jbuilder #2147 #2146 (jhawthorn)
We've changed our JSON templating language for both the API and admin from RABL to Jbuilder. Jbuilder is faster and much more widely used (ships with Rails).
API responses should be identical, but stores which customized API responses using RABL or added their own endpoints which extended Solidus' RABL partials will need to be updated.
-
Remove rescue_from StandardError in Api::BaseController #2139 (jhawthorn)
Previously, exceptions raised in the API were caught (via
rescue_from
) and didn't reach the default Rails error handler. This caused many exceptions to avoid notice, both in production and in tests.This has been removed and exceptions are now reported and handled normally.
-
New admin table design #2159 #2100 #2143 #2123 #2165 (Mandily, graygilmore, tvdeyen)
Tables throughout the admin have been redesigned to be simpler and clearer. Borders between cells of the same row have been dropped, row striping has been removed, and icons are simpler and more clearly attached to their row.
-
Introduce Stock::SimpleCoordinator #2199 (jhawthorn)
The previous stock coordinator had incorrect behaviour when any stock location was low on stock.
The existing stock coordinator classes, Coordinator, Adjuster, Packer, and Prioritizer, have been replaced with the new Stock::SimpleCoordinator. In most cases this will coordinate stock identically to the old system, but will succeed for several low-stock cases the old Coordinator incorrectly failed on.
Stores which have customized any of the old Coordinator classes will need to either update their customizations or include the solidus_legacy_stock_system extension, which provides the old classes.
-
Replace Stock::Coordinator with Stock::SimpleCoordinator #2199 (jhawthorn)
-
Wrap Splitter chaining behaviour in new Stock::SplitterChain class #2189 (jhawthorn)
-
Remove Postal Code Format Validation (and Twitter CLDR dependency) #2233 (mamhoff)
-
Switch factories to strings instead of constants #2230 (cbrunsdon)
-
Roll up migrations up to Solidus 1.4 into a single migration #2229 (cbrunsdon)
-
Support non-promotion line-level adjustments #2188 (jordan-brough)
-
Fix StoreCredit with multiple currencies #2183 (jordan-brough)
-
Remove duplicate error on StoreCredit#authorize failure #2180 (jordan-brough)
-
Add
dependent: :destroy
for ShippingMethodZones join model #2175 (jordan-brough) -
Fix method missing error in ReturnAuthorization#amount #2162 (luukveenis)
-
Use constants instead of translations for
StoreCreditType
names #2157 (swcraig) -
Enable custom shipping promotions via config.spree.promotions.shipping_actions #2135 (jordan-brough)
-
Validate that Refunds have an associated Payment #2130 (melissacarbone)
-
Include completed payment amounts when summing totals for store credit #2129 (luukveenis)
-
Allow dev mode code reloading of configured classes #2126 (jhawthorn)
-
Override model_name.human for PaymentMethod #2107 (jhawthorn)
-
Reduce number of SQL statements in countries seeds #2097 (jhawthorn)
-
Rename Adjustment#update! to Adjustment#recalculate #2086 (jhawthorn)
-
Rename Shipment#update! to Shipment#update_state #2085 (jhawthorn)
-
Fix shipping method factory for stores with alternate currency #2084 (Sinetheta)
-
Added a configurable
Spree::Payment::Cancellation
class #2111 (tvdeyen) -
Remove
set_current_order
calls inSpree::Core::ControllerHelpers::Order
#2185 (Murph33)Previously a before filter added in
core/lib/spree/core/controller_helpers/order.rb
would cause SQL queries to be used on almost every request in the frontend. If you do not use Solidus Auth you will need to hook into this helper and callset_current_order
where your user signs in. This merges incomplete orders a user has going with their current cart. If you do use Solidus Auth you will need to make sure you use a current enough version (>= v1.5.0) that includes this explicit call. This addresses #1116. -
Remove
ffaker
as a runtime dependency in production. It needs to be added to the Gemfile for factories to be used in tests #2163 #2140 (cbrunsdon, swcraig) -
Invalidate existing non store credit payments during checkout 2075 (tvdeyen)
-
The all configuration objects now use static preferences by default. It's no longer necessary to call
use_static_preferences!
, as that is the new default. For the old behaviour of loading preferences from the DB, callconfig.use_legacy_db_preferences!
. #2112 (jhawthorn) -
Assign and initialize Spree::Config earlier, before rails initializers #2178 (cbrunsdon)
- Replace RABL with Jbuilder #2147 #2146 (jhawthorn)
- Move API pagination into a common partial #2181 (jhawthorn)
- Fix references to nonexistent API attributes #2153 (jhawthorn)
- Remove rescue_from StandardError in Api::BaseController #2139 (jhawthorn)
- Fix error when passing coupon_code to api/checkouts#update #2136 (jhawthorn)
- Improved error handling and performance for moving inventory units between shipments and stock locations #2070 (mamhoff)
- Remove unnecessary Api::Engine.root override #2128 (jhawthorn)
- Upgrade to Bootstrap 4.0.0-beta #2156 (jhawthorn)
- Admin Sass Organization #2133 (graygilmore)
- Remove Skeleton Grid CSS from the admin and complete its transition to Bootstrap. #2127 (graygilmore)
- Fix issue with user_id not being set on "customer" page #2176 (ericsaupe, swcraig)
- Removed the admin functionality to modify countries and states #2118 (graygilmore). This functionality, if required, is available through the solidus_countries_backend extension.
- Change table action icons style #2100 (tvdeyen)
- Use number_with_currency widget on new refund page #2088 (jhawthorn)
- Fix admin user order history table #2226 (Sinetheta)
- Replace Admin table styles #2159 (Mandily, graygilmore, tvdeyen, jhawthorn)
- Inherit body colour for labels #2242 (jhawthorn)
- Remove action button background color #2144 (tvdeyen)
- Remove images border in tables #2143 (tvdeyen)
- Pill Component #2123 (graygilmore)
- Display a pointer cursor hovering add variant buttons #2062 (kennyadsl)
- Use translated model names in admin payment methods form #1975 (tvdeyen)
- Add missing default_currency field on admin/stores #2091 (oeN)
- UI Fixes for taxons tree #2148 (tvdeyen)
- Make checkout billing address inputs full width #2171 (notapatch)
- Fixes padding of lists in form fields #2170 (tvdeyen)
- Capitalize event buttons in
OrdersHelper
#2177 (swcraig) - Fix backend data-action across multiple files #2184 (kennyadsl)
- New users table layout #1842 (tvdeyen)
- Add headers to shipment method and tracking number #2169 (tvdeyen)
- Fix typo on shipment method edit #2168 (jhawthorn)
- Fix action button hover style #2167 (tvdeyen)
- Show table borders on action columns #2165 (jhawthorn)
- Tweak font styles on admin shipments page #2164 (jhawthorn)
- Use payment.number instead of payment.identifier in admin view #2222 (jordan-brough)
- Exclude Bootstrap buttons from our button styling #2158 (graygilmore)
- Move users search form above table #2094 (graygilmore)
- Preview Images in a Modal #2101 (graygilmore)
- Change product's price color away from link color #2174 (notapatch)
- Move OrdersHelper from Core to Frontend #2081 (dangerdogz)
- Checkout email input field should use email_field #2120 (notapatch)
- Remove unused Paperclip spec matchers #2197 (swcraig)
- Remove tax refunds #2196 (mamhoff)
- Remove PriceMigrator #2194 (cbrunsdon)
- Remove task to copy shipped shipments to cartons #2193 (cbrunsdon)
- Remove upgrade task/spec #2192 (cbrunsdon)
- Remove unhelpful preload in Stock::Estimator #2207 (jhawthorn)
- Remove unused register call in calculator #2206 (cbrunsdon)
- Remove autoload on product_filters #2190 (cbrunsdon)
- Remove identical inheritied methods in
Spree::StoreCredit
#2200 (swcraig) - Remove custom responders. They are now available in the
solidus_responders
extension. #1956 (omnistegan) - Remove responders dependency from core #2090 (cbrunsdon)
- Deprecate .calculators #2216 (cbrunsdon)
- Deprecate pagination in searcher #2119 (cbrunsdon)
- Deprecate tasks in core/lib/tasks #2080 (cbrunsdon)
- Deprecate Spree::OrderCapturing class #2076 (tvdeyen)
- Deprecated
Spree::PaymentMethod#cancel
#2111 (tvdeyen) Please implement atry_void
method on your payment method instead that returns a response object if void succeeds or false if not. Solidus will refund the payment then. - Deprecates several preference fields helpers in favor of preference field partials. #2040 (tvdeyen)
Please render
spree/admin/shared/preference_fields/#{preference_type}
instead - Check if deprecated method_type is overridden #2093 (jhawthorn)
- Deprecate support for alternate Kaminari page_method_name #2115 (cbrunsdon)
- Deprecate update_params_payment_source method #2227 (ccarruitero)
-
The default behaviour for selecting the current store has changed. Stores are now only returned if their url matches the current domain exactly (falling back to the default store) #2041 #1993 (jhawthorn, kennyadsl)
-
Order#outstanding_balance now uses reimbursements instead of refunds to calculate the amount that should be paid on an order. #2002 (many contributors ❤️)
-
Renamed bogus payment methods #2000 (tvdeyen)
Spree::Gateway::BogusSimple
andSpree::Gateway::Bogus
were renamed intoSpree::PaymentMethod::SimpleBogusCreditCard
andSpree::PaymentMethod::BogusCreditCard
-
Allow refreshing shipping rates for unshipped shipments on completed orders #1906 (mamhoff)
-
Remove line_item_options class attribute from Api::LineItemsController #1943
-
Allow custom separator between a promotion's
base_code
andsuffix
#1951 (ericgross) -
Ignore
adjustment.finalized
on tax adjustments. #1936 (jordan-brough) -
Transform the relation between TaxRate and TaxCategory to a Many to Many #1851 (vladstoick)
This fixes issue #1836. By allowing a TaxRate to tax multiple categories, stores don't have to create multiple TaxRates with the same value if a zone doesn't have different tax rates for some tax categories.
-
Adjustments without a source are now included in
line_item.adjustment_total
#1933 (alexstoick) -
Always update last_ip_address on order #1658 (bbuchalter)
-
Don't eager load adjustments in current_order #2069 (jhawthorn)
-
Avoid running validations in current_order #2068 (jhawthorn)
-
Fix Paperclip::Errors::NotIdentifiedByImageMagickError on invalid image #2064 (karlentwistle)
-
Fix error message on insufficient inventory. #2056 (husam212)
-
Make Address.find_all_by_name_or_abbr case-insensitive #2043 (jordan-brough)
-
Remove redundant methods on Spree::PaymentMethod::StoreCredit #2038 (skukx)
-
Fix ShippingMethod select for MySQL 5.7 strict #2024 (jhawthorn)
-
Use a subquery to avoid returning duplicate products from Product.available #2021 (jhawthorn)
-
Add some missing data to seeds which was added by migrations #1962 (BravoSimone)
-
Remove fallback first shipping method on shipments #1843 (mamhoff)
-
Assign default user addresses in checkout controller #1967 (kennyadsl)
-
Use user.default_address as a default if bill_address or ship_address is unset #1424 (yeonhoyoon, peterberkenbosch)
-
Add html templates for shipped_email and inventory_cancellation emails #1377 (DanielePalombo)
-
Don't
@extend
compound selectors in sass. Avoids deprecation warnings in sass 3.4.25 #2073 (jhawthorn)
- Configure admin turbolinks #1882 (mtomov)
- Allow users to inline update the variant of an image in admin #1580 (mtomov)
- Fix typo on fieldset tags #2005 (oeN)
- Use more specific selector for select2 #1997 (oeN)
- Replace select2 with <select class="custom-select"> #2034 #2030 (jhawthorn)
- Fix admin SQL issues with DISTINCT products #2025 (jhawthorn)
- Use
@collection
instead of@collection.present?
in some admin controllers #2046 (jordan-brough) - Admin::ReportsController reusable search params #2012 (oeN)
- Do not show broken links in admin product view when product is deleted #1988 (laurawadden)
- Allow admin to edit variant option values #1944 (dividedharmony)
- Do not refresh shipping rates everytime the order is viewed in the admin #1798 (mamhoff)
- Add form guidelines to the style guide #1582 (Mandily)
- Improve style guide flash messages UX #1964 (mtylty)
- Document tooltips in the style guide #1955 (gus4no)
- Fix path for distributed amount fields partial #2023 (graygilmore)
- Use
.all
instead of.where\(nil\)
in Admin::ResourceController #2047 (jordan-brough) - Fix typo on the new promotions form #2035 (swcraig)
- Use translated model name in admin payment methods form #1975 (tvdeyen)
- Renamed
Spree::Gateway
payment method intoSpree::PaymentMethod::CreditCard
#2001 (tvdeyen) - Deprecate
#simple_current_order
#1915 (ericsaupe) - Deprecate
PaymentMethod.providers
in favour ofRails.application.config.spree.payment_methods
#1974 (tvdeyen) - Deprecate
Spree::Admin::PaymentMethodsController#load_providers
in favour ofload_payment_methods
#1974 (tvdeyen) - Deprecate Shipment#add_shipping_method #2018 (jhawthorn)
- Re-add deprecated TaxRate#tax_category #2013 (jhawthorn)
- Deprecate
Spree::Core::CurrentStore
in favor ofSpree::CurrentStoreSelector
. #1993 - Deprecate
Spree::Order#assign_default_addresses!
in favor ofOrder.new.assign_default_user_addresses
. #1954 (kennyadsl) - Rename
PaymentMethod#method_type
intopartial_name
#1978 (tvdeyen) - Remove ! from assign_default_user_addresses!, deprecating the old method #2019 (jhawthorn)
- Emit Spree.url JS deprecation warning in all environments #2017 (jhawthorn)
- Fix migrating CreditCards to WalletPaymentSource #1898 (jhawthorn)
- Fix setting the wallet's default payment source to the same value #1888 (ahoernecke)
- Fix assigning nil to
default_wallet_payment_source=
#1896 (jhawthorn)
-
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, whichCreditCard
now inherits, and aWallet
service class to help manage users' payment sources. AWalletPaymentSource
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 anActiveRecord::Relation
instead of an array #1802 (luukveenis)- Product slugs no longer have a minimum length requirement #1616 (fschwahn)
Spree::Money
now includesComparable
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)
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)
- Use
cart_link_path
instead ofcart_link_url
#1757 (bofrede) - Replace cache_key_for_taxons with cache #1688 (jhawthorn)
- Update code styles for /cart #1727 (vfonic)
- Add a frontend views override generator #1681 (tvdeyen)
- Create JS namespaces in centralized file #1753 (jhawthorn)
- Replace select2-rails with vendored select2 #1774 (jhawthorn)
- Add JS
Spree.formatMoney
helper for currency formatting #1745 (jhawthorn) - Rewrite zones.js.coffee using Backbone.js #1766 (jhawthorn)
- Add JS
Spree.t
andSpree.human_attribute_name
for i18n #1730 (jhawthorn) - Allow editing multiple Stores #1282 (jhawthorn)
- Add promotion codes index view #1545 (jhawthorn)
- Replace deprecated bourbon mixins with unprefixed CSS #1706 (jhawthorn)
- Ensure helper is specified in CustomerReturnsController #1771 (eric1234)
- Ensure helper is specified in VariantsController #1714 (eric1234)
- Remove nonexistant form hint from view #1698 (jhawthorn)
- Promotion search now finds orders which used the specific promotion code, of any code on the promotion. #1662 (stewart)
- Upgrade to Bootstrap 4.0.0.alpha6 #1816 (jhawthorn)
- New admin table layout #1786 #1828 #1829 (tvdeyen)
- Add number with currency selector widget #1793 #1813 (jhawthorn)
- Replace select2 styling #1797 (jhawthorn)
- Change admin logo height to match breadcrumbs height #1822 (mtomov)
- Fit admin logo to available space #1758 (brchristian)
- Make form/button styles match bootstrap's #1809 (jhawthorn)
- Fix datepicker style #1827 (kennyadsl)
- Use bootstrap input-group for date range #1817 (jhawthorn)
- Improve page titles in admin #1795 (jhawthorn)
- Use an icon as missing image placeholder #1760 (jhawthorn) #1764 (jhawthorn)
- Convert admin orders table into full width layout #1782 (tvdeyen)
- Raise
font-size
#1777 (tvdeyen) - Improve promotions creation form #1509 (jhawthorn)
- Remove stock location configuration from admin "cart" page #1709 #1710 (jhawthorn)
- Update admin cart page dynamically #1715 (jhawthorn)
- Fix duplicated Shipments breadcrumb #1717 #1746 (jhawthorn)
- Don’t set default text highlight colors #1738 (brchristian)
- Convert customer details page to backbone #1762 (jhawthorn)
- Remove inline edit from payments dipslay amount #1815 (tvdeyen)
- Fix styling of tiered promotions delete icon #1810 (jhawthorn)
- Remove
webkit-tap-highlight-color
#1792 (brchristian) - Promotion and Shipping calculators can be created or changed without reloading the page. #1618 (jhawthorn)
- 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 variant_management.js.coffee #1768 (jhawthorn)
- Remove unused payment Javascript #1735 (jhawthorn)
- Moved
spree/admin/shared/_translations
partial tospree/admin/shared/_js_locale_data
.
- Deprecate
Order#has_step?
in favour ofhas_checkout_step?
#1667 (mamhoff) - Deprecate
Order#set_shipments_cost
, which is now done inOrder#update!
#1689 (jhawthorn) - Deprecate
user.default_credit_card
,user.payment_sources
foruser.wallet.default_wallet_payment_source
anduser.wallet.wallet_payment_sources
- Deprecate
CreditCard#default
in favour ofuser.wallet.default_wallet_payment_source
- Deprecate
cache_key_for_taxons
helper favour ofcache [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)
-
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!
. -
ItemAdjustments
has been merged into theOrderUpdater
The 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_iso
Prices in the frontend now depend on
store.cart_tax_country_iso
instead 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_prototype
extension provides the existing functionality. #1517 -
Analytics trackers have been removed from Solidus itself.
The new
solidus_trackers
extension provides the existing functionality. #1438 -
Bootstrap row and column classes have replaced the legacy skeleton classes throughout the admin. #1484
-
Remove
currency
from 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
currency
database field (String) from theline_items
table, since it will not be used anymore. -
Add
Spree::Promotion#remove_from
andSpree::PromotionAction#remove_from
This 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
PromotionAction
provides a default remove_from method, with a deprecation warning that subclasses should define their own remove_from method. -
Remove
is_default
boolean fromSpree::Price
modelThis 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_charge
Any code that creates
LineItem
s outside the context of OrderContents should ensure that it callsorder.update!
after doing so. -
Mark
Spree::Tax::ItemAdjuster
as 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_value
field is now converted to a string and has whitespace removed on assignment instead of before validations. -
The
lastname
field onAddress
is now optional. #1369 -
The admin prices listings page now shows master and variant prices seperately. This changes
@prices
to@master_prices
and@variant_prices
in prices_controller -
Admin javascript assets are now individually
require
d 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_on
column has been replaced withavailable_to_users
andavailable_to_admin
. The existing attributes and scopes have been deprecated. -
ShippingMethod's
display_on
column 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_image
helpers 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_alert
anddismiss_alert
from CapybaraExt.accept_alert
is now a capybara builtin (that we were overriding) anddismiss_alert
can be replaced withdismiss_prompt
. -
Removed deprecated delegate_belongs_to
-
- Upgrade to rails 5.0
-
Use in-memory objects in OrderUpdater and related areas.
Solidus now uses in-memory data for updating orders in and around OrderUpdater. E.g. if an order already has
order.line_items
loaded into memory when OrderUpdater is run then it will use that information rather than requerying the database for it. This should help performance and makes some upcoming refactoring easier.Warning: If you bypass ActiveRecord while making updates to your orders you run the risk of generating invalid data. Example:
order.line_items.to_a order.line_items.update_all(price: ...) order.update!
Will now result in incorrect calculations in OrderUpdater because the line items will not be refetched.
In particular, when creating adjustments, you should always create the adjustment using the adjustable relationship.
Good example:
line_item.adjustments.create!(source: tax_rate, ...)
Bad examples:
tax_rate.adjustments.create!(adjustable: line_item, ...) Spree::Adjustment.create!(adjustable: line_item, source: tax_rate, ...)
We try to detect the latter examples and repair the in-memory objects (with a deprecation warning) but you should ensure that your code is keeping the adjustable's in-memory associations up to date. Custom promotion actions are an area likely to have this issue.
-
Make some 'wallet' behavior configurable
NOTE:
Order#persist_user_credit_card
has been renamed toOrder#add_payment_sources_to_wallet
. If you are overridingpersist_user_credit_card
you need to update your code.The following extension points have been added for customizing 'wallet' behavior.
- Spree::Config.add_payment_sources_to_wallet_class
- Spree::Config.default_payment_builder_class
-
Backend: UI, Remove icons from buttons and tabs
-
Backend: Deprecate args/options that add icons to buttons
-
Update Rules::Taxon/Product handling of invalid match policies
Rules::Taxon and Rules::Product now require valid match_policy values. Please ensure that all your Taxon and Product Rules have valid match_policy values.
-
Fix default value for Spree::Promotion::Rules::Taxon preferred_match_policy.
Previously this was defaulting to nil, which was sometimes interpreted as 'none'.
-
Deprecate
Spree::Shipment#address
(column renamed)Spree::Shipment#address
was not actually being used for anything in particular, so the association has been deprecated and delegated toSpree::Order#ship_address
instead. The database column has been renamedspree_shipments.deprecated_address_id
. -
Coupon code application has been separated from the Continue button on the Payment checkout page
- JavaScript for it has been moved from address.js into its own
spree/frontend/checkout/coupon-code
- Numerous small nuisances have been fixed #1090
- JavaScript for it has been moved from address.js into its own
-
Allow filtering orders by store when multiple stores are present. #1149
-
Remove unused
user_id
column from PromotionRule. #1259 -
Removed "Clear cache" button from the admin #1275
-
Adjustments and totals are no longer updated when saving a Shipment or LineItem.
Previously adjustments and total columns were updated after saving a Shipment or LineItem. This was unnecessary since it didn't update the order totals, and running order.update! would recalculate the adjustments and totals again.
-
Order now requires a
store_id
in validationsAll orders created since Spree v2.4 should have a store assigned. A migration exists to assign all orders without a store to the default store.
If you are seeing spec failures related to this, you may have to add
let!(:store) { create(:store) }
to some test cases. -
Deprecate
Spree::TaxRate.adjust
, removeSpree::TaxRate.match
The functionality of
Spree::TaxRate.adjust
is now contained in the newSpree::Tax::OrderAdjuster
class.Wherever you called
Spree::TaxRate.adjust(items, order_tax_zone)
, instead callSpree::Tax::OrderAdjuster.new(order).adjust!
.Spree::TaxRate.match
was an implementation detail ofSpree::TaxRate.adjust
. It has been removed, and its functionality is now contained in the private methodSpree::Tax::TaxHelpers#applicable_rates(order)
. -
Allow more options than
current_currency
to select pricesPreviously, availability of products/variants, caching and pricing was dependent only on a
current_currency
string. This has been changed to acurrent_pricing_options
object. For now, this object (Spree::Variant::PricingOptions
) only holds the currency. It is used for caching instead of the deprecatedcurrent_currency
helper.Additionally, your pricing can be customized using a
VariantPriceSelector
object, a default implementation of which can be found inSpree::Variant::PriceSelector
. It is responsible for finding the right price for variant, be it for front-end display or for adding it to the cart. You can set it through the newSpree::Config.variant_price_selector_class
setting. This class also knows whichPricingOptions
class it cooperates with.current_currency
helperSpree::Variant#categorise_variants_from_option
Spree::Variant#variants_and_option_values
(UseSpree::Variant#variants_and_option_values#for
instead)Spree::Core::Search::Base#current_currency
Spree::Core::Search::Base#current_currency=
There was a strange way of setting prices for line items depending on additional attributes being present on the line item (
gift_wrap: true
, for example). It also neededSpree::Variant
to be patched with methods likeSpree::Variant#gift_wrap_price_modifier_in
and is generally deemed a non-preferred way of modifying pricing. This functionality has now been moved into a Gem of its own to ease the transition to the newVariant::PriceSelector
system. -
Respect
Spree::Store#default_currency
Previously, the
current_currency
helper in both thecore
andapi
gems would always return the globally configured default currency rather than the current store's one. With Solidus 1.3, we respect that setting without having to install thespree_multi_domain
extension. -
Persist tax estimations on shipping rates
Previously, shipping rate taxes were calculated on the fly every time a shipping rate would be displayed. Now, shipping rate taxes are stored on a dedicated table to look up.
There is a new model Spree::ShippingRateTax where the taxes are stored, and a new Spree::Tax::ShippingRateTaxer that builds those taxes from within Spree::Stock::Estimator.
The shipping rate taxer class can be exchanged for a custom estimator class using the new Spree::Appconfiguration.shipping_rate_taxer_class preference.
In order to convert your historical shipping rate taxation data, please run
rake solidus:upgrade:one_point_three
- this will create persisted taxation notes for historical shipping rates. Be aware though that these taxation notes are estimations and should not be used for accounting purposes. -
Deprecate setting a line item's currency by hand
Previously, a line item's currency could be set directly, and differently from the line item's order's currency. This would result in an error. It still does, but is also now explicitly deprecated. In the future, we might delete the line item's
currency
column and just delegate to the line item's order. -
Taxes for carts now configurable via the
Spree::Store
objectIn VAT countries, carts (orders without addresses) have to be shown with adjustments for the country whose taxes the cart's prices supposedly include. This might differ from
Spree::Store
toSpree::Store
. We're introducting thecart_tax_country_iso
setting on Spree::Store for this purpose.Previously the setting for what country any prices include Spree::Zone.default_tax. That, however, would also implicitly tag all prices in Spree as including the taxes from that zone. Introducing the cart tax setting on Spree::Store relieves that boolean of some of its responsibilities.
-
Make Spree::Product#prices association return all prices
Previously, only non-master variant prices would have been returned here. Now, we get all the prices, including those from the master variant.
-
Changes to Spree::Stock::Estimator
- The package passed to Spree::Stock::Estimator#shipping_rates must have its shipment assigned and that shipment must have its order assigned. This is needed for some upcoming tax work in to calculate taxes correctly.
- Spree::Stock::Estimator.new no longer accepts an order argument. The order will be fetched from the shipment.
-
Removed Spree::Stock::Coordinator#packages from the public interface.
This will allow us to refactor more easily. solidusio#950
-
Removed
pre_tax_amount
column from line item and shipment tablesThis column was previously used as a caching column in the process of calculating VATs. Its value should have been (but wasn't) always the same as
discounted_amount - included_tax_total
. It's been replaced with a method that does just that. #941 -
Renamed return item
pre_tax_amount
column toamount
The naming and functioning of this column was inconsistent with how shipments and line items work: In those models, the base from which we calculate everything is the
amount
. The ReturnItem now works just like a line item.Usability-wise, this change entails that for VAT countries, when creating a refund for an order including VAT, you now have to enter the amount you want to refund including VAT. This is what a backend user working with prices including tax would expect.
For a non-VAT store, nothing changes except for the form field name, which now says
Amount
instead ofPre-tax-amount
. You might want to adjust the i18n translation here, depending on your circumstances. #706 -
Removed Spree::BaseHelper#gem_available? and Spree::BaseHelper#current_spree_page?
Both these methods were untested and not appropriate code to be in core. If you need these methods please pull them into your app. #710.
-
Fixed a bug where toggling 'show only complete order' on/off was not showing all orders. #749
-
ffaker has been updated to version 2.x
This version changes the namespace from Faker:: to FFaker::
-
versioncake has been updated to version 3.x
This version uses a rack middleware to determine the version, uses a different header name, and has some configuration changes.
You probably need to add this to your controller specs.
More information is available in the VersionCake README
-
Bootstrap 4.0.0-alpha.2 is included into the admin.
-
Pagination now uses an admin-specific kaminari theme, which uses the bootstrap4 styles. If you have a custom admin page with pagination you can use this style with the following.
<%= paginate @collection, theme: "solidus_admin" %>
-
Settings configuration menu has been replaced with groups of tabs at the top
- Settings pages were grouped into related partials as outlined in #634
- Partials are rendered on pages owned by the partials as tabs as a top bar
- Admin-nav has a sub-menu for the settings now
-
Lists of classes in configuration (
config.spree.calculators
,spree.spree.calculators
, etc.) are now stored internally as strings and constantized when accessed. This allows these classes to be reloaded in development mode and loaded later in the boot process. #1203
-
Admin menu has been moved from top of the page to the left side.
- Submenu items are accessible from any page. See the wiki for more information and instructions on upgrading.
- Solidus_auth_devise should be updated to '~> 1.3' to support the new menu.
- Added optional styles to the admin area to advance admin rebrand.
To use the new colors, add
@import 'spree/backend/themes/blue_steel/globals/_variables_override';
to yourspree/backend/globals/variables_override
.
-
Removed deface requirement from core
Projects and extensions which rely on deface will need to add it explicitly to their dependencies.
-
testing_support/capybara_ext.rb
no longer changes capybara's matching mode to:prefer_exact
, and instead uses capybara's default,:smart
.You can restore the old behaviour (not recommended) by adding
Capybara.match = :prefer_exact
to yourspec_helper.rb
.More information can be found in capybara's README
-
Fixed a bug where sorting in the admin would not save positions correctly. #632
-
Included (VAT-style) taxes, will be considered applicable if they are inside the default tax zone, rather than just when they are the defaut tax zone. #657
-
Update jQuery.payment to v1.3.2 (from 1.0) #608
-
Removed Order::CurrencyUpdater. #635
-
Removed
Product#set_master_variant_defaults
, which was unnecessary since master is build withis_master
alreadytrue
. -
Replaced admin taxon management interface #569
-
Fix logic around raising InsufficientStock when creating shipments. #566
Previously,
InsufficientStock
was raised if any StockLocations were fully out of inventory. This was incorrect because it was possible other stock locations could have fulfilled the inventory. This was also incorrect because the stock location could have some, but insufficient inventory, and not raise the exception (an incomplete package would be returned). Now the coordinator checks that the package is complete and raisesInsufficientStock
if it is incomplete for any reason. -
Removed
Spree::Zone.global
#627 Use the "GlobalZone" factory instead:FactoryGirl.create(:global_zone)
-
Address is immutable (Address#readonly? is always true)
This allows us to minimize cloning addresses, while still ensuring historical data is preserved.
-
UserAddressBook module added to manage a user's multiple addresses
-
GET /admin/search/users searches all of a user's addresses, not just current bill and ship addresss
-
Adjustment state column has been replaced with a finalized boolean column. This includes a migration replacing the column, which may cause some downtime for large stores.
-
Handlebars templates in the admin are now stored in assets and precompiled with the rest of the admin js.
-
Removed
map_nested_attributes_keys
from the Api::BaseController. This method was only used in one place and was oblivious of strong_params. -
Change all mails deliveries to
#deliver_later
. Emails will now be sent in the background if you configure active_job to do so. See the rails guides for more information. -
Cartons deliveries now send one email per-order, instead of one per-carton. This allows setting
@order
and@store
correctly for the template. For most stores, which don't combine multiple orders into a carton, this will behave the same. -
Some HABTM associations have been converted to HMT associations. Referential integrity has also been added as well. Specifically:
- Prototype <=> Taxon
- ShippingMethod <=> Zone
- Product <=> PromotionRule
See https://github.com/solidusio/solidus/releases/tag/v1.0.1
See https://github.com/solidusio/solidus/releases/tag/v1.0.0