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
@@ -22,8 +22,11 @@ require "spree/core/search/variant"
22
22
  require 'spree/preferences/configuration'
23
23
  require 'spree/core/environment'
24
24
 
25
+ require 'uri'
26
+
25
27
  module Spree
26
28
  class AppConfiguration < Preferences::Configuration
29
+ include Spree::Core::EnvironmentExtension
27
30
  # Preferences (alphabetized to more easily lookup particular preferences)
28
31
 
29
32
  # @!attribute [rw] address_requires_phone
@@ -145,6 +148,10 @@ module Spree
145
148
  # @return [String] Two-letter ISO code of a {Spree::Country} to assumed as the country of an unidentified customer (default: "US")
146
149
  preference :default_country_iso, :string, default: 'US'
147
150
 
151
+ # @!attribute [rw] default_email_regexp
152
+ # @return [Regexp] Regex to be used in email validations, for example in Spree::EmailValidator
153
+ preference :default_email_regexp, :regexp, default: URI::MailTo::EMAIL_REGEXP
154
+
148
155
  # @!attribute [rw] generate_api_key_for_all_roles
149
156
  # @return [Boolean] Allow generating api key automatically for user
150
157
  # at role_user creation for all roles. (default: +false+)
@@ -161,13 +168,32 @@ module Spree
161
168
  # @return [String] template to use for layout on the frontend (default: +"spree/layouts/spree_application"+)
162
169
  preference :layout, :string, default: 'spree/layouts/spree_application'
163
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
+
164
178
  # @!attribute [rw] logo
165
179
  # @return [String] URL of logo used on frontend (default: +'logo/solidus.svg'+)
166
180
  preference :logo, :string, default: 'logo/solidus.svg'
167
181
 
168
- # @!attribute [rw] mails_from
169
- # @return [String] Email address used as +From:+ field in transactional emails.
170
- preference :mails_from, :string, default: 'solidus@example.com'
182
+ # @!attribute [rw] log_entry_permitted_classes
183
+ # @return [Array<String>] An array of extra classes that are allowed to be
184
+ # loaded from a serialized YAML as details in {Spree::LogEntry}
185
+ # (defaults to a non-frozen empty array, so that extensions can add
186
+ # their own classes).
187
+ # @example
188
+ # config.log_entry_permitted_classes = ['Date']
189
+ preference :log_entry_permitted_classes, :array, default: []
190
+
191
+ # @!attribute [rw] log_entry_allow_aliases
192
+ # @return [Boolean] Whether YAML aliases are allowed when loading
193
+ # serialized data in {Spree::LogEntry}. It defaults to true. Depending
194
+ # on the source of your data, you may consider disabling it to prevent
195
+ # entity expansion attacks.
196
+ preference :log_entry_allow_aliases, :boolean, default: true
171
197
 
172
198
  # @!attribute [rw] max_level_in_taxons_menu
173
199
  # @return [Integer] maximum nesting level in taxons menu (default: +1+)
@@ -190,6 +216,27 @@ module Spree
190
216
  # @return [Integer] Orders to show per-page in the admin (default: +15+)
191
217
  preference :orders_per_page, :integer, default: 15
192
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
+
193
240
  # @!attribute [rw] properties_per_page
194
241
  # @return [Integer] Properties to show per-page in the admin (default: +15+)
195
242
  preference :properties_per_page, :integer, default: 15
@@ -198,10 +245,6 @@ module Spree
198
245
  # @return [Integer] Products to show per-page in the frontend (default: +12+)
199
246
  preference :products_per_page, :integer, default: 12
200
247
 
201
- # @!attribute [rw] promotions_per_page
202
- # @return [Integer] Promotions to show per-page in the admin (default: +15+)
203
- preference :promotions_per_page, :integer, default: 15
204
-
205
248
  # @!attribute [rw] require_master_price
206
249
  # @return [Boolean] Require a price on the master variant of a product (default: +true+)
207
250
  preference :require_master_price, :boolean, default: true
@@ -263,7 +306,6 @@ module Spree
263
306
  # @return [] Track on_hand values for variants / products. (default: true)
264
307
  preference :track_inventory_levels, :boolean, default: true
265
308
 
266
-
267
309
  # Other configurations
268
310
 
269
311
  # Allows restricting what currencies will be available.
@@ -307,9 +349,6 @@ module Spree
307
349
  # Spree::Variant::VatPriceGenerator.
308
350
  class_name_attribute :variant_vat_prices_generator_class, default: 'Spree::Variant::VatPriceGenerator'
309
351
 
310
- # promotion_chooser_class allows extensions to provide their own PromotionChooser
311
- class_name_attribute :promotion_chooser_class, default: 'Spree::PromotionChooser'
312
-
313
352
  class_name_attribute :allocator_class, default: 'Spree::Stock::Allocator::OnHandFirst'
314
353
 
315
354
  class_name_attribute :shipping_rate_sorter_class, default: 'Spree::Stock::ShippingRateSorter'
@@ -332,14 +371,20 @@ module Spree
332
371
  # signature as Spree::OrderMailer.confirm_email.
333
372
  class_name_attribute :order_mailer_class, default: 'Spree::OrderMailer'
334
373
 
335
- # Allows providing your own Mailer for promotion code batch mailer.
374
+ # Allows providing your own order update attributes class for checkout.
336
375
  #
337
- # @!attribute [rw] promotion_code_batch_mailer_class
338
- # @return [ActionMailer::Base] an object that responds to "promotion_code_batch_finished",
339
- # and "promotion_code_batch_errored"
340
- # (e.g. an ActionMailer with a "promotion_code_batch_finished" method) with the same
341
- # signature as Spree::PromotionCodeBatchMailer.promotion_code_batch_finished.
342
- class_name_attribute :promotion_code_batch_mailer_class, default: 'Spree::PromotionCodeBatchMailer'
376
+ # @!attribute [rw] order_update_attributes_class
377
+ # @return [Class] a class that responds to "call"
378
+ # with the same signature as Spree::OrderUpdateAttributes.
379
+ class_name_attribute :order_update_attributes_class, default: 'Spree::OrderUpdateAttributes'
380
+
381
+ # Allows providing a different order recalculator.
382
+ # @!attribute [rw] order_recalculator_class
383
+ # @see Spree::OrderUpdater
384
+ # @return [Class] an object that conforms to the API of
385
+ # the standard order recalculator class
386
+ # Spree::OrderUpdater.
387
+ class_name_attribute :order_recalculator_class, default: 'Spree::OrderUpdater'
343
388
 
344
389
  # Allows providing your own Mailer for reimbursement mailer.
345
390
  #
@@ -372,6 +417,28 @@ module Spree
372
417
  # Spree::Wallet::DefaultPaymentBuilder.
373
418
  class_name_attribute :default_payment_builder_class, default: 'Spree::Wallet::DefaultPaymentBuilder'
374
419
 
420
+ # Allows providing your own class for managing the contents of an order.
421
+ #
422
+ # @!attribute [rw] order_contents_class
423
+ # @return [Class] a class with the same public interfaces as
424
+ # Spree::OrderContents.
425
+ class_name_attribute :order_contents_class, default: 'Spree::SimpleOrderContents'
426
+
427
+ # Allows providing your own class for shipping an order.
428
+ #
429
+ # @!attribute [rw] order_shipping_class
430
+ # @return [Class] a class with the same public interfaces as
431
+ # Spree::OrderShipping.
432
+ class_name_attribute :order_shipping_class, default: 'Spree::OrderShipping'
433
+
434
+ # Allows providing your own class for managing the inventory units of a
435
+ # completed order.
436
+ #
437
+ # @!attribute [rw] order_cancellations_class
438
+ # @return [Class] a class with the same public interfaces as
439
+ # Spree::OrderCancellations.
440
+ class_name_attribute :order_cancellations_class, default: 'Spree::OrderCancellations'
441
+
375
442
  # Allows providing your own class for canceling payments.
376
443
  #
377
444
  # @!attribute [rw] payment_canceller
@@ -391,6 +458,13 @@ module Spree
391
458
  # as Spree::Wallet::AddPaymentSourcesToWallet.
392
459
  class_name_attribute :add_payment_sources_to_wallet_class, default: 'Spree::Wallet::AddPaymentSourcesToWallet'
393
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
+
394
468
  # Allows providing your own class for calculating taxes on an order.
395
469
  #
396
470
  # This extension point is under development and may change in a future minor release.
@@ -443,7 +517,7 @@ module Spree
443
517
  # @!attribute [rw] image_attachment_module
444
518
  # @return [Module] a module that can be included into Spree::Image to allow attachments
445
519
  # Enumerable of images adhering to the present_image_class interface
446
- class_name_attribute :image_attachment_module, default: 'Spree::Image::ActiveStorageAttachment'
520
+ class_name_attribute :image_attachment_module, default: "Spree::Image::ActiveStorageAttachment"
447
521
 
448
522
  # @!attribute [rw] allowed_image_mime_types
449
523
  #
@@ -453,6 +527,62 @@ module Spree
453
527
  # @return [Array]
454
528
  class_name_attribute :allowed_image_mime_types, default: %w(image/jpeg image/jpg image/png image/gif).freeze
455
529
 
530
+ # @!attribute [rw] product_image_style_default
531
+ #
532
+ # Defines which style to default to when style is not provided
533
+ # :product is the default.
534
+ #
535
+ # @return [Symbol]
536
+ class_name_attribute :product_image_style_default, default: :product
537
+
538
+ # @!attribute [rw] product_image_styles
539
+ #
540
+ # Defines image styles/sizes hash for styles
541
+ # `{ mini: '48x48>',
542
+ # small: '400x400>',
543
+ # product: '680x680>',
544
+ # large: '1200x1200>' } is the default.
545
+ #
546
+ # @return [Hash]
547
+ class_name_attribute :product_image_styles, default: { mini: '48x48>',
548
+ small: '400x400>',
549
+ product: '680x680>',
550
+ large: '1200x1200>' }
551
+
552
+ # Allows providing your own class for prioritizing store credit application
553
+ # to an order.
554
+ #
555
+ # @!attribute [rw] store_credit_prioritizer_class
556
+ # @return [Class] a class with the same public interfaces as
557
+ # Spree::StoreCreditPrioritizer.
558
+ class_name_attribute :store_credit_prioritizer_class, default: 'Spree::StoreCreditPrioritizer'
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
+
567
+ # @!attribute [rw] taxon_image_style_default
568
+ #
569
+ # Defines which style to default to when style is not provided
570
+ # :mini is the default.
571
+ #
572
+ # @return [Symbol]
573
+ class_name_attribute :taxon_image_style_default, default: :mini
574
+
575
+ # @!attribute [rw] taxon_styles
576
+ #
577
+ # Defines taxon styles/sizes hash for styles
578
+ # `{ mini: '48x48>',
579
+ # small: '400x400>',
580
+ # product: '680x680>',
581
+ # large: '1200x1200>' } is the default.
582
+ #
583
+ # @return [Hash]
584
+ class_name_attribute :taxon_image_styles, default: { mini: '32x32>', normal: '128x128>' }
585
+
456
586
  # Allows switching attachment library for Taxon
457
587
  #
458
588
  # `Spree::Taxon::ActiveStorageAttachment`
@@ -461,7 +591,28 @@ module Spree
461
591
  # @!attribute [rw] taxon_attachment_module
462
592
  # @return [Module] a module that can be included into Spree::Taxon to allow attachments
463
593
  # Enumerable of taxons adhering to the present_taxon_class interface
464
- class_name_attribute :taxon_attachment_module, default: 'Spree::Taxon::ActiveStorageAttachment'
594
+ class_name_attribute :taxon_attachment_module, default: "Spree::Taxon::ActiveStorageAttachment"
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
+
606
+ # Configures the absolute path that contains the Solidus engine
607
+ # migrations. This will be checked at app boot to confirm that all Solidus
608
+ # migrations are installed.
609
+ #
610
+ # @!attribute [rw] migration_path
611
+ # @return [Pathname] the configured path. (default: `Rails.root.join('db', 'migrate')`)
612
+ attr_writer :migration_path
613
+ def migration_path
614
+ @migration_path ||= ::Rails.root.join('db', 'migrate')
615
+ end
465
616
 
466
617
  # Allows providing your own class instance for generating order numbers.
467
618
  #
@@ -486,6 +637,54 @@ module Spree
486
637
  @stock_configuration ||= Spree::Core::StockConfiguration.new
487
638
  end
488
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
+
489
688
  def roles
490
689
  @roles ||= Spree::RoleConfiguration.new.tap do |roles|
491
690
  roles.assign_permissions :default, ['Spree::PermissionSets::DefaultCustomer']
@@ -493,10 +692,6 @@ module Spree
493
692
  end
494
693
  end
495
694
 
496
- def events
497
- @events_configuration ||= Spree::Event::Configuration.new
498
- end
499
-
500
695
  def user_last_url_storer_rules
501
696
  @user_last_url_storer_rules ||= ::Spree::Core::ClassConstantizer::Set.new.tap do |set|
502
697
  set << 'Spree::UserLastUrlStorer::Rules::AuthenticationRule'
@@ -505,27 +700,6 @@ module Spree
505
700
 
506
701
  def environment
507
702
  @environment ||= Spree::Core::Environment.new(self).tap do |env|
508
- env.calculators.promotion_actions_create_adjustments = %w[
509
- Spree::Calculator::FlatPercentItemTotal
510
- Spree::Calculator::FlatRate
511
- Spree::Calculator::FlexiRate
512
- Spree::Calculator::TieredPercent
513
- Spree::Calculator::TieredFlatRate
514
- ]
515
-
516
- env.calculators.promotion_actions_create_item_adjustments = %w[
517
- Spree::Calculator::DistributedAmount
518
- Spree::Calculator::FlatRate
519
- Spree::Calculator::FlexiRate
520
- Spree::Calculator::PercentOnLineItem
521
- Spree::Calculator::TieredPercent
522
- ]
523
-
524
- env.calculators.promotion_actions_create_quantity_adjustments = %w[
525
- Spree::Calculator::PercentOnLineItem
526
- Spree::Calculator::FlatRate
527
- ]
528
-
529
703
  env.calculators.shipping_methods = %w[
530
704
  Spree::Calculator::Shipping::FlatPercentItemTotal
531
705
  Spree::Calculator::Shipping::FlatRate
@@ -536,6 +710,7 @@ module Spree
536
710
 
537
711
  env.calculators.tax_rates = %w[
538
712
  Spree::Calculator::DefaultTax
713
+ Spree::Calculator::FlatFee
539
714
  ]
540
715
 
541
716
  env.payment_methods = %w[
@@ -545,32 +720,6 @@ module Spree
545
720
  Spree::PaymentMethod::Check
546
721
  ]
547
722
 
548
- env.promotions.rules = %w[
549
- Spree::Promotion::Rules::ItemTotal
550
- Spree::Promotion::Rules::Product
551
- Spree::Promotion::Rules::User
552
- Spree::Promotion::Rules::FirstOrder
553
- Spree::Promotion::Rules::UserLoggedIn
554
- Spree::Promotion::Rules::OneUsePerUser
555
- Spree::Promotion::Rules::Taxon
556
- Spree::Promotion::Rules::NthOrder
557
- Spree::Promotion::Rules::OptionValue
558
- Spree::Promotion::Rules::FirstRepeatPurchaseSince
559
- Spree::Promotion::Rules::UserRole
560
- Spree::Promotion::Rules::Store
561
- ]
562
-
563
- env.promotions.actions = %w[
564
- Spree::Promotion::Actions::CreateAdjustment
565
- Spree::Promotion::Actions::CreateItemAdjustments
566
- Spree::Promotion::Actions::CreateQuantityAdjustments
567
- Spree::Promotion::Actions::FreeShipping
568
- ]
569
-
570
- env.promotions.shipping_actions = %w[
571
- Spree::Promotion::Actions::FreeShipping
572
- ]
573
-
574
723
  env.stock_splitters = %w[
575
724
  Spree::Stock::Splitter::ShippingCategory
576
725
  Spree::Stock::Splitter::Backordered
data/lib/spree/bus.rb ADDED
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'omnes'
4
+
5
+ module Spree
6
+ # Global [Omnes](https://github.com/nebulab/omnes) bus.
7
+ #
8
+ # This is used for internal events, while host applications are also able to
9
+ # use it.
10
+ Bus = Omnes::Bus.new
11
+ end
@@ -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,71 +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 :try_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(try_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
- # proxy method to *possible* spree_current_user method
57
- # Authentication extensions (such as spree_auth_devise) are meant to provide spree_current_user
58
- def try_spree_current_user
59
- # This one will be defined by apps looking to hook into Spree
60
- # As per authentication_helpers.rb
61
- if respond_to?(:spree_current_user, true)
62
- spree_current_user
63
- # This one will be defined by Devise
64
- elsif respond_to?(:current_spree_user, true)
65
- current_spree_user
66
- end
67
- end
68
- end
69
- end
70
- end
71
- 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
+ )