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
@@ -0,0 +1,3 @@
1
+ //= link_tree ../images
2
+ //= link_directory ../javascripts .js
3
+ //= link_directory ../stylesheets .css
@@ -18,7 +18,12 @@ Dummy::Application.configure do
18
18
  config.eager_load = false
19
19
 
20
20
  # Raise exceptions instead of rendering exception templates
21
- config.action_dispatch.show_exceptions = false
21
+ if Rails.gem_version >= Gem::Version.new('7.1')
22
+ config.action_controller.raise_on_missing_callback_actions = true
23
+ config.action_dispatch.show_exceptions = :none
24
+ else
25
+ config.action_dispatch.show_exceptions = false
26
+ end
22
27
 
23
28
  # Disable request forgery protection in test environment
24
29
  config.action_controller.allow_forgery_protection = false
@@ -26,6 +26,7 @@ require 'uri'
26
26
 
27
27
  module Spree
28
28
  class AppConfiguration < Preferences::Configuration
29
+ include Spree::Core::EnvironmentExtension
29
30
  # Preferences (alphabetized to more easily lookup particular preferences)
30
31
 
31
32
  # @!attribute [rw] address_requires_phone
@@ -167,6 +168,13 @@ module Spree
167
168
  # @return [String] template to use for layout on the frontend (default: +"spree/layouts/spree_application"+)
168
169
  preference :layout, :string, default: 'spree/layouts/spree_application'
169
170
 
171
+ # !@attribute [rw] line_item_comparison_hooks
172
+ # @return [Array<Symbol>] An array of methods to call on {Spree::Order} to determine if a line item is equal to another
173
+ # (default: +[]+)
174
+ # @example
175
+ # config.line_item_comparison_hooks << :my_custom_method
176
+ preference :line_item_comparison_hooks, :array, default: []
177
+
170
178
  # @!attribute [rw] logo
171
179
  # @return [String] URL of logo used on frontend (default: +'logo/solidus.svg'+)
172
180
  preference :logo, :string, default: 'logo/solidus.svg'
@@ -208,6 +216,27 @@ module Spree
208
216
  # @return [Integer] Orders to show per-page in the admin (default: +15+)
209
217
  preference :orders_per_page, :integer, default: 15
210
218
 
219
+ # @!attribute [rw] meta_data_validation_enabled
220
+ # @return [Boolean] Indicates whether validation for customer and admin metadata columns is enabled.
221
+ # When this is set to true, the following preferences will be used to validate the metadata:
222
+ # - The maximum number of keys that can be added to the metadata columns (meta_data_max_keys).
223
+ # - The maximum length of each key in the metadata columns (meta_data_max_key_length).
224
+ # - The maximum length of each value in the metadata columns (meta_data_max_value_length).
225
+ # (default: +false+)
226
+ preference :meta_data_validation_enabled, :boolean, default: false
227
+
228
+ # @!attribute [rw] meta_data_max_keys
229
+ # @return [Integer] Maximum keys that can be allocated in customer and admin metadata column (default: +6+)
230
+ preference :meta_data_max_keys, :integer, default: 6
231
+
232
+ # @!attribute [rw] meta_data_max_key_length
233
+ # @return [Integer] Maximum length that key can have in customer and admin metadata column (default: +16+)
234
+ preference :meta_data_max_key_length, :integer, default: 16
235
+
236
+ # @!attribute [rw] meta_data_max_value_length
237
+ # @return [Integer] Maximum length that value can have in customer and admin metadata column (default: +256+)
238
+ preference :meta_data_max_value_length, :integer, default: 256
239
+
211
240
  # @!attribute [rw] properties_per_page
212
241
  # @return [Integer] Properties to show per-page in the admin (default: +15+)
213
242
  preference :properties_per_page, :integer, default: 15
@@ -216,10 +245,6 @@ module Spree
216
245
  # @return [Integer] Products to show per-page in the frontend (default: +12+)
217
246
  preference :products_per_page, :integer, default: 12
218
247
 
219
- # @!attribute [rw] promotions_per_page
220
- # @return [Integer] Promotions to show per-page in the admin (default: +15+)
221
- preference :promotions_per_page, :integer, default: 15
222
-
223
248
  # @!attribute [rw] require_master_price
224
249
  # @return [Boolean] Require a price on the master variant of a product (default: +true+)
225
250
  preference :require_master_price, :boolean, default: true
@@ -324,12 +349,6 @@ module Spree
324
349
  # Spree::Variant::VatPriceGenerator.
325
350
  class_name_attribute :variant_vat_prices_generator_class, default: 'Spree::Variant::VatPriceGenerator'
326
351
 
327
- # promotion_chooser_class allows extensions to provide their own PromotionChooser
328
- class_name_attribute :promotion_chooser_class, default: 'Spree::PromotionChooser'
329
-
330
- # promotion_adjuster_class allows extensions to provide their own Promotion Adjuster
331
- class_name_attribute :promotion_adjuster_class, default: 'Spree::Promotion::OrderAdjustmentsRecalculator'
332
-
333
352
  class_name_attribute :allocator_class, default: 'Spree::Stock::Allocator::OnHandFirst'
334
353
 
335
354
  class_name_attribute :shipping_rate_sorter_class, default: 'Spree::Stock::ShippingRateSorter'
@@ -367,15 +386,6 @@ module Spree
367
386
  # Spree::OrderUpdater.
368
387
  class_name_attribute :order_recalculator_class, default: 'Spree::OrderUpdater'
369
388
 
370
- # Allows providing your own Mailer for promotion code batch mailer.
371
- #
372
- # @!attribute [rw] promotion_code_batch_mailer_class
373
- # @return [ActionMailer::Base] an object that responds to "promotion_code_batch_finished",
374
- # and "promotion_code_batch_errored"
375
- # (e.g. an ActionMailer with a "promotion_code_batch_finished" method) with the same
376
- # signature as Spree::PromotionCodeBatchMailer.promotion_code_batch_finished.
377
- class_name_attribute :promotion_code_batch_mailer_class, default: 'Spree::PromotionCodeBatchMailer'
378
-
379
389
  # Allows providing your own Mailer for reimbursement mailer.
380
390
  #
381
391
  # @!attribute [rw] reimbursement_mailer_class
@@ -412,7 +422,7 @@ module Spree
412
422
  # @!attribute [rw] order_contents_class
413
423
  # @return [Class] a class with the same public interfaces as
414
424
  # Spree::OrderContents.
415
- class_name_attribute :order_contents_class, default: 'Spree::OrderContents'
425
+ class_name_attribute :order_contents_class, default: 'Spree::SimpleOrderContents'
416
426
 
417
427
  # Allows providing your own class for shipping an order.
418
428
  #
@@ -448,6 +458,13 @@ module Spree
448
458
  # as Spree::Wallet::AddPaymentSourcesToWallet.
449
459
  class_name_attribute :add_payment_sources_to_wallet_class, default: 'Spree::Wallet::AddPaymentSourcesToWallet'
450
460
 
461
+ # Allows providing your own class for recalculating totals on an item.
462
+ #
463
+ # @!attribute [rw] item_total_class
464
+ # @return [Class] a class with the same public interfaces as
465
+ # Spree::ItemTotal
466
+ class_name_attribute :item_total_class, default: 'Spree::ItemTotal'
467
+
451
468
  # Allows providing your own class for calculating taxes on an order.
452
469
  #
453
470
  # This extension point is under development and may change in a future minor release.
@@ -540,6 +557,13 @@ module Spree
540
557
  # Spree::StoreCreditPrioritizer.
541
558
  class_name_attribute :store_credit_prioritizer_class, default: 'Spree::StoreCreditPrioritizer'
542
559
 
560
+ # Allows finding brand for product.
561
+ #
562
+ # @!attribute [rw] brand_selector_class
563
+ # @return [Class] a class with the same public interfaces as
564
+ # Spree::TaxonBrandSelector.
565
+ class_name_attribute :brand_selector_class, default: 'Spree::TaxonBrandSelector'
566
+
543
567
  # @!attribute [rw] taxon_image_style_default
544
568
  #
545
569
  # Defines which style to default to when style is not provided
@@ -569,6 +593,16 @@ module Spree
569
593
  # Enumerable of taxons adhering to the present_taxon_class interface
570
594
  class_name_attribute :taxon_attachment_module, default: "Spree::Taxon::ActiveStorageAttachment"
571
595
 
596
+ # Allows changing the default behavior for redirects when a user is not authorized
597
+ #
598
+ # @!attribute [rw] unauthorized_redirect_handler_class
599
+ # @return [Class] a class with the same public interfaces as
600
+ # Spree::UnauthorizedRedirectHandler.
601
+ class_name_attribute :unauthorized_redirect_handler_class, default: "Spree::UnauthorizedRedirectHandler"
602
+
603
+ # Set of classes that can be promotion adjustment sources
604
+ add_class_set :adjustment_promotion_source_types, default: []
605
+
572
606
  # Configures the absolute path that contains the Solidus engine
573
607
  # migrations. This will be checked at app boot to confirm that all Solidus
574
608
  # migrations are installed.
@@ -603,6 +637,54 @@ module Spree
603
637
  @stock_configuration ||= Spree::Core::StockConfiguration.new
604
638
  end
605
639
 
640
+ # Allows providing your own promotion configuration instance
641
+ # @!attribute [rw] promotions
642
+ # @return [Spree::Core::NullPromotionConfiguration] an object that conforms to the API of
643
+ # the example promotion configuration class Spree::Core::NullPromotionConfiguration.
644
+ attr_writer :promotions
645
+ def promotions
646
+ @promotions ||= Spree::Core::NullPromotionConfiguration.new
647
+ end
648
+
649
+ class << self
650
+ private
651
+
652
+ def promotions_deprecation_message(method, new_method_name = nil)
653
+ "The `Spree::Config.#{method}` preference is deprecated and will be removed in Solidus 5.0. " \
654
+ "Use `Spree::Config.promotions.#{new_method_name || method}` instead"
655
+ end
656
+ end
657
+
658
+ def promotion_adjuster_class
659
+ promotions.order_adjuster_class
660
+ end
661
+
662
+ def promotion_adjuster_class=(klass)
663
+ promotions.order_adjuster_class = klass
664
+ end
665
+ deprecate promotion_adjuster_class: promotions_deprecation_message("promotion_adjuster_class", "order_adjuster_class"), deprecator: Spree.deprecator
666
+ deprecate "promotion_adjuster_class=": promotions_deprecation_message("promotion_adjuster_class=", "order_adjuster_class="), deprecator: Spree.deprecator
667
+
668
+ delegate :promotion_chooser_class, :promotion_chooser_class=, to: :promotions
669
+ deprecate promotion_chooser_class: promotions_deprecation_message("promotion_chooser_class"), deprecator: Spree.deprecator
670
+ deprecate "promotion_chooser_class=": promotions_deprecation_message("promotion_chooser_class="), deprecator: Spree.deprecator
671
+
672
+ delegate :shipping_promotion_handler_class, :shipping_promotion_handler_class=, to: :promotions
673
+ deprecate shipping_promotion_handler_class: promotions_deprecation_message("shipping_promotion_handler_class"), deprecator: Spree.deprecator
674
+ deprecate "shipping_promotion_handler_class=": promotions_deprecation_message("shipping_promotion_handler_class="), deprecator: Spree.deprecator
675
+
676
+ delegate :coupon_code_handler_class, :coupon_code_handler_class=, to: :promotions
677
+ deprecate coupon_code_handler_class: promotions_deprecation_message("coupon_code_handler_class"), deprecator: Spree.deprecator
678
+ deprecate "coupon_code_handler_class=": promotions_deprecation_message("coupon_code_handler_class"), deprecator: Spree.deprecator
679
+
680
+ delegate :promotion_code_batch_mailer_class, :promotion_code_batch_mailer_class=, to: :promotions
681
+ deprecate promotion_code_batch_mailer_class: promotions_deprecation_message("promotion_code_batch_mailer_class"), deprecator: Spree.deprecator
682
+ deprecate "promotion_code_batch_mailer_class=": promotions_deprecation_message("promotion_code_batch_mailer_class="), deprecator: Spree.deprecator
683
+
684
+ delegate :preferred_promotions_per_page, :preferred_promotions_per_page=, to: :promotions
685
+ deprecate preferred_promotions_per_page: promotions_deprecation_message("preferred_promotions_per_page"), deprecator: Spree.deprecator
686
+ deprecate "preferred_promotions_per_page=": promotions_deprecation_message("preferred_promotions_per_page="), deprecator: Spree.deprecator
687
+
606
688
  def roles
607
689
  @roles ||= Spree::RoleConfiguration.new.tap do |roles|
608
690
  roles.assign_permissions :default, ['Spree::PermissionSets::DefaultCustomer']
@@ -618,27 +700,6 @@ module Spree
618
700
 
619
701
  def environment
620
702
  @environment ||= Spree::Core::Environment.new(self).tap do |env|
621
- env.calculators.promotion_actions_create_adjustments = %w[
622
- Spree::Calculator::FlatPercentItemTotal
623
- Spree::Calculator::FlatRate
624
- Spree::Calculator::FlexiRate
625
- Spree::Calculator::TieredPercent
626
- Spree::Calculator::TieredFlatRate
627
- ]
628
-
629
- env.calculators.promotion_actions_create_item_adjustments = %w[
630
- Spree::Calculator::DistributedAmount
631
- Spree::Calculator::FlatRate
632
- Spree::Calculator::FlexiRate
633
- Spree::Calculator::PercentOnLineItem
634
- Spree::Calculator::TieredPercent
635
- ]
636
-
637
- env.calculators.promotion_actions_create_quantity_adjustments = %w[
638
- Spree::Calculator::PercentOnLineItem
639
- Spree::Calculator::FlatRate
640
- ]
641
-
642
703
  env.calculators.shipping_methods = %w[
643
704
  Spree::Calculator::Shipping::FlatPercentItemTotal
644
705
  Spree::Calculator::Shipping::FlatRate
@@ -659,32 +720,6 @@ module Spree
659
720
  Spree::PaymentMethod::Check
660
721
  ]
661
722
 
662
- env.promotions.rules = %w[
663
- Spree::Promotion::Rules::ItemTotal
664
- Spree::Promotion::Rules::Product
665
- Spree::Promotion::Rules::User
666
- Spree::Promotion::Rules::FirstOrder
667
- Spree::Promotion::Rules::UserLoggedIn
668
- Spree::Promotion::Rules::OneUsePerUser
669
- Spree::Promotion::Rules::Taxon
670
- Spree::Promotion::Rules::NthOrder
671
- Spree::Promotion::Rules::OptionValue
672
- Spree::Promotion::Rules::FirstRepeatPurchaseSince
673
- Spree::Promotion::Rules::UserRole
674
- Spree::Promotion::Rules::Store
675
- ]
676
-
677
- env.promotions.actions = %w[
678
- Spree::Promotion::Actions::CreateAdjustment
679
- Spree::Promotion::Actions::CreateItemAdjustments
680
- Spree::Promotion::Actions::CreateQuantityAdjustments
681
- Spree::Promotion::Actions::FreeShipping
682
- ]
683
-
684
- env.promotions.shipping_actions = %w[
685
- Spree::Promotion::Actions::FreeShipping
686
- ]
687
-
688
723
  env.stock_splitters = %w[
689
724
  Spree::Stock::Splitter::ShippingCategory
690
725
  Spree::Stock::Splitter::Backordered
@@ -8,8 +8,8 @@ module Spree
8
8
  class Set
9
9
  include Enumerable
10
10
 
11
- def initialize
12
- @collection = ::Set.new
11
+ def initialize(default: [])
12
+ @collection = ::Set.new(default)
13
13
  end
14
14
 
15
15
  def <<(klass)
@@ -1,63 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'cancan'
4
-
5
- module Spree
6
- module Core
7
- module ControllerHelpers
8
- module Auth
9
- extend ActiveSupport::Concern
10
-
11
- # @!attribute [rw] unauthorized_redirect
12
- # @!scope class
13
- # Extension point for overriding behaviour of access denied errors.
14
- # Default behaviour is to redirect back or to "/unauthorized" with a flash
15
- # message.
16
- # @return [Proc] action to take when access denied error is raised.
17
-
18
- included do
19
- before_action :set_guest_token
20
- helper_method :spree_current_user
21
-
22
- class_attribute :unauthorized_redirect
23
- self.unauthorized_redirect = -> do
24
- flash[:error] = I18n.t('spree.authorization_failure')
25
- redirect_back(fallback_location: "/unauthorized")
26
- end
27
-
28
- rescue_from CanCan::AccessDenied do
29
- instance_exec(&unauthorized_redirect)
30
- end
31
- end
32
-
33
- # Needs to be overriden so that we use Spree's Ability rather than anyone else's.
34
- def current_ability
35
- @current_ability ||= Spree::Ability.new(spree_current_user)
36
- end
37
-
38
- def redirect_back_or_default(default)
39
- redirect_to(session["spree_user_return_to"] || default)
40
- session["spree_user_return_to"] = nil
41
- end
42
-
43
- def set_guest_token
44
- unless cookies.signed[:guest_token].present?
45
- cookies.permanent.signed[:guest_token] = Spree::Config[:guest_token_cookie_options].merge(
46
- value: SecureRandom.urlsafe_base64(nil, false),
47
- httponly: true
48
- )
49
- end
50
- end
51
-
52
- def store_location
53
- Spree::UserLastUrlStorer.new(self).store_location
54
- end
55
-
56
- # Auth extensions are expected to define it, otherwise it's a no-op
57
- def spree_current_user
58
- defined?(super) ? super : nil
59
- end
60
- end
61
- end
62
- end
63
- 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,82 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'carmen'
4
-
5
- module Spree
6
- module Core
7
- module ControllerHelpers
8
- module Common
9
- extend ActiveSupport::Concern
10
- included do
11
- helper_method :title
12
- helper_method :title=
13
- helper_method :accurate_title
14
-
15
- layout :get_layout
16
-
17
- before_action :set_user_language
18
- end
19
-
20
- protected
21
-
22
- # can be used in views as well as controllers.
23
- # e.g. <% self.title = 'This is a custom title for this view' %>
24
- attr_writer :title
25
-
26
- def title
27
- title_string = @title.present? ? @title : accurate_title
28
- if title_string.present?
29
- if Spree::Config[:always_put_site_name_in_title]
30
- [title_string, default_title].join(' - ')
31
- else
32
- title_string
33
- end
34
- else
35
- default_title
36
- end
37
- end
38
-
39
- def default_title
40
- current_store.name
41
- end
42
-
43
- # this is a hook for subclasses to provide title
44
- def accurate_title
45
- current_store.seo_title
46
- end
47
-
48
- private
49
-
50
- def set_user_language_locale_key
51
- :locale
52
- end
53
-
54
- def set_user_language
55
- available_locales = Spree.i18n_available_locales
56
- locale = [
57
- params[:locale],
58
- session[set_user_language_locale_key],
59
- (config_locale if respond_to?(:config_locale, true)),
60
- I18n.default_locale
61
- ].detect do |candidate|
62
- candidate &&
63
- available_locales.include?(candidate.to_sym)
64
- end
65
- session[set_user_language_locale_key] = locale
66
- I18n.locale = locale
67
- Carmen.i18n_backend.locale = locale
68
- end
69
-
70
- # Returns which layout to render.
71
- #
72
- # You can set the layout you want to render inside your Spree configuration with the +:layout+ option.
73
- #
74
- # Default layout is: +app/views/spree/layouts/spree_application+
75
- #
76
- def get_layout
77
- Spree::Config[:layout]
78
- end
79
- end
80
- end
81
- end
82
- 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,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 ||= 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 ||= 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 spree_current_user && @order
42
- @order.associate_user!(spree_current_user) if @order.user.blank? || @order.email.blank?
43
- end
44
- end
45
-
46
- def set_current_order
47
- if spree_current_user && current_order
48
- spree_current_user.orders.by_store(current_store).incomplete.where('id != ?', current_order.id).find_each do |order|
49
- current_order.merge!(order, 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 ||= 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: 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? && 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
+ )