solidus_core 2.10.3 → 2.11.4

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.

Potentially problematic release.


This version of solidus_core might be problematic. Click here for more details.

Files changed (552) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree.js.erb +31 -2
  3. data/app/controllers/spree/base_controller.rb +1 -0
  4. data/app/mailers/spree/base_mailer.rb +4 -0
  5. data/app/mailers/spree/order_mailer.rb +1 -1
  6. data/app/models/concerns/spree/active_storage_adapter.rb +116 -0
  7. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +69 -0
  8. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
  9. data/app/models/concerns/spree/default_price.rb +1 -1
  10. data/app/models/concerns/spree/soft_deletable.rb +18 -0
  11. data/app/models/concerns/spree/user_address_book.rb +86 -32
  12. data/app/models/concerns/spree/user_methods.rb +3 -2
  13. data/app/models/spree/ability.rb +34 -10
  14. data/app/models/spree/address.rb +94 -17
  15. data/app/models/spree/address/name.rb +49 -0
  16. data/app/models/spree/address/state_validator.rb +71 -0
  17. data/app/models/spree/adjustment.rb +1 -1
  18. data/app/models/spree/base.rb +2 -2
  19. data/app/models/spree/calculator.rb +4 -4
  20. data/app/models/spree/calculator/default_tax.rb +1 -1
  21. data/app/models/spree/calculator/free_shipping.rb +1 -0
  22. data/app/models/spree/calculator/percent_per_item.rb +6 -4
  23. data/app/models/spree/calculator/price_sack.rb +2 -1
  24. data/app/models/spree/credit_card.rb +2 -2
  25. data/app/models/spree/customer_return.rb +4 -2
  26. data/app/models/spree/exchange.rb +1 -1
  27. data/app/models/spree/image/active_storage_attachment.rb +21 -0
  28. data/app/models/spree/inventory_unit.rb +1 -1
  29. data/app/models/spree/line_item.rb +13 -4
  30. data/app/models/spree/option_type.rb +1 -1
  31. data/app/models/spree/option_value.rb +2 -2
  32. data/app/models/spree/order.rb +91 -20
  33. data/app/models/spree/order/checkout.rb +1 -0
  34. data/app/models/spree/order/payments.rb +2 -2
  35. data/app/models/spree/order_inventory.rb +16 -4
  36. data/app/models/spree/order_merger.rb +6 -4
  37. data/app/models/spree/order_promotion.rb +1 -1
  38. data/app/models/spree/order_updater.rb +11 -10
  39. data/app/models/spree/payment.rb +3 -3
  40. data/app/models/spree/payment/cancellation.rb +3 -22
  41. data/app/models/spree/payment/processing.rb +54 -30
  42. data/app/models/spree/payment_method.rb +8 -9
  43. data/app/models/spree/payment_source.rb +2 -2
  44. data/app/models/spree/preference.rb +1 -1
  45. data/app/models/spree/price.rb +2 -8
  46. data/app/models/spree/product.rb +19 -14
  47. data/app/models/spree/product/scopes.rb +9 -5
  48. data/app/models/spree/promotion.rb +18 -7
  49. data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
  50. data/app/models/spree/promotion_action.rb +1 -7
  51. data/app/models/spree/promotion_code.rb +6 -1
  52. data/app/models/spree/promotion_code_batch.rb +1 -1
  53. data/app/models/spree/promotion_handler/coupon.rb +2 -2
  54. data/app/models/spree/promotion_rule.rb +1 -1
  55. data/app/models/spree/promotion_rule_role.rb +1 -1
  56. data/app/models/spree/refund.rb +60 -12
  57. data/app/models/spree/reimbursement.rb +27 -0
  58. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +10 -3
  59. data/app/models/spree/return_authorization.rb +1 -1
  60. data/app/models/spree/return_item.rb +21 -10
  61. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
  62. data/app/models/spree/role.rb +1 -1
  63. data/app/models/spree/shipment.rb +2 -2
  64. data/app/models/spree/shipping_calculator.rb +1 -1
  65. data/app/models/spree/shipping_manifest.rb +2 -2
  66. data/app/models/spree/shipping_method.rb +2 -9
  67. data/app/models/spree/shipping_rate.rb +1 -1
  68. data/app/models/spree/shipping_rate_tax.rb +1 -1
  69. data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
  70. data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
  71. data/app/models/spree/stock/package.rb +1 -1
  72. data/app/models/spree/stock/simple_coordinator.rb +1 -3
  73. data/app/models/spree/stock_item.rb +2 -8
  74. data/app/models/spree/stock_movement.rb +2 -0
  75. data/app/models/spree/store.rb +1 -1
  76. data/app/models/spree/store_credit.rb +1 -7
  77. data/app/models/spree/store_credit_category.rb +30 -3
  78. data/app/models/spree/store_credit_event.rb +1 -7
  79. data/app/models/spree/store_credit_reason.rb +0 -4
  80. data/app/models/spree/tax/tax_helpers.rb +1 -1
  81. data/app/models/spree/tax_category.rb +2 -8
  82. data/app/models/spree/tax_rate.rb +7 -7
  83. data/app/models/spree/taxon.rb +1 -1
  84. data/app/models/spree/taxon/active_storage_attachment.rb +19 -0
  85. data/app/models/spree/user_address.rb +8 -2
  86. data/app/models/spree/variant.rb +7 -13
  87. data/app/models/spree/variant_property_rule.rb +5 -1
  88. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +8 -3
  89. data/app/models/spree/zone.rb +1 -1
  90. data/config/locales/en.yml +44 -5
  91. data/db/default/spree/countries.rb +1 -1
  92. data/db/default/spree/states.rb +12 -4
  93. data/db/default/spree/store_credit.rb +2 -2
  94. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
  95. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
  96. data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
  97. data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
  98. data/lib/generators/solidus/install/install_generator.rb +253 -0
  99. data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +36 -5
  100. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
  101. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
  102. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
  103. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
  104. data/lib/generators/spree/dummy/templates/rails/test.rb +1 -1
  105. data/lib/generators/spree/install/install_generator.rb +7 -189
  106. data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
  107. data/lib/spree/app_configuration.rb +117 -51
  108. data/lib/spree/awesome_nested_set_override.rb +44 -0
  109. data/lib/spree/core.rb +6 -11
  110. data/lib/spree/core/controller_helpers/auth.rb +17 -4
  111. data/lib/spree/core/controller_helpers/current_host.rb +17 -0
  112. data/lib/spree/core/controller_helpers/order.rb +8 -7
  113. data/lib/spree/core/engine.rb +39 -2
  114. data/lib/spree/core/importer/order.rb +24 -10
  115. data/lib/spree/core/permalinks.rb +1 -3
  116. data/lib/spree/core/product_filters.rb +6 -5
  117. data/lib/spree/core/state_machines.rb +20 -1
  118. data/lib/spree/core/state_machines/order.rb +249 -0
  119. data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
  120. data/lib/spree/core/version.rb +1 -1
  121. data/lib/spree/encryptor.rb +25 -0
  122. data/lib/spree/event.rb +40 -7
  123. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  124. data/lib/spree/event/configuration.rb +11 -6
  125. data/lib/spree/event/subscriber.rb +38 -18
  126. data/lib/spree/event/subscriber_registry.rb +92 -0
  127. data/lib/spree/i18n.rb +1 -1
  128. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  129. data/lib/spree/paranoia_deprecations.rb +32 -12
  130. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  131. data/lib/spree/permission_sets/default_customer.rb +16 -16
  132. data/lib/spree/permission_sets/order_display.rb +11 -11
  133. data/lib/spree/permission_sets/order_management.rb +1 -1
  134. data/lib/spree/permission_sets/product_display.rb +9 -9
  135. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  136. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  137. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  138. data/lib/spree/permission_sets/stock_display.rb +2 -2
  139. data/lib/spree/permission_sets/stock_management.rb +1 -1
  140. data/lib/spree/permission_sets/user_display.rb +3 -3
  141. data/lib/spree/permission_sets/user_management.rb +4 -3
  142. data/lib/spree/permitted_attributes.rb +9 -8
  143. data/lib/spree/preferences/preferable.rb +4 -3
  144. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  145. data/lib/spree/testing_support.rb +40 -0
  146. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  147. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  148. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  149. data/lib/spree/testing_support/capybara_ext.rb +3 -0
  150. data/lib/spree/testing_support/common_rake.rb +3 -3
  151. data/lib/spree/testing_support/dummy_app.rb +44 -23
  152. data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
  153. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
  154. data/lib/spree/testing_support/factories.rb +2 -4
  155. data/lib/spree/testing_support/factories/address_factory.rb +3 -4
  156. data/lib/spree/testing_support/factories/adjustment_factory.rb +2 -5
  157. data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +3 -0
  158. data/lib/spree/testing_support/factories/calculator_factory.rb +3 -0
  159. data/lib/spree/testing_support/factories/carton_factory.rb +2 -2
  160. data/lib/spree/testing_support/factories/country_factory.rb +3 -0
  161. data/lib/spree/testing_support/factories/credit_card_factory.rb +3 -0
  162. data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -3
  163. data/lib/spree/testing_support/factories/image_factory.rb +4 -1
  164. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +2 -4
  165. data/lib/spree/testing_support/factories/line_item_factory.rb +2 -2
  166. data/lib/spree/testing_support/factories/option_type_factory.rb +3 -0
  167. data/lib/spree/testing_support/factories/option_value_factory.rb +3 -0
  168. data/lib/spree/testing_support/factories/order_factory.rb +2 -6
  169. data/lib/spree/testing_support/factories/order_promotion_factory.rb +2 -2
  170. data/lib/spree/testing_support/factories/payment_factory.rb +2 -4
  171. data/lib/spree/testing_support/factories/payment_method_factory.rb +3 -0
  172. data/lib/spree/testing_support/factories/price_factory.rb +2 -1
  173. data/lib/spree/testing_support/factories/product_factory.rb +2 -5
  174. data/lib/spree/testing_support/factories/product_option_type_factory.rb +2 -2
  175. data/lib/spree/testing_support/factories/product_property_factory.rb +2 -2
  176. data/lib/spree/testing_support/factories/promotion_category_factory.rb +3 -0
  177. data/lib/spree/testing_support/factories/promotion_code_factory.rb +2 -2
  178. data/lib/spree/testing_support/factories/promotion_factory.rb +8 -2
  179. data/lib/spree/testing_support/factories/property_factory.rb +3 -0
  180. data/lib/spree/testing_support/factories/refund_factory.rb +3 -2
  181. data/lib/spree/testing_support/factories/refund_reason_factory.rb +3 -0
  182. data/lib/spree/testing_support/factories/reimbursement_factory.rb +3 -2
  183. data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +3 -0
  184. data/lib/spree/testing_support/factories/return_authorization_factory.rb +2 -3
  185. data/lib/spree/testing_support/factories/return_item_factory.rb +2 -4
  186. data/lib/spree/testing_support/factories/return_reason_factory.rb +3 -0
  187. data/lib/spree/testing_support/factories/role_factory.rb +3 -0
  188. data/lib/spree/testing_support/factories/shipment_factory.rb +2 -3
  189. data/lib/spree/testing_support/factories/shipping_category_factory.rb +3 -0
  190. data/lib/spree/testing_support/factories/shipping_method_factory.rb +2 -3
  191. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +2 -2
  192. data/lib/spree/testing_support/factories/state_factory.rb +2 -1
  193. data/lib/spree/testing_support/factories/stock_item_factory.rb +2 -2
  194. data/lib/spree/testing_support/factories/stock_location_factory.rb +2 -3
  195. data/lib/spree/testing_support/factories/stock_movement_factory.rb +2 -1
  196. data/lib/spree/testing_support/factories/stock_package_factory.rb +2 -2
  197. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +11 -0
  198. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +3 -2
  199. data/lib/spree/testing_support/factories/store_credit_factory.rb +2 -3
  200. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +6 -1
  201. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +3 -0
  202. data/lib/spree/testing_support/factories/store_factory.rb +4 -1
  203. data/lib/spree/testing_support/factories/tax_category_factory.rb +2 -1
  204. data/lib/spree/testing_support/factories/tax_rate_factory.rb +2 -3
  205. data/lib/spree/testing_support/factories/taxon_factory.rb +6 -1
  206. data/lib/spree/testing_support/factories/taxonomy_factory.rb +3 -0
  207. data/lib/spree/testing_support/factories/user_factory.rb +2 -3
  208. data/lib/spree/testing_support/factories/variant_factory.rb +2 -4
  209. data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +2 -2
  210. data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +2 -3
  211. data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +2 -2
  212. data/lib/spree/testing_support/factories/zone_factory.rb +3 -3
  213. data/lib/spree/testing_support/fixtures/blank.jpg +0 -0
  214. data/lib/spree/testing_support/job_helpers.rb +24 -0
  215. data/lib/spree/testing_support/order_walkthrough.rb +1 -1
  216. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  217. data/lib/spree/testing_support/preferences.rb +3 -1
  218. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  219. data/lib/spree/testing_support/translations.rb +25 -0
  220. data/{app/models → lib}/spree/user_class_handle.rb +0 -0
  221. data/lib/tasks/email.rake +3 -2
  222. data/solidus_core.gemspec +8 -5
  223. metadata +97 -374
  224. data/script/rails +0 -10
  225. data/spec/fixtures/thinking-cat.jpg +0 -0
  226. data/spec/helpers/base_helper_spec.rb +0 -168
  227. data/spec/helpers/products_helper_spec.rb +0 -202
  228. data/spec/helpers/taxons_helper_spec.rb +0 -43
  229. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  230. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  231. data/spec/lib/i18n_spec.rb +0 -97
  232. data/spec/lib/search/base_spec.rb +0 -91
  233. data/spec/lib/search/variant_spec.rb +0 -115
  234. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  235. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  236. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  237. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  238. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  239. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  240. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  241. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  242. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -48
  243. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  244. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  245. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  246. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  247. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
  248. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  249. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  250. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  251. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  252. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  253. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  254. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  255. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  256. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  257. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  258. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  259. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  260. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  261. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  262. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  263. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  264. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  265. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  266. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  267. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  268. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  269. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  270. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  271. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  272. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  273. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  274. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  275. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  276. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  277. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  278. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  279. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  280. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  281. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  282. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  283. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  284. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  285. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  286. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  287. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  288. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  289. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  290. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  291. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  292. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  293. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  294. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  295. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  296. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  297. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  298. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  299. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  300. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  301. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  302. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  303. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  304. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  305. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  306. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  307. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  308. data/spec/lib/spree/core/version_spec.rb +0 -19
  309. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  310. data/spec/lib/spree/event_spec.rb +0 -130
  311. data/spec/lib/spree/localized_number_spec.rb +0 -45
  312. data/spec/lib/spree/migrations_spec.rb +0 -32
  313. data/spec/lib/spree/money_spec.rb +0 -298
  314. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  315. data/spec/lib/spree/permitted_attributes_spec.rb +0 -41
  316. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  317. data/spec/lib/tasks/dummy_task.rake +0 -12
  318. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  319. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  320. data/spec/mailers/carton_mailer_spec.rb +0 -44
  321. data/spec/mailers/order_mailer_spec.rb +0 -117
  322. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  323. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  324. data/spec/mailers/test_mailer_spec.rb +0 -13
  325. data/spec/models/spree/ability_spec.rb +0 -279
  326. data/spec/models/spree/address_spec.rb +0 -399
  327. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  328. data/spec/models/spree/adjustment_spec.rb +0 -339
  329. data/spec/models/spree/asset_spec.rb +0 -25
  330. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  331. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  332. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  333. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  334. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  335. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  336. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  337. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  338. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  339. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  340. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  341. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  342. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  343. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  344. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
  345. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  346. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  347. data/spec/models/spree/calculator_spec.rb +0 -43
  348. data/spec/models/spree/carton_spec.rb +0 -145
  349. data/spec/models/spree/classification_spec.rb +0 -126
  350. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  351. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  352. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  353. data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
  354. data/spec/models/spree/country_spec.rb +0 -154
  355. data/spec/models/spree/credit_card_spec.rb +0 -373
  356. data/spec/models/spree/customer_return_spec.rb +0 -294
  357. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  358. data/spec/models/spree/exchange_spec.rb +0 -76
  359. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  360. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  361. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  362. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  363. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  364. data/spec/models/spree/gateway_spec.rb +0 -14
  365. data/spec/models/spree/image_spec.rb +0 -25
  366. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  367. data/spec/models/spree/line_item_spec.rb +0 -240
  368. data/spec/models/spree/option_type_spec.rb +0 -16
  369. data/spec/models/spree/option_value_spec.rb +0 -52
  370. data/spec/models/spree/order/address_spec.rb +0 -52
  371. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  372. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  373. data/spec/models/spree/order/checkout_spec.rb +0 -740
  374. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  375. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  376. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  377. data/spec/models/spree/order/payment_spec.rb +0 -280
  378. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  379. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  380. data/spec/models/spree/order/totals_spec.rb +0 -26
  381. data/spec/models/spree/order/validations_spec.rb +0 -17
  382. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  383. data/spec/models/spree/order_capturing_spec.rb +0 -16
  384. data/spec/models/spree/order_contents_spec.rb +0 -362
  385. data/spec/models/spree/order_inventory_spec.rb +0 -285
  386. data/spec/models/spree/order_merger_spec.rb +0 -162
  387. data/spec/models/spree/order_mutex_spec.rb +0 -89
  388. data/spec/models/spree/order_promotion_spec.rb +0 -33
  389. data/spec/models/spree/order_shipping_spec.rb +0 -247
  390. data/spec/models/spree/order_spec.rb +0 -1687
  391. data/spec/models/spree/order_taxation_spec.rb +0 -128
  392. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  393. data/spec/models/spree/order_updater_spec.rb +0 -556
  394. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  395. data/spec/models/spree/payment_create_spec.rb +0 -195
  396. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  397. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  398. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  399. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  400. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  401. data/spec/models/spree/payment_method_spec.rb +0 -408
  402. data/spec/models/spree/payment_spec.rb +0 -1270
  403. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  404. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  405. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  406. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  407. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  408. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  409. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  410. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  411. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  412. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  413. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  414. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  415. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  416. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  417. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  418. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
  419. data/spec/models/spree/preference_spec.rb +0 -79
  420. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  421. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  422. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  423. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  424. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  425. data/spec/models/spree/preferences/store_spec.rb +0 -40
  426. data/spec/models/spree/price_spec.rb +0 -150
  427. data/spec/models/spree/product/scopes_spec.rb +0 -164
  428. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  429. data/spec/models/spree/product_filter_spec.rb +0 -28
  430. data/spec/models/spree/product_property_spec.rb +0 -20
  431. data/spec/models/spree/product_spec.rb +0 -584
  432. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  433. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  434. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  435. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  436. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  437. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  438. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  439. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  440. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  441. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  442. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  443. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  444. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -227
  445. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  446. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  447. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  448. data/spec/models/spree/promotion_action_spec.rb +0 -44
  449. data/spec/models/spree/promotion_category_spec.rb +0 -19
  450. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  451. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  452. data/spec/models/spree/promotion_code_spec.rb +0 -206
  453. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  454. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  455. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  456. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  457. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  458. data/spec/models/spree/promotion_spec.rb +0 -945
  459. data/spec/models/spree/refund_spec.rb +0 -200
  460. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  461. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  462. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  463. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  464. data/spec/models/spree/reimbursement_spec.rb +0 -278
  465. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  466. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  467. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  468. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  469. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  470. data/spec/models/spree/return_authorization_spec.rb +0 -226
  471. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  472. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  473. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  474. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  475. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  476. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  477. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  478. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  479. data/spec/models/spree/return_item_spec.rb +0 -785
  480. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  481. data/spec/models/spree/shipment_spec.rb +0 -914
  482. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  483. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  484. data/spec/models/spree/shipping_method_spec.rb +0 -292
  485. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  486. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  487. data/spec/models/spree/state_spec.rb +0 -43
  488. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  489. data/spec/models/spree/stock/availability_spec.rb +0 -143
  490. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  491. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  492. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  493. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  494. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  495. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  496. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  497. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  498. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  499. data/spec/models/spree/stock/package_spec.rb +0 -182
  500. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  501. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  502. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  503. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  504. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  505. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  506. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  507. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  508. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  509. data/spec/models/spree/stock_item_spec.rb +0 -348
  510. data/spec/models/spree/stock_location_spec.rb +0 -288
  511. data/spec/models/spree/stock_movement_spec.rb +0 -58
  512. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  513. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  514. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  515. data/spec/models/spree/store_credit_spec.rb +0 -900
  516. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  517. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  518. data/spec/models/spree/store_spec.rb +0 -156
  519. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  520. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  521. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  522. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  523. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  524. data/spec/models/spree/tax_category_spec.rb +0 -50
  525. data/spec/models/spree/tax_rate_spec.rb +0 -317
  526. data/spec/models/spree/taxon_spec.rb +0 -197
  527. data/spec/models/spree/taxonomy_spec.rb +0 -15
  528. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
  529. data/spec/models/spree/unit_cancel_spec.rb +0 -126
  530. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
  531. data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
  532. data/spec/models/spree/user_spec.rb +0 -247
  533. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  534. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  535. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  536. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  537. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  538. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  539. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  540. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  541. data/spec/models/spree/variant_spec.rb +0 -862
  542. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  543. data/spec/models/spree/wallet_spec.rb +0 -155
  544. data/spec/models/spree/zone_spec.rb +0 -248
  545. data/spec/rails_helper.rb +0 -46
  546. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  547. data/spec/spec_helper.rb +0 -36
  548. data/spec/support/big_decimal.rb +0 -7
  549. data/spec/support/concerns/default_price.rb +0 -44
  550. data/spec/support/concerns/payment_source.rb +0 -66
  551. data/spec/support/concerns/working_factories.rb +0 -15
  552. data/spec/support/dummy_ability.rb +0 -7
@@ -19,8 +19,8 @@ module Spree
19
19
 
20
20
  included do
21
21
  state_machine :reception_status, initial: :awaiting do
22
- after_transition to: ::Spree::ReturnItem::COMPLETED_RECEPTION_STATUSES, do: :attempt_accept
23
- after_transition to: ::Spree::ReturnItem::COMPLETED_RECEPTION_STATUSES, do: :check_unexchange
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
24
  after_transition to: :received, do: :process_inventory_unit!
25
25
 
26
26
  event(:cancel) { transition to: :cancelled, from: :awaiting }
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Spree
4
- VERSION = "2.10.3"
4
+ VERSION = "2.11.4"
5
5
 
6
6
  def self.solidus_version
7
7
  VERSION
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ # Spree::Encryptor is a thin wrapper around ActiveSupport::MessageEncryptor.
5
+ class Encryptor
6
+ # @param key [String] the 256 bits signature key
7
+ def initialize(key)
8
+ @crypt = ActiveSupport::MessageEncryptor.new(key)
9
+ end
10
+
11
+ # Encrypt a value
12
+ # @param value [String] the value to encrypt
13
+ # @return [String] the encrypted value
14
+ def encrypt(value)
15
+ @crypt.encrypt_and_sign(value)
16
+ end
17
+
18
+ # Decrypt an encrypted value
19
+ # @param encrypted_value [String] the value to decrypt
20
+ # @return [String] the decrypted value
21
+ def decrypt(encrypted_value)
22
+ @crypt.decrypt_and_verify(encrypted_value)
23
+ end
24
+ end
25
+ end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'event/adapters/active_support_notifications'
4
+ require_relative 'event/subscriber_registry'
4
5
  require_relative 'event/configuration'
5
6
  require_relative 'event/subscriber'
6
7
 
@@ -8,6 +9,8 @@ module Spree
8
9
  module Event
9
10
  extend self
10
11
 
12
+ delegate :activate_autoloadable_subscribers, :activate_all_subscribers, :deactivate_all_subscribers, to: :subscriber_registry
13
+
11
14
  # Allows to trigger events that can be subscribed using #subscribe. An
12
15
  # optional block can be passed that will be executed immediately. The
13
16
  # actual code implementation is delegated to the adapter.
@@ -21,16 +24,37 @@ module Spree
21
24
  # @order.finalize!
22
25
  # end
23
26
  def fire(event_name, opts = {})
24
- adapter.fire name_with_suffix(event_name.to_s), opts do
27
+ adapter.fire normalize_name(event_name), opts do
25
28
  yield opts if block_given?
26
29
  end
27
30
  end
28
31
 
32
+ # @deprecated Loads all Solidus' core and application's event subscribers files.
33
+ # The latter are loaded automatically only when the preference
34
+ # Spree::Config.events.autoload_subscribers is set to a truthy value.
35
+ #
36
+ # Files must be placed under the directory `app/subscribers` and their
37
+ # name must end with `_subscriber.rb`.
38
+ #
39
+ # Loading the files has the side effect of adding their module to the
40
+ # list in Spree::Event.subscribers.
41
+ def require_subscriber_files
42
+ Spree::Deprecation.warn("#{self}.require_subscriber_files is deprecated and will be removed in Solidus 3.0.", caller)
43
+ subscriber_registry.send(:require_subscriber_files)
44
+ end
45
+
29
46
  # Subscribe to an event with the given name. The provided block is executed
30
47
  # every time the subscribed event is fired.
31
48
  #
32
- # @param [String] event_name the name of the event. The suffix ".spree"
33
- # will be added automatically if not present
49
+ # @param [String, Regexp] event_name the name of the event.
50
+ # When String, the suffix ".spree" will be added automatically if not present,
51
+ # when using the default adapter for ActiveSupportNotifications.
52
+ # When Regexp, due to the unpredictability of all possible regexp combinations,
53
+ # adding the suffix is developer's responsibility (if you don't, you will
54
+ # subscribe to all notifications, including internal Rails notifications
55
+ # as well).
56
+ #
57
+ # @see Spree::Event::Adapters::ActiveSupportNotifications#normalize_name
34
58
  #
35
59
  # @return a subscription object that can be used as reference in order
36
60
  # to remove the subscription
@@ -43,7 +67,7 @@ module Spree
43
67
  #
44
68
  # @see Spree::Event#unsubscribe
45
69
  def subscribe(event_name, &block)
46
- name = name_with_suffix(event_name)
70
+ name = normalize_name(event_name)
47
71
  listener_names << name
48
72
  adapter.subscribe(name, &block)
49
73
  end
@@ -61,7 +85,7 @@ module Spree
61
85
  # @example Unsubscribe an event by name with explicit prefix
62
86
  # Spree::Event.unsubscribe('order_finalized.spree')
63
87
  def unsubscribe(subscriber)
64
- name_or_subscriber = subscriber.is_a?(String) ? name_with_suffix(subscriber) : subscriber
88
+ name_or_subscriber = subscriber.is_a?(String) ? normalize_name(subscriber) : subscriber
65
89
  adapter.unsubscribe(name_or_subscriber)
66
90
  end
67
91
 
@@ -95,19 +119,28 @@ module Spree
95
119
  #
96
120
  # @see Spree::Event::Configuration#suffix
97
121
  def suffix
122
+ Spree::Deprecation.warn "This method is deprecated and will be removed. Please use Event::Adapters::ActiveSupportNotifications#suffix"
98
123
  Spree::Config.events.suffix
99
124
  end
100
125
 
126
+ # @deprecated
101
127
  # @!attribute [r] subscribers
102
128
  # @return [Array<Spree::Event::Subscriber>] A list of subscribers used to support class reloading for Spree::Event::Subscriber instances
103
129
  def subscribers
130
+ Spree::Deprecation.warn("`#{self}.subscribers` is deprecated. Please use `#{self}.subscriber_registry` instead.", caller)
104
131
  Spree::Config.events.subscribers
105
132
  end
106
133
 
134
+ # @!attribute [r] subscribers
135
+ # @return <Spree::Event::SubscriberRegistry> The registry for supporting class reloading for Spree::Event::Subscriber instances
136
+ def subscriber_registry
137
+ Spree::Config.events.subscriber_registry
138
+ end
139
+
107
140
  private
108
141
 
109
- def name_with_suffix(name)
110
- name.end_with?(suffix) ? name : [name, suffix].join
142
+ def normalize_name(name)
143
+ adapter.normalize_name(name)
111
144
  end
112
145
 
113
146
  def listener_names
@@ -4,6 +4,8 @@ module Spree
4
4
  module Event
5
5
  module Adapters
6
6
  module ActiveSupportNotifications
7
+ class InvalidEventNameType < StandardError; end
8
+
7
9
  extend self
8
10
 
9
11
  def fire(event_name, opts)
@@ -29,6 +31,36 @@ module Spree
29
31
  memo[name] = listeners if listeners.present?
30
32
  end
31
33
  end
34
+
35
+ # Normalizes the event name according to this specific adapter rules.
36
+ # When the event name is a string or a symbol, if the suffix is missing, then
37
+ # it is added automatically.
38
+ # When the event name is a regexp, due to the huge variability of regexps, adding
39
+ # or not the suffix is developer's responsibility (if you don't, you will subscribe
40
+ # to all internal rails events as well).
41
+ # When the event type is not supported, an error is raised.
42
+ #
43
+ # @param [String, Symbol, Regexp] event_name the event name, with or without the
44
+ # suffix (Spree::Config.events.suffix defaults to `.spree`).
45
+ def normalize_name(event_name)
46
+ case event_name
47
+ when Regexp
48
+ event_name
49
+ when String, Symbol
50
+ name = event_name.to_s
51
+ name.end_with?(suffix) ? name : [name, suffix].join
52
+ else
53
+ raise InvalidEventNameType, "Invalid event name type: #{event_name.class}"
54
+ end
55
+ end
56
+
57
+ # The suffix used for namespacing event names, defaults to
58
+ # `.spree`
59
+ #
60
+ # @see Spree::Event::Configuration#suffix
61
+ def suffix
62
+ Spree::Config.events.suffix
63
+ end
32
64
  end
33
65
  end
34
66
  end
@@ -1,17 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spree/core/class_constantizer'
4
-
5
3
  module Spree
6
4
  module Event
7
5
  class Configuration
6
+ def subscriber_registry
7
+ @subscriber_registry ||= Spree::Event::SubscriberRegistry.new
8
+ end
9
+
8
10
  def subscribers
9
- @subscribers ||= ::Spree::Core::ClassConstantizer::Set.new.tap do |set|
10
- set << 'Spree::MailerSubscriber'
11
- end
11
+ Spree::Deprecation.warn("`Spree::Config.events.subscribers` is deprecated. Please use `Spree::Config.events.subscriber_registry`.", caller)
12
+ subscriber_registry.send(:registry).keys.map { |module_name| module_name.constantize }
12
13
  end
13
14
 
14
- attr_writer :adapter, :suffix
15
+ attr_writer :adapter, :suffix, :autoload_subscribers
16
+
17
+ def autoload_subscribers
18
+ @autoload_subscribers.nil? ? true : !!@autoload_subscribers
19
+ end
15
20
 
16
21
  def adapter
17
22
  @adapter ||= Spree::Event::Adapters::ActiveSupportNotifications
@@ -19,13 +19,20 @@ module Spree
19
19
  # end
20
20
  # end
21
21
  #
22
- # EmailSender.subscribe!
22
+ # # Optional, required only when the subscriber needs to be loaded manually.
23
+ # #
24
+ # # If Spree::Config.events.autoload_subscribers is set to `true` and the module
25
+ # # file matches the pattern `app/subscribers/**/*_subscriber.rb` then it will
26
+ # # be loaded automatically at boot and this line can be removed:
27
+ # EmailSender.activate
23
28
  module Subscriber
24
29
  def self.included(base)
25
30
  base.extend base
26
31
 
27
32
  base.mattr_accessor :event_actions
28
33
  base.event_actions = {}
34
+
35
+ Spree::Event.subscriber_registry.register(base)
29
36
  end
30
37
 
31
38
  # Declares a method name in the including module that can be subscribed/unsubscribed
@@ -52,32 +59,45 @@ module Spree
52
59
  # end
53
60
  # end
54
61
  def event_action(method_name, event_name: nil)
55
- mattr_accessor "#{method_name}_handler"
62
+ mattr_writer "#{method_name}_handler"
63
+
64
+ define_method "#{method_name}_handler" do
65
+ Spree::Deprecation.warn("#{name}.#{method_name}_handler and #{name}.#{method_name}_handler= from the old events mapping interface are deprecated. Please use the new mapping stored in Spree::Event.subscribers.", caller)
66
+
67
+ class_variable_get("@@#{method_name}_handler")
68
+ end
69
+
56
70
  event_actions[method_name] = (event_name || method_name).to_s
57
71
  end
58
72
 
59
- # Subscribes all declared event actions to their events. Only actions that are subscribed
73
+ # Activates all declared event actions to their events. Only actions that are activated
60
74
  # will be called when their event fires.
61
75
  #
62
- # @example subscribe all event actions for module 'EmailSender'
63
- # EmailSender.subscribe!
76
+ # @example activate all event actions for module 'EmailSender'
77
+ # EmailSender.activate
78
+ def activate
79
+ Spree::Event.subscriber_registry.activate_subscriber(self)
80
+ end
81
+
82
+ # Deactivates all declared event actions (or a single specific one) from their events.
83
+ # This means that when an event fires then none of its unsubscribed event actions will
84
+ # be called.
85
+ # @example deactivate all event actions for module 'EmailSender'
86
+ # EmailSender.deactivate
87
+ # @example deactivate only order_finalized for module 'EmailSender'
88
+ # EmailSender.deactivate(:order_finalized)
89
+ def deactivate(event_action_name = nil)
90
+ Spree::Event.subscriber_registry.deactivate_subscriber(self, event_action_name)
91
+ end
92
+
64
93
  def subscribe!
65
- unsubscribe!
66
- event_actions.each do |event_action, event_name|
67
- send "#{event_action}_handler=", Spree::Event.subscribe(event_name) { |event|
68
- send event_action, event
69
- }
70
- end
94
+ Spree::Deprecation.warn("#{self}.subscribe! is deprecated. Please use `#{self}.activate`.", caller)
95
+ activate
71
96
  end
72
97
 
73
- # Unsubscribes all declared event actions from their events. This means that when an event
74
- # fires then none of its unsubscribed event actions will be called.
75
- # @example unsubscribe all event actions for module 'EmailSender'
76
- # EmailSender.unsubscribe!
77
98
  def unsubscribe!
78
- event_actions.keys.each do |event_action|
79
- Spree::Event.unsubscribe send("#{event_action}_handler")
80
- end
99
+ Spree::Deprecation.warn("#{self}.unsubscribe! is deprecated. Please use `#{self}.deactivate`.", caller)
100
+ deactivate
81
101
  end
82
102
  end
83
103
  end
@@ -0,0 +1,92 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Event
5
+ class SubscriberRegistry
6
+ def initialize
7
+ @registry = {}
8
+ @semaphore = Mutex.new
9
+ end
10
+
11
+ def register(subscriber)
12
+ registry[subscriber.name] ||= {}
13
+ end
14
+
15
+ def activate_autoloadable_subscribers
16
+ require_subscriber_files
17
+ activate_all_subscribers
18
+ end
19
+
20
+ def activate_all_subscribers
21
+ registry.each_key { |subscriber_name| activate_subscriber(subscriber_name.constantize) }
22
+ end
23
+
24
+ def deactivate_all_subscribers
25
+ registry.each_key { |subscriber_name| deactivate_subscriber(subscriber_name.constantize) }
26
+ end
27
+
28
+ def activate_subscriber(subscriber)
29
+ return unless registry[subscriber.name]
30
+
31
+ subscriber.event_actions.each do |event_action, event_name|
32
+ @semaphore.synchronize do
33
+ unsafe_deactivate_subscriber(subscriber, event_action)
34
+
35
+ subscription = Spree::Event.subscribe(event_name) { |event| subscriber.send(event_action, event) }
36
+
37
+ # deprecated mappings, to be removed when Solidus 2.10 is not supported anymore:
38
+ subscriber.send("#{event_action}_handler=", subscription)
39
+
40
+ registry[subscriber.name][event_action] = subscription
41
+ end
42
+ end
43
+ end
44
+
45
+ def deactivate_subscriber(subscriber, event_action_name = nil)
46
+ @semaphore.synchronize do
47
+ unsafe_deactivate_subscriber(subscriber, event_action_name)
48
+ end
49
+ end
50
+
51
+ private
52
+
53
+ attr_reader :registry
54
+
55
+ # Loads all Solidus' core and application's event subscribers files.
56
+ # The latter are loaded automatically only when the preference
57
+ # Spree::Config.events.autoload_subscribers is set to a truthy value.
58
+ #
59
+ # Files must be placed under the directory `app/subscribers` and their
60
+ # name must end with `_subscriber.rb`.
61
+ #
62
+ # Loading the files has the side effect of adding their module to the
63
+ # list in Spree::Event.subscribers.
64
+ def require_subscriber_files
65
+ pattern = "app/subscribers/**/*_subscriber.rb"
66
+
67
+ # Load Solidus subscribers
68
+ # rubocop:disable Rails/DynamicFindBy
69
+ solidus_core_dir = Gem::Specification.find_by_name('solidus_core').gem_dir
70
+ # rubocop:enable Rails/DynamicFindBy
71
+ Dir.glob(File.join(solidus_core_dir, pattern)) { |c| require_dependency(c.to_s) }
72
+
73
+ # Load application subscribers, only when the flag is set to true:
74
+ if Spree::Config.events.autoload_subscribers
75
+ Rails.root.glob(pattern) { |c| require_dependency(c.to_s) }
76
+ end
77
+ end
78
+
79
+ def unsafe_deactivate_subscriber(subscriber, event_action_name = nil)
80
+ to_unsubscribe = Array.wrap(event_action_name || subscriber.event_actions.keys)
81
+
82
+ to_unsubscribe.each do |event_action|
83
+ if (subscription = registry.dig(subscriber.name, event_action))
84
+ Spree::Event.unsubscribe(subscription)
85
+
86
+ registry[subscriber.name].delete(event_action)
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
@@ -31,7 +31,7 @@ module Spree
31
31
  Instead use I18n.t('spree.your_translation_key')
32
32
  WARN
33
33
  options[:scope] = [:spree, *options[:scope]]
34
- TranslationHelperWrapper.new.translate(key, options)
34
+ TranslationHelperWrapper.new.translate(key, **options)
35
35
  end
36
36
 
37
37
  alias_method :t, :translate
@@ -5,7 +5,8 @@ module Spree
5
5
  class CartonPreview < ActionMailer::Preview
6
6
  def shipped
7
7
  carton = Carton.joins(:orders).last
8
- raise "Your database needs at one shipped order with a carton to render this preview" unless carton
8
+ raise "Your database needs at least one shipped order with a carton to render this preview" unless carton
9
+
9
10
  Spree::Config.carton_shipped_email_class.shipped_email(order: carton.orders.first, carton: carton)
10
11
  end
11
12
  end
@@ -2,20 +2,40 @@
2
2
 
3
3
  module Spree
4
4
  module ParanoiaDeprecations
5
- def paranoia_destroy
6
- Spree::Deprecation.warn <<-WARN.strip_heredoc, caller
7
- Calling #destroy (or #paranoia_destroy) on a #{self.class} currently performs a soft-destroy using the paranoia gem.
8
- In Solidus 3.0, paranoia will be removed, and this will perform a HARD destroy instead. To continue soft-deleting, use #discard instead.
9
- WARN
10
- super
5
+ module InstanceMethods
6
+ def paranoia_destroy
7
+ Spree::Deprecation.warn <<~WARN, caller
8
+ Calling #destroy (or #paranoia_destroy) on a #{self.class} currently performs a soft-destroy using the paranoia gem.
9
+ In Solidus 3.0, paranoia will be removed, and this will perform a HARD destroy instead. To continue soft-deleting, use #discard instead.
10
+ WARN
11
+ super
12
+ end
13
+
14
+ def paranoia_delete
15
+ Spree::Deprecation.warn <<~WARN, caller
16
+ Calling #delete (or #paranoia_delete) on a #{self.class} currently performs a soft-destroy using the paranoia gem.
17
+ In Solidus 3.0, paranoia will be removed, and this will perform a HARD destroy instead. To continue soft-deleting, use #discard instead.
18
+ WARN
19
+ super
20
+ end
11
21
  end
12
22
 
13
- def paranoia_delete
14
- Spree::Deprecation.warn <<-WARN.strip_heredoc, caller
15
- Calling #delete (or #paranoia_delete) on a #{self.class} currently performs a soft-destroy using the paranoia gem.
16
- In Solidus 3.0, paranoia will be removed, and this will perform a HARD destroy instead. To continue soft-deleting, use #discard instead.
17
- WARN
18
- super
23
+ module ClassMethods
24
+ def with_deleted
25
+ Spree::Deprecation.warn <<~WARN, caller
26
+ #{self}.with_deleted has been deprecated. Use #{self}.with_discarded instead.
27
+ In Solidus 3.0, paranoia will be removed, and this method will be replaced by #{self}.with_discarded.
28
+ WARN
29
+ super
30
+ end
31
+
32
+ def only_deleted
33
+ Spree::Deprecation.warn <<~WARN, caller
34
+ #{self}.only_deleted has been deprecated. Use #{self}.discarded instead.
35
+ In Solidus 3.0, paranoia will be removed, and this method will be replaced by #{self}.discarded.
36
+ WARN
37
+ super
38
+ end
19
39
  end
20
40
  end
21
41
  end