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,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Spree
4
- module PromotionHandler
5
- class Page
6
- attr_reader :order, :path
7
-
8
- def initialize(order, path)
9
- @order = order
10
- @path = path.gsub(/\A\//, '')
11
- end
12
-
13
- def activate
14
- if promotion && promotion.eligible?(order)
15
- promotion.activate(order: order)
16
- end
17
- end
18
-
19
- private
20
-
21
- def promotion
22
- @promotion ||= Spree::Promotion.active.find_by(path: path)
23
- end
24
- end
25
- end
26
- end
@@ -1,61 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Spree
4
- module PromotionHandler
5
- # Used for activating promotions with shipping rules
6
- class Shipping
7
- attr_reader :order
8
- attr_accessor :error, :success
9
-
10
- def initialize(order)
11
- @order = order
12
- end
13
-
14
- def activate
15
- connected_promotions.each do |order_promotion|
16
- if order_promotion.promotion.eligible?(order)
17
- order_promotion.promotion.activate(
18
- order: order,
19
- promotion_code: order_promotion.promotion_code,
20
- )
21
- end
22
- end
23
-
24
- not_connected_automatic_promotions.each do |promotion|
25
- if promotion.eligible?(order)
26
- promotion.activate(order: order)
27
- end
28
- end
29
- end
30
-
31
- private
32
-
33
- def not_connected_automatic_promotions
34
- automatic_promotions - connected_promotions.map(&:promotion)
35
- end
36
-
37
- def automatic_promotions
38
- @automatic_promotions ||= active_shipping_promotions.
39
- where(apply_automatically: true).
40
- to_a.
41
- uniq
42
- end
43
-
44
- def connected_promotions
45
- @connected_promotions ||= order.order_promotions.
46
- joins(:promotion).
47
- includes(:promotion).
48
- merge(active_shipping_promotions).
49
- to_a.
50
- uniq
51
- end
52
-
53
- def active_shipping_promotions
54
- Spree::Promotion.all.
55
- active.
56
- joins(:promotion_actions).
57
- merge(Spree::PromotionAction.shipping)
58
- end
59
- end
60
- end
61
- end
@@ -1,55 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spree/preferences/persistable'
4
-
5
- module Spree
6
- # Base class for all promotion rules
7
- class PromotionRule < Spree::Base
8
- include Spree::Preferences::Persistable
9
-
10
- belongs_to :promotion, class_name: 'Spree::Promotion', inverse_of: :promotion_rules, optional: true
11
-
12
- scope :of_type, ->(type) { where(type: type) }
13
-
14
- validates :promotion, presence: true
15
- validate :unique_per_promotion, on: :create
16
-
17
- def self.for(promotable)
18
- all.select { |rule| rule.applicable?(promotable) }
19
- end
20
-
21
- def applicable?(_promotable)
22
- raise NotImplementedError, "applicable? should be implemented in a sub-class of Spree::PromotionRule"
23
- end
24
-
25
- def eligible?(_promotable, _options = {})
26
- raise NotImplementedError, "eligible? should be implemented in a sub-class of Spree::PromotionRule"
27
- end
28
-
29
- # This states if a promotion can be applied to the specified line item
30
- # It is true by default, but can be overridden by promotion rules to provide conditions
31
- def actionable?(_line_item)
32
- true
33
- end
34
-
35
- def eligibility_errors
36
- @eligibility_errors ||= ActiveModel::Errors.new(self)
37
- end
38
-
39
- def to_partial_path
40
- "spree/admin/promotions/rules/#{model_name.element}"
41
- end
42
-
43
- private
44
-
45
- def unique_per_promotion
46
- if Spree::PromotionRule.exists?(promotion_id: promotion_id, type: self.class.name)
47
- errors[:base] << "Promotion already contains this rule type"
48
- end
49
- end
50
-
51
- def eligibility_error_message(key, options = {})
52
- I18n.t(key, **{ scope: [:spree, :eligibility_errors, :messages] }.merge(options))
53
- end
54
- end
55
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Spree
4
- class PromotionRuleRole < Spree::Base
5
- belongs_to :promotion_rule, class_name: 'Spree::PromotionRule', optional: true
6
- belongs_to :role, class_name: 'Spree::Role', optional: true
7
- end
8
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Spree
4
- class PromotionRuleStore < Spree::Base
5
- self.table_name = "spree_promotion_rules_stores"
6
-
7
- belongs_to :promotion_rule, class_name: "Spree::PromotionRule", optional: true
8
- belongs_to :store, class_name: "Spree::Store", optional: true
9
- end
10
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Spree
4
- class PromotionRuleTaxon < Spree::Base
5
- belongs_to :promotion_rule, optional: true
6
- belongs_to :taxon, optional: true
7
- end
8
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Spree
4
- class PromotionRuleUser < Spree::Base
5
- self.table_name = 'spree_promotion_rules_users'
6
-
7
- belongs_to :promotion_rule, class_name: 'Spree::PromotionRule', optional: true
8
- belongs_to :user, class_name: Spree::UserClassHandle.new, optional: true
9
- end
10
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Spree
4
- module Tax
5
- # Used to build shipping rate taxes
6
- class ShippingRateTaxer
7
- # Build shipping rate taxes for a shipping rate
8
- # Modifies the passed-in shipping rate with associated shipping rate taxes.
9
- # @param [Spree::ShippingRate] shipping_rate The shipping rate to add taxes to.
10
- # This parameter will be modified.
11
- # @return [Spree::ShippingRate] The shipping rate with associated tax objects
12
- def tax(shipping_rate)
13
- taxes = Spree::Config.shipping_rate_tax_calculator_class.new(shipping_rate.order).calculate(shipping_rate)
14
- taxes.each do |tax|
15
- shipping_rate.taxes.build(
16
- amount: tax.amount,
17
- tax_rate: tax.tax_rate
18
- )
19
- end
20
- shipping_rate
21
- end
22
- end
23
- end
24
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spree/event/subscriber'
4
-
5
- module Spree
6
- module MailerSubscriber
7
- include Spree::Event::Subscriber
8
-
9
- event_action :order_finalized
10
- event_action :send_reimbursement_email, event_name: :reimbursement_reimbursed
11
-
12
- def order_finalized(event)
13
- order = event.payload[:order]
14
- unless order.confirmation_delivered?
15
- Spree::Config.order_mailer_class.confirm_email(order).deliver_later
16
- order.update_column(:confirmation_delivered, true)
17
- end
18
- end
19
-
20
- def send_reimbursement_email(event)
21
- reimbursement = event.payload[:reimbursement]
22
- Spree::Config.reimbursement_mailer_class.reimbursement_email(reimbursement.id).deliver_later
23
- end
24
- end
25
- end
@@ -1,2 +0,0 @@
1
- <%= t(".message", error: @promotion_code_batch.error) %>
2
- <%= @promotion_code_batch.promotion.name %>
@@ -1,2 +0,0 @@
1
- <%= t(".message", number_of_codes: 10) %>
2
- <%= @promotion_code_batch.promotion.name %>
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class CreateSpreePromotionCodeBatch < ActiveRecord::Migration[5.0]
4
- def change
5
- create_table :spree_promotion_code_batches do |t|
6
- t.references :promotion, null: false, index: true
7
- t.string :base_code, null: false
8
- t.integer :number_of_codes, null: false
9
- t.string :email
10
- t.string :error
11
- t.string :state, default: "pending"
12
- t.timestamps precision: 6
13
- end
14
-
15
- add_foreign_key(
16
- :spree_promotion_code_batches,
17
- :spree_promotions,
18
- column: :promotion_id
19
- )
20
-
21
- add_column(
22
- :spree_promotion_codes,
23
- :promotion_code_batch_id,
24
- :integer
25
- )
26
-
27
- add_foreign_key(
28
- :spree_promotion_codes,
29
- :spree_promotion_code_batches,
30
- column: :promotion_code_batch_id
31
- )
32
-
33
- add_index(
34
- :spree_promotion_codes,
35
- :promotion_code_batch_id
36
- )
37
- end
38
- end
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class CreatePromotionRuleStores < ActiveRecord::Migration[5.1]
4
- def change
5
- create_table :spree_promotion_rules_stores do |t|
6
- t.references :store, null: false
7
- t.references :promotion_rule, null: false
8
-
9
- t.timestamps
10
- end
11
- end
12
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class AddJoinCharactersToPromotionCodeBatch < ActiveRecord::Migration[5.1]
4
- def change
5
- add_column(:spree_promotion_code_batches,
6
- :join_characters,
7
- :string,
8
- null: false,
9
- default: '_')
10
- end
11
- end
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'solidus/migrations/promotions_with_code_handlers'
4
-
5
- class RemoveCodeFromSpreePromotions < ActiveRecord::Migration[5.1]
6
- class Promotion < ActiveRecord::Base
7
- self.table_name = "spree_promotions"
8
- self.ignored_columns = %w(type)
9
- end
10
-
11
- def up
12
- promotions_with_code = Promotion.where.not(code: [nil, ''])
13
-
14
- if promotions_with_code.any?
15
- # You have some promotions with "code" field present! This is not good
16
- # since we are going to remove that column.
17
- #
18
- self.class.promotions_with_code_handler.new(self, promotions_with_code).call
19
- end
20
-
21
- remove_index :spree_promotions, name: :index_spree_promotions_on_code
22
- remove_column :spree_promotions, :code
23
- end
24
-
25
- def down
26
- add_column :spree_promotions, :code, :string
27
- add_index :spree_promotions, :code, name: :index_spree_promotions_on_code
28
- end
29
-
30
- def self.promotions_with_code_handler
31
- # We propose different approaches, just pick the one that you prefer or
32
- # write your custom one.
33
- #
34
- # The fist one (raising an exception) is the default but you can
35
- # comment/uncomment the one then better fits you needs or use a
36
- # custom class or callable object.
37
- #
38
- Solidus::Migrations::PromotionWithCodeHandlers::RaiseException
39
- # Solidus::Migrations::PromotionWithCodeHandlers::MoveToSpreePromotionCode
40
- # Solidus::Migrations::PromotionWithCodeHandlers::DoNothing
41
- end
42
- end
@@ -1,10 +0,0 @@
1
- // This is a manifest file that'll be compiled into including all the files listed below.
2
- // Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
3
- // be included in the compiled file accessible from http://example.com/assets/application.js
4
- // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
5
- // the compiled file.
6
- //
7
- //= require jquery
8
- //= require rails-ujs
9
- //= require spree/frontend
10
- //= require_tree .
@@ -1,9 +0,0 @@
1
- /*
2
- * This is a manifest file that'll automatically include all the stylesheets available in this directory
3
- * and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
4
- * the top of the compiled file, but it's generally better to create a new file per style scope.
5
- *
6
- *= require spree/frontend
7
- *= require_self
8
- *= require_tree .
9
- */
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
-
4
- APP_PATH = File.expand_path('../../config/application', __FILE__)
5
- require File.expand_path('../../config/boot', __FILE__)
6
- require 'rails/commands'
@@ -1,66 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Solidus
4
- module Migrations
5
- module PromotionWithCodeHandlers
6
- class PromotionCode < Spree::Base
7
- self.table_name = "spree_promotion_codes"
8
- end
9
-
10
- class Base
11
- attr_reader :migration_context, :promotions
12
-
13
- def initialize(migration_context, promotions)
14
- @migration_context = migration_context
15
- @promotions = promotions
16
- end
17
- end
18
-
19
- class RaiseException < Base
20
- def call
21
- # Please note that this will block the current migration and rollback all
22
- # the previous ones run with the same "rails db:migrate" command.
23
- #
24
- raise StandardError, "You are trying to drop 'code' column from "\
25
- "spree_promotions table but you have at least one record with that "\
26
- "column filled. Please take care of that or you could lose data. See:" \
27
- "\n" \
28
- "https://github.com/solidusio/solidus/pull/3028"\
29
- "\n"
30
- end
31
- end
32
-
33
- class MoveToSpreePromotionCode < Base
34
- def call
35
- # This is another possible approach, it will convert Spree::Promotion#code
36
- # to a Spree::PromotionCode before removing the `code` field.
37
- #
38
- # NOTE: promotion codes will be downcased and stripped
39
- promotions.find_each do |promotion|
40
- normalized_code = promotion.code.downcase.strip
41
-
42
- PromotionCode.find_or_create_by!(
43
- value: normalized_code,
44
- promotion_id: promotion.id
45
- ) do
46
- migration_context.say "Creating Spree::PromotionCode with value "\
47
- "'#{normalized_code}' for Spree::Promotion with id '#{promotion.id}'"
48
- end
49
- end
50
- end
51
- end
52
-
53
- class DoNothing < Base
54
- def call
55
- # This approach will delete all codes without taking any action. At
56
- # least we could print a message to track what we are deleting.
57
- #
58
- promotions.find_each do |promotion|
59
- migration_context.say "Code '#{promotion.code}' is going to be removed "\
60
- "from Spree::Promotion with id '#{promotion.id}'"
61
- end
62
- end
63
- end
64
- end
65
- end
66
- end
@@ -1,67 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Spree
4
- module Event
5
- module Adapters
6
- module ActiveSupportNotifications
7
- class InvalidEventNameType < StandardError; end
8
-
9
- extend self
10
-
11
- def fire(event_name, opts)
12
- ActiveSupport::Notifications.instrument event_name, opts do
13
- yield opts if block_given?
14
- end
15
- end
16
-
17
- def subscribe(event_name)
18
- ActiveSupport::Notifications.subscribe event_name do |*args|
19
- event = ActiveSupport::Notifications::Event.new(*args)
20
- yield event
21
- end
22
- end
23
-
24
- def unsubscribe(subscriber_or_name)
25
- ActiveSupport::Notifications.unsubscribe(subscriber_or_name)
26
- end
27
-
28
- def listeners_for(names)
29
- names.each_with_object({}) do |name, memo|
30
- listeners = ActiveSupport::Notifications.notifier.listeners_for(name)
31
- memo[name] = listeners if listeners.present?
32
- end
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
64
- end
65
- end
66
- end
67
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Spree
4
- module Event
5
- class Configuration
6
- def subscriber_registry
7
- @subscriber_registry ||= Spree::Event::SubscriberRegistry.new
8
- end
9
-
10
- attr_writer :adapter, :suffix, :autoload_subscribers
11
-
12
- def autoload_subscribers
13
- @autoload_subscribers.nil? ? true : !!@autoload_subscribers
14
- end
15
-
16
- def adapter
17
- @adapter ||= Spree::Event::Adapters::ActiveSupportNotifications
18
- end
19
-
20
- def suffix
21
- @suffix ||= '.spree'
22
- end
23
- end
24
- end
25
- end
@@ -1,86 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Spree
4
- module Event
5
- # This module simplifies adding and removing subscriptions to {Spree::Event} events.
6
- # Here's a complete example:
7
- # module EmailSender
8
- # include Spree::Event::Subscriber
9
- #
10
- # event_action :order_finalized
11
- # event_action :confirm_reimbursement, event_name: :reimbursement_reimbursed
12
- #
13
- # def order_finalized(event)
14
- # Mailer.send_email(event.payload[:order])
15
- # end
16
- #
17
- # def confirm_reimbursement(event)
18
- # Mailer.send_email(event.payload[:reimbursement])
19
- # end
20
- # end
21
- #
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
28
- module Subscriber
29
- def self.included(base)
30
- base.extend base
31
-
32
- base.mattr_accessor :event_actions
33
- base.event_actions = {}
34
-
35
- Spree::Event.subscriber_registry.register(base)
36
- end
37
-
38
- # Declares a method name in the including module that can be subscribed/unsubscribed
39
- # to an event.
40
- #
41
- # @param method_name [String, Symbol] the method that will be called when the subscribed event is fired
42
- # @param event_name [String, Symbol] the name of the event to be subscribed
43
- #
44
- # @example Declares 'send_email' as an event action that can subscribe the event 'order_finalized'
45
- # module EmailSender
46
- # event_action :send_email, event_name: :order_finalized
47
- #
48
- # def send_email(event)
49
- # Mailer.send_email(event.payload[:order])
50
- # end
51
- # end
52
- #
53
- # @example Same as above, but the method name is same as the event name:
54
- # module EmailSender
55
- # event_action :order_completed
56
- #
57
- # def order_completed(event)
58
- # Mailer.send_email(event.payload[:order])
59
- # end
60
- # end
61
- def event_action(method_name, event_name: nil)
62
- event_actions[method_name] = (event_name || method_name).to_s
63
- end
64
-
65
- # Activates all declared event actions to their events. Only actions that are activated
66
- # will be called when their event fires.
67
- #
68
- # @example activate all event actions for module 'EmailSender'
69
- # EmailSender.activate
70
- def activate
71
- Spree::Event.subscriber_registry.activate_subscriber(self)
72
- end
73
-
74
- # Deactivates all declared event actions (or a single specific one) from their events.
75
- # This means that when an event fires then none of its unsubscribed event actions will
76
- # be called.
77
- # @example deactivate all event actions for module 'EmailSender'
78
- # EmailSender.deactivate
79
- # @example deactivate only order_finalized for module 'EmailSender'
80
- # EmailSender.deactivate(:order_finalized)
81
- def deactivate(event_action_name = nil)
82
- Spree::Event.subscriber_registry.deactivate_subscriber(self, event_action_name)
83
- end
84
- end
85
- end
86
- end