solidus_core 3.0.0 → 4.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (444) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -2
  3. data/Rakefile +7 -2
  4. data/app/assets/images/logo/solidus.svg +18 -1
  5. data/app/assets/images/logo/solidus_logo.png +0 -0
  6. data/app/controllers/spree/base_controller.rb +1 -3
  7. data/app/helpers/spree/base_helper.rb +3 -3
  8. data/app/helpers/spree/core/controller_helpers/auth.rb +66 -0
  9. data/app/helpers/spree/core/controller_helpers/common.rb +82 -0
  10. data/app/helpers/spree/core/controller_helpers/order.rb +86 -0
  11. data/app/helpers/spree/core/controller_helpers/payment_parameters.rb +165 -0
  12. data/{lib/spree/core/controller_helpers/current_host.rb → app/helpers/spree/core/controller_helpers/pricing.rb} +6 -4
  13. data/app/helpers/spree/core/controller_helpers/search.rb +16 -0
  14. data/app/helpers/spree/core/controller_helpers/store.rb +19 -0
  15. data/app/helpers/spree/core/controller_helpers/strong_parameters.rb +74 -0
  16. data/app/helpers/spree/products_helper.rb +2 -2
  17. data/app/mailers/spree/base_mailer.rb +1 -1
  18. data/app/mailers/spree/carton_mailer.rb +1 -1
  19. data/app/mailers/spree/order_mailer.rb +3 -3
  20. data/app/mailers/spree/reimbursement_mailer.rb +1 -1
  21. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +30 -11
  22. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +1 -1
  23. data/app/models/concerns/spree/active_storage_adapter.rb +1 -18
  24. data/app/models/concerns/spree/default_price.rb +30 -10
  25. data/app/models/concerns/spree/display_money.rb +1 -1
  26. data/app/models/concerns/spree/metadata.rb +64 -0
  27. data/app/models/concerns/spree/named_type.rb +2 -0
  28. data/app/models/concerns/spree/ordered_property_value_list.rb +2 -2
  29. data/app/models/concerns/spree/ransackable_attributes.rb +9 -5
  30. data/app/models/concerns/spree/user_address_book.rb +19 -10
  31. data/app/models/concerns/spree/user_methods.rb +40 -6
  32. data/app/models/spree/address.rb +11 -9
  33. data/app/models/spree/adjustment.rb +15 -76
  34. data/app/models/spree/adjustment_reason.rb +2 -0
  35. data/app/models/spree/calculator/flat_fee.rb +21 -0
  36. data/app/models/spree/calculator/returns/default_refund_amount.rb +1 -1
  37. data/app/models/spree/carton.rb +3 -3
  38. data/app/models/spree/core/state_machines/inventory_unit.rb +42 -0
  39. data/app/models/spree/core/state_machines/order/class_methods.rb +217 -0
  40. data/app/models/spree/core/state_machines/order.rb +42 -0
  41. data/app/models/spree/core/state_machines/payment.rb +61 -0
  42. data/app/models/spree/core/state_machines/reimbursement.rb +33 -0
  43. data/app/models/spree/core/state_machines/return_authorization.rb +32 -0
  44. data/app/models/spree/core/state_machines/return_item/acceptance_status.rb +51 -0
  45. data/app/models/spree/core/state_machines/return_item/reception_status.rb +42 -0
  46. data/app/models/spree/core/state_machines/shipment.rb +58 -0
  47. data/app/models/spree/country.rb +1 -1
  48. data/app/models/spree/credit_card.rb +13 -10
  49. data/app/models/spree/customer_return.rb +6 -3
  50. data/app/models/spree/deprecated_configurable_class.rb +40 -0
  51. data/app/models/spree/fulfilment_changer.rb +56 -29
  52. data/app/models/spree/image/active_storage_attachment.rb +2 -7
  53. data/app/models/spree/image/paperclip_attachment.rb +2 -2
  54. data/app/models/spree/inventory_unit.rb +2 -2
  55. data/app/models/spree/item_total.rb +28 -0
  56. data/app/models/spree/legacy_user.rb +1 -0
  57. data/app/models/spree/line_item.rb +26 -8
  58. data/app/models/spree/log_entry.rb +98 -1
  59. data/app/models/spree/money.rb +120 -0
  60. data/app/models/spree/null_promotion_adjuster.rb +13 -0
  61. data/app/models/spree/null_promotion_advertiser.rb +9 -0
  62. data/app/models/spree/null_promotion_finder.rb +9 -0
  63. data/app/models/spree/null_promotion_handler.rb +44 -0
  64. data/app/models/spree/option_type.rb +1 -1
  65. data/app/models/spree/option_value.rb +4 -3
  66. data/app/models/spree/order/number_generator.rb +7 -1
  67. data/app/models/spree/order.rb +143 -96
  68. data/app/models/spree/order_cancellations.rb +8 -8
  69. data/app/models/spree/order_inventory.rb +7 -5
  70. data/app/models/spree/order_merger.rb +5 -7
  71. data/app/models/spree/order_mutex.rb +2 -2
  72. data/app/models/spree/order_shipping.rb +15 -19
  73. data/app/models/spree/order_taxation.rb +7 -4
  74. data/app/models/spree/order_update_attributes.rb +3 -1
  75. data/app/models/spree/order_updater.rb +25 -63
  76. data/app/models/spree/payment/processing.rb +60 -57
  77. data/app/models/spree/payment.rb +14 -27
  78. data/app/models/spree/payment_create.rb +1 -1
  79. data/app/models/spree/payment_method/bogus_credit_card.rb +18 -14
  80. data/app/models/spree/payment_method/credit_card.rb +0 -4
  81. data/app/models/spree/payment_method/simple_bogus_credit_card.rb +18 -4
  82. data/app/models/spree/payment_method/store_credit.rb +1 -1
  83. data/app/models/spree/payment_method.rb +29 -10
  84. data/app/models/spree/payment_source.rb +5 -1
  85. data/app/models/spree/permission_set.rb +11 -0
  86. data/app/models/spree/permission_sets/base.rb +45 -0
  87. data/app/models/spree/permission_sets/configuration_display.rb +53 -0
  88. data/app/models/spree/permission_sets/configuration_management.rb +52 -0
  89. data/app/models/spree/permission_sets/dashboard_display.rb +28 -0
  90. data/app/models/spree/permission_sets/default_customer.rb +83 -0
  91. data/app/models/spree/permission_sets/order_display.rb +50 -0
  92. data/app/models/spree/permission_sets/order_management.rb +50 -0
  93. data/app/models/spree/permission_sets/product_display.rb +43 -0
  94. data/app/models/spree/permission_sets/product_management.rb +47 -0
  95. data/app/models/spree/permission_sets/restricted_stock_display.rb +33 -0
  96. data/app/models/spree/permission_sets/restricted_stock_management.rb +33 -0
  97. data/app/models/spree/permission_sets/stock_display.rb +26 -0
  98. data/app/models/spree/permission_sets/stock_management.rb +26 -0
  99. data/app/models/spree/permission_sets/super_user.rb +26 -0
  100. data/app/models/spree/permission_sets/user_display.rb +27 -0
  101. data/app/models/spree/permission_sets/user_management.rb +44 -0
  102. data/app/models/spree/preference.rb +1 -1
  103. data/app/models/spree/price.rb +3 -3
  104. data/app/models/spree/product/scopes.rb +23 -10
  105. data/app/models/spree/product.rb +30 -23
  106. data/app/models/spree/product_property.rb +1 -1
  107. data/app/models/spree/property.rb +1 -1
  108. data/app/models/spree/refund.rb +13 -3
  109. data/app/models/spree/refund_reason.rb +6 -1
  110. data/app/models/spree/reimbursement.rb +6 -6
  111. data/app/models/spree/reimbursement_performer.rb +3 -3
  112. data/app/models/spree/reimbursement_tax_calculator.rb +3 -3
  113. data/app/models/spree/reimbursement_type/credit.rb +1 -1
  114. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +6 -6
  115. data/app/models/spree/reimbursement_type/store_credit.rb +1 -1
  116. data/app/models/spree/reimbursement_type.rb +6 -1
  117. data/app/models/spree/return_authorization.rb +3 -1
  118. data/app/models/spree/return_item.rb +13 -15
  119. data/app/models/spree/return_reason.rb +6 -1
  120. data/app/models/spree/role.rb +3 -1
  121. data/app/models/spree/role_permission.rb +8 -0
  122. data/app/models/spree/shipment.rb +12 -10
  123. data/app/models/spree/shipping_category.rb +2 -0
  124. data/app/models/spree/shipping_rate.rb +2 -3
  125. data/app/models/spree/shipping_rate_tax.rb +1 -1
  126. data/app/models/spree/{order_contents.rb → simple_order_contents.rb} +10 -13
  127. data/app/models/spree/state.rb +1 -1
  128. data/app/models/spree/stock/allocator/on_hand_first.rb +2 -2
  129. data/app/models/spree/stock/availability.rb +11 -3
  130. data/app/models/spree/stock/estimator.rb +1 -1
  131. data/app/models/spree/stock/inventory_unit_builder.rb +1 -1
  132. data/app/models/spree/stock/package.rb +2 -2
  133. data/app/models/spree/stock/quantifier.rb +12 -8
  134. data/app/models/spree/stock/simple_coordinator.rb +38 -28
  135. data/app/models/spree/stock/splitter/shipping_category.rb +1 -1
  136. data/app/models/spree/stock_item.rb +2 -1
  137. data/app/models/spree/stock_location.rb +7 -7
  138. data/app/models/spree/stock_movement.rb +2 -2
  139. data/app/models/spree/store.rb +3 -1
  140. data/app/models/spree/store_credit.rb +31 -16
  141. data/app/models/spree/store_credit_event.rb +4 -3
  142. data/app/models/spree/store_credit_prioritizer.rb +17 -0
  143. data/app/models/spree/store_credit_reason.rb +6 -1
  144. data/app/models/spree/store_selector/by_server_name.rb +1 -1
  145. data/app/models/spree/tax/item_tax.rb +3 -2
  146. data/app/models/spree/tax/order_tax.rb +3 -1
  147. data/app/models/spree/tax/tax_helpers.rb +14 -3
  148. data/app/models/spree/tax/tax_location.rb +4 -7
  149. data/app/models/spree/tax_calculator/default.rb +32 -1
  150. data/app/models/spree/tax_calculator/shipping_rate.rb +2 -2
  151. data/app/models/spree/tax_category.rb +3 -1
  152. data/app/models/spree/tax_rate.rb +14 -1
  153. data/app/models/spree/taxon/active_storage_attachment.rb +2 -2
  154. data/app/models/spree/taxon/paperclip_attachment.rb +4 -4
  155. data/app/models/spree/taxon.rb +25 -3
  156. data/app/models/spree/taxon_brand_selector.rb +22 -0
  157. data/app/models/spree/taxonomy.rb +4 -3
  158. data/app/models/spree/unauthorized_redirect_handler.rb +24 -0
  159. data/app/models/spree/unit_cancel.rb +1 -2
  160. data/app/models/spree/user_address.rb +9 -3
  161. data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +1 -1
  162. data/app/models/spree/variant/price_selector.rb +25 -8
  163. data/app/models/spree/variant/scopes.rb +4 -0
  164. data/app/models/spree/variant/vat_price_generator.rb +1 -1
  165. data/app/models/spree/variant.rb +64 -37
  166. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +4 -4
  167. data/app/models/spree/wallet.rb +2 -2
  168. data/app/models/spree/zone.rb +1 -1
  169. data/app/subscribers/spree/order_mailer_subscriber.rb +35 -0
  170. data/app/views/layouts/spree/base_mailer.html.erb +2 -2
  171. data/app/views/spree/order_mailer/cancel_email.html.erb +1 -1
  172. data/app/views/spree/order_mailer/cancel_email.text.erb +1 -1
  173. data/app/views/spree/order_mailer/confirm_email.html.erb +5 -5
  174. data/app/views/spree/order_mailer/confirm_email.text.erb +5 -5
  175. data/app/views/spree/order_mailer/inventory_cancellation_email.html.erb +0 -1
  176. data/config/i18n-tasks.yml +134 -0
  177. data/config/locales/en.yml +439 -338
  178. data/db/default/spree/permission_sets.rb +10 -0
  179. data/db/default/spree/return_reasons.rb +3 -1
  180. data/db/default/spree/states.rb +2 -2
  181. data/db/migrate/20160101010000_solidus_one_four.rb +0 -127
  182. data/db/migrate/20180710170104_create_spree_store_credit_reasons_table.rb +2 -2
  183. data/db/migrate/20201127212108_add_type_before_removal_to_spree_payment_methods.rb +7 -0
  184. data/db/migrate/20210312061050_change_column_null_on_prices.rb +7 -0
  185. data/db/migrate/20210815004823_add_unique_index_to_option_values_variants.rb +16 -0
  186. data/db/migrate/20220419170826_remove_archived_user_addresses.rb +12 -0
  187. data/db/migrate/20220805202442_add_level_to_spree_tax_rates.rb +5 -0
  188. data/db/migrate/20221123152807_add_shipping_category_to_spree_variants.rb +5 -0
  189. data/db/migrate/20230321161854_change_column_null_option_values_option_type_id.rb +5 -0
  190. data/db/migrate/20230425103509_remove_taxon_position.rb +5 -0
  191. data/db/migrate/20230427095534_drop_deprecated_address_id_from_shipments.rb +11 -0
  192. data/db/migrate/20240821173254_create_spree_permission_sets_in_core.rb +9 -0
  193. data/db/migrate/20240821173341_create_spree_roles_permissions_in_core.rb +9 -0
  194. data/db/migrate/20240821173641_add_description_to_spree_roles.rb +5 -0
  195. data/db/migrate/20240904152041_add_privilege_and_category_to_spree_permission_sets.rb +6 -0
  196. data/db/migrate/20250129061658_add_metadata_to_spree_resources.rb +28 -0
  197. data/db/migrate/20250201172950_add_gtin_and_condition_to_spree_variant.rb +6 -0
  198. data/db/migrate/20250207104016_add_primary_taxon_to_products.rb +7 -0
  199. data/db/migrate/20250221152004_add_metadata_to_users.rb +13 -0
  200. data/db/seeds.rb +5 -1
  201. data/lib/generators/solidus/install/app_templates/authentication/custom.rb +16 -0
  202. data/lib/generators/solidus/install/app_templates/authentication/devise.rb +16 -0
  203. data/lib/generators/solidus/install/app_templates/authentication/existing.rb +10 -0
  204. data/lib/generators/solidus/install/app_templates/authentication/none.rb +1 -0
  205. data/lib/generators/solidus/install/app_templates/frontend/none.rb +1 -0
  206. data/lib/generators/solidus/install/app_templates/frontend/starter.rb +1 -0
  207. data/lib/generators/solidus/install/app_templates/payment_method/braintree.rb +5 -0
  208. data/lib/generators/solidus/install/app_templates/payment_method/none.rb +1 -0
  209. data/lib/generators/solidus/install/app_templates/payment_method/paypal.rb +5 -0
  210. data/lib/generators/solidus/install/app_templates/payment_method/stripe.rb +5 -0
  211. data/lib/generators/solidus/install/install_generator.rb +210 -156
  212. data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +27 -33
  213. data/lib/generators/solidus/install/templates/vendor/assets/javascripts/spree/backend/all.js +2 -2
  214. data/lib/generators/solidus/update/templates/config/initializers/new_solidus_defaults.rb.tt +30 -0
  215. data/lib/generators/solidus/update/update_generator.rb +124 -0
  216. data/lib/generators/spree/custom_user/custom_user_generator.rb +6 -4
  217. data/lib/generators/spree/custom_user/templates/authentication_helpers.rb.tt +2 -6
  218. data/lib/generators/spree/custom_user/templates/migration.rb.tt +7 -3
  219. data/lib/generators/spree/dummy/dummy_generator.rb +12 -9
  220. data/lib/generators/spree/dummy/templates/rails/application.rb.tt +1 -2
  221. data/lib/generators/spree/dummy/templates/rails/database.yml +48 -63
  222. data/lib/generators/spree/dummy/templates/rails/manifest.js +3 -0
  223. data/lib/generators/spree/dummy/templates/rails/test.rb +7 -2
  224. data/lib/spree/app_configuration.rb +220 -71
  225. data/lib/spree/bus.rb +11 -0
  226. data/lib/spree/core/class_constantizer.rb +2 -2
  227. data/lib/spree/core/controller_helpers/auth.rb +5 -69
  228. data/lib/spree/core/controller_helpers/common.rb +5 -80
  229. data/lib/spree/core/controller_helpers/order.rb +5 -86
  230. data/lib/spree/core/controller_helpers/payment_parameters.rb +5 -165
  231. data/lib/spree/core/controller_helpers/pricing.rb +5 -17
  232. data/lib/spree/core/controller_helpers/search.rb +5 -14
  233. data/lib/spree/core/controller_helpers/store.rb +5 -17
  234. data/lib/spree/core/controller_helpers/strong_parameters.rb +5 -71
  235. data/lib/spree/core/engine.rb +49 -16
  236. data/lib/spree/core/environment/calculators.rb +35 -3
  237. data/lib/spree/core/environment/promotions.rb +25 -4
  238. data/lib/spree/core/environment_extension.rb +16 -2
  239. data/lib/spree/core/importer/order.rb +6 -6
  240. data/lib/spree/core/importer/product.rb +3 -3
  241. data/lib/spree/core/nested_class_set.rb +28 -0
  242. data/lib/spree/core/null_promotion_configuration.rb +84 -0
  243. data/lib/spree/core/product_duplicator.rb +1 -1
  244. data/lib/spree/core/product_filters.rb +2 -2
  245. data/lib/spree/core/search/base.rb +18 -9
  246. data/lib/spree/core/search/variant.rb +2 -2
  247. data/lib/spree/core/state_machines/inventory_unit.rb +5 -40
  248. data/lib/spree/core/state_machines/order.rb +5 -247
  249. data/lib/spree/core/state_machines/payment.rb +5 -59
  250. data/lib/spree/core/state_machines/reimbursement.rb +5 -31
  251. data/lib/spree/core/state_machines/return_authorization.rb +5 -30
  252. data/lib/spree/core/state_machines/return_item/acceptance_status.rb +5 -49
  253. data/lib/spree/core/state_machines/return_item/reception_status.rb +5 -40
  254. data/lib/spree/core/state_machines/shipment.rb +5 -56
  255. data/lib/spree/core/state_machines.rb +48 -81
  256. data/lib/spree/core/stock_configuration.rb +18 -0
  257. data/lib/spree/core/validators/email.rb +2 -4
  258. data/lib/spree/core/version.rb +5 -1
  259. data/lib/spree/core/versioned_value.rb +75 -0
  260. data/lib/spree/core.rb +40 -16
  261. data/lib/spree/deprecated_instance_variable_proxy.rb +57 -0
  262. data/lib/spree/deprecation.rb +3 -51
  263. data/lib/spree/deprecator.rb +9 -0
  264. data/lib/spree/i18n.rb +1 -1
  265. data/lib/spree/mailer_previews/carton_preview.rb +1 -1
  266. data/lib/spree/migration_helpers.rb +3 -3
  267. data/lib/spree/migrations.rb +13 -11
  268. data/lib/spree/money.rb +5 -118
  269. data/lib/spree/permission_sets/base.rb +5 -30
  270. data/lib/spree/permission_sets/configuration_display.rb +5 -23
  271. data/lib/spree/permission_sets/configuration_management.rb +5 -23
  272. data/lib/spree/permission_sets/dashboard_display.rb +5 -9
  273. data/lib/spree/permission_sets/default_customer.rb +5 -35
  274. data/lib/spree/permission_sets/order_display.rb +5 -19
  275. data/lib/spree/permission_sets/order_management.rb +5 -20
  276. data/lib/spree/permission_sets/product_display.rb +5 -17
  277. data/lib/spree/permission_sets/product_management.rb +5 -19
  278. data/lib/spree/permission_sets/restricted_stock_display.rb +5 -16
  279. data/lib/spree/permission_sets/restricted_stock_management.rb +5 -16
  280. data/lib/spree/permission_sets/stock_display.rb +5 -10
  281. data/lib/spree/permission_sets/stock_management.rb +5 -10
  282. data/lib/spree/permission_sets/super_user.rb +5 -9
  283. data/lib/spree/permission_sets/user_display.rb +5 -11
  284. data/lib/spree/permission_sets/user_management.rb +5 -23
  285. data/lib/spree/permission_sets.rb +5 -18
  286. data/lib/spree/permitted_attributes.rb +35 -14
  287. data/lib/spree/preferences/configuration.rb +88 -0
  288. data/lib/spree/preferences/persistable.rb +7 -1
  289. data/lib/spree/preferences/preferable.rb +13 -0
  290. data/lib/spree/preferences/preferable_class_methods.rb +12 -4
  291. data/lib/spree/preferences/preference_differentiator.rb +29 -0
  292. data/lib/spree/preferences/static_model_preferences.rb +25 -10
  293. data/lib/spree/preferences/store.rb +2 -2
  294. data/lib/spree/testing_support/blacklist_urls.rb +1 -1
  295. data/lib/spree/testing_support/bus_helpers.rb +101 -0
  296. data/lib/spree/testing_support/capybara_ext.rb +11 -1
  297. data/lib/spree/testing_support/common_rake.rb +76 -23
  298. data/lib/spree/testing_support/dummy_ability.rb +7 -0
  299. data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/backend/all.js +1 -1
  300. data/lib/spree/testing_support/dummy_app/assets/stylesheets/solidus_admin/tailwind.css +1 -0
  301. data/lib/spree/testing_support/dummy_app/database.yml +39 -28
  302. data/lib/spree/testing_support/dummy_app/migrations.rb +8 -15
  303. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +3 -10
  304. data/lib/spree/testing_support/dummy_app.rb +71 -42
  305. data/lib/spree/testing_support/extension_rake.rb +2 -2
  306. data/lib/spree/testing_support/factories/address_factory.rb +9 -13
  307. data/lib/spree/testing_support/factories/adjustment_factory.rb +1 -13
  308. data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +0 -5
  309. data/lib/spree/testing_support/factories/calculator_factory.rb +4 -10
  310. data/lib/spree/testing_support/factories/carton_factory.rb +2 -10
  311. data/lib/spree/testing_support/factories/country_factory.rb +1 -7
  312. data/lib/spree/testing_support/factories/credit_card_factory.rb +0 -5
  313. data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -11
  314. data/lib/spree/testing_support/factories/image_factory.rb +0 -5
  315. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +4 -14
  316. data/lib/spree/testing_support/factories/line_item_factory.rb +0 -8
  317. data/lib/spree/testing_support/factories/option_type_factory.rb +0 -8
  318. data/lib/spree/testing_support/factories/option_value_factory.rb +0 -5
  319. data/lib/spree/testing_support/factories/order_factory.rb +19 -38
  320. data/lib/spree/testing_support/factories/payment_factory.rb +0 -10
  321. data/lib/spree/testing_support/factories/payment_method_factory.rb +0 -5
  322. data/lib/spree/testing_support/factories/price_factory.rb +0 -7
  323. data/lib/spree/testing_support/factories/product_factory.rb +5 -13
  324. data/lib/spree/testing_support/factories/product_option_type_factory.rb +0 -8
  325. data/lib/spree/testing_support/factories/product_property_factory.rb +0 -8
  326. data/lib/spree/testing_support/factories/property_factory.rb +0 -5
  327. data/lib/spree/testing_support/factories/refund_factory.rb +0 -8
  328. data/lib/spree/testing_support/factories/refund_reason_factory.rb +0 -5
  329. data/lib/spree/testing_support/factories/reimbursement_factory.rb +0 -7
  330. data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +0 -5
  331. data/lib/spree/testing_support/factories/return_authorization_factory.rb +0 -9
  332. data/lib/spree/testing_support/factories/return_item_factory.rb +0 -9
  333. data/lib/spree/testing_support/factories/return_reason_factory.rb +0 -5
  334. data/lib/spree/testing_support/factories/role_factory.rb +0 -5
  335. data/lib/spree/testing_support/factories/shipment_factory.rb +1 -11
  336. data/lib/spree/testing_support/factories/shipping_category_factory.rb +0 -5
  337. data/lib/spree/testing_support/factories/shipping_method_factory.rb +0 -9
  338. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +0 -8
  339. data/lib/spree/testing_support/factories/state_factory.rb +8 -10
  340. data/lib/spree/testing_support/factories/stock_item_factory.rb +5 -9
  341. data/lib/spree/testing_support/factories/stock_location_factory.rb +0 -9
  342. data/lib/spree/testing_support/factories/stock_movement_factory.rb +0 -7
  343. data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -9
  344. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +0 -5
  345. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +0 -8
  346. data/lib/spree/testing_support/factories/store_credit_factory.rb +4 -13
  347. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +0 -5
  348. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +0 -5
  349. data/lib/spree/testing_support/factories/store_factory.rb +0 -5
  350. data/lib/spree/testing_support/factories/tax_category_factory.rb +0 -8
  351. data/lib/spree/testing_support/factories/tax_rate_factory.rb +0 -9
  352. data/lib/spree/testing_support/factories/taxon_factory.rb +5 -10
  353. data/lib/spree/testing_support/factories/taxonomy_factory.rb +3 -6
  354. data/lib/spree/testing_support/factories/user_factory.rb +6 -9
  355. data/lib/spree/testing_support/factories/variant_factory.rb +0 -10
  356. data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +0 -8
  357. data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +0 -9
  358. data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +0 -8
  359. data/lib/spree/testing_support/factories/zone_factory.rb +1 -9
  360. data/lib/spree/testing_support/factory_bot.rb +6 -29
  361. data/lib/spree/testing_support/flaky.rb +22 -0
  362. data/lib/spree/testing_support/order_walkthrough.rb +7 -6
  363. data/lib/spree/testing_support/sequences.rb +0 -5
  364. data/lib/spree/testing_support/shared_examples/calculator.rb +10 -0
  365. data/lib/spree/testing_support/shared_examples/order_factory.rb +141 -0
  366. data/lib/spree/testing_support/shared_examples/working_factory.rb +15 -0
  367. data/lib/spree/testing_support/silence_deprecations.rb +9 -0
  368. data/lib/spree/user_class_handle.rb +2 -2
  369. data/lib/tasks/colorado_delivery_fee.rake +28 -0
  370. data/lib/tasks/payment_method.rake +29 -0
  371. data/lib/tasks/solidus/delete_prices_with_nil_amount.rake +8 -0
  372. data/solidus_core.gemspec +18 -8
  373. metadata +233 -117
  374. data/app/jobs/spree/promotion_code_batch_job.rb +0 -26
  375. data/app/mailers/spree/promotion_code_batch_mailer.rb +0 -15
  376. data/app/models/spree/calculator/distributed_amount.rb +0 -33
  377. data/app/models/spree/calculator/flat_percent_item_total.rb +0 -23
  378. data/app/models/spree/calculator/flexi_rate.rb +0 -22
  379. data/app/models/spree/calculator/percent_on_line_item.rb +0 -13
  380. data/app/models/spree/calculator/tiered_flat_rate.rb +0 -52
  381. data/app/models/spree/calculator/tiered_percent.rb +0 -62
  382. data/app/models/spree/line_item_action.rb +0 -8
  383. data/app/models/spree/order_promotion.rb +0 -27
  384. data/app/models/spree/promotion/actions/create_adjustment.rb +0 -77
  385. data/app/models/spree/promotion/actions/create_item_adjustments.rb +0 -99
  386. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +0 -139
  387. data/app/models/spree/promotion/actions/free_shipping.rb +0 -58
  388. data/app/models/spree/promotion/rules/first_order.rb +0 -38
  389. data/app/models/spree/promotion/rules/first_repeat_purchase_since.rb +0 -36
  390. data/app/models/spree/promotion/rules/item_total.rb +0 -53
  391. data/app/models/spree/promotion/rules/nth_order.rb +0 -45
  392. data/app/models/spree/promotion/rules/one_use_per_user.rb +0 -25
  393. data/app/models/spree/promotion/rules/option_value.rb +0 -50
  394. data/app/models/spree/promotion/rules/product.rb +0 -74
  395. data/app/models/spree/promotion/rules/store.rb +0 -22
  396. data/app/models/spree/promotion/rules/taxon.rb +0 -87
  397. data/app/models/spree/promotion/rules/user.rb +0 -30
  398. data/app/models/spree/promotion/rules/user_logged_in.rb +0 -20
  399. data/app/models/spree/promotion/rules/user_role.rb +0 -45
  400. data/app/models/spree/promotion.rb +0 -284
  401. data/app/models/spree/promotion_action.rb +0 -43
  402. data/app/models/spree/promotion_category.rb +0 -8
  403. data/app/models/spree/promotion_chooser.rb +0 -34
  404. data/app/models/spree/promotion_code/batch_builder.rb +0 -64
  405. data/app/models/spree/promotion_code.rb +0 -50
  406. data/app/models/spree/promotion_code_batch.rb +0 -27
  407. data/app/models/spree/promotion_handler/cart.rb +0 -55
  408. data/app/models/spree/promotion_handler/coupon.rb +0 -123
  409. data/app/models/spree/promotion_handler/page.rb +0 -26
  410. data/app/models/spree/promotion_handler/shipping.rb +0 -61
  411. data/app/models/spree/promotion_rule.rb +0 -55
  412. data/app/models/spree/promotion_rule_role.rb +0 -8
  413. data/app/models/spree/promotion_rule_store.rb +0 -10
  414. data/app/models/spree/promotion_rule_taxon.rb +0 -8
  415. data/app/models/spree/promotion_rule_user.rb +0 -10
  416. data/app/models/spree/tax/shipping_rate_taxer.rb +0 -24
  417. data/app/subscribers/spree/mailer_subscriber.rb +0 -25
  418. data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_errored.text.erb +0 -2
  419. data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_finished.text.erb +0 -2
  420. data/db/migrate/20161017102621_create_spree_promotion_code_batch.rb +0 -38
  421. data/db/migrate/20180202190713_create_promotion_rule_stores.rb +0 -12
  422. data/db/migrate/20180328172631_add_join_characters_to_promotion_code_batch.rb +0 -11
  423. data/db/migrate/20190106184413_remove_code_from_spree_promotions.rb +0 -42
  424. data/lib/generators/solidus/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -10
  425. data/lib/generators/solidus/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -9
  426. data/lib/generators/spree/dummy/templates/rails/script/rails +0 -6
  427. data/lib/solidus/migrations/promotions_with_code_handlers.rb +0 -66
  428. data/lib/spree/event/adapters/active_support_notifications.rb +0 -67
  429. data/lib/spree/event/configuration.rb +0 -25
  430. data/lib/spree/event/subscriber.rb +0 -86
  431. data/lib/spree/event/subscriber_registry.rb +0 -94
  432. data/lib/spree/event.rb +0 -119
  433. data/lib/spree/permission_sets/promotion_display.rb +0 -15
  434. data/lib/spree/permission_sets/promotion_management.rb +0 -15
  435. data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/frontend/all.js +0 -10
  436. data/lib/spree/testing_support/dummy_app/assets/stylesheets/spree/frontend/all.css +0 -9
  437. data/lib/spree/testing_support/dummy_app/views/layouts/application.html.erb +0 -1
  438. data/lib/spree/testing_support/factories/order_promotion_factory.rb +0 -16
  439. data/lib/spree/testing_support/factories/promotion_category_factory.rb +0 -12
  440. data/lib/spree/testing_support/factories/promotion_code_factory.rb +0 -16
  441. data/lib/spree/testing_support/factories/promotion_factory.rb +0 -92
  442. data/lib/spree/testing_support/factories.rb +0 -11
  443. data/lib/spree/testing_support.rb +0 -31
  444. data/lib/tasks/upgrade.rake +0 -15
@@ -1,51 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Spree
4
- module Core
5
- class StateMachines
6
- module ReturnItem
7
- # Return Items' acceptance status state machine
8
- #
9
- # for each event the following instance methods are dynamically implemented:
10
- # #<event_name>
11
- # #<event_name>!
12
- # #can_<event_name>?
13
- #
14
- # for each state the following instance methods are implemented:
15
- # #<state_name>?
16
- #
17
- module AcceptanceStatus
18
- extend ActiveSupport::Concern
19
-
20
- included do
21
- state_machine :acceptance_status, initial: :pending do
22
- event :attempt_accept do
23
- transition to: :accepted, from: :accepted
24
- transition to: :accepted, from: :pending, if: ->(return_item) { return_item.eligible_for_return? }
25
- transition to: :manual_intervention_required, from: :pending, if: ->(return_item) { return_item.requires_manual_intervention? }
26
- transition to: :rejected, from: :pending
27
- end
28
-
29
- # bypasses eligibility checks
30
- event :accept do
31
- transition to: :accepted, from: [:accepted, :pending, :manual_intervention_required]
32
- end
33
-
34
- # bypasses eligibility checks
35
- event :reject do
36
- transition to: :rejected, from: [:accepted, :pending, :manual_intervention_required]
37
- end
38
-
39
- # bypasses eligibility checks
40
- event :require_manual_intervention do
41
- transition to: :manual_intervention_required, from: [:accepted, :pending, :manual_intervention_required]
42
- end
43
-
44
- after_transition any => any, do: :persist_acceptance_status_errors
45
- end
46
- end
47
- end
48
- end
49
- end
50
- end
51
- 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,42 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Spree
4
- module Core
5
- class StateMachines
6
- module ReturnItem
7
- # Return Items' reception status state machine
8
- #
9
- # for each event the following instance methods are dynamically implemented:
10
- # #<event_name>
11
- # #<event_name>!
12
- # #can_<event_name>?
13
- #
14
- # for each state the following instance methods are implemented:
15
- # #<state_name>?
16
- #
17
- module ReceptionStatus
18
- extend ActiveSupport::Concern
19
-
20
- included do
21
- state_machine :reception_status, initial: :awaiting do
22
- after_transition to: ::Spree::ReturnItem::COMPLETED_RECEPTION_STATUSES, do: :attempt_accept, if: :can_attempt_accept?
23
- after_transition to: ::Spree::ReturnItem::COMPLETED_RECEPTION_STATUSES, do: :check_unexchange
24
- after_transition to: :received, do: :process_inventory_unit!
25
-
26
- event(:cancel) { transition to: :cancelled, from: :awaiting }
27
-
28
- event(:receive) { transition to: :received, from: ::Spree::ReturnItem::INTERMEDIATE_RECEPTION_STATUSES + [:awaiting] }
29
- event(:unexchange) { transition to: :unexchanged, from: [:awaiting] }
30
- event(:give) { transition to: :given_to_customer, from: :awaiting }
31
- event(:lost) { transition to: :lost_in_transit, from: :awaiting }
32
- event(:wrong_item_shipped) { transition to: :shipped_wrong_item, from: :awaiting }
33
- event(:short_shipped) { transition to: :short_shipped, from: :awaiting }
34
- event(:in_transit) { transition to: :in_transit, from: :awaiting }
35
- event(:expired) { transition to: :expired, from: :awaiting }
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end
42
- 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,58 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Spree
4
- module Core
5
- class StateMachines
6
- # Shipments' state machine
7
- #
8
- # for each event the following instance methods are dynamically implemented:
9
- # #<event_name>
10
- # #<event_name>!
11
- # #can_<event_name>?
12
- #
13
- # for each state the following instance methods are implemented:
14
- # #<state_name>?
15
- #
16
- module Shipment
17
- extend ActiveSupport::Concern
18
-
19
- included do
20
- state_machine initial: :pending, use_transactions: false do
21
- event :ready do
22
- transition from: :pending, to: :shipped, if: :can_transition_from_pending_to_shipped?
23
- transition from: :pending, to: :ready, if: :can_transition_from_pending_to_ready?
24
- end
25
-
26
- event :pend do
27
- transition from: :ready, to: :pending
28
- end
29
-
30
- event :ship do
31
- transition from: [:ready, :canceled], to: :shipped
32
- end
33
- after_transition to: :shipped, do: :after_ship
34
-
35
- event :cancel do
36
- transition to: :canceled, from: [:pending, :ready]
37
- end
38
- after_transition to: :canceled, do: :after_cancel
39
-
40
- event :resume do
41
- transition from: :canceled, to: :ready, if: :can_transition_from_canceled_to_ready?
42
- transition from: :canceled, to: :pending
43
- end
44
- after_transition from: :canceled, to: [:pending, :ready, :shipped], do: :after_resume
45
-
46
- after_transition do |shipment, transition|
47
- shipment.state_changes.create!(
48
- previous_state: transition.from,
49
- next_state: transition.to,
50
- name: 'shipment'
51
- )
52
- end
53
- end
54
- end
55
- end
56
- end
57
- end
58
- 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
+ )
@@ -2,87 +2,54 @@
2
2
 
3
3
  module Spree
4
4
  module Core
5
- class StateMachines
6
- attr_writer :reimbursement,
7
- :return_authorization,
8
- :return_item_acceptance,
9
- :return_item_reception,
10
- :payment,
11
- :inventory_unit,
12
- :shipment,
13
- :order
14
-
15
- def return_authorization
16
- @return_authorization ||= begin
17
- require 'spree/core/state_machines/return_authorization'
18
- 'Spree::Core::StateMachines::ReturnAuthorization'
19
- end
20
-
21
- @return_authorization.constantize
22
- end
23
-
24
- def return_item_reception
25
- @return_item_reception_status ||= begin
26
- require 'spree/core/state_machines/return_item/reception_status'
27
- 'Spree::Core::StateMachines::ReturnItem::ReceptionStatus'
28
- end
29
-
30
- @return_item_reception_status.constantize
31
- end
32
-
33
- def return_item_acceptance
34
- @return_item_acceptance_status ||= begin
35
- require 'spree/core/state_machines/return_item/acceptance_status'
36
- 'Spree::Core::StateMachines::ReturnItem::AcceptanceStatus'
37
- end
38
-
39
- @return_item_acceptance_status.constantize
40
- end
41
-
42
- def payment
43
- @payment ||= begin
44
- require 'spree/core/state_machines/payment'
45
- 'Spree::Core::StateMachines::Payment'
46
- end
47
-
48
- @payment.constantize
49
- end
50
-
51
- def inventory_unit
52
- @inventory_unit ||= begin
53
- require 'spree/core/state_machines/inventory_unit'
54
- 'Spree::Core::StateMachines::InventoryUnit'
55
- end
56
-
57
- @inventory_unit.constantize
58
- end
59
-
60
- def shipment
61
- @shipment ||= begin
62
- require 'spree/core/state_machines/shipment'
63
- 'Spree::Core::StateMachines::Shipment'
64
- end
65
-
66
- @shipment.constantize
67
- end
68
-
69
- def order
70
- @order ||= begin
71
- require 'spree/core/state_machines/order'
72
- 'Spree::Core::StateMachines::Order'
73
- end
74
-
75
- @order.constantize
76
- end
77
-
78
- def reimbursement
79
- @reimbursement ||= begin
80
- require 'spree/core/state_machines/reimbursement'
81
- 'Spree::Core::StateMachines::Reimbursement'
82
- end
83
-
84
- @reimbursement.constantize
85
- end
5
+ class StateMachines < Spree::Preferences::Configuration
6
+ # State Machine module for Reimbursements
7
+ #
8
+ # @!attribute [rw] reimbursement
9
+ # @return [Module] a module that implements the state machine for the `Spree::Reimbursement` model.
10
+ class_name_attribute :reimbursement, default: "Spree::Core::StateMachines::Reimbursement"
11
+
12
+ # State Machine module for Return Authorizations
13
+ #
14
+ # @!attribute [rw] return_authorization
15
+ # @return [Module] a module that implements the state machine for the `Spree::ReturnAuthorization` model.
16
+ class_name_attribute :return_authorization, default: "Spree::Core::StateMachines::ReturnAuthorization"
17
+
18
+ # State Machine module for Return Item Acceptances
19
+ #
20
+ # @!attribute [rw] return_item_acceptance
21
+ # @return [Module] a module that implements the acceptance part of the state machine for the `Spree::ReturnItem` model.
22
+ class_name_attribute :return_item_acceptance, default: "Spree::Core::StateMachines::ReturnItem::AcceptanceStatus"
23
+
24
+ # State Machine module for Return Item Receptions
25
+ #
26
+ # @!attribute [rw] return_item_reception
27
+ # @return [Module] a module that implements the reception part of the state machine for the `Spree::ReturnItem` model.
28
+ class_name_attribute :return_item_reception, default: "Spree::Core::StateMachines::ReturnItem::ReceptionStatus"
29
+
30
+ # State Machine module for Payments
31
+ #
32
+ # @!attribute [rw] payment
33
+ # @return [Module] a module that implements the state machine for the `Spree::Payment` model.
34
+ class_name_attribute :payment, default: "Spree::Core::StateMachines::Payment"
35
+
36
+ # State Machine module for Inventory Units
37
+ #
38
+ # @!attribute [rw] inventory_unit
39
+ # @return [Module] a module that implements the state machine for the `Spree::InventoryUnit` model.
40
+ class_name_attribute :inventory_unit, default: "Spree::Core::StateMachines::InventoryUnit"
41
+
42
+ # State Machine module for Shipments
43
+ #
44
+ # @!attribute [rw] shipment
45
+ # @return [Module] a module that implements the state machine for the `Spree::Shipment` model.
46
+ class_name_attribute :shipment, default: "Spree::Core::StateMachines::Shipment"
47
+
48
+ # State Machine module for Orders
49
+ #
50
+ # @!attribute [rw] order
51
+ # @return [Module] a module that implements the state machine for the `Spree::Order` model.
52
+ class_name_attribute :order, default: "Spree::Core::StateMachines::Order"
86
53
  end
87
54
  end
88
55
  end
@@ -8,6 +8,9 @@ module Spree
8
8
  attr_writer :location_filter_class
9
9
  attr_writer :location_sorter_class
10
10
  attr_writer :allocator_class
11
+ attr_writer :inventory_unit_builder_class
12
+ attr_writer :availability_validator_class
13
+ attr_writer :inventory_validator_class
11
14
 
12
15
  def coordinator_class
13
16
  @coordinator_class ||= '::Spree::Stock::SimpleCoordinator'
@@ -33,6 +36,21 @@ module Spree
33
36
  @allocator_class ||= '::Spree::Stock::Allocator::OnHandFirst'
34
37
  @allocator_class.constantize
35
38
  end
39
+
40
+ def inventory_unit_builder_class
41
+ @inventory_unit_builder_class ||= '::Spree::Stock::InventoryUnitBuilder'
42
+ @inventory_unit_builder_class.constantize
43
+ end
44
+
45
+ def availability_validator_class
46
+ @availability_validator_class ||= '::Spree::Stock::AvailabilityValidator'
47
+ @availability_validator_class.constantize
48
+ end
49
+
50
+ def inventory_validator_class
51
+ @inventory_validator_class ||= '::Spree::Stock::InventoryValidator'
52
+ @inventory_validator_class.constantize
53
+ end
36
54
  end
37
55
  end
38
56
  end
@@ -12,11 +12,9 @@ module Spree
12
12
  # end
13
13
  #
14
14
  class EmailValidator < ActiveModel::EachValidator
15
- EMAIL_REGEXP = /\A([^@\.]|[^@\.]([^@\s]*)[^@\.])@([^@\s]+\.)+[^@\s]+\z/
16
-
17
15
  def validate_each(record, attribute, value)
18
- unless EMAIL_REGEXP.match? value
19
- record.errors.add(attribute, :invalid, { value: value }.merge!(options))
16
+ unless Spree::Config.default_email_regexp.match? value
17
+ record.errors.add(attribute, :invalid, **{ value: }.merge!(options))
20
18
  end
21
19
  end
22
20
  end
@@ -1,12 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Spree
4
- VERSION = "3.0.0"
4
+ VERSION = "4.5.1"
5
5
 
6
6
  def self.solidus_version
7
7
  VERSION
8
8
  end
9
9
 
10
+ def self.previous_solidus_minor_version
11
+ '4.4'
12
+ end
13
+
10
14
  def self.solidus_gem_version
11
15
  Gem::Version.new(solidus_version)
12
16
  end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Core
5
+ # Wrapper for a value that can be different depending on the Solidus version
6
+ #
7
+ # Some configuration defaults can be added or changed when a new Solidus
8
+ # version is released. This class encapsulates getting the correct value for a
9
+ # given Solidus version.
10
+ #
11
+ # The way it works is you provide an initial value in time, plus the version
12
+ # boundary where it got changed. Then you can fetch the value providing the
13
+ # desired Solidus version:
14
+ #
15
+ # @example
16
+ # value = VersionedValue.new(true, "3.0.0" => false)
17
+ # value.call("2.7.0") # => true
18
+ # value.call("3.0.0") # => false
19
+ # value.call("3.1.0") # => false
20
+ #
21
+ # Remember that you must provide the exact boundary when a value got changed,
22
+ # which could easily be during a pre-release:
23
+ #
24
+ # @example
25
+ # value = VersionedValue.new(true, "3.0.0" => false)
26
+ # value.call("3.0.0.alpha") # => true
27
+ #
28
+ # value = VersionedValue.new(true, "3.0.0.alpha" => false)
29
+ # value.call("3.0.0.alpha") # => false
30
+ #
31
+ # Multiple boundaries can also be provided:
32
+ #
33
+ # @example
34
+ # value = VersionedValue.new(0, "2.0.0" => 1, "3.0.0" => 2)
35
+ # value.call("1.0.0") # => 0
36
+ # value.call("2.1.0") # => 1
37
+ # value.call("3.0.0") # => 2
38
+ class VersionedValue
39
+ attr_reader :boundaries
40
+
41
+ # @param initial_value [Any]
42
+ # @param boundary [Hash<String, Any>] Map from version number to new value
43
+ def initialize(initial_value, boundaries = {})
44
+ @boundaries = Hash[
45
+ { '0' => initial_value }
46
+ .merge(boundaries)
47
+ .transform_keys { |version| to_gem_version(version) }
48
+ .sort
49
+ ]
50
+ end
51
+
52
+ # @param solidus_version [String]
53
+ def call(solidus_version = Spree.solidus_version)
54
+ solidus_version = to_gem_version(solidus_version)
55
+ boundaries.fetch(
56
+ boundaries
57
+ .keys
58
+ .reduce do |target, following|
59
+ if target <= solidus_version && solidus_version < following
60
+ target
61
+ else
62
+ following
63
+ end
64
+ end
65
+ )
66
+ end
67
+
68
+ private
69
+
70
+ def to_gem_version(string)
71
+ Gem::Version.new(string)
72
+ end
73
+ end
74
+ end
75
+ end
data/lib/spree/core.rb CHANGED
@@ -9,25 +9,27 @@ require "active_record/railtie"
9
9
  require "active_storage/engine"
10
10
  require "sprockets/railtie"
11
11
 
12
+ require 'active_support/deprecation'
13
+ require 'spree/deprecated_instance_variable_proxy'
14
+ require 'spree/deprecator'
12
15
  require 'acts_as_list'
13
16
  require 'awesome_nested_set'
14
17
  require 'cancan'
15
18
  require 'friendly_id'
16
19
  require 'kaminari/activerecord'
17
- require 'mail'
18
20
  require 'monetize'
19
21
  require 'paperclip'
20
22
  require 'ransack'
21
23
  require 'state_machines-activerecord'
22
24
 
23
- require 'spree/deprecation'
24
-
25
25
  # This is required because ActiveModel::Validations#invalid? conflicts with the
26
26
  # invalid state of a Payment. In the future this should be removed.
27
27
  StateMachines::Machine.ignore_method_conflicts = true
28
28
 
29
29
  module Spree
30
- mattr_accessor :user_class
30
+ autoload :Deprecation, 'spree/deprecation'
31
+
32
+ mattr_accessor :user_class, default: 'Spree::LegacyUser'
31
33
 
32
34
  def self.user_class
33
35
  if @@user_class.is_a?(Class)
@@ -37,6 +39,20 @@ module Spree
37
39
  end
38
40
  end
39
41
 
42
+ def self.user_class_name
43
+ @@user_class
44
+ end
45
+
46
+ # Load the same version defaults for all available Solidus components
47
+ #
48
+ # @see Spree::Preferences::Configuration#load_defaults
49
+ def self.load_defaults(version)
50
+ Spree::Config.load_defaults(version)
51
+ Spree::Frontend::Config.load_defaults(version) if defined?(Spree::Frontend::Config)
52
+ Spree::Backend::Config.load_defaults(version) if defined?(Spree::Backend::Config)
53
+ Spree::Api::Config.load_defaults(version) if defined?(Spree::Api::Config)
54
+ end
55
+
40
56
  # Used to configure Spree.
41
57
  #
42
58
  # Example:
@@ -52,6 +68,24 @@ module Spree
52
68
  end
53
69
 
54
70
  module Core
71
+ # @api private
72
+ def self.has_install_generator_been_run?(rails_paths: Rails.application.paths, initializer_name: 'spree.rb', dummy_app_name: 'DummyApp::Application')
73
+ does_spree_initializer_exist?(rails_paths, initializer_name) ||
74
+ running_solidus_test_suite_with_dummy_app?(dummy_app_name)
75
+ end
76
+
77
+ def self.running_solidus_test_suite_with_dummy_app?(dummy_app_name)
78
+ Rails.env.test? && Rails.application.class.name == dummy_app_name
79
+ end
80
+ private_class_method :running_solidus_test_suite_with_dummy_app?
81
+
82
+ def self.does_spree_initializer_exist?(rails_paths, initializer_name)
83
+ rails_paths['config/initializers'].any? do |path|
84
+ File.exist?(Pathname.new(path).join(initializer_name))
85
+ end
86
+ end
87
+ private_class_method :does_spree_initializer_exist?
88
+
55
89
  class GatewayError < RuntimeError; end
56
90
  end
57
91
  end
@@ -66,31 +100,21 @@ require 'spree/core/environment/promotions'
66
100
  require 'spree/core/environment'
67
101
  require 'spree/migrations'
68
102
  require 'spree/migration_helpers'
69
- require 'spree/event'
103
+ require 'spree/bus'
70
104
  require 'spree/core/engine'
71
105
 
72
106
  require 'spree/i18n'
73
107
  require 'spree/localized_number'
74
- require 'spree/money'
75
108
  require 'spree/permitted_attributes'
76
109
 
77
110
  require 'spree/core/importer'
78
111
  require 'spree/core/permalinks'
79
112
  require 'spree/core/product_duplicator'
80
- require 'spree/core/controller_helpers/auth'
81
- require 'spree/core/controller_helpers/common'
82
- require 'spree/core/controller_helpers/current_host'
83
- require 'spree/core/controller_helpers/order'
84
- require 'spree/core/controller_helpers/payment_parameters'
85
- require 'spree/core/controller_helpers/pricing'
86
- require 'spree/core/controller_helpers/search'
87
- require 'spree/core/controller_helpers/store'
88
- require 'spree/core/controller_helpers/strong_parameters'
89
113
  require 'spree/core/role_configuration'
90
114
  require 'spree/core/state_machines'
91
115
  require 'spree/core/stock_configuration'
116
+ require 'spree/core/null_promotion_configuration'
92
117
  require 'spree/core/validators/email'
93
- require 'spree/permission_sets'
94
118
  require 'spree/user_class_handle'
95
119
 
96
120
  require 'spree/preferences/store'
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/deprecation'
4
+
5
+ module Spree
6
+ # This DeprecatedInstanceVariableProxy transforms instance variable to
7
+ # deprecated instance variable.
8
+ #
9
+ # It differs from ActiveSupport::DeprecatedInstanceVariableProxy since
10
+ # it allows to define a custom message.
11
+ #
12
+ # class Example
13
+ # def initialize(deprecator)
14
+ # @request = Spree::DeprecatedInstanceVariableProxy.new(self, :request, :@request, deprecator, "Please, do not use this thing.")
15
+ # @_request = :a_request
16
+ # end
17
+ #
18
+ # def request
19
+ # @_request
20
+ # end
21
+ #
22
+ # def old_request
23
+ # @request
24
+ # end
25
+ # end
26
+ #
27
+ # When someone execute any method on @request variable this will trigger
28
+ # +warn+ method on +deprecator_instance+ and will fetch <tt>@_request</tt>
29
+ # variable via +request+ method and execute the same method on non-proxy
30
+ # instance variable.
31
+ #
32
+ # Default deprecator is <tt>Spree.deprecator</tt>.
33
+ class DeprecatedInstanceVariableProxy < ActiveSupport::Deprecation::DeprecationProxy
34
+ def initialize(instance, method_or_var, var = "@#{method}", deprecator = Spree.deprecator, message = nil)
35
+ @instance = instance
36
+ @method_or_var = method_or_var
37
+ @var = var
38
+ @deprecator = deprecator
39
+ @message = message
40
+ end
41
+
42
+ private
43
+
44
+ def target
45
+ return @instance.instance_variable_get(@method_or_var) if @instance.instance_variable_defined?(@method_or_var)
46
+
47
+ @instance.__send__(@method_or_var)
48
+ end
49
+
50
+ def warn(callstack, called, args)
51
+ message = @message || "#{@var} is deprecated! Call #{@method_or_var}.#{called} instead of #{@var}.#{called}."
52
+ message = [message, "Args: #{args.inspect}"].join(" ") unless args.empty?
53
+
54
+ @deprecator.warn(message, callstack)
55
+ end
56
+ end
57
+ end
@@ -1,57 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_support/deprecation'
3
+ require 'spree/core'
4
4
 
5
5
  module Spree
6
- Deprecation = ActiveSupport::Deprecation.new('4.0', 'Solidus')
6
+ Deprecation = Spree.deprecator
7
7
 
8
- # This DeprecatedInstanceVariableProxy transforms instance variable to
9
- # deprecated instance variable.
10
- #
11
- # It differs from ActiveSupport::DeprecatedInstanceVariableProxy since
12
- # it allows to define a custom message.
13
- #
14
- # class Example
15
- # def initialize(deprecator)
16
- # @request = Spree::DeprecatedInstanceVariableProxy.new(self, :request, :@request, deprecator, "Please, do not use this thing.")
17
- # @_request = :a_request
18
- # end
19
- #
20
- # def request
21
- # @_request
22
- # end
23
- #
24
- # def old_request
25
- # @request
26
- # end
27
- # end
28
- #
29
- # When someone execute any method on @request variable this will trigger
30
- # +warn+ method on +deprecator_instance+ and will fetch <tt>@_request</tt>
31
- # variable via +request+ method and execute the same method on non-proxy
32
- # instance variable.
33
- #
34
- # Default deprecator is <tt>Spree::Deprecation</tt>.
35
- class DeprecatedInstanceVariableProxy < ActiveSupport::Deprecation::DeprecationProxy
36
- def initialize(instance, method, var = "@#{method}", deprecator = Spree::Deprecation, message = nil)
37
- @instance = instance
38
- @method = method
39
- @var = var
40
- @deprecator = deprecator
41
- @message = message
42
- end
43
-
44
- private
45
-
46
- def target
47
- @instance.__send__(@method)
48
- end
49
-
50
- def warn(callstack, called, args)
51
- message = @message || "#{@var} is deprecated! Call #{@method}.#{called} instead of #{@var}.#{called}."
52
- message = [message, "Args: #{args.inspect}"].join(" ")
53
-
54
- @deprecator.warn(message, callstack)
55
- end
56
- end
8
+ Spree.deprecator.warn "Spree::Deprecation is deprecated. Please use Spree.deprecator instead.", caller(2)
57
9
  end