solidus_core 2.11.10 → 3.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +6 -2
  3. data/app/assets/javascripts/spree.js.erb +0 -51
  4. data/app/controllers/spree/base_controller.rb +1 -1
  5. data/app/helpers/spree/base_helper.rb +1 -1
  6. data/app/helpers/spree/products_helper.rb +2 -2
  7. data/app/helpers/spree/store_helper.rb +0 -11
  8. data/app/mailers/spree/carton_mailer.rb +1 -5
  9. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +30 -11
  10. data/app/models/concerns/spree/active_storage_adapter.rb +1 -1
  11. data/app/models/concerns/spree/adjustment_source.rb +0 -15
  12. data/app/models/concerns/spree/calculated_adjustments.rb +0 -18
  13. data/app/models/concerns/spree/default_price.rb +39 -10
  14. data/app/models/concerns/spree/ransackable_attributes.rb +24 -4
  15. data/app/models/concerns/spree/soft_deletable.rb +2 -4
  16. data/app/models/concerns/spree/user_address_book.rb +10 -37
  17. data/app/models/concerns/spree/user_methods.rb +38 -13
  18. data/app/models/spree/ability.rb +0 -37
  19. data/app/models/spree/address/name.rb +2 -20
  20. data/app/models/spree/address.rb +8 -186
  21. data/app/models/spree/adjustment.rb +7 -33
  22. data/app/models/spree/base.rb +0 -53
  23. data/app/models/spree/calculator/flat_fee.rb +21 -0
  24. data/app/models/spree/calculator/flexi_rate.rb +0 -5
  25. data/app/models/spree/calculator.rb +0 -7
  26. data/app/models/spree/carton.rb +1 -1
  27. data/app/models/spree/country.rb +2 -7
  28. data/app/models/spree/credit_card.rb +1 -28
  29. data/app/models/spree/customer_return.rb +5 -7
  30. data/app/models/spree/image/active_storage_attachment.rb +2 -7
  31. data/app/models/spree/image/paperclip_attachment.rb +2 -2
  32. data/app/models/spree/image.rb +0 -7
  33. data/app/models/spree/inventory_unit.rb +0 -21
  34. data/app/models/spree/line_item.rb +6 -49
  35. data/app/models/spree/log_entry.rb +74 -1
  36. data/app/models/spree/option_type.rb +1 -1
  37. data/app/models/spree/option_value.rb +10 -1
  38. data/app/models/spree/order/number_generator.rb +7 -1
  39. data/app/models/spree/order.rb +82 -170
  40. data/app/models/spree/order_cancellations.rb +4 -24
  41. data/app/models/spree/order_contents.rb +2 -1
  42. data/app/models/spree/order_inventory.rb +1 -1
  43. data/app/models/spree/order_merger.rb +2 -2
  44. data/app/models/spree/order_promotion.rb +1 -1
  45. data/app/models/spree/order_shipping.rb +6 -9
  46. data/app/models/spree/order_taxation.rb +6 -4
  47. data/app/models/spree/order_updater.rb +17 -16
  48. data/app/models/spree/payment/cancellation.rb +1 -1
  49. data/app/models/spree/payment/processing.rb +58 -55
  50. data/app/models/spree/payment.rb +0 -3
  51. data/app/models/spree/payment_create.rb +1 -13
  52. data/app/models/spree/payment_method/bogus_credit_card.rb +6 -7
  53. data/app/models/spree/payment_method/credit_card.rb +1 -3
  54. data/app/models/spree/payment_method/simple_bogus_credit_card.rb +8 -0
  55. data/app/models/spree/payment_method.rb +26 -110
  56. data/app/models/spree/price.rb +3 -3
  57. data/app/models/spree/product/scopes.rb +24 -33
  58. data/app/models/spree/product.rb +15 -42
  59. data/app/models/spree/product_property.rb +1 -1
  60. data/app/models/spree/promotion/actions/create_adjustment.rb +4 -3
  61. data/app/models/spree/promotion/actions/create_item_adjustments.rb +5 -9
  62. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +0 -3
  63. data/app/models/spree/promotion/actions/free_shipping.rb +1 -0
  64. data/app/models/spree/promotion/order_adjustments_recalculator.rb +92 -0
  65. data/app/models/spree/promotion/rules/item_total.rb +50 -6
  66. data/app/models/spree/promotion/rules/product.rb +20 -8
  67. data/app/models/spree/promotion/rules/store.rb +4 -0
  68. data/app/models/spree/promotion/rules/taxon.rb +6 -15
  69. data/app/models/spree/promotion/rules/user.rb +4 -0
  70. data/app/models/spree/promotion.rb +39 -32
  71. data/app/models/spree/promotion_action.rb +6 -9
  72. data/app/models/spree/promotion_code/batch_builder.rb +0 -14
  73. data/app/models/spree/promotion_code.rb +11 -7
  74. data/app/models/spree/promotion_handler/cart.rb +26 -6
  75. data/app/models/spree/promotion_rule.rb +5 -0
  76. data/app/models/spree/property.rb +1 -1
  77. data/app/models/spree/refund.rb +8 -52
  78. data/app/models/spree/reimbursement.rb +5 -43
  79. data/app/models/spree/reimbursement_performer.rb +2 -8
  80. data/app/models/spree/reimbursement_type/credit.rb +1 -4
  81. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +1 -2
  82. data/app/models/spree/reimbursement_type/store_credit.rb +1 -4
  83. data/app/models/spree/return_authorization.rb +2 -5
  84. data/app/models/spree/return_item.rb +4 -24
  85. data/app/models/spree/shipment.rb +3 -56
  86. data/app/models/spree/shipping_method.rb +0 -25
  87. data/app/models/spree/shipping_rate.rb +0 -2
  88. data/app/models/spree/shipping_rate_tax.rb +1 -1
  89. data/app/models/spree/state.rb +1 -5
  90. data/app/models/spree/stock/allocator/on_hand_first.rb +2 -2
  91. data/app/models/spree/stock/availability.rb +11 -3
  92. data/app/models/spree/stock/quantifier.rb +12 -8
  93. data/app/models/spree/stock/simple_coordinator.rb +8 -26
  94. data/app/models/spree/stock/splitter/base.rb +2 -7
  95. data/app/models/spree/stock_item.rb +2 -8
  96. data/app/models/spree/stock_location.rb +2 -2
  97. data/app/models/spree/stock_movement.rb +2 -2
  98. data/app/models/spree/store.rb +0 -12
  99. data/app/models/spree/store_credit.rb +14 -1
  100. data/app/models/spree/store_credit_category.rb +0 -32
  101. data/app/models/spree/store_credit_prioritizer.rb +17 -0
  102. data/app/models/spree/tax/item_tax.rb +3 -2
  103. data/app/models/spree/tax/order_tax.rb +3 -1
  104. data/app/models/spree/tax/tax_helpers.rb +2 -2
  105. data/app/models/spree/tax/tax_location.rb +4 -7
  106. data/app/models/spree/tax_calculator/default.rb +31 -0
  107. data/app/models/spree/tax_calculator/shipping_rate.rb +2 -13
  108. data/app/models/spree/tax_rate.rb +9 -27
  109. data/app/models/spree/taxon/active_storage_attachment.rb +2 -7
  110. data/app/models/spree/taxon/paperclip_attachment.rb +3 -8
  111. data/app/models/spree/taxon.rb +1 -12
  112. data/app/models/spree/taxonomy.rb +1 -1
  113. data/app/models/spree/user_address.rb +0 -5
  114. data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +1 -1
  115. data/app/models/spree/variant/price_selector.rb +34 -4
  116. data/app/models/spree/variant.rb +52 -66
  117. data/app/models/spree/zone.rb +1 -1
  118. data/app/subscribers/spree/mailer_subscriber.rb +4 -0
  119. data/app/subscribers/spree/order_mailer_subscriber.rb +35 -0
  120. data/config/i18n-tasks.yml +134 -0
  121. data/config/locales/en.yml +406 -263
  122. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +1 -1
  123. data/db/migrate/20201127212108_add_type_before_removal_to_spree_payment_methods.rb +7 -0
  124. data/db/migrate/20210312061050_change_column_null_on_prices.rb +7 -0
  125. data/db/migrate/20220317165036_set_promotions_with_any_policy_to_all_if_possible.rb +20 -0
  126. data/db/migrate/20220805202442_add_level_to_spree_tax_rates.rb +5 -0
  127. data/db/migrate/20221123152807_add_shipping_category_to_spree_variants.rb +5 -0
  128. data/db/seeds.rb +4 -1
  129. data/lib/generators/solidus/install/app_templates/authentication/custom.rb +21 -0
  130. data/lib/generators/solidus/install/app_templates/authentication/devise.rb +16 -0
  131. data/lib/generators/solidus/install/app_templates/authentication/existing.rb +10 -0
  132. data/lib/generators/solidus/install/app_templates/authentication/none.rb +1 -0
  133. data/lib/generators/solidus/install/app_templates/frontend/break_down_solidus_gem.rb +54 -0
  134. data/lib/generators/solidus/install/app_templates/frontend/classic.rb +16 -0
  135. data/lib/generators/solidus/install/app_templates/frontend/none.rb +2 -0
  136. data/lib/generators/solidus/install/app_templates/frontend/starter.rb +3 -0
  137. data/lib/generators/solidus/install/app_templates/payment_method/bolt.rb +13 -0
  138. data/lib/generators/solidus/install/app_templates/payment_method/none.rb +1 -0
  139. data/lib/generators/solidus/install/app_templates/payment_method/paypal.rb +10 -0
  140. data/lib/generators/solidus/install/install_generator.rb +247 -149
  141. data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +15 -60
  142. data/lib/generators/solidus/install/templates/vendor/assets/javascripts/spree/backend/all.js +2 -2
  143. data/lib/generators/solidus/update/templates/config/initializers/new_solidus_defaults.rb.tt +30 -0
  144. data/lib/generators/solidus/update/update_generator.rb +112 -0
  145. data/lib/generators/spree/custom_user/custom_user_generator.rb +6 -4
  146. data/lib/generators/spree/custom_user/templates/authentication_helpers.rb.tt +2 -6
  147. data/lib/generators/spree/custom_user/templates/migration.rb.tt +7 -3
  148. data/lib/generators/spree/dummy/dummy_generator.rb +12 -9
  149. data/lib/generators/spree/dummy/templates/rails/application.rb.tt +0 -1
  150. data/lib/generators/spree/dummy/templates/rails/database.yml +81 -39
  151. data/lib/generators/spree/dummy/templates/rails/storage.yml +3 -0
  152. data/lib/generators/spree/dummy/templates/rails/test.rb +2 -0
  153. data/lib/spree/app_configuration.rb +134 -64
  154. data/lib/spree/bus.rb +20 -0
  155. data/lib/spree/core/class_constantizer.rb +2 -0
  156. data/lib/spree/core/controller_helpers/auth.rb +10 -15
  157. data/lib/spree/core/controller_helpers/current_host.rb +5 -3
  158. data/lib/spree/core/controller_helpers/order.rb +12 -32
  159. data/lib/spree/core/controller_helpers/payment_parameters.rb +0 -54
  160. data/lib/spree/core/controller_helpers/pricing.rb +0 -8
  161. data/lib/spree/core/controller_helpers/search.rb +1 -1
  162. data/lib/spree/core/controller_helpers/strong_parameters.rb +0 -4
  163. data/lib/spree/core/engine.rb +54 -50
  164. data/lib/spree/core/environment_extension.rb +0 -9
  165. data/lib/spree/core/product_filters.rb +1 -41
  166. data/lib/spree/core/role_configuration.rb +0 -14
  167. data/lib/spree/core/search/base.rb +18 -35
  168. data/lib/spree/core/state_machines/order.rb +2 -2
  169. data/lib/spree/core/state_machines.rb +2 -11
  170. data/lib/spree/core/stock_configuration.rb +18 -0
  171. data/lib/spree/core/validators/email.rb +5 -3
  172. data/lib/spree/core/version.rb +5 -1
  173. data/lib/spree/core/versioned_value.rb +75 -0
  174. data/lib/spree/core.rb +40 -11
  175. data/lib/spree/deprecation.rb +1 -1
  176. data/lib/spree/event/configuration.rb +0 -5
  177. data/lib/spree/event/subscriber.rb +0 -18
  178. data/lib/spree/event/subscriber_registry.rb +7 -7
  179. data/lib/spree/event.rb +1 -32
  180. data/lib/spree/i18n.rb +0 -22
  181. data/lib/spree/migrations.rb +13 -11
  182. data/lib/spree/money.rb +3 -18
  183. data/lib/spree/permission_sets/default_customer.rb +8 -1
  184. data/lib/spree/permitted_attributes.rb +17 -59
  185. data/lib/spree/preferences/configuration.rb +84 -0
  186. data/lib/spree/preferences/preferable.rb +13 -0
  187. data/lib/spree/preferences/preferable_class_methods.rb +37 -4
  188. data/lib/spree/preferences/preference_differentiator.rb +29 -0
  189. data/lib/spree/preferences/static_model_preferences.rb +25 -10
  190. data/lib/spree/rails_compatibility.rb +106 -0
  191. data/lib/spree/testing_support/blacklist_urls.rb +1 -1
  192. data/lib/spree/testing_support/bus_helpers.rb +101 -0
  193. data/lib/spree/testing_support/capybara_ext.rb +0 -30
  194. data/lib/spree/testing_support/common_rake.rb +71 -23
  195. data/lib/spree/testing_support/controller_requests.rb +0 -82
  196. data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/backend/all.js +1 -1
  197. data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/frontend/all.js +1 -1
  198. data/lib/spree/testing_support/dummy_app/database.yml +42 -22
  199. data/lib/spree/testing_support/dummy_app/migrations.rb +0 -3
  200. data/lib/spree/testing_support/dummy_app.rb +47 -34
  201. data/lib/spree/testing_support/factories/address_factory.rb +9 -6
  202. data/lib/spree/testing_support/factories/calculator_factory.rb +3 -0
  203. data/lib/spree/testing_support/factories/country_factory.rb +1 -2
  204. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +1 -1
  205. data/lib/spree/testing_support/factories/order_factory.rb +8 -5
  206. data/lib/spree/testing_support/factories/product_factory.rb +4 -1
  207. data/lib/spree/testing_support/factories/promotion_factory.rb +28 -14
  208. data/lib/spree/testing_support/factories/refund_factory.rb +0 -1
  209. data/lib/spree/testing_support/factories/state_factory.rb +8 -2
  210. data/lib/spree/testing_support/factories/store_credit_factory.rb +4 -4
  211. data/lib/spree/testing_support/factories/user_factory.rb +6 -0
  212. data/lib/spree/testing_support/factory_bot.rb +2 -2
  213. data/lib/spree/testing_support/order_walkthrough.rb +6 -8
  214. data/lib/spree/testing_support/preferences.rb +0 -25
  215. data/lib/spree/testing_support/silence_deprecations.rb +9 -0
  216. data/lib/tasks/colorado_delivery_fee.rake +28 -0
  217. data/lib/tasks/payment_method.rake +29 -0
  218. data/lib/tasks/solidus/check_orders_with_invalid_email.rake +18 -0
  219. data/lib/tasks/solidus/delete_prices_with_nil_amount.rake +8 -0
  220. data/lib/tasks/solidus/split_promotions_with_any_match_policy.rake +33 -0
  221. data/solidus_core.gemspec +14 -7
  222. metadata +127 -78
  223. data/app/mailers/spree/test_mailer.rb +0 -13
  224. data/app/models/concerns/spree/user_payment_source.rb +0 -26
  225. data/app/models/spree/calculator/free_shipping.rb +0 -22
  226. data/app/models/spree/calculator/percent_per_item.rb +0 -51
  227. data/app/models/spree/calculator/price_sack.rb +0 -28
  228. data/app/models/spree/gateway/bogus.rb +0 -13
  229. data/app/models/spree/gateway/bogus_simple.rb +0 -13
  230. data/app/models/spree/gateway.rb +0 -14
  231. data/app/models/spree/order/checkout.rb +0 -244
  232. data/app/models/spree/order_capturing.rb +0 -50
  233. data/app/models/spree/promotion_handler/free_shipping.rb +0 -9
  234. data/app/models/spree/tax/shipping_rate_taxer.rb +0 -24
  235. data/lib/generators/solidus/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -10
  236. data/lib/generators/solidus/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -9
  237. data/lib/generators/spree/install/install_generator.rb +0 -15
  238. data/lib/solidus/migrations/rename_gateways.rb +0 -41
  239. data/lib/spree/core/current_store.rb +0 -24
  240. data/lib/spree/paranoia_deprecations.rb +0 -41
  241. data/lib/spree/promo/environment.rb +0 -12
  242. data/lib/spree/testing_support/bar_ability.rb +0 -19
  243. data/lib/tasks/core.rake +0 -104
  244. data/lib/tasks/email.rake +0 -12
  245. data/lib/tasks/migrations/copy_order_bill_address_to_credit_card.rake +0 -119
  246. data/lib/tasks/migrations/migrate_address_names.rake +0 -158
  247. data/lib/tasks/migrations/migrate_default_billing_addresses_to_address_book.rake +0 -26
  248. data/lib/tasks/migrations/migrate_shipping_rate_taxes.rake +0 -22
  249. data/lib/tasks/migrations/migrate_user_addresses.rake +0 -34
  250. data/lib/tasks/migrations/rename_gateways.rake +0 -23
  251. data/lib/tasks/order_capturing.rake +0 -27
  252. data/lib/tasks/upgrade.rake +0 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8eb3e5a4b41af8809472fc7d7875fd2be9101bc2673b2d289bc32e5f6bc0cabc
4
- data.tar.gz: 48aac9f88550bbaa4ce69271426877fed50459b23c5fe3109bed565e553fe0b3
3
+ metadata.gz: 41166c504ad4a467ac0d444551669efca2f6ff36b8083b11483ca1d6953c838e
4
+ data.tar.gz: f9c8abd6767eb3aaecf807d1e360defbb57ba7af0590d88b6019f0cd8bf2f1b1
5
5
  SHA512:
6
- metadata.gz: 7b3adaf152c0e1a8bf34de8bf8577a8a369e51a6acb0215b558f055a1235b1b7499e50778cc040cf08221ee98d79df07d72b9112f61ad3158dd226b5c8af73e1
7
- data.tar.gz: dd950b0d62311e85c9e72cea449650b04d9388c2443e1dbb187bc885bf24f128338fb96e0b0b5eb177b9b444c2bb738b8d59d6bfdb298eb774b7391367e15b2d
6
+ metadata.gz: 5f9384ee4d463107d31e2cff1670ee587e7c2ad61795f11d1120bb69049fcc0bec3f04a0edee1e10e4c951a5b287cd9b93986c4194b87303e1a2a1ee38a7062a
7
+ data.tar.gz: 6d924bbc21a024712b1579c6bb73390904b456fc4671f1dc15b17de255d2f543b7cdcd2a4484e005444be085041a98819c6b3d2a1d55469305ce5b85108327e3
data/Rakefile CHANGED
@@ -14,8 +14,12 @@ DummyApp::RakeTasks.new(
14
14
  lib_name: 'solidus_core'
15
15
  )
16
16
 
17
- require 'yard'
18
- YARD::Rake::YardocTask.new
17
+ require 'yard/rake/yardoc_task'
18
+ YARD::Rake::YardocTask.new(:yard)
19
+ # The following workaround can be removed
20
+ # once https://github.com/lsegal/yard/pull/1457 is merged.
21
+ task('yard:require') { require 'yard' }
22
+ task yard: 'yard:require'
19
23
 
20
24
  namespace :spec do
21
25
  task :isolated do
@@ -22,21 +22,6 @@ Spree.pathFor = function(path) {
22
22
  return locationOrigin + Spree.mountedAt() + path;
23
23
  };
24
24
 
25
- Spree.url = function(uri, query) {
26
- if (console && console.warn) {
27
- console.warn('Spree.url is deprecated, and will be removed from a future Solidus version.');
28
- }
29
- if (uri.path === undefined) {
30
- uri = new Uri(uri);
31
- }
32
- if (query) {
33
- $.each(query, function(key, value) {
34
- return uri.addQueryParam(key, value);
35
- });
36
- }
37
- return uri;
38
- };
39
-
40
25
  Spree.ajax = function(url, options) {
41
26
  if (typeof url === "object") {
42
27
  options = url;
@@ -51,42 +36,6 @@ Spree.ajax = function(url, options) {
51
36
  return $.ajax(url, options);
52
37
  };
53
38
 
54
- /**
55
- * @deprecated Spree.routes will be removed in a future release. Please use Spree.pathFor instead.
56
- * See: https://github.com/solidusio/solidus/issues/3405
57
- */
58
- Spree.routesDeprecationProxy = {
59
- get: function(obj, prop) {
60
- <% if Rails.env != "production" %>
61
- console.log("Spree.routes is deprecated, please use pathFor instead. See: https://github.com/solidusio/solidus/issues/3405");
62
- <% end %>
63
-
64
- return obj[prop]
65
- },
66
-
67
- set: function(obj, prop, value) {
68
- <% if Rails.env != "production" %>
69
- console.log("Spree.routes is deprecated, please use pathFor instead. See: https://github.com/solidusio/solidus/issues/3405");
70
- <% end %>
71
-
72
- obj[prop] = value
73
- return value;
74
- }
75
- };
76
-
77
- var frontend_routes = {
78
- states_search: Spree.pathFor('api/states'),
79
- apply_coupon_code: function(order_id) {
80
- return Spree.pathFor("api/orders/" + order_id + "/coupon_codes");
81
- }
82
- }
83
-
84
- if(typeof Proxy == "function") {
85
- Spree.routes = new Proxy(frontend_routes, Spree.routesDeprecationProxy);
86
- } else {
87
- Spree.routes = frontend_routes
88
- }
89
-
90
39
  Spree.getJSON = function(url, data, success) {
91
40
  if (typeof data === 'function') {
92
41
  success = data;
@@ -4,7 +4,7 @@ require 'cancan'
4
4
  require_dependency 'spree/core/controller_helpers/strong_parameters'
5
5
 
6
6
  class Spree::BaseController < ApplicationController
7
- include Spree::Core::ControllerHelpers::CurrentHost
7
+ include ActiveStorage::SetCurrent
8
8
  include Spree::Core::ControllerHelpers::Auth
9
9
  include Spree::Core::ControllerHelpers::Common
10
10
  include Spree::Core::ControllerHelpers::PaymentParameters
@@ -130,7 +130,7 @@ module Spree
130
130
  end
131
131
 
132
132
  def display_price(product_or_variant)
133
- product_or_variant.price_for(current_pricing_options).to_html
133
+ product_or_variant.price_for_options(current_pricing_options)&.money&.to_html
134
134
  end
135
135
 
136
136
  def pretty_time(time, format = :long)
@@ -38,7 +38,7 @@ module Spree
38
38
  .with_prices(current_pricing_options)
39
39
  .all? { |variant_with_prices| variant_with_prices.price_same_as_master?(current_pricing_options) }
40
40
 
41
- variant.price_for(current_pricing_options).to_html
41
+ variant.price_for_options(current_pricing_options)&.money&.to_html
42
42
  end
43
43
 
44
44
  # Converts line breaks in product description into <p> tags.
@@ -68,7 +68,7 @@ module Spree
68
68
  # @return [String] a cache invalidation key for products
69
69
  def cache_key_for_products
70
70
  count = @products.count
71
- max_updated_at = (@products.maximum(:updated_at) || Date.today).to_s(:number)
71
+ max_updated_at = Spree::RailsCompatibility.to_fs((@products.maximum(:updated_at) || Date.today), :number)
72
72
  "#{I18n.locale}/#{current_pricing_options.cache_key}/spree/products/all-#{params[:page]}-#{max_updated_at}-#{count}"
73
73
  end
74
74
  end
@@ -8,16 +8,5 @@ module Spree
8
8
  def store_menu?
9
9
  %w{thank_you}.exclude? params[:action]
10
10
  end
11
-
12
- def cache_key_for_taxons
13
- Spree::Deprecation.warn <<-WARN.strip_heredoc
14
- cache_key_for_taxons is deprecated. Rails >= 5 has built-in support for collection cache keys.
15
- Instead in your view use:
16
- cache [I18n.locale, @taxons] do
17
- WARN
18
- max_updated_at = @taxons.maximum(:updated_at).to_i
19
- parts = [@taxon.try(:id), max_updated_at].compact.join("-")
20
- "#{I18n.locale}/taxons/#{parts}"
21
- end
22
11
  end
23
12
  end
@@ -11,11 +11,7 @@ module Spree
11
11
  # @option options resend [Boolean] indicates whether the email is a 'resend' (e.g.
12
12
  # triggered by the admin "resend" button)
13
13
  # @return [Mail::Message]
14
- #
15
- # Note: The signature of this method has changed. The new (non-deprecated)
16
- # signature is:
17
- # def shipped_email(carton:, order:, resend: false)
18
- def shipped_email(options, _deprecated_options = {})
14
+ def shipped_email(options)
19
15
  @order = options.fetch(:order)
20
16
  @carton = options.fetch(:carton)
21
17
  @manifest = @carton.manifest_for_order(@order)
@@ -4,14 +4,16 @@ require 'mini_magick'
4
4
 
5
5
  module Spree
6
6
  module ActiveStorageAdapter
7
- # Decorares AtiveStorage attachment to add methods exptected by Solidus'
7
+ # Decorates ActiveStorage attachment to add methods expected by Solidus'
8
8
  # Paperclip-oriented attachment support.
9
9
  class Attachment
10
10
  delegate_missing_to :@attachment
11
11
 
12
+ attr_reader :attachment
13
+
12
14
  def initialize(attachment, styles: {})
13
15
  @attachment = attachment
14
- @styles = normalize_styles(styles)
16
+ @transformations = styles_to_transformations(styles)
15
17
  end
16
18
 
17
19
  def exists?
@@ -27,11 +29,13 @@ module Spree
27
29
  end
28
30
 
29
31
  def variant(style = nil)
30
- size = style_to_size(style)
31
- @attachment.variant(
32
- resize_to_limit: size,
33
- strip: true
34
- ).processed
32
+ transformation = @transformations[style] || default_transformation(width, height)
33
+
34
+ @attachment.variant({
35
+ saver: {
36
+ strip: true
37
+ }
38
+ }.merge(transformation)).processed
35
39
  end
36
40
 
37
41
  def height
@@ -55,14 +59,29 @@ module Spree
55
59
  analyze unless analyzed?
56
60
 
57
61
  @attachment.metadata
62
+ rescue ActiveStorage::FileNotFoundError => error
63
+ logger.error("#{error} - Image id: #{attachment.record.id} is corrupted or cannot be found")
64
+
65
+ { identified: nil, width: nil, height: nil, analyzed: true }
58
66
  end
59
67
 
60
- def normalize_styles(styles)
61
- styles.transform_values { |v| v.split('x') }
68
+ def styles_to_transformations(styles)
69
+ styles.transform_values(&method(:imagemagick_to_image_processing_definition))
70
+ end
71
+
72
+ def imagemagick_to_image_processing_definition(definition)
73
+ width_height = definition.split('x').map(&:to_i)
74
+
75
+ case definition[-1].to_sym
76
+ when :^
77
+ { resize_to_fill: width_height }
78
+ else
79
+ default_transformation(*width_height)
80
+ end
62
81
  end
63
82
 
64
- def style_to_size(style)
65
- @styles.fetch(style&.to_sym) { [width, height] }
83
+ def default_transformation(width, height)
84
+ { resize_to_limit: [width, height] }
66
85
  end
67
86
  end
68
87
  end
@@ -10,7 +10,7 @@ module Spree
10
10
  included do
11
11
  next if Rails.gem_version >= Gem::Version.new('6.1.0.alpha')
12
12
 
13
- abort <<~MESSAGE
13
+ raise <<~MESSAGE
14
14
  Configuration Error: Solidus ActiveStorage attachment adpater requires Rails >= 6.1.0.
15
15
 
16
16
  Spree::Config.image_attachment_module preference is set to #{Spree::Config.image_attachment_module}
@@ -2,21 +2,6 @@
2
2
 
3
3
  module Spree
4
4
  module AdjustmentSource
5
- def deals_with_adjustments_for_deleted_source
6
- Spree::Deprecation.warn "AdjustmentSource#deals_with_adjustments_for_deleted_source is deprecated. Please use AdjustmentSource#remove_adjustments_from_incomplete_orders instead."
7
-
8
- remove_adjustments_from_incomplete_orders
9
-
10
- # The following is deprecated. As source_type without a source_id isn't
11
- # much better than a source_id that doesn't exist. In Solidus itself the
12
- # relevant classes use `acts_as_paranoid` so it is useful to keep the
13
- # source_id around.
14
- adjustments.
15
- joins(:order).
16
- merge(Spree::Order.complete).
17
- update_all(source_id: nil, updated_at: Time.current)
18
- end
19
-
20
5
  def remove_adjustments_from_incomplete_orders
21
6
  adjustments.
22
7
  joins(:order).
@@ -10,24 +10,6 @@ module Spree
10
10
  validates :calculator, presence: true
11
11
  end
12
12
 
13
- class_methods do
14
- def calculators
15
- Spree::Deprecation.warn("Calling .calculators is deprecated. Please access through Rails.application.config.spree.calculators")
16
-
17
- spree_calculators.send model_name_without_spree_namespace
18
- end
19
-
20
- private
21
-
22
- def model_name_without_spree_namespace
23
- to_s.tableize.tr('/', '_').sub('spree_', '')
24
- end
25
-
26
- def spree_calculators
27
- Spree::Config.environment.calculators
28
- end
29
- end
30
-
31
13
  def calculator_type
32
14
  calculator.class.to_s if calculator
33
15
  end
@@ -5,20 +5,49 @@ module Spree
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  included do
8
- has_one :default_price,
9
- -> { with_discarded.currently_valid.with_default_attributes },
10
- class_name: 'Spree::Price',
11
- inverse_of: :variant,
12
- dependent: :destroy,
13
- autosave: true
8
+ delegate :display_price, :display_amount, :price, to: :default_price, allow_nil: true
9
+ delegate :price=, to: :default_price_or_build
10
+
11
+ # @see Spree::Variant::PricingOptions.default_price_attributes
12
+ def self.default_price_attributes
13
+ Spree::Config.default_pricing_options.desired_attributes
14
+ end
15
+ end
16
+
17
+ # Returns `#prices` prioritized for being considered as default price
18
+ #
19
+ # @deprecated
20
+ # @return [ActiveRecord::Relation<Spree::Price>]
21
+ def currently_valid_prices
22
+ prices.currently_valid
14
23
  end
24
+ deprecate :currently_valid_prices, deprecator: Spree::Deprecation
15
25
 
16
- def find_or_build_default_price
17
- default_price || build_default_price(Spree::Config.default_pricing_options.desired_attributes)
26
+ # Returns {#default_price} or builds it from {Spree::Variant.default_price_attributes}
27
+ #
28
+ # @return [Spree::Price, nil]
29
+ # @see Spree::Variant.default_price_attributes
30
+ def default_price_or_build
31
+ default_price ||
32
+ prices.build(self.class.default_price_attributes)
18
33
  end
19
34
 
20
- delegate :display_price, :display_amount, :price, to: :find_or_build_default_price
21
- delegate :price=, to: :find_or_build_default_price
35
+ # Select from {#prices} the one to be considered as the default
36
+ #
37
+ # This method works with the in-memory association, so non-persisted prices
38
+ # are taken into account.
39
+ #
40
+ # A price is a candidate to be considered as the default when it meets
41
+ # {Spree::Variant.default_price_attributes} criteria. When more than one candidate is
42
+ # found, non-persisted records take preference. When more than one persisted
43
+ # candidate exists, the one most recently updated is taken or, in case of
44
+ # race condition, the one with higher id.
45
+ #
46
+ # @return [Spree::Price, nil]
47
+ # @see Spree::Variant.default_price_attributes
48
+ def default_price
49
+ price_selector.price_for_options(Spree::Config.default_pricing_options)
50
+ end
22
51
 
23
52
  def has_default_price?
24
53
  default_price.present? && !default_price.discarded?
@@ -3,8 +3,28 @@
3
3
  module Spree::RansackableAttributes
4
4
  extend ActiveSupport::Concern
5
5
  included do
6
- class_attribute :whitelisted_ransackable_associations
7
- class_attribute :whitelisted_ransackable_attributes
6
+ class_attribute :allowed_ransackable_associations, default: []
7
+ class_attribute :allowed_ransackable_attributes, default: []
8
+
9
+ def self.whitelisted_ransackable_associations
10
+ Spree::Deprecation.deprecation_warning(:whitelisted_ransackable_associations, 'use allowed_ransackable_associations instead')
11
+ allowed_ransackable_associations
12
+ end
13
+
14
+ def self.whitelisted_ransackable_associations=(new_value)
15
+ Spree::Deprecation.deprecation_warning(:whitelisted_ransackable_associations=, 'use allowed_ransackable_associations= instead')
16
+ self.allowed_ransackable_associations = new_value
17
+ end
18
+
19
+ def self.whitelisted_ransackable_attributes
20
+ Spree::Deprecation.deprecation_warning(:whitelisted_ransackable_attributes, 'use allowed_ransackable_attributes instead')
21
+ allowed_ransackable_attributes
22
+ end
23
+
24
+ def self.whitelisted_ransackable_attributes=(new_value)
25
+ Spree::Deprecation.deprecation_warning(:whitelisted_ransackable_attributes=, 'use allowed_ransackable_attributes= instead')
26
+ self.allowed_ransackable_attributes = new_value
27
+ end
8
28
 
9
29
  class_attribute :default_ransackable_attributes
10
30
  self.default_ransackable_attributes = %w[id]
@@ -12,11 +32,11 @@ module Spree::RansackableAttributes
12
32
 
13
33
  class_methods do
14
34
  def ransackable_associations(*_args)
15
- whitelisted_ransackable_associations || []
35
+ allowed_ransackable_associations
16
36
  end
17
37
 
18
38
  def ransackable_attributes(*_args)
19
- default_ransackable_attributes | (whitelisted_ransackable_attributes || [])
39
+ default_ransackable_attributes | allowed_ransackable_attributes
20
40
  end
21
41
  end
22
42
  end
@@ -7,12 +7,10 @@ module Spree
7
7
  extend ActiveSupport::Concern
8
8
 
9
9
  included do
10
- acts_as_paranoid
11
- include Spree::ParanoiaDeprecations::InstanceMethods
12
- extend Spree::ParanoiaDeprecations::ClassMethods
13
-
14
10
  include Discard::Model
15
11
  self.discard_column = :deleted_at
12
+
13
+ default_scope { kept }
16
14
  end
17
15
  end
18
16
  end
@@ -37,34 +37,9 @@ module Spree
37
37
 
38
38
  has_one :default_user_ship_address, ->{ default_shipping }, class_name: 'Spree::UserAddress', foreign_key: 'user_id'
39
39
  has_one :ship_address, through: :default_user_ship_address, source: :address
40
- end
41
-
42
- def default_address
43
- Spree::Deprecation.warn "#default_address is deprecated. Please start using #ship_address."
44
- ship_address
45
- end
46
-
47
- def default_user_address
48
- Spree::Deprecation.warn "#default_user_address is deprecated. Please start using #default_user_ship_address."
49
- default_user_ship_address
50
- end
51
-
52
- def default_address=(address)
53
- Spree::Deprecation.warn(
54
- "#default_address= does not take Spree::Config.automatic_default_address into account and is deprecated. " \
55
- "Please use #ship_address=."
56
- )
57
-
58
- self.ship_address = address if address
59
- end
60
-
61
- def default_address_attributes=(attributes)
62
- # see "Nested Attributes Examples" section of http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for
63
- # this #{fieldname}_attributes= method works with fields_for in the views
64
- # even without declaring accepts_nested_attributes_for
65
- Spree::Deprecation.warn "#default_address_attributes= is deprecated. Please use #ship_address_attributes=."
66
40
 
67
- self.default_address = Spree::Address.immutable_merge(ship_address, attributes)
41
+ accepts_nested_attributes_for :ship_address
42
+ accepts_nested_attributes_for :bill_address
68
43
  end
69
44
 
70
45
  # saves address in address book
@@ -132,12 +107,19 @@ module Spree
132
107
  return new_address unless new_address.valid?
133
108
 
134
109
  first_one = user_addresses.empty?
110
+ user_address = prepare_user_address(new_address)
135
111
 
136
112
  if address_attributes[:id].present? && new_address.id != address_attributes[:id]
113
+ if ship_address&.id == address_attributes[:id].to_i
114
+ user_addresses.mark_default(user_address, address_type: :shipping)
115
+ end
116
+
117
+ if bill_address&.id == address_attributes[:id].to_i
118
+ user_addresses.mark_default(user_address, address_type: :billing)
119
+ end
137
120
  remove_from_address_book(address_attributes[:id])
138
121
  end
139
122
 
140
- user_address = prepare_user_address(new_address)
141
123
  user_addresses.mark_default(user_address, address_type: address_type) if default || first_one
142
124
 
143
125
  if persisted?
@@ -157,15 +139,6 @@ module Spree
157
139
  user_address.address
158
140
  end
159
141
 
160
- def mark_default_address(address)
161
- Spree::Deprecation.warn(
162
- "#mark_default_address is deprecated and it sets the ship_address only. " \
163
- "Please use #mark_default_ship_address."
164
- )
165
-
166
- mark_default_ship_address(address)
167
- end
168
-
169
142
  def mark_default_ship_address(address)
170
143
  user_addresses.mark_default(user_addresses.find_by(address: address))
171
144
  end
@@ -7,7 +7,6 @@ module Spree
7
7
  include Spree::UserApiAuthentication
8
8
  include Spree::UserReporting
9
9
  include Spree::UserAddressBook
10
- include Spree::UserPaymentSource
11
10
 
12
11
  included do
13
12
  extend Spree::DisplayMoney
@@ -19,24 +18,22 @@ module Spree
19
18
  has_many :stock_locations, through: :user_stock_locations
20
19
 
21
20
  has_many :spree_orders, foreign_key: "user_id", class_name: "Spree::Order"
22
- has_many :orders, foreign_key: "user_id", class_name: "Spree::Order", dependent: :restrict_with_exception
21
+ has_many :orders, foreign_key: "user_id", class_name: "Spree::Order"
23
22
 
24
23
  has_many :store_credits, -> { includes(:credit_type) }, foreign_key: "user_id", class_name: "Spree::StoreCredit"
25
24
  has_many :store_credit_events, through: :store_credits
26
25
 
27
- money_methods :total_available_store_credit
28
- deprecate display_total_available_store_credit: :display_available_store_credit_total, deprecator: Spree::Deprecation
29
-
30
26
  has_many :credit_cards, class_name: "Spree::CreditCard", foreign_key: :user_id
31
27
  has_many :wallet_payment_sources, foreign_key: 'user_id', class_name: 'Spree::WalletPaymentSource', inverse_of: :user
32
28
 
33
29
  after_create :auto_generate_spree_api_key
30
+ before_destroy :check_for_deletion
34
31
 
35
32
  include Spree::RansackableAttributes unless included_modules.include?(Spree::RansackableAttributes)
36
33
 
37
- ransack_alias :firstname_or_lastname, :addresses_firstname_or_addresses_lastname
38
- self.whitelisted_ransackable_associations = %w[addresses spree_roles]
39
- self.whitelisted_ransackable_attributes = %w[firstname_or_lastname id email created_at]
34
+ ransack_alias :name, :addresses_name
35
+ self.allowed_ransackable_associations = %w[addresses spree_roles]
36
+ self.allowed_ransackable_attributes = %w[name id email created_at]
40
37
  end
41
38
 
42
39
  def wallet
@@ -68,11 +65,6 @@ module Spree
68
65
  last_order unless last_order.try!(:completed?)
69
66
  end
70
67
 
71
- def total_available_store_credit
72
- store_credits.reload.to_a.sum(&:amount_remaining)
73
- end
74
- deprecate total_available_store_credit: :available_store_credit_total, deprecator: Spree::Deprecation
75
-
76
68
  def available_store_credit_total(currency:)
77
69
  store_credits.to_a.
78
70
  select { |credit| credit.currency == currency }.
@@ -85,5 +77,38 @@ module Spree
85
77
  currency: currency,
86
78
  )
87
79
  end
80
+
81
+ # Restrict to delete users with existing orders
82
+ #
83
+ # Override this in your user model class to add another logic.
84
+ #
85
+ # Ie. to allow to delete users with incomplete orders add:
86
+ #
87
+ # orders.complete.none?
88
+ #
89
+ def can_be_deleted?
90
+ orders.none?
91
+ end
92
+
93
+ # Updates the roles in keeping with the given ability's permissions
94
+ #
95
+ # Roles that are not accessible to the given ability will be ignored. It
96
+ # also ensure not to remove non accessible roles when assigning new
97
+ # accessible ones.
98
+ #
99
+ # @param given_roles [Spree::Role]
100
+ # @param ability [Spree::Ability]
101
+ def update_spree_roles(given_roles, ability:)
102
+ accessible_roles = Spree::Role.accessible_by(ability)
103
+ non_accessible_roles = Spree::Role.all - accessible_roles
104
+ new_accessible_roles = given_roles - non_accessible_roles
105
+ self.spree_roles = spree_roles - accessible_roles + new_accessible_roles
106
+ end
107
+
108
+ private
109
+
110
+ def check_for_deletion
111
+ raise ActiveRecord::DeleteRestrictionError unless can_be_deleted?
112
+ end
88
113
  end
89
114
  end
@@ -14,13 +14,6 @@ module Spree
14
14
 
15
15
  attr_reader :user
16
16
 
17
- CUSTOM_ALIASES_MAP = {
18
- delete: :destroy,
19
- display: :read,
20
- new_action: :create,
21
- read: :show
22
- }.freeze
23
-
24
17
  # Allows us to go beyond the standard cancan initialize method which makes it difficult for engines to
25
18
  # modify the default +Ability+ of an application. The +ability+ argument must be a class that includes
26
19
  # the +CanCan::Ability+ module. The registered ability should behave properly as a stand-alone class
@@ -40,38 +33,8 @@ module Spree
40
33
  register_extension_abilities
41
34
  end
42
35
 
43
- def can?(action, *args)
44
- super(normalize_action(action), *args)
45
- end
46
-
47
- def model_adapter(model_class, action)
48
- super(model_class, normalize_action(action))
49
- end
50
-
51
36
  private
52
37
 
53
- def normalize_action(action)
54
- return action unless Spree::Config.use_custom_cancancan_actions
55
-
56
- normalized_action = CUSTOM_ALIASES_MAP.fetch(action, action)
57
-
58
- if action == :read
59
- Spree::Deprecation.warn <<~WARN, caller(3)
60
- The behavior of CanCanCan `:read` action alias will be changing in Solidus 3.0.
61
- The current alias is: `:show, :to => :read`,
62
- the new alias will be compliant with CanCanCan's default: `index, :show, :to => :read`
63
- WARN
64
- elsif CUSTOM_ALIASES_MAP.key? action
65
- Spree::Deprecation.warn <<~WARN, caller(3)
66
- Calling CanCanCan alias action #{action.inspect} is deprecated.
67
- In Solidus 3.0 non-standard CanCanCan action aliases will be replaced with default ones,
68
- please replace with #{normalized_action.inspect}.
69
- WARN
70
- end
71
-
72
- normalized_action
73
- end
74
-
75
38
  # Before, this was the only way to extend this ability. Permission sets have been added since.
76
39
  # It is recommended to use them instead for extension purposes if possible.
77
40
  def register_extension_abilities
@@ -2,29 +2,11 @@
2
2
 
3
3
  module Spree
4
4
  class Address
5
- # Provides a value object to help transitioning from legacy
6
- # firstname and lastname fields to a unified name field.
5
+ # Provides a value object to help splitting and joining
6
+ # name fields
7
7
  class Name
8
8
  attr_reader :first_name, :last_name, :value
9
9
 
10
- # Creates an instance of Spree::Address::Name parsing input attributes.
11
- # @param attributes [Hash] an hash possibly containing name-related
12
- # attributes (name, firstname, lastname, first_name, last_name)
13
- # @return [Spree::Address::Name] the object created
14
- def self.from_attributes(attributes)
15
- params = attributes.with_indifferent_access
16
-
17
- if params[:name].present?
18
- Spree::Address::Name.new(params[:name])
19
- elsif params[:firstname].present?
20
- Spree::Address::Name.new(params[:firstname], params[:lastname])
21
- elsif params[:first_name].present?
22
- Spree::Address::Name.new(params[:first_name], params[:last_name])
23
- else
24
- Spree::Address::Name.new
25
- end
26
- end
27
-
28
10
  def initialize(*components)
29
11
  @value = components.join(' ').strip
30
12
  initialize_name_components(components)