solidus_core 3.0.0 → 4.5.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 (444) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -2
  3. data/Rakefile +7 -2
  4. data/app/assets/images/logo/solidus.svg +18 -1
  5. data/app/assets/images/logo/solidus_logo.png +0 -0
  6. data/app/controllers/spree/base_controller.rb +1 -3
  7. data/app/helpers/spree/base_helper.rb +3 -3
  8. data/app/helpers/spree/core/controller_helpers/auth.rb +66 -0
  9. data/app/helpers/spree/core/controller_helpers/common.rb +82 -0
  10. data/app/helpers/spree/core/controller_helpers/order.rb +86 -0
  11. data/app/helpers/spree/core/controller_helpers/payment_parameters.rb +165 -0
  12. data/{lib/spree/core/controller_helpers/current_host.rb → app/helpers/spree/core/controller_helpers/pricing.rb} +6 -4
  13. data/app/helpers/spree/core/controller_helpers/search.rb +16 -0
  14. data/app/helpers/spree/core/controller_helpers/store.rb +19 -0
  15. data/app/helpers/spree/core/controller_helpers/strong_parameters.rb +74 -0
  16. data/app/helpers/spree/products_helper.rb +2 -2
  17. data/app/mailers/spree/base_mailer.rb +1 -1
  18. data/app/mailers/spree/carton_mailer.rb +1 -1
  19. data/app/mailers/spree/order_mailer.rb +3 -3
  20. data/app/mailers/spree/reimbursement_mailer.rb +1 -1
  21. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +30 -11
  22. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +1 -1
  23. data/app/models/concerns/spree/active_storage_adapter.rb +1 -18
  24. data/app/models/concerns/spree/default_price.rb +30 -10
  25. data/app/models/concerns/spree/display_money.rb +1 -1
  26. data/app/models/concerns/spree/metadata.rb +64 -0
  27. data/app/models/concerns/spree/named_type.rb +2 -0
  28. data/app/models/concerns/spree/ordered_property_value_list.rb +2 -2
  29. data/app/models/concerns/spree/ransackable_attributes.rb +9 -5
  30. data/app/models/concerns/spree/user_address_book.rb +19 -10
  31. data/app/models/concerns/spree/user_methods.rb +40 -6
  32. data/app/models/spree/address.rb +11 -9
  33. data/app/models/spree/adjustment.rb +15 -76
  34. data/app/models/spree/adjustment_reason.rb +2 -0
  35. data/app/models/spree/calculator/flat_fee.rb +21 -0
  36. data/app/models/spree/calculator/returns/default_refund_amount.rb +1 -1
  37. data/app/models/spree/carton.rb +3 -3
  38. data/app/models/spree/core/state_machines/inventory_unit.rb +42 -0
  39. data/app/models/spree/core/state_machines/order/class_methods.rb +217 -0
  40. data/app/models/spree/core/state_machines/order.rb +42 -0
  41. data/app/models/spree/core/state_machines/payment.rb +61 -0
  42. data/app/models/spree/core/state_machines/reimbursement.rb +33 -0
  43. data/app/models/spree/core/state_machines/return_authorization.rb +32 -0
  44. data/app/models/spree/core/state_machines/return_item/acceptance_status.rb +51 -0
  45. data/app/models/spree/core/state_machines/return_item/reception_status.rb +42 -0
  46. data/app/models/spree/core/state_machines/shipment.rb +58 -0
  47. data/app/models/spree/country.rb +1 -1
  48. data/app/models/spree/credit_card.rb +13 -10
  49. data/app/models/spree/customer_return.rb +6 -3
  50. data/app/models/spree/deprecated_configurable_class.rb +40 -0
  51. data/app/models/spree/fulfilment_changer.rb +56 -29
  52. data/app/models/spree/image/active_storage_attachment.rb +2 -7
  53. data/app/models/spree/image/paperclip_attachment.rb +2 -2
  54. data/app/models/spree/inventory_unit.rb +2 -2
  55. data/app/models/spree/item_total.rb +28 -0
  56. data/app/models/spree/legacy_user.rb +1 -0
  57. data/app/models/spree/line_item.rb +26 -8
  58. data/app/models/spree/log_entry.rb +98 -1
  59. data/app/models/spree/money.rb +120 -0
  60. data/app/models/spree/null_promotion_adjuster.rb +13 -0
  61. data/app/models/spree/null_promotion_advertiser.rb +9 -0
  62. data/app/models/spree/null_promotion_finder.rb +9 -0
  63. data/app/models/spree/null_promotion_handler.rb +44 -0
  64. data/app/models/spree/option_type.rb +1 -1
  65. data/app/models/spree/option_value.rb +4 -3
  66. data/app/models/spree/order/number_generator.rb +7 -1
  67. data/app/models/spree/order.rb +143 -96
  68. data/app/models/spree/order_cancellations.rb +8 -8
  69. data/app/models/spree/order_inventory.rb +7 -5
  70. data/app/models/spree/order_merger.rb +5 -7
  71. data/app/models/spree/order_mutex.rb +2 -2
  72. data/app/models/spree/order_shipping.rb +15 -19
  73. data/app/models/spree/order_taxation.rb +7 -4
  74. data/app/models/spree/order_update_attributes.rb +3 -1
  75. data/app/models/spree/order_updater.rb +25 -63
  76. data/app/models/spree/payment/processing.rb +60 -57
  77. data/app/models/spree/payment.rb +14 -27
  78. data/app/models/spree/payment_create.rb +1 -1
  79. data/app/models/spree/payment_method/bogus_credit_card.rb +18 -14
  80. data/app/models/spree/payment_method/credit_card.rb +0 -4
  81. data/app/models/spree/payment_method/simple_bogus_credit_card.rb +18 -4
  82. data/app/models/spree/payment_method/store_credit.rb +1 -1
  83. data/app/models/spree/payment_method.rb +29 -10
  84. data/app/models/spree/payment_source.rb +5 -1
  85. data/app/models/spree/permission_set.rb +11 -0
  86. data/app/models/spree/permission_sets/base.rb +45 -0
  87. data/app/models/spree/permission_sets/configuration_display.rb +53 -0
  88. data/app/models/spree/permission_sets/configuration_management.rb +52 -0
  89. data/app/models/spree/permission_sets/dashboard_display.rb +28 -0
  90. data/app/models/spree/permission_sets/default_customer.rb +83 -0
  91. data/app/models/spree/permission_sets/order_display.rb +50 -0
  92. data/app/models/spree/permission_sets/order_management.rb +50 -0
  93. data/app/models/spree/permission_sets/product_display.rb +43 -0
  94. data/app/models/spree/permission_sets/product_management.rb +47 -0
  95. data/app/models/spree/permission_sets/restricted_stock_display.rb +33 -0
  96. data/app/models/spree/permission_sets/restricted_stock_management.rb +33 -0
  97. data/app/models/spree/permission_sets/stock_display.rb +26 -0
  98. data/app/models/spree/permission_sets/stock_management.rb +26 -0
  99. data/app/models/spree/permission_sets/super_user.rb +26 -0
  100. data/app/models/spree/permission_sets/user_display.rb +27 -0
  101. data/app/models/spree/permission_sets/user_management.rb +44 -0
  102. data/app/models/spree/preference.rb +1 -1
  103. data/app/models/spree/price.rb +3 -3
  104. data/app/models/spree/product/scopes.rb +23 -10
  105. data/app/models/spree/product.rb +30 -23
  106. data/app/models/spree/product_property.rb +1 -1
  107. data/app/models/spree/property.rb +1 -1
  108. data/app/models/spree/refund.rb +13 -3
  109. data/app/models/spree/refund_reason.rb +6 -1
  110. data/app/models/spree/reimbursement.rb +6 -6
  111. data/app/models/spree/reimbursement_performer.rb +3 -3
  112. data/app/models/spree/reimbursement_tax_calculator.rb +3 -3
  113. data/app/models/spree/reimbursement_type/credit.rb +1 -1
  114. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +6 -6
  115. data/app/models/spree/reimbursement_type/store_credit.rb +1 -1
  116. data/app/models/spree/reimbursement_type.rb +6 -1
  117. data/app/models/spree/return_authorization.rb +3 -1
  118. data/app/models/spree/return_item.rb +13 -15
  119. data/app/models/spree/return_reason.rb +6 -1
  120. data/app/models/spree/role.rb +3 -1
  121. data/app/models/spree/role_permission.rb +8 -0
  122. data/app/models/spree/shipment.rb +12 -10
  123. data/app/models/spree/shipping_category.rb +2 -0
  124. data/app/models/spree/shipping_rate.rb +2 -3
  125. data/app/models/spree/shipping_rate_tax.rb +1 -1
  126. data/app/models/spree/{order_contents.rb → simple_order_contents.rb} +10 -13
  127. data/app/models/spree/state.rb +1 -1
  128. data/app/models/spree/stock/allocator/on_hand_first.rb +2 -2
  129. data/app/models/spree/stock/availability.rb +11 -3
  130. data/app/models/spree/stock/estimator.rb +1 -1
  131. data/app/models/spree/stock/inventory_unit_builder.rb +1 -1
  132. data/app/models/spree/stock/package.rb +2 -2
  133. data/app/models/spree/stock/quantifier.rb +12 -8
  134. data/app/models/spree/stock/simple_coordinator.rb +38 -28
  135. data/app/models/spree/stock/splitter/shipping_category.rb +1 -1
  136. data/app/models/spree/stock_item.rb +2 -1
  137. data/app/models/spree/stock_location.rb +7 -7
  138. data/app/models/spree/stock_movement.rb +2 -2
  139. data/app/models/spree/store.rb +3 -1
  140. data/app/models/spree/store_credit.rb +31 -16
  141. data/app/models/spree/store_credit_event.rb +4 -3
  142. data/app/models/spree/store_credit_prioritizer.rb +17 -0
  143. data/app/models/spree/store_credit_reason.rb +6 -1
  144. data/app/models/spree/store_selector/by_server_name.rb +1 -1
  145. data/app/models/spree/tax/item_tax.rb +3 -2
  146. data/app/models/spree/tax/order_tax.rb +3 -1
  147. data/app/models/spree/tax/tax_helpers.rb +14 -3
  148. data/app/models/spree/tax/tax_location.rb +4 -7
  149. data/app/models/spree/tax_calculator/default.rb +32 -1
  150. data/app/models/spree/tax_calculator/shipping_rate.rb +2 -2
  151. data/app/models/spree/tax_category.rb +3 -1
  152. data/app/models/spree/tax_rate.rb +14 -1
  153. data/app/models/spree/taxon/active_storage_attachment.rb +2 -2
  154. data/app/models/spree/taxon/paperclip_attachment.rb +4 -4
  155. data/app/models/spree/taxon.rb +25 -3
  156. data/app/models/spree/taxon_brand_selector.rb +22 -0
  157. data/app/models/spree/taxonomy.rb +4 -3
  158. data/app/models/spree/unauthorized_redirect_handler.rb +24 -0
  159. data/app/models/spree/unit_cancel.rb +1 -2
  160. data/app/models/spree/user_address.rb +9 -3
  161. data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +1 -1
  162. data/app/models/spree/variant/price_selector.rb +25 -8
  163. data/app/models/spree/variant/scopes.rb +4 -0
  164. data/app/models/spree/variant/vat_price_generator.rb +1 -1
  165. data/app/models/spree/variant.rb +64 -37
  166. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +4 -4
  167. data/app/models/spree/wallet.rb +2 -2
  168. data/app/models/spree/zone.rb +1 -1
  169. data/app/subscribers/spree/order_mailer_subscriber.rb +35 -0
  170. data/app/views/layouts/spree/base_mailer.html.erb +2 -2
  171. data/app/views/spree/order_mailer/cancel_email.html.erb +1 -1
  172. data/app/views/spree/order_mailer/cancel_email.text.erb +1 -1
  173. data/app/views/spree/order_mailer/confirm_email.html.erb +5 -5
  174. data/app/views/spree/order_mailer/confirm_email.text.erb +5 -5
  175. data/app/views/spree/order_mailer/inventory_cancellation_email.html.erb +0 -1
  176. data/config/i18n-tasks.yml +134 -0
  177. data/config/locales/en.yml +439 -338
  178. data/db/default/spree/permission_sets.rb +10 -0
  179. data/db/default/spree/return_reasons.rb +3 -1
  180. data/db/default/spree/states.rb +2 -2
  181. data/db/migrate/20160101010000_solidus_one_four.rb +0 -127
  182. data/db/migrate/20180710170104_create_spree_store_credit_reasons_table.rb +2 -2
  183. data/db/migrate/20201127212108_add_type_before_removal_to_spree_payment_methods.rb +7 -0
  184. data/db/migrate/20210312061050_change_column_null_on_prices.rb +7 -0
  185. data/db/migrate/20210815004823_add_unique_index_to_option_values_variants.rb +16 -0
  186. data/db/migrate/20220419170826_remove_archived_user_addresses.rb +12 -0
  187. data/db/migrate/20220805202442_add_level_to_spree_tax_rates.rb +5 -0
  188. data/db/migrate/20221123152807_add_shipping_category_to_spree_variants.rb +5 -0
  189. data/db/migrate/20230321161854_change_column_null_option_values_option_type_id.rb +5 -0
  190. data/db/migrate/20230425103509_remove_taxon_position.rb +5 -0
  191. data/db/migrate/20230427095534_drop_deprecated_address_id_from_shipments.rb +11 -0
  192. data/db/migrate/20240821173254_create_spree_permission_sets_in_core.rb +9 -0
  193. data/db/migrate/20240821173341_create_spree_roles_permissions_in_core.rb +9 -0
  194. data/db/migrate/20240821173641_add_description_to_spree_roles.rb +5 -0
  195. data/db/migrate/20240904152041_add_privilege_and_category_to_spree_permission_sets.rb +6 -0
  196. data/db/migrate/20250129061658_add_metadata_to_spree_resources.rb +28 -0
  197. data/db/migrate/20250201172950_add_gtin_and_condition_to_spree_variant.rb +6 -0
  198. data/db/migrate/20250207104016_add_primary_taxon_to_products.rb +7 -0
  199. data/db/migrate/20250221152004_add_metadata_to_users.rb +13 -0
  200. data/db/seeds.rb +5 -1
  201. data/lib/generators/solidus/install/app_templates/authentication/custom.rb +16 -0
  202. data/lib/generators/solidus/install/app_templates/authentication/devise.rb +16 -0
  203. data/lib/generators/solidus/install/app_templates/authentication/existing.rb +10 -0
  204. data/lib/generators/solidus/install/app_templates/authentication/none.rb +1 -0
  205. data/lib/generators/solidus/install/app_templates/frontend/none.rb +1 -0
  206. data/lib/generators/solidus/install/app_templates/frontend/starter.rb +1 -0
  207. data/lib/generators/solidus/install/app_templates/payment_method/braintree.rb +5 -0
  208. data/lib/generators/solidus/install/app_templates/payment_method/none.rb +1 -0
  209. data/lib/generators/solidus/install/app_templates/payment_method/paypal.rb +5 -0
  210. data/lib/generators/solidus/install/app_templates/payment_method/stripe.rb +5 -0
  211. data/lib/generators/solidus/install/install_generator.rb +210 -156
  212. data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +27 -33
  213. data/lib/generators/solidus/install/templates/vendor/assets/javascripts/spree/backend/all.js +2 -2
  214. data/lib/generators/solidus/update/templates/config/initializers/new_solidus_defaults.rb.tt +30 -0
  215. data/lib/generators/solidus/update/update_generator.rb +124 -0
  216. data/lib/generators/spree/custom_user/custom_user_generator.rb +6 -4
  217. data/lib/generators/spree/custom_user/templates/authentication_helpers.rb.tt +2 -6
  218. data/lib/generators/spree/custom_user/templates/migration.rb.tt +7 -3
  219. data/lib/generators/spree/dummy/dummy_generator.rb +12 -9
  220. data/lib/generators/spree/dummy/templates/rails/application.rb.tt +1 -2
  221. data/lib/generators/spree/dummy/templates/rails/database.yml +48 -63
  222. data/lib/generators/spree/dummy/templates/rails/manifest.js +3 -0
  223. data/lib/generators/spree/dummy/templates/rails/test.rb +7 -2
  224. data/lib/spree/app_configuration.rb +220 -71
  225. data/lib/spree/bus.rb +11 -0
  226. data/lib/spree/core/class_constantizer.rb +2 -2
  227. data/lib/spree/core/controller_helpers/auth.rb +5 -69
  228. data/lib/spree/core/controller_helpers/common.rb +5 -80
  229. data/lib/spree/core/controller_helpers/order.rb +5 -86
  230. data/lib/spree/core/controller_helpers/payment_parameters.rb +5 -165
  231. data/lib/spree/core/controller_helpers/pricing.rb +5 -17
  232. data/lib/spree/core/controller_helpers/search.rb +5 -14
  233. data/lib/spree/core/controller_helpers/store.rb +5 -17
  234. data/lib/spree/core/controller_helpers/strong_parameters.rb +5 -71
  235. data/lib/spree/core/engine.rb +49 -16
  236. data/lib/spree/core/environment/calculators.rb +35 -3
  237. data/lib/spree/core/environment/promotions.rb +25 -4
  238. data/lib/spree/core/environment_extension.rb +16 -2
  239. data/lib/spree/core/importer/order.rb +6 -6
  240. data/lib/spree/core/importer/product.rb +3 -3
  241. data/lib/spree/core/nested_class_set.rb +28 -0
  242. data/lib/spree/core/null_promotion_configuration.rb +84 -0
  243. data/lib/spree/core/product_duplicator.rb +1 -1
  244. data/lib/spree/core/product_filters.rb +2 -2
  245. data/lib/spree/core/search/base.rb +18 -9
  246. data/lib/spree/core/search/variant.rb +2 -2
  247. data/lib/spree/core/state_machines/inventory_unit.rb +5 -40
  248. data/lib/spree/core/state_machines/order.rb +5 -247
  249. data/lib/spree/core/state_machines/payment.rb +5 -59
  250. data/lib/spree/core/state_machines/reimbursement.rb +5 -31
  251. data/lib/spree/core/state_machines/return_authorization.rb +5 -30
  252. data/lib/spree/core/state_machines/return_item/acceptance_status.rb +5 -49
  253. data/lib/spree/core/state_machines/return_item/reception_status.rb +5 -40
  254. data/lib/spree/core/state_machines/shipment.rb +5 -56
  255. data/lib/spree/core/state_machines.rb +48 -81
  256. data/lib/spree/core/stock_configuration.rb +18 -0
  257. data/lib/spree/core/validators/email.rb +2 -4
  258. data/lib/spree/core/version.rb +5 -1
  259. data/lib/spree/core/versioned_value.rb +75 -0
  260. data/lib/spree/core.rb +40 -16
  261. data/lib/spree/deprecated_instance_variable_proxy.rb +57 -0
  262. data/lib/spree/deprecation.rb +3 -51
  263. data/lib/spree/deprecator.rb +9 -0
  264. data/lib/spree/i18n.rb +1 -1
  265. data/lib/spree/mailer_previews/carton_preview.rb +1 -1
  266. data/lib/spree/migration_helpers.rb +3 -3
  267. data/lib/spree/migrations.rb +13 -11
  268. data/lib/spree/money.rb +5 -118
  269. data/lib/spree/permission_sets/base.rb +5 -30
  270. data/lib/spree/permission_sets/configuration_display.rb +5 -23
  271. data/lib/spree/permission_sets/configuration_management.rb +5 -23
  272. data/lib/spree/permission_sets/dashboard_display.rb +5 -9
  273. data/lib/spree/permission_sets/default_customer.rb +5 -35
  274. data/lib/spree/permission_sets/order_display.rb +5 -19
  275. data/lib/spree/permission_sets/order_management.rb +5 -20
  276. data/lib/spree/permission_sets/product_display.rb +5 -17
  277. data/lib/spree/permission_sets/product_management.rb +5 -19
  278. data/lib/spree/permission_sets/restricted_stock_display.rb +5 -16
  279. data/lib/spree/permission_sets/restricted_stock_management.rb +5 -16
  280. data/lib/spree/permission_sets/stock_display.rb +5 -10
  281. data/lib/spree/permission_sets/stock_management.rb +5 -10
  282. data/lib/spree/permission_sets/super_user.rb +5 -9
  283. data/lib/spree/permission_sets/user_display.rb +5 -11
  284. data/lib/spree/permission_sets/user_management.rb +5 -23
  285. data/lib/spree/permission_sets.rb +5 -18
  286. data/lib/spree/permitted_attributes.rb +35 -14
  287. data/lib/spree/preferences/configuration.rb +88 -0
  288. data/lib/spree/preferences/persistable.rb +7 -1
  289. data/lib/spree/preferences/preferable.rb +13 -0
  290. data/lib/spree/preferences/preferable_class_methods.rb +12 -4
  291. data/lib/spree/preferences/preference_differentiator.rb +29 -0
  292. data/lib/spree/preferences/static_model_preferences.rb +25 -10
  293. data/lib/spree/preferences/store.rb +2 -2
  294. data/lib/spree/testing_support/blacklist_urls.rb +1 -1
  295. data/lib/spree/testing_support/bus_helpers.rb +101 -0
  296. data/lib/spree/testing_support/capybara_ext.rb +11 -1
  297. data/lib/spree/testing_support/common_rake.rb +76 -23
  298. data/lib/spree/testing_support/dummy_ability.rb +7 -0
  299. data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/backend/all.js +1 -1
  300. data/lib/spree/testing_support/dummy_app/assets/stylesheets/solidus_admin/tailwind.css +1 -0
  301. data/lib/spree/testing_support/dummy_app/database.yml +39 -28
  302. data/lib/spree/testing_support/dummy_app/migrations.rb +8 -15
  303. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +3 -10
  304. data/lib/spree/testing_support/dummy_app.rb +71 -42
  305. data/lib/spree/testing_support/extension_rake.rb +2 -2
  306. data/lib/spree/testing_support/factories/address_factory.rb +9 -13
  307. data/lib/spree/testing_support/factories/adjustment_factory.rb +1 -13
  308. data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +0 -5
  309. data/lib/spree/testing_support/factories/calculator_factory.rb +4 -10
  310. data/lib/spree/testing_support/factories/carton_factory.rb +2 -10
  311. data/lib/spree/testing_support/factories/country_factory.rb +1 -7
  312. data/lib/spree/testing_support/factories/credit_card_factory.rb +0 -5
  313. data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -11
  314. data/lib/spree/testing_support/factories/image_factory.rb +0 -5
  315. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +4 -14
  316. data/lib/spree/testing_support/factories/line_item_factory.rb +0 -8
  317. data/lib/spree/testing_support/factories/option_type_factory.rb +0 -8
  318. data/lib/spree/testing_support/factories/option_value_factory.rb +0 -5
  319. data/lib/spree/testing_support/factories/order_factory.rb +19 -38
  320. data/lib/spree/testing_support/factories/payment_factory.rb +0 -10
  321. data/lib/spree/testing_support/factories/payment_method_factory.rb +0 -5
  322. data/lib/spree/testing_support/factories/price_factory.rb +0 -7
  323. data/lib/spree/testing_support/factories/product_factory.rb +5 -13
  324. data/lib/spree/testing_support/factories/product_option_type_factory.rb +0 -8
  325. data/lib/spree/testing_support/factories/product_property_factory.rb +0 -8
  326. data/lib/spree/testing_support/factories/property_factory.rb +0 -5
  327. data/lib/spree/testing_support/factories/refund_factory.rb +0 -8
  328. data/lib/spree/testing_support/factories/refund_reason_factory.rb +0 -5
  329. data/lib/spree/testing_support/factories/reimbursement_factory.rb +0 -7
  330. data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +0 -5
  331. data/lib/spree/testing_support/factories/return_authorization_factory.rb +0 -9
  332. data/lib/spree/testing_support/factories/return_item_factory.rb +0 -9
  333. data/lib/spree/testing_support/factories/return_reason_factory.rb +0 -5
  334. data/lib/spree/testing_support/factories/role_factory.rb +0 -5
  335. data/lib/spree/testing_support/factories/shipment_factory.rb +1 -11
  336. data/lib/spree/testing_support/factories/shipping_category_factory.rb +0 -5
  337. data/lib/spree/testing_support/factories/shipping_method_factory.rb +0 -9
  338. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +0 -8
  339. data/lib/spree/testing_support/factories/state_factory.rb +8 -10
  340. data/lib/spree/testing_support/factories/stock_item_factory.rb +5 -9
  341. data/lib/spree/testing_support/factories/stock_location_factory.rb +0 -9
  342. data/lib/spree/testing_support/factories/stock_movement_factory.rb +0 -7
  343. data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -9
  344. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +0 -5
  345. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +0 -8
  346. data/lib/spree/testing_support/factories/store_credit_factory.rb +4 -13
  347. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +0 -5
  348. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +0 -5
  349. data/lib/spree/testing_support/factories/store_factory.rb +0 -5
  350. data/lib/spree/testing_support/factories/tax_category_factory.rb +0 -8
  351. data/lib/spree/testing_support/factories/tax_rate_factory.rb +0 -9
  352. data/lib/spree/testing_support/factories/taxon_factory.rb +5 -10
  353. data/lib/spree/testing_support/factories/taxonomy_factory.rb +3 -6
  354. data/lib/spree/testing_support/factories/user_factory.rb +6 -9
  355. data/lib/spree/testing_support/factories/variant_factory.rb +0 -10
  356. data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +0 -8
  357. data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +0 -9
  358. data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +0 -8
  359. data/lib/spree/testing_support/factories/zone_factory.rb +1 -9
  360. data/lib/spree/testing_support/factory_bot.rb +6 -29
  361. data/lib/spree/testing_support/flaky.rb +22 -0
  362. data/lib/spree/testing_support/order_walkthrough.rb +7 -6
  363. data/lib/spree/testing_support/sequences.rb +0 -5
  364. data/lib/spree/testing_support/shared_examples/calculator.rb +10 -0
  365. data/lib/spree/testing_support/shared_examples/order_factory.rb +141 -0
  366. data/lib/spree/testing_support/shared_examples/working_factory.rb +15 -0
  367. data/lib/spree/testing_support/silence_deprecations.rb +9 -0
  368. data/lib/spree/user_class_handle.rb +2 -2
  369. data/lib/tasks/colorado_delivery_fee.rake +28 -0
  370. data/lib/tasks/payment_method.rake +29 -0
  371. data/lib/tasks/solidus/delete_prices_with_nil_amount.rake +8 -0
  372. data/solidus_core.gemspec +18 -8
  373. metadata +233 -117
  374. data/app/jobs/spree/promotion_code_batch_job.rb +0 -26
  375. data/app/mailers/spree/promotion_code_batch_mailer.rb +0 -15
  376. data/app/models/spree/calculator/distributed_amount.rb +0 -33
  377. data/app/models/spree/calculator/flat_percent_item_total.rb +0 -23
  378. data/app/models/spree/calculator/flexi_rate.rb +0 -22
  379. data/app/models/spree/calculator/percent_on_line_item.rb +0 -13
  380. data/app/models/spree/calculator/tiered_flat_rate.rb +0 -52
  381. data/app/models/spree/calculator/tiered_percent.rb +0 -62
  382. data/app/models/spree/line_item_action.rb +0 -8
  383. data/app/models/spree/order_promotion.rb +0 -27
  384. data/app/models/spree/promotion/actions/create_adjustment.rb +0 -77
  385. data/app/models/spree/promotion/actions/create_item_adjustments.rb +0 -99
  386. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +0 -139
  387. data/app/models/spree/promotion/actions/free_shipping.rb +0 -58
  388. data/app/models/spree/promotion/rules/first_order.rb +0 -38
  389. data/app/models/spree/promotion/rules/first_repeat_purchase_since.rb +0 -36
  390. data/app/models/spree/promotion/rules/item_total.rb +0 -53
  391. data/app/models/spree/promotion/rules/nth_order.rb +0 -45
  392. data/app/models/spree/promotion/rules/one_use_per_user.rb +0 -25
  393. data/app/models/spree/promotion/rules/option_value.rb +0 -50
  394. data/app/models/spree/promotion/rules/product.rb +0 -74
  395. data/app/models/spree/promotion/rules/store.rb +0 -22
  396. data/app/models/spree/promotion/rules/taxon.rb +0 -87
  397. data/app/models/spree/promotion/rules/user.rb +0 -30
  398. data/app/models/spree/promotion/rules/user_logged_in.rb +0 -20
  399. data/app/models/spree/promotion/rules/user_role.rb +0 -45
  400. data/app/models/spree/promotion.rb +0 -284
  401. data/app/models/spree/promotion_action.rb +0 -43
  402. data/app/models/spree/promotion_category.rb +0 -8
  403. data/app/models/spree/promotion_chooser.rb +0 -34
  404. data/app/models/spree/promotion_code/batch_builder.rb +0 -64
  405. data/app/models/spree/promotion_code.rb +0 -50
  406. data/app/models/spree/promotion_code_batch.rb +0 -27
  407. data/app/models/spree/promotion_handler/cart.rb +0 -55
  408. data/app/models/spree/promotion_handler/coupon.rb +0 -123
  409. data/app/models/spree/promotion_handler/page.rb +0 -26
  410. data/app/models/spree/promotion_handler/shipping.rb +0 -61
  411. data/app/models/spree/promotion_rule.rb +0 -55
  412. data/app/models/spree/promotion_rule_role.rb +0 -8
  413. data/app/models/spree/promotion_rule_store.rb +0 -10
  414. data/app/models/spree/promotion_rule_taxon.rb +0 -8
  415. data/app/models/spree/promotion_rule_user.rb +0 -10
  416. data/app/models/spree/tax/shipping_rate_taxer.rb +0 -24
  417. data/app/subscribers/spree/mailer_subscriber.rb +0 -25
  418. data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_errored.text.erb +0 -2
  419. data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_finished.text.erb +0 -2
  420. data/db/migrate/20161017102621_create_spree_promotion_code_batch.rb +0 -38
  421. data/db/migrate/20180202190713_create_promotion_rule_stores.rb +0 -12
  422. data/db/migrate/20180328172631_add_join_characters_to_promotion_code_batch.rb +0 -11
  423. data/db/migrate/20190106184413_remove_code_from_spree_promotions.rb +0 -42
  424. data/lib/generators/solidus/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -10
  425. data/lib/generators/solidus/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -9
  426. data/lib/generators/spree/dummy/templates/rails/script/rails +0 -6
  427. data/lib/solidus/migrations/promotions_with_code_handlers.rb +0 -66
  428. data/lib/spree/event/adapters/active_support_notifications.rb +0 -67
  429. data/lib/spree/event/configuration.rb +0 -25
  430. data/lib/spree/event/subscriber.rb +0 -86
  431. data/lib/spree/event/subscriber_registry.rb +0 -94
  432. data/lib/spree/event.rb +0 -119
  433. data/lib/spree/permission_sets/promotion_display.rb +0 -15
  434. data/lib/spree/permission_sets/promotion_management.rb +0 -15
  435. data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/frontend/all.js +0 -10
  436. data/lib/spree/testing_support/dummy_app/assets/stylesheets/spree/frontend/all.css +0 -9
  437. data/lib/spree/testing_support/dummy_app/views/layouts/application.html.erb +0 -1
  438. data/lib/spree/testing_support/factories/order_promotion_factory.rb +0 -16
  439. data/lib/spree/testing_support/factories/promotion_category_factory.rb +0 -12
  440. data/lib/spree/testing_support/factories/promotion_code_factory.rb +0 -16
  441. data/lib/spree/testing_support/factories/promotion_factory.rb +0 -92
  442. data/lib/spree/testing_support/factories.rb +0 -11
  443. data/lib/spree/testing_support.rb +0 -31
  444. data/lib/tasks/upgrade.rake +0 -15
@@ -1,88 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spree/core/controller_helpers/pricing'
4
-
5
- module Spree
6
- module Core
7
- module ControllerHelpers
8
- module Order
9
- extend ActiveSupport::Concern
10
- include ControllerHelpers::Pricing
11
-
12
- included do
13
- helper_method :current_order
14
- end
15
-
16
- # The current incomplete order from the guest_token for use in cart and during checkout
17
- def current_order(options = {})
18
- should_create = options[:create_order_if_necessary] || false
19
- should_build = options[:build_order_if_necessary] || should_create
20
-
21
- return @current_order if @current_order
22
-
23
- @current_order = find_order_by_token_or_user(lock: options[:lock])
24
-
25
- if should_build && (@current_order.nil? || @current_order.completed?)
26
- @current_order = Spree::Order.new(new_order_params)
27
- @current_order.user ||= try_spree_current_user
28
- # See issue https://github.com/spree/spree/issues/3346 for reasons why this line is here
29
- @current_order.created_by ||= try_spree_current_user
30
- @current_order.save! if should_create
31
- end
32
-
33
- if @current_order
34
- @current_order.record_ip_address(ip_address)
35
- return @current_order
36
- end
37
- end
38
-
39
- def associate_user
40
- @order ||= current_order
41
- if try_spree_current_user && @order
42
- @order.associate_user!(try_spree_current_user) if @order.user.blank? || @order.email.blank?
43
- end
44
- end
45
-
46
- def set_current_order
47
- if try_spree_current_user && current_order
48
- try_spree_current_user.orders.by_store(current_store).incomplete.where('id != ?', current_order.id).each do |order|
49
- current_order.merge!(order, try_spree_current_user)
50
- end
51
- end
52
- end
53
-
54
- def ip_address
55
- request.remote_ip
56
- end
57
-
58
- private
59
-
60
- def last_incomplete_order
61
- @last_incomplete_order ||= try_spree_current_user.last_incomplete_spree_order(store: current_store)
62
- end
63
-
64
- def current_order_params
65
- { currency: current_pricing_options.currency, guest_token: cookies.signed[:guest_token], store_id: current_store.id, user_id: try_spree_current_user.try(:id) }
66
- end
67
-
68
- def new_order_params
69
- current_order_params.merge(last_ip_address: ip_address)
70
- end
71
-
72
- def find_order_by_token_or_user(options = {})
73
- should_lock = options[:lock] || false
74
-
75
- # Find any incomplete orders for the guest_token
76
- order = Spree::Order.incomplete.lock(should_lock).find_by(current_order_params)
77
-
78
- # Find any incomplete orders for the current user
79
- if order.nil? && try_spree_current_user
80
- order = last_incomplete_order
81
- end
82
-
83
- order
84
- end
85
- end
86
- end
87
- end
88
- end
3
+ Spree.deprecator.warn(
4
+ <<~MSG
5
+ The file "#{__FILE__}" does not need to be `require`d any longer, it is now autoloaded.
6
+ MSG
7
+ )
@@ -1,167 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Spree
4
- module Core::ControllerHelpers::PaymentParameters
5
- # This method handles the awkwardness of how the html forms are currently
6
- # set up for frontend.
7
- #
8
- # This method expects a params hash in the format of:
9
- #
10
- # {
11
- # payment_source: {
12
- # # The keys here are spree_payment_method.id's
13
- # '1' => {...source attributes for payment method 1...},
14
- # '2' => {...source attributes for payment method 2...},
15
- # },
16
- # order: {
17
- # # Note that only a single entry is expected/handled in this array
18
- # payments_attributes: [
19
- # {
20
- # payment_method_id: '1',
21
- # },
22
- # ],
23
- # ...other params...
24
- # },
25
- # ...other params...
26
- # }
27
- #
28
- # And this method modifies the params into the format of:
29
- #
30
- # {
31
- # order: {
32
- # payments_attributes: [
33
- # {
34
- # payment_method_id: '1',
35
- # source_attributes: {...source attributes for payment method 1...}
36
- # },
37
- # ],
38
- # ...other params...
39
- # },
40
- # ...other params...
41
- # }
42
- #
43
- def move_payment_source_into_payments_attributes(params)
44
- # Step 1: Gather all the information and ensure all the pieces are there.
45
-
46
- return params if params[:payment_source].blank?
47
-
48
- payment_params = params[:order] &&
49
- params[:order][:payments_attributes] &&
50
- params[:order][:payments_attributes].first
51
- return params if payment_params.blank?
52
-
53
- payment_method_id = payment_params[:payment_method_id]
54
- return params if payment_method_id.blank?
55
-
56
- source_params = params[:payment_source][payment_method_id]
57
- return params if source_params.blank?
58
-
59
- # Step 2: Perform the modifications.
60
-
61
- payment_params[:source_attributes] = source_params
62
- params.delete(:payment_source)
63
-
64
- params
65
- end
66
-
67
- # This method handles the awkwardness of how the html forms are currently
68
- # set up for frontend.
69
- #
70
- # This method expects a params hash in the format of:
71
- #
72
- # {
73
- # order: {
74
- # wallet_payment_source_id: '123',
75
- # ...other params...
76
- # },
77
- # cvc_confirm: '456', # optional
78
- # ...other params...
79
- # }
80
- #
81
- # And this method modifies the params into the format of:
82
- #
83
- # {
84
- # order: {
85
- # payments_attributes: [
86
- # {
87
- # source_attributes: {
88
- # wallet_payment_source_id: '123',
89
- # verification_value: '456',
90
- # },
91
- # },
92
- # ]
93
- # ...other params...
94
- # },
95
- # ...other params...
96
- # }
97
- #
98
- def move_wallet_payment_source_id_into_payments_attributes(params)
99
- return params if params[:order].blank?
100
-
101
- wallet_payment_source_id = params[:order][:wallet_payment_source_id].presence
102
- cvc_confirm = params[:cvc_confirm].presence
103
-
104
- return params if wallet_payment_source_id.nil?
105
-
106
- params[:order][:payments_attributes] = [
107
- {
108
- source_attributes: {
109
- wallet_payment_source_id: wallet_payment_source_id,
110
- verification_value: cvc_confirm
111
- }
112
- }
113
- ]
114
-
115
- params[:order].delete(:wallet_payment_source_id)
116
- params.delete(:cvc_confirm)
117
-
118
- params
119
- end
120
-
121
- # This is a strange thing to do since an order can have multiple payments
122
- # but we always assume that it only has a single payment and that its
123
- # amount should be the current order total. Also, this is pretty much
124
- # overridden when the order transitions to confirm by the logic inside of
125
- # Order#add_store_credit_payments.
126
- # We should reconsider this method and its usage at some point.
127
- #
128
- # This method expects a params hash in the format of:
129
- #
130
- # {
131
- # order: {
132
- # # Note that only a single entry is expected/handled in this array
133
- # payments_attributes: [
134
- # {
135
- # ...params...
136
- # },
137
- # ],
138
- # ...other params...
139
- # },
140
- # ...other params...
141
- # }
142
- #
143
- # And this method modifies the params into the format of:
144
- #
145
- # {
146
- # order: {
147
- # payments_attributes: [
148
- # {
149
- # ...params...
150
- # amount: <the order total>,
151
- # },
152
- # ],
153
- # ...other params...
154
- # },
155
- # ...other params...
156
- # }
157
- #
158
- def set_payment_parameters_amount(params, order)
159
- return params if params[:order].blank?
160
- return params if params[:order][:payments_attributes].blank?
161
-
162
- params[:order][:payments_attributes].first[:amount] = order.total
163
-
164
- params
165
- end
166
- end
167
- end
3
+ Spree.deprecator.warn(
4
+ <<~MSG
5
+ The file "#{__FILE__}" does not need to be `require`d any longer, it is now autoloaded.
6
+ MSG
7
+ )
@@ -1,19 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Spree
4
- module Core
5
- module ControllerHelpers
6
- module Pricing
7
- extend ActiveSupport::Concern
8
-
9
- included do
10
- helper_method :current_pricing_options
11
- end
12
-
13
- def current_pricing_options
14
- Spree::Config.pricing_options_class.from_context(self)
15
- end
16
- end
17
- end
18
- end
19
- end
3
+ Spree.deprecator.warn(
4
+ <<~MSG
5
+ The file "#{__FILE__}" does not need to be `require`d any longer, it is now autoloaded.
6
+ MSG
7
+ )
@@ -1,16 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Spree
4
- module Core
5
- module ControllerHelpers
6
- module Search
7
- def build_searcher(params)
8
- Spree::Config.searcher_class.new(params).tap do |searcher|
9
- searcher.current_user = try_spree_current_user
10
- searcher.pricing_options = current_pricing_options
11
- end
12
- end
13
- end
14
- end
15
- end
16
- end
3
+ Spree.deprecator.warn(
4
+ <<~MSG
5
+ The file "#{__FILE__}" does not need to be `require`d any longer, it is now autoloaded.
6
+ MSG
7
+ )
@@ -1,19 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Spree
4
- module Core
5
- module ControllerHelpers
6
- module Store
7
- extend ActiveSupport::Concern
8
-
9
- included do
10
- helper_method :current_store
11
- end
12
-
13
- def current_store
14
- @current_store ||= Spree::Config.current_store_selector_class.new(request).store
15
- end
16
- end
17
- end
18
- end
19
- end
3
+ Spree.deprecator.warn(
4
+ <<~MSG
5
+ The file "#{__FILE__}" does not need to be `require`d any longer, it is now autoloaded.
6
+ MSG
7
+ )
@@ -1,73 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Spree
4
- module Core
5
- module ControllerHelpers
6
- module StrongParameters
7
- def permitted_attributes
8
- Spree::PermittedAttributes
9
- end
10
-
11
- delegate(*Spree::PermittedAttributes::ATTRIBUTES,
12
- to: :permitted_attributes,
13
- prefix: :permitted)
14
-
15
- def permitted_credit_card_update_attributes
16
- permitted_attributes.credit_card_update_attributes + [
17
- address_attributes: permitted_address_attributes
18
- ]
19
- end
20
-
21
- def permitted_payment_attributes
22
- permitted_attributes.payment_attributes + [
23
- source_attributes: permitted_source_attributes
24
- ]
25
- end
26
-
27
- def permitted_source_attributes
28
- permitted_attributes.source_attributes + [
29
- address_attributes: permitted_address_attributes
30
- ]
31
- end
32
-
33
- def permitted_checkout_address_attributes
34
- permitted_attributes.checkout_address_attributes
35
- end
36
-
37
- def permitted_checkout_delivery_attributes
38
- permitted_attributes.checkout_delivery_attributes
39
- end
40
-
41
- def permitted_checkout_payment_attributes
42
- permitted_attributes.checkout_payment_attributes
43
- end
44
-
45
- def permitted_checkout_confirm_attributes
46
- permitted_attributes.checkout_confirm_attributes
47
- end
48
-
49
- def permitted_order_attributes
50
- permitted_checkout_address_attributes +
51
- permitted_checkout_delivery_attributes +
52
- permitted_checkout_payment_attributes +
53
- permitted_checkout_confirm_attributes + [
54
- line_items_attributes: permitted_line_item_attributes
55
- ]
56
- end
57
-
58
- def permitted_product_attributes
59
- permitted_attributes.product_attributes + [
60
- product_properties_attributes: permitted_product_properties_attributes
61
- ]
62
- end
63
-
64
- def permitted_user_attributes
65
- permitted_attributes.user_attributes + [
66
- bill_address_attributes: permitted_address_attributes,
67
- ship_address_attributes: permitted_address_attributes
68
- ]
69
- end
70
- end
71
- end
72
- end
73
- end
3
+ Spree.deprecator.warn(
4
+ <<~MSG
5
+ The file "#{__FILE__}" does not need to be `require`d any longer, it is now autoloaded.
6
+ MSG
7
+ )
@@ -15,6 +15,17 @@ module Spree
15
15
  generator.test_framework :rspec
16
16
  end
17
17
 
18
+ if ActiveRecord.respond_to?(:yaml_column_permitted_classes) || ActiveRecord::Base.respond_to?(:yaml_column_permitted_classes)
19
+ config.active_record.yaml_column_permitted_classes ||= []
20
+ config.active_record.yaml_column_permitted_classes |=
21
+ [Symbol, BigDecimal, ActiveSupport::HashWithIndifferentAccess]
22
+ end
23
+
24
+ initializer "spree.zeitwerk_ignores" do
25
+ old_helpers = Engine.root.join("lib", "spree", "core", "controller_helpers", "*", "*.rb")
26
+ Rails.application.autoloaders.main.ignore(old_helpers)
27
+ end
28
+
18
29
  initializer "spree.environment", before: :load_config_initializers do |app|
19
30
  app.config.spree = Spree::Config.environment
20
31
  end
@@ -40,32 +51,54 @@ module Spree
40
51
  ]
41
52
  end
42
53
 
43
- initializer "spree.core.checking_migrations", before: :load_config_initializers do |_app|
54
+ initializer "spree.core.checking_migrations", after: :load_config_initializers do |_app|
44
55
  Migrations.new(config, engine_name).check
45
56
  end
46
57
 
47
- # Setup Event Subscribers
48
- initializer 'spree.core.initialize_subscribers' do |app|
58
+ # Setup pub/sub
59
+ initializer 'spree.core.pub_sub' do |app|
49
60
  app.reloader.to_prepare do
50
- Spree::Event.activate_autoloadable_subscribers
61
+ Spree::Bus.clear
62
+
63
+ %i[
64
+ order_emptied
65
+ order_finalized
66
+ order_recalculated
67
+ reimbursement_reimbursed
68
+ reimbursement_errored
69
+ ].each { |event_name| Spree::Bus.register(event_name) }
70
+
71
+ Spree::OrderMailerSubscriber.new.subscribe_to(Spree::Bus)
72
+ end
73
+ end
74
+
75
+ # Load in mailer previews for apps to use in development.
76
+ initializer "spree.core.action_mailer.set_preview_path", after: "action_mailer.set_autoload_paths" do
77
+ solidus_preview_path = Spree::Core::Engine.root.join("lib/spree/mailer_previews")
78
+
79
+ if ActionMailer::Base.respond_to? :preview_paths # Rails 7.1+
80
+ ActionMailer::Base.preview_paths << solidus_preview_path.to_s
81
+ else
82
+ ActionMailer::Base.preview_path = "{#{ActionMailer::Base.preview_path},#{solidus_preview_path}}"
51
83
  end
84
+ end
52
85
 
53
- app.reloader.before_class_unload do
54
- Spree::Event.deactivate_all_subscribers
86
+ initializer "spree.deprecator" do |app|
87
+ if app.respond_to?(:deprecators)
88
+ app.deprecators[:spree] = Spree.deprecator
55
89
  end
56
90
  end
57
91
 
58
92
  config.after_initialize do
59
- # Load in mailer previews for apps to use in development.
60
- # We need to make sure we call `Preview.all` before requiring our
61
- # previews, otherwise any previews the app attempts to add need to be
62
- # manually required.
63
- if Rails.env.development? || Rails.env.test?
64
- ActionMailer::Preview.all
65
-
66
- Dir[root.join("lib/spree/mailer_previews/**/*_preview.rb")].each do |file|
67
- require_dependency file
68
- end
93
+ Spree::Config.check_load_defaults_called('Spree::Config')
94
+ Spree::Config.static_model_preferences.validate!
95
+ end
96
+
97
+ config.after_initialize do
98
+ if defined?(Spree::Auth::Engine) &&
99
+ Gem::Version.new(Spree::Auth::VERSION) < Gem::Version.new('2.5.4') &&
100
+ defined?(Spree::UsersController)
101
+ Spree::UsersController.protect_from_forgery with: :exception
69
102
  end
70
103
  end
71
104
  end
@@ -9,9 +9,41 @@ module Spree
9
9
  add_class_set :shipping_methods
10
10
  add_class_set :tax_rates
11
11
 
12
- add_class_set :promotion_actions_create_adjustments
13
- add_class_set :promotion_actions_create_item_adjustments
14
- add_class_set :promotion_actions_create_quantity_adjustments
12
+ def promotion_actions_create_adjustments
13
+ promotion_config.calculators["Spree::Promotion::Actions::CreateAdjustment"]
14
+ end
15
+ deprecate :promotion_actions_create_adjustments, deprecator: Spree.deprecator
16
+
17
+ def promotion_actions_create_adjustments=(value)
18
+ promotion_config.calculators["Spree::Promotion::Actions::CreateAdjustment"] = value
19
+ end
20
+ deprecate :promotion_actions_create_adjustments=, deprecator: Spree.deprecator
21
+
22
+ def promotion_actions_create_item_adjustments
23
+ promotion_config.calculators["Spree::Promotion::Actions::CreateItemAdjustments"]
24
+ end
25
+ deprecate :promotion_actions_create_item_adjustments, deprecator: Spree.deprecator
26
+
27
+ def promotion_actions_create_item_adjustments=(value)
28
+ promotion_config.calculators["Spree::Promotion::Actions::CreateItemAdjustments"] = value
29
+ end
30
+ deprecate :promotion_actions_create_item_adjustments=, deprecator: Spree.deprecator
31
+
32
+ def promotion_actions_create_quantity_adjustments
33
+ promotion_config.calculators["Spree::Promotion::Actions::CreateQuantityAdjustments"]
34
+ end
35
+ deprecate :promotion_actions_create_quantity_adjustments, deprecator: Spree.deprecator
36
+
37
+ def promotion_actions_create_quantity_adjustments=(value)
38
+ promotion_config.calculators["Spree::Promotion::Actions::CreateQuantityAdjustments"] = value
39
+ end
40
+ deprecate :promotion_actions_create_quantity_adjustments=, deprecator: Spree.deprecator
41
+
42
+ private
43
+
44
+ def promotion_config
45
+ Spree::Config.promotions
46
+ end
15
47
  end
16
48
  end
17
49
  end
@@ -4,11 +4,32 @@ module Spree
4
4
  module Core
5
5
  class Environment
6
6
  class Promotions
7
- include EnvironmentExtension
7
+ class << self
8
+ private
8
9
 
9
- add_class_set :rules
10
- add_class_set :actions
11
- add_class_set :shipping_actions
10
+ def promotions_deprecation_message(method)
11
+ "The `Rails.application.config.spree.promotions.#{method}` preference is deprecated and will be removed in Solidus 5.0. " \
12
+ "Use `Spree::Config.promotions.#{method}` instead."
13
+ end
14
+ end
15
+
16
+ delegate :rules, :rules=, to: :promotion_config
17
+ deprecate rules: promotions_deprecation_message("rules"), deprecator: Spree.deprecator
18
+ deprecate "rules=": promotions_deprecation_message("rules="), deprecator: Spree.deprecator
19
+
20
+ delegate :actions, :actions=, to: :promotion_config
21
+ deprecate actions: promotions_deprecation_message("actions"), deprecator: Spree.deprecator
22
+ deprecate "actions=": promotions_deprecation_message("actions="), deprecator: Spree.deprecator
23
+
24
+ delegate :shipping_actions, :shipping_actions=, to: :promotion_config
25
+ deprecate shipping_actions: promotions_deprecation_message("shipping_actions"), deprecator: Spree.deprecator
26
+ deprecate "shipping_actions=": promotions_deprecation_message("shipping_actions="), deprecator: Spree.deprecator
27
+
28
+ private
29
+
30
+ def promotion_config
31
+ Spree::Config.promotions
32
+ end
12
33
  end
13
34
  end
14
35
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'spree/core/class_constantizer'
4
+ require 'spree/core/nested_class_set'
4
5
 
5
6
  module Spree
6
7
  module Core
@@ -8,10 +9,10 @@ module Spree
8
9
  extend ActiveSupport::Concern
9
10
 
10
11
  class_methods do
11
- def add_class_set(name)
12
+ def add_class_set(name, default: [])
12
13
  define_method(name) do
13
14
  set = instance_variable_get("@#{name}")
14
- set ||= send("#{name}=", [])
15
+ set ||= send("#{name}=", default)
15
16
  set
16
17
  end
17
18
 
@@ -21,6 +22,19 @@ module Spree
21
22
  instance_variable_set("@#{name}", set)
22
23
  end
23
24
  end
25
+
26
+ def add_nested_class_set(name, default: {})
27
+ define_method(name) do
28
+ set = instance_variable_get(:"@#{name}")
29
+ set ||= send(:"#{name}=", default)
30
+ set
31
+ end
32
+
33
+ define_method(:"#{name}=") do |hash|
34
+ set = Spree::Core::NestedClassSet.new(hash)
35
+ instance_variable_set(:"@#{name}", set)
36
+ end
37
+ end
24
38
  end
25
39
  end
26
40
  end
@@ -40,7 +40,7 @@ module Spree
40
40
  end
41
41
 
42
42
  # Really ensure that the order totals & states are correct
43
- order.updater.update
43
+ order.recalculate
44
44
  if shipments_attrs.present?
45
45
  order.shipments.each_with_index do |shipment, index|
46
46
  shipment.update_columns(cost: shipments_attrs[index][:cost].to_f) if shipments_attrs[index][:cost].present?
@@ -74,7 +74,7 @@ module Spree
74
74
  # able to find the line item if line_item.variant_id |= iu.variant_id
75
75
  shipment.inventory_units.new(
76
76
  variant_id: inventory_unit[:variant_id],
77
- line_item: line_item
77
+ line_item:
78
78
  )
79
79
  end
80
80
 
@@ -91,7 +91,7 @@ module Spree
91
91
  shipment.save!
92
92
 
93
93
  shipping_method = Spree::ShippingMethod.find_by(name: target[:shipping_method]) || Spree::ShippingMethod.find_by!(admin_name: target[:shipping_method])
94
- rate = shipment.shipping_rates.create!(shipping_method: shipping_method,
94
+ rate = shipment.shipping_rates.create!(shipping_method:,
95
95
  cost: target[:cost])
96
96
  shipment.selected_shipping_rate_id = rate.id
97
97
  shipment.update_amounts
@@ -129,7 +129,7 @@ module Spree
129
129
  return [] unless adjustments
130
130
  adjustments.each do |target|
131
131
  adjustment = order.adjustments.build(
132
- order: order,
132
+ order:,
133
133
  amount: target[:amount].to_d,
134
134
  label: target[:label]
135
135
  )
@@ -141,7 +141,7 @@ module Spree
141
141
  def self.create_payments_from_params(payments_hash, order)
142
142
  return [] unless payments_hash
143
143
  payments_hash.each do |target|
144
- payment = order.payments.build order: order
144
+ payment = order.payments.build(order:)
145
145
  payment.amount = target[:amount].to_f
146
146
  # Order API should be using state as that's the normal payment field.
147
147
  # spree_wombat serializes payment state as status so imported orders should fall back to status field.
@@ -170,7 +170,7 @@ module Spree
170
170
  def self.ensure_variant_id_from_params(hash)
171
171
  sku = hash.delete(:sku)
172
172
  unless hash[:variant_id].present?
173
- hash[:variant_id] = Spree::Variant.with_prices.find_by!(sku: sku).id
173
+ hash[:variant_id] = Spree::Variant.with_prices.find_by!(sku:).id
174
174
  end
175
175
  hash
176
176
  end