solidus_core 4.1.6 → 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 (308) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/logo/solidus.svg +18 -1
  3. data/app/assets/images/logo/solidus_logo.png +0 -0
  4. data/app/helpers/spree/base_helper.rb +2 -2
  5. data/app/helpers/spree/core/controller_helpers/auth.rb +66 -0
  6. data/app/helpers/spree/core/controller_helpers/common.rb +82 -0
  7. data/app/helpers/spree/core/controller_helpers/order.rb +86 -0
  8. data/app/helpers/spree/core/controller_helpers/payment_parameters.rb +165 -0
  9. data/app/helpers/spree/core/controller_helpers/pricing.rb +19 -0
  10. data/app/helpers/spree/core/controller_helpers/search.rb +16 -0
  11. data/app/helpers/spree/core/controller_helpers/store.rb +19 -0
  12. data/app/helpers/spree/core/controller_helpers/strong_parameters.rb +74 -0
  13. data/app/mailers/spree/base_mailer.rb +1 -1
  14. data/app/mailers/spree/carton_mailer.rb +1 -1
  15. data/app/mailers/spree/order_mailer.rb +3 -3
  16. data/app/mailers/spree/reimbursement_mailer.rb +1 -1
  17. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +1 -1
  18. data/app/models/concerns/spree/active_storage_adapter.rb +1 -1
  19. data/app/models/concerns/spree/display_money.rb +1 -1
  20. data/app/models/concerns/spree/metadata.rb +64 -0
  21. data/app/models/concerns/spree/named_type.rb +2 -0
  22. data/app/models/concerns/spree/ordered_property_value_list.rb +2 -2
  23. data/app/models/concerns/spree/user_address_book.rb +8 -9
  24. data/app/models/concerns/spree/user_methods.rb +3 -3
  25. data/app/models/spree/address.rb +10 -8
  26. data/app/models/spree/adjustment.rb +15 -65
  27. data/app/models/spree/adjustment_reason.rb +2 -0
  28. data/app/models/spree/calculator/returns/default_refund_amount.rb +1 -1
  29. data/app/models/spree/carton.rb +2 -2
  30. data/app/models/spree/core/state_machines/inventory_unit.rb +42 -0
  31. data/app/models/spree/core/state_machines/order/class_methods.rb +217 -0
  32. data/app/models/spree/core/state_machines/order.rb +42 -0
  33. data/app/models/spree/core/state_machines/payment.rb +61 -0
  34. data/app/models/spree/core/state_machines/reimbursement.rb +33 -0
  35. data/app/models/spree/core/state_machines/return_authorization.rb +32 -0
  36. data/app/models/spree/core/state_machines/return_item/acceptance_status.rb +51 -0
  37. data/app/models/spree/core/state_machines/return_item/reception_status.rb +42 -0
  38. data/app/models/spree/core/state_machines/shipment.rb +58 -0
  39. data/app/models/spree/credit_card.rb +12 -9
  40. data/app/models/spree/customer_return.rb +2 -0
  41. data/app/models/spree/deprecated_configurable_class.rb +40 -0
  42. data/app/models/spree/fulfilment_changer.rb +4 -4
  43. data/app/models/spree/inventory_unit.rb +2 -2
  44. data/app/models/spree/item_total.rb +28 -0
  45. data/app/models/spree/legacy_user.rb +1 -0
  46. data/app/models/spree/line_item.rb +22 -4
  47. data/app/models/spree/money.rb +120 -0
  48. data/app/models/spree/null_promotion_adjuster.rb +13 -0
  49. data/app/models/spree/null_promotion_advertiser.rb +9 -0
  50. data/app/models/spree/null_promotion_finder.rb +9 -0
  51. data/app/models/spree/null_promotion_handler.rb +44 -0
  52. data/app/models/spree/option_value.rb +1 -0
  53. data/app/models/spree/order.rb +54 -36
  54. data/app/models/spree/order_cancellations.rb +8 -8
  55. data/app/models/spree/order_inventory.rb +6 -4
  56. data/app/models/spree/order_merger.rb +1 -1
  57. data/app/models/spree/order_mutex.rb +2 -2
  58. data/app/models/spree/order_shipping.rb +9 -9
  59. data/app/models/spree/order_taxation.rb +1 -0
  60. data/app/models/spree/order_updater.rb +19 -40
  61. data/app/models/spree/payment/processing.rb +2 -2
  62. data/app/models/spree/payment.rb +3 -2
  63. data/app/models/spree/payment_create.rb +1 -1
  64. data/app/models/spree/payment_method/bogus_credit_card.rb +14 -9
  65. data/app/models/spree/payment_method/simple_bogus_credit_card.rb +12 -6
  66. data/app/models/spree/payment_method/store_credit.rb +1 -1
  67. data/app/models/spree/payment_method.rb +3 -1
  68. data/app/models/spree/payment_source.rb +5 -1
  69. data/app/models/spree/permission_set.rb +11 -0
  70. data/app/models/spree/permission_sets/base.rb +45 -0
  71. data/app/models/spree/permission_sets/configuration_display.rb +53 -0
  72. data/app/models/spree/permission_sets/configuration_management.rb +52 -0
  73. data/app/models/spree/permission_sets/dashboard_display.rb +28 -0
  74. data/app/models/spree/permission_sets/default_customer.rb +83 -0
  75. data/app/models/spree/permission_sets/order_display.rb +50 -0
  76. data/app/models/spree/permission_sets/order_management.rb +50 -0
  77. data/app/models/spree/permission_sets/product_display.rb +43 -0
  78. data/app/models/spree/permission_sets/product_management.rb +47 -0
  79. data/app/models/spree/permission_sets/restricted_stock_display.rb +33 -0
  80. data/app/models/spree/permission_sets/restricted_stock_management.rb +33 -0
  81. data/app/models/spree/permission_sets/stock_display.rb +26 -0
  82. data/app/models/spree/permission_sets/stock_management.rb +26 -0
  83. data/app/models/spree/permission_sets/super_user.rb +26 -0
  84. data/app/models/spree/permission_sets/user_display.rb +27 -0
  85. data/app/models/spree/permission_sets/user_management.rb +44 -0
  86. data/app/models/spree/preference.rb +1 -1
  87. data/app/models/spree/product.rb +13 -9
  88. data/app/models/spree/refund.rb +3 -1
  89. data/app/models/spree/refund_reason.rb +6 -1
  90. data/app/models/spree/reimbursement.rb +4 -4
  91. data/app/models/spree/reimbursement_performer.rb +3 -3
  92. data/app/models/spree/reimbursement_tax_calculator.rb +2 -2
  93. data/app/models/spree/reimbursement_type/credit.rb +1 -1
  94. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +6 -6
  95. data/app/models/spree/reimbursement_type/store_credit.rb +1 -1
  96. data/app/models/spree/reimbursement_type.rb +6 -1
  97. data/app/models/spree/return_authorization.rb +2 -0
  98. data/app/models/spree/return_item.rb +10 -10
  99. data/app/models/spree/return_reason.rb +6 -1
  100. data/app/models/spree/role.rb +3 -1
  101. data/app/models/spree/role_permission.rb +8 -0
  102. data/app/models/spree/shipment.rb +9 -7
  103. data/app/models/spree/shipping_category.rb +2 -0
  104. data/app/models/spree/shipping_rate.rb +2 -3
  105. data/app/models/spree/{order_contents.rb → simple_order_contents.rb} +8 -12
  106. data/app/models/spree/stock/estimator.rb +1 -1
  107. data/app/models/spree/stock/inventory_unit_builder.rb +1 -1
  108. data/app/models/spree/stock/package.rb +2 -2
  109. data/app/models/spree/stock/simple_coordinator.rb +36 -22
  110. data/app/models/spree/stock_item.rb +1 -0
  111. data/app/models/spree/stock_location.rb +5 -5
  112. data/app/models/spree/store.rb +3 -1
  113. data/app/models/spree/store_credit.rb +17 -15
  114. data/app/models/spree/store_credit_event.rb +4 -3
  115. data/app/models/spree/store_credit_reason.rb +6 -1
  116. data/app/models/spree/store_selector/by_server_name.rb +1 -1
  117. data/app/models/spree/tax/tax_helpers.rb +12 -1
  118. data/app/models/spree/tax_calculator/default.rb +3 -3
  119. data/app/models/spree/tax_calculator/shipping_rate.rb +1 -1
  120. data/app/models/spree/tax_category.rb +3 -1
  121. data/app/models/spree/tax_rate.rb +7 -3
  122. data/app/models/spree/taxon.rb +22 -2
  123. data/app/models/spree/taxon_brand_selector.rb +22 -0
  124. data/app/models/spree/taxonomy.rb +2 -2
  125. data/app/models/spree/unauthorized_redirect_handler.rb +24 -0
  126. data/app/models/spree/unit_cancel.rb +1 -2
  127. data/app/models/spree/user_address.rb +9 -3
  128. data/app/models/spree/variant/scopes.rb +4 -0
  129. data/app/models/spree/variant/vat_price_generator.rb +1 -1
  130. data/app/models/spree/variant.rb +21 -8
  131. data/app/models/spree/wallet.rb +2 -2
  132. data/app/views/spree/order_mailer/cancel_email.html.erb +1 -1
  133. data/app/views/spree/order_mailer/cancel_email.text.erb +1 -1
  134. data/app/views/spree/order_mailer/confirm_email.html.erb +5 -5
  135. data/app/views/spree/order_mailer/confirm_email.text.erb +5 -5
  136. data/app/views/spree/order_mailer/inventory_cancellation_email.html.erb +0 -1
  137. data/config/locales/en.yml +33 -90
  138. data/db/default/spree/permission_sets.rb +10 -0
  139. data/db/default/spree/return_reasons.rb +3 -1
  140. data/db/default/spree/states.rb +1 -1
  141. data/db/migrate/20160101010000_solidus_one_four.rb +0 -127
  142. data/db/migrate/20220419170826_remove_archived_user_addresses.rb +12 -0
  143. data/db/migrate/20230427095534_drop_deprecated_address_id_from_shipments.rb +1 -1
  144. data/db/migrate/20240821173254_create_spree_permission_sets_in_core.rb +9 -0
  145. data/db/migrate/20240821173341_create_spree_roles_permissions_in_core.rb +9 -0
  146. data/db/migrate/20240821173641_add_description_to_spree_roles.rb +5 -0
  147. data/db/migrate/20240904152041_add_privilege_and_category_to_spree_permission_sets.rb +6 -0
  148. data/db/migrate/20250129061658_add_metadata_to_spree_resources.rb +28 -0
  149. data/db/migrate/20250201172950_add_gtin_and_condition_to_spree_variant.rb +6 -0
  150. data/db/migrate/20250207104016_add_primary_taxon_to_products.rb +7 -0
  151. data/db/migrate/20250221152004_add_metadata_to_users.rb +13 -0
  152. data/db/seeds.rb +1 -0
  153. data/lib/generators/solidus/install/app_templates/authentication/custom.rb +0 -5
  154. data/lib/generators/solidus/install/app_templates/frontend/starter.rb +1 -1
  155. data/lib/generators/solidus/install/install_generator.rb +64 -15
  156. data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +15 -12
  157. data/lib/generators/solidus/update/update_generator.rb +1 -1
  158. data/lib/generators/spree/dummy/dummy_generator.rb +1 -1
  159. data/lib/generators/spree/dummy/templates/rails/application.rb.tt +1 -1
  160. data/lib/generators/spree/dummy/templates/rails/database.yml +41 -93
  161. data/lib/generators/spree/dummy/templates/rails/manifest.js +3 -0
  162. data/lib/generators/spree/dummy/templates/rails/test.rb +6 -1
  163. data/lib/spree/app_configuration.rb +102 -67
  164. data/lib/spree/core/class_constantizer.rb +2 -2
  165. data/lib/spree/core/controller_helpers/auth.rb +5 -61
  166. data/lib/spree/core/controller_helpers/common.rb +5 -80
  167. data/lib/spree/core/controller_helpers/order.rb +5 -86
  168. data/lib/spree/core/controller_helpers/payment_parameters.rb +5 -163
  169. data/lib/spree/core/controller_helpers/pricing.rb +5 -17
  170. data/lib/spree/core/controller_helpers/search.rb +5 -14
  171. data/lib/spree/core/controller_helpers/store.rb +5 -17
  172. data/lib/spree/core/controller_helpers/strong_parameters.rb +5 -71
  173. data/lib/spree/core/engine.rb +13 -5
  174. data/lib/spree/core/environment/calculators.rb +35 -3
  175. data/lib/spree/core/environment/promotions.rb +25 -4
  176. data/lib/spree/core/environment_extension.rb +16 -2
  177. data/lib/spree/core/importer/order.rb +5 -5
  178. data/lib/spree/core/importer/product.rb +3 -3
  179. data/lib/spree/core/nested_class_set.rb +28 -0
  180. data/lib/spree/core/null_promotion_configuration.rb +84 -0
  181. data/lib/spree/core/product_filters.rb +1 -1
  182. data/lib/spree/core/search/variant.rb +2 -2
  183. data/lib/spree/core/state_machines/inventory_unit.rb +5 -40
  184. data/lib/spree/core/state_machines/order.rb +5 -251
  185. data/lib/spree/core/state_machines/payment.rb +5 -59
  186. data/lib/spree/core/state_machines/reimbursement.rb +5 -31
  187. data/lib/spree/core/state_machines/return_authorization.rb +5 -30
  188. data/lib/spree/core/state_machines/return_item/acceptance_status.rb +5 -49
  189. data/lib/spree/core/state_machines/return_item/reception_status.rb +5 -40
  190. data/lib/spree/core/state_machines/shipment.rb +5 -56
  191. data/lib/spree/core/state_machines.rb +48 -81
  192. data/lib/spree/core/validators/email.rb +1 -1
  193. data/lib/spree/core/version.rb +2 -2
  194. data/lib/spree/core.rb +2 -14
  195. data/lib/spree/deprecator.rb +9 -0
  196. data/lib/spree/i18n.rb +1 -1
  197. data/lib/spree/mailer_previews/carton_preview.rb +1 -1
  198. data/lib/spree/money.rb +5 -118
  199. data/lib/spree/permission_sets/base.rb +5 -30
  200. data/lib/spree/permission_sets/configuration_display.rb +5 -41
  201. data/lib/spree/permission_sets/configuration_management.rb +5 -40
  202. data/lib/spree/permission_sets/dashboard_display.rb +5 -14
  203. data/lib/spree/permission_sets/default_customer.rb +5 -71
  204. data/lib/spree/permission_sets/order_display.rb +5 -38
  205. data/lib/spree/permission_sets/order_management.rb +5 -38
  206. data/lib/spree/permission_sets/product_display.rb +5 -31
  207. data/lib/spree/permission_sets/product_management.rb +5 -35
  208. data/lib/spree/permission_sets/restricted_stock_display.rb +5 -21
  209. data/lib/spree/permission_sets/restricted_stock_management.rb +5 -21
  210. data/lib/spree/permission_sets/stock_display.rb +5 -14
  211. data/lib/spree/permission_sets/stock_management.rb +5 -14
  212. data/lib/spree/permission_sets/super_user.rb +5 -14
  213. data/lib/spree/permission_sets/user_display.rb +5 -15
  214. data/lib/spree/permission_sets/user_management.rb +5 -32
  215. data/lib/spree/permission_sets.rb +5 -18
  216. data/lib/spree/permitted_attributes.rb +21 -9
  217. data/lib/spree/preferences/configuration.rb +4 -0
  218. data/lib/spree/preferences/persistable.rb +7 -1
  219. data/lib/spree/preferences/store.rb +2 -2
  220. data/lib/spree/testing_support/capybara_ext.rb +11 -1
  221. data/lib/spree/testing_support/common_rake.rb +1 -0
  222. data/lib/spree/testing_support/dummy_ability.rb +7 -0
  223. data/lib/spree/testing_support/dummy_app/assets/stylesheets/solidus_admin/tailwind.css +1 -0
  224. data/lib/spree/testing_support/dummy_app/database.yml +37 -46
  225. data/lib/spree/testing_support/dummy_app/migrations.rb +8 -15
  226. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +3 -6
  227. data/lib/spree/testing_support/dummy_app.rb +33 -19
  228. data/lib/spree/testing_support/factories/adjustment_factory.rb +1 -2
  229. data/lib/spree/testing_support/factories/calculator_factory.rb +1 -5
  230. data/lib/spree/testing_support/factories/carton_factory.rb +2 -2
  231. data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -2
  232. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +3 -3
  233. data/lib/spree/testing_support/factories/order_factory.rb +13 -24
  234. data/lib/spree/testing_support/factories/product_factory.rb +1 -1
  235. data/lib/spree/testing_support/factories/shipment_factory.rb +1 -1
  236. data/lib/spree/testing_support/factories/stock_item_factory.rb +5 -1
  237. data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -1
  238. data/lib/spree/testing_support/factories/user_factory.rb +1 -1
  239. data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
  240. data/lib/spree/testing_support/order_walkthrough.rb +3 -3
  241. data/lib/spree/testing_support/shared_examples/calculator.rb +10 -0
  242. data/lib/spree/testing_support/shared_examples/order_factory.rb +141 -0
  243. data/lib/spree/testing_support/shared_examples/working_factory.rb +15 -0
  244. data/lib/tasks/colorado_delivery_fee.rake +2 -2
  245. data/solidus_core.gemspec +7 -10
  246. metadata +107 -109
  247. data/app/jobs/spree/promotion_code_batch_job.rb +0 -26
  248. data/app/mailers/spree/promotion_code_batch_mailer.rb +0 -15
  249. data/app/models/spree/calculator/distributed_amount.rb +0 -33
  250. data/app/models/spree/calculator/flat_percent_item_total.rb +0 -23
  251. data/app/models/spree/calculator/flexi_rate.rb +0 -22
  252. data/app/models/spree/calculator/percent_on_line_item.rb +0 -13
  253. data/app/models/spree/calculator/tiered_flat_rate.rb +0 -52
  254. data/app/models/spree/calculator/tiered_percent.rb +0 -62
  255. data/app/models/spree/line_item_action.rb +0 -8
  256. data/app/models/spree/order_promotion.rb +0 -27
  257. data/app/models/spree/promotion/actions/create_adjustment.rb +0 -81
  258. data/app/models/spree/promotion/actions/create_item_adjustments.rb +0 -98
  259. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +0 -139
  260. data/app/models/spree/promotion/actions/free_shipping.rb +0 -59
  261. data/app/models/spree/promotion/order_adjustments_recalculator.rb +0 -92
  262. data/app/models/spree/promotion/rules/first_order.rb +0 -38
  263. data/app/models/spree/promotion/rules/first_repeat_purchase_since.rb +0 -36
  264. data/app/models/spree/promotion/rules/item_total.rb +0 -86
  265. data/app/models/spree/promotion/rules/nth_order.rb +0 -45
  266. data/app/models/spree/promotion/rules/one_use_per_user.rb +0 -25
  267. data/app/models/spree/promotion/rules/option_value.rb +0 -50
  268. data/app/models/spree/promotion/rules/product.rb +0 -86
  269. data/app/models/spree/promotion/rules/store.rb +0 -26
  270. data/app/models/spree/promotion/rules/taxon.rb +0 -91
  271. data/app/models/spree/promotion/rules/user.rb +0 -34
  272. data/app/models/spree/promotion/rules/user_logged_in.rb +0 -20
  273. data/app/models/spree/promotion/rules/user_role.rb +0 -45
  274. data/app/models/spree/promotion.rb +0 -271
  275. data/app/models/spree/promotion_action.rb +0 -47
  276. data/app/models/spree/promotion_category.rb +0 -8
  277. data/app/models/spree/promotion_chooser.rb +0 -34
  278. data/app/models/spree/promotion_code/batch_builder.rb +0 -64
  279. data/app/models/spree/promotion_code.rb +0 -54
  280. data/app/models/spree/promotion_code_batch.rb +0 -27
  281. data/app/models/spree/promotion_handler/cart.rb +0 -75
  282. data/app/models/spree/promotion_handler/coupon.rb +0 -123
  283. data/app/models/spree/promotion_handler/page.rb +0 -26
  284. data/app/models/spree/promotion_handler/shipping.rb +0 -61
  285. data/app/models/spree/promotion_rule.rb +0 -55
  286. data/app/models/spree/promotion_rule_role.rb +0 -8
  287. data/app/models/spree/promotion_rule_store.rb +0 -10
  288. data/app/models/spree/promotion_rule_taxon.rb +0 -8
  289. data/app/models/spree/promotion_rule_user.rb +0 -10
  290. data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_errored.text.erb +0 -2
  291. data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_finished.text.erb +0 -2
  292. data/bin/rails +0 -13
  293. data/db/migrate/20161017102621_create_spree_promotion_code_batch.rb +0 -38
  294. data/db/migrate/20180202190713_create_promotion_rule_stores.rb +0 -12
  295. data/db/migrate/20180328172631_add_join_characters_to_promotion_code_batch.rb +0 -11
  296. data/db/migrate/20190106184413_remove_code_from_spree_promotions.rb +0 -42
  297. data/db/migrate/20220317165036_set_promotions_with_any_policy_to_all_if_possible.rb +0 -20
  298. data/db/migrate/20230322085416_remove_match_policy_from_spree_promotion.rb +0 -5
  299. data/db/migrate/20230325132905_remove_unused_columns_from_promotion_rules.rb +0 -6
  300. data/db/migrate/20230325161633_drop_unused_promo_action_line_items.rb +0 -13
  301. data/lib/generators/spree/dummy/templates/rails/script/rails +0 -6
  302. data/lib/solidus/migrations/promotions_with_code_handlers.rb +0 -66
  303. data/lib/spree/permission_sets/promotion_display.rb +0 -25
  304. data/lib/spree/permission_sets/promotion_management.rb +0 -25
  305. data/lib/spree/testing_support/factories/order_promotion_factory.rb +0 -8
  306. data/lib/spree/testing_support/factories/promotion_category_factory.rb +0 -7
  307. data/lib/spree/testing_support/factories/promotion_code_factory.rb +0 -8
  308. data/lib/spree/testing_support/factories/promotion_factory.rb +0 -98
@@ -1,165 +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 after store credit is applied.
124
- # We should reconsider this method and its usage at some point.
125
- #
126
- # This method expects a params hash in the format of:
127
- #
128
- # {
129
- # order: {
130
- # # Note that only a single entry is expected/handled in this array
131
- # payments_attributes: [
132
- # {
133
- # ...params...
134
- # },
135
- # ],
136
- # ...other params...
137
- # },
138
- # ...other params...
139
- # }
140
- #
141
- # And this method modifies the params into the format of:
142
- #
143
- # {
144
- # order: {
145
- # payments_attributes: [
146
- # {
147
- # ...params...
148
- # amount: <the order total after store credit>,
149
- # },
150
- # ],
151
- # ...other params...
152
- # },
153
- # ...other params...
154
- # }
155
- #
156
- def set_payment_parameters_amount(params, order)
157
- return params if params[:order].blank?
158
- return params if params[:order][:payments_attributes].blank?
159
-
160
- params[:order][:payments_attributes].first[:amount] = order.order_total_after_store_credit
161
-
162
- params
163
- end
164
- end
165
- 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 = 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
+ )
@@ -21,6 +21,11 @@ module Spree
21
21
  [Symbol, BigDecimal, ActiveSupport::HashWithIndifferentAccess]
22
22
  end
23
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
+
24
29
  initializer "spree.environment", before: :load_config_initializers do |app|
25
30
  app.config.spree = Spree::Config.environment
26
31
  end
@@ -56,6 +61,7 @@ module Spree
56
61
  Spree::Bus.clear
57
62
 
58
63
  %i[
64
+ order_emptied
59
65
  order_finalized
60
66
  order_recalculated
61
67
  reimbursement_reimbursed
@@ -67,12 +73,14 @@ module Spree
67
73
  end
68
74
 
69
75
  # Load in mailer previews for apps to use in development.
70
- initializer "spree.core.action_mailer.set_preview_path", after: "action_mailer.set_configs" do |app|
71
- original_preview_path = app.config.action_mailer.preview_path
72
- solidus_preview_path = Spree::Core::Engine.root.join 'lib/spree/mailer_previews'
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")
73
78
 
74
- app.config.action_mailer.preview_path = "{#{original_preview_path},#{solidus_preview_path}}"
75
- ActionMailer::Base.preview_path = app.config.action_mailer.preview_path
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}}"
83
+ end
76
84
  end
77
85
 
78
86
  initializer "spree.deprecator" do |app|
@@ -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
@@ -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
@@ -18,7 +18,7 @@ module Spree
18
18
  if product.save
19
19
  variants_attrs.each do |variant_attribute|
20
20
  # make sure the product is assigned before the options=
21
- product.variants.create({ product: product }.merge(variant_attribute))
21
+ product.variants.create({ product: }.merge(variant_attribute))
22
22
  end
23
23
 
24
24
  set_up_options
@@ -35,7 +35,7 @@ module Spree
35
35
  product.variants.find(variant_attribute['id'].to_i).update(variant_attribute)
36
36
  else
37
37
  # make sure the product is assigned before the options=
38
- product.variants.create({ product: product }.merge(variant_attribute))
38
+ product.variants.create({ product: }.merge(variant_attribute))
39
39
  end
40
40
  end
41
41
 
@@ -49,7 +49,7 @@ module Spree
49
49
 
50
50
  def set_up_options
51
51
  options_attrs.each do |name|
52
- option_type = Spree::OptionType.where(name: name).first_or_initialize do |ot|
52
+ option_type = Spree::OptionType.where(name:).first_or_initialize do |ot|
53
53
  ot.presentation = name
54
54
  ot.save!
55
55
  end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spree/core/class_constantizer"
4
+
5
+ module Spree
6
+ module Core
7
+ class NestedClassSet
8
+ attr_reader :klass_sets
9
+
10
+ def initialize(hash = {})
11
+ @klass_sets = hash.map do |key, value|
12
+ [
13
+ key.to_s,
14
+ ClassConstantizer::Set.new(default: value)
15
+ ]
16
+ end.to_h
17
+ end
18
+
19
+ def [](klass)
20
+ klass_sets[klass.to_s] || []
21
+ end
22
+
23
+ def []=(klass, klasses)
24
+ klass_sets[klass.to_s] = ClassConstantizer::Set.new(default: klasses.map(&:to_s))
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,84 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Core
5
+ class NullPromotionConfiguration < Spree::Preferences::Configuration
6
+ include Spree::Core::EnvironmentExtension
7
+
8
+ # order_adjuster_class allows extensions to provide their own Order Adjuster
9
+ class_name_attribute :order_adjuster_class, default: 'Spree::NullPromotionAdjuster'
10
+
11
+ # Allows providing a different coupon code handler.
12
+ # @!attribute [rw] coupon_code_handler_class
13
+ # @see Spree::NullPromotionHandler
14
+ # @return [Class] an object that conforms to the API of
15
+ # the standard coupon code handler class
16
+ # Spree::NullPromotionHandler.
17
+ class_name_attribute :coupon_code_handler_class, default: 'Spree::NullPromotionHandler'
18
+
19
+ # Allows providing a different promotion finder.
20
+ # @!attribute [rw] promotion_finder_class
21
+ # @see Spree::NullPromotionFinder
22
+ # @return [Class] an object that conforms to the API of
23
+ # the standard promotion finder class
24
+ # Spree::NullPromotionFinder.
25
+ class_name_attribute :promotion_finder_class, default: 'Spree::NullPromotionFinder'
26
+
27
+ # Allows getting and setting `Spree::Config.promotion_code_batch_mailer_class`.
28
+ # Both will issue a deprecation warning.
29
+ class_name_attribute :promotion_code_batch_mailer_class, default: 'Spree::DeprecatedConfigurableClass'
30
+ deprecate :promotion_code_batch_mailer_class, :promotion_code_batch_mailer_class=, deprecator: Spree.deprecator
31
+
32
+ # Allows getting and setting `Spree::Config.promotion_chooser_class`.
33
+ # Both will issue a deprecation warning.
34
+ class_name_attribute :promotion_chooser_class, default: 'Spree::DeprecatedConfigurableClass'
35
+ deprecate :promotion_chooser_class, :promotion_chooser_class=, deprecator: Spree.deprecator
36
+
37
+ # Allows getting and setting rules. Deprecated.
38
+ # @!attribute [rw] rules
39
+ # @return [Array] a set of rules
40
+ add_class_set :rules
41
+ deprecate :rules, :rules=, deprecator: Spree.deprecator
42
+
43
+ # Allows getting and setting actions. Deprecated.
44
+ # @!attribute [rw] actions
45
+ # @return [Array] a set of actions
46
+ add_class_set :actions
47
+ deprecate :actions, :actions=, deprecator: Spree.deprecator
48
+
49
+ # Allows getting and setting shipping actions. Deprecated.
50
+ # @!attribute [rw] shipping_actions
51
+ # @return [Array] a set of shipping_actions
52
+ add_class_set :shipping_actions
53
+ deprecate :shipping_actions, :shipping_actions=, deprecator: Spree.deprecator
54
+
55
+ # Allows getting an setting calculators for actions. Deprecated.
56
+ # @!attribute [rw] calculators
57
+ # @return [Spree::Core::NestedClassSet] a set of calculators
58
+ add_nested_class_set :calculators
59
+ deprecate :calculators, :calculators=, deprecator: Spree.deprecator
60
+
61
+ # Allows providing a different promotion shipping promotion handler.
62
+ # @!attribute [rw] shipping_promotion_handler_class
63
+ # @see Spree::NullPromotionHandler
64
+ # @return [Class] an object that conforms to the API of
65
+ # the standard promotion finder class
66
+ # Spree::NullPromotionHandler.
67
+ class_name_attribute :shipping_promotion_handler_class, default: 'Spree::NullPromotionHandler'
68
+ deprecate :shipping_promotion_handler_class, deprecator: Spree.deprecator
69
+ deprecate :shipping_promotion_handler_class=, deprecator: Spree.deprecator
70
+
71
+ # Allows providing a different promotion advertiser.
72
+ # @!attribute [rw] advertiser_class
73
+ # @see Spree::NullPromotionAdvertiser
74
+ # @return [Class] an object that conforms to the API of
75
+ # the standard promotion advertiser class
76
+ # Spree::NullPromotionAdvertiser.
77
+ class_name_attribute :advertiser_class, default: 'Spree::NullPromotionAdvertiser'
78
+
79
+ # !@attribute [rw] promotion_api_attributes
80
+ # @return [Array<Symbol>] Attributes to be returned by the API for a promotion
81
+ preference :promotion_api_attributes, :array, default: []
82
+ end
83
+ end
84
+ end
@@ -112,7 +112,7 @@ module Spree
112
112
  {
113
113
  name: 'Brands',
114
114
  scope: :brand_any,
115
- conds: conds,
115
+ conds:,
116
116
  labels: brands.sort.map { |key| [key, key] }
117
117
  }
118
118
  end