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