solidus_core 4.6.2 → 4.7.0

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 (328) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +13 -13
  3. data/app/controllers/spree/base_controller.rb +2 -2
  4. data/app/helpers/spree/base_helper.rb +24 -24
  5. data/app/helpers/spree/checkout_helper.rb +7 -7
  6. data/app/helpers/spree/core/controller_helpers/auth.rb +1 -1
  7. data/app/helpers/spree/core/controller_helpers/common.rb +3 -2
  8. data/app/helpers/spree/core/controller_helpers/order.rb +3 -5
  9. data/app/helpers/spree/core/controller_helpers/payment_parameters.rb +1 -2
  10. data/app/helpers/spree/core/controller_helpers/strong_parameters.rb +10 -10
  11. data/app/helpers/spree/products_helper.rb +5 -5
  12. data/app/helpers/spree/store_helper.rb +1 -1
  13. data/app/mailers/spree/carton_mailer.rb +3 -3
  14. data/app/mailers/spree/order_mailer.rb +4 -4
  15. data/app/mailers/spree/reimbursement_mailer.rb +2 -2
  16. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +5 -5
  17. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +5 -5
  18. data/app/models/concerns/spree/active_storage_adapter.rb +2 -2
  19. data/app/models/concerns/spree/adjustment_source.rb +4 -4
  20. data/app/models/concerns/spree/display_money.rb +2 -2
  21. data/app/models/concerns/spree/named_type.rb +1 -1
  22. data/app/models/concerns/spree/ordered_property_value_list.rb +2 -2
  23. data/app/models/concerns/spree/preferences/persistable.rb +1 -1
  24. data/app/models/concerns/spree/ransackable_attributes.rb +1 -0
  25. data/app/models/concerns/spree/soft_deletable.rb +2 -1
  26. data/app/models/concerns/spree/state_change_tracking.rb +1 -1
  27. data/app/models/concerns/spree/user_address_book.rb +12 -12
  28. data/app/models/concerns/spree/user_methods.rb +9 -9
  29. data/app/models/concerns/spree/user_reporting.rb +1 -0
  30. data/app/models/spree/ability.rb +1 -1
  31. data/app/models/spree/address/name.rb +1 -1
  32. data/app/models/spree/address.rb +7 -7
  33. data/app/models/spree/adjustment.rb +11 -10
  34. data/app/models/spree/adjustment_reason.rb +2 -2
  35. data/app/models/spree/billing_integration.rb +2 -2
  36. data/app/models/spree/calculator/default_tax.rb +2 -2
  37. data/app/models/spree/calculator/flat_fee.rb +1 -1
  38. data/app/models/spree/calculator/flat_rate.rb +2 -2
  39. data/app/models/spree/calculator/returns/default_refund_amount.rb +3 -3
  40. data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +2 -2
  41. data/app/models/spree/calculator/shipping/flat_rate.rb +3 -3
  42. data/app/models/spree/calculator/shipping/flexi_rate.rb +8 -8
  43. data/app/models/spree/calculator/shipping/per_item.rb +3 -3
  44. data/app/models/spree/calculator/shipping/price_sack.rb +3 -3
  45. data/app/models/spree/calculator.rb +31 -6
  46. data/app/models/spree/carton.rb +4 -4
  47. data/app/models/spree/classification.rb +2 -2
  48. data/app/models/spree/core/state_machines/order/class_methods.rb +3 -3
  49. data/app/models/spree/core/state_machines/return_item/acceptance_status.rb +1 -1
  50. data/app/models/spree/country.rb +1 -1
  51. data/app/models/spree/credit_card.rb +27 -27
  52. data/app/models/spree/customer_return.rb +5 -4
  53. data/app/models/spree/distributed_amounts_handler.rb +1 -1
  54. data/app/models/spree/fulfilment_changer.rb +22 -22
  55. data/app/models/spree/image/active_storage_attachment.rb +2 -2
  56. data/app/models/spree/image/paperclip_attachment.rb +8 -8
  57. data/app/models/spree/in_memory_order_updater.rb +262 -0
  58. data/app/models/spree/inventory_unit.rb +11 -11
  59. data/app/models/spree/item_total.rb +1 -1
  60. data/app/models/spree/legacy_user.rb +2 -2
  61. data/app/models/spree/line_item.rb +21 -11
  62. data/app/models/spree/log_entry.rb +3 -3
  63. data/app/models/spree/mergeable_orders_finder.rb +44 -0
  64. data/app/models/spree/money.rb +2 -1
  65. data/app/models/spree/null_promotion_adjuster.rb +1 -1
  66. data/app/models/spree/option_type.rb +1 -1
  67. data/app/models/spree/option_value.rb +2 -2
  68. data/app/models/spree/order/number_generator.rb +1 -1
  69. data/app/models/spree/order.rb +66 -64
  70. data/app/models/spree/order_cancellations.rb +1 -3
  71. data/app/models/spree/order_inventory.rb +5 -8
  72. data/app/models/spree/order_mutex.rb +1 -1
  73. data/app/models/spree/order_shipping.rb +1 -1
  74. data/app/models/spree/order_updater.rb +59 -37
  75. data/app/models/spree/payment/cancellation.rb +2 -2
  76. data/app/models/spree/payment/processing.rb +22 -22
  77. data/app/models/spree/payment.rb +25 -25
  78. data/app/models/spree/payment_capture_event.rb +2 -2
  79. data/app/models/spree/payment_create.rb +1 -1
  80. data/app/models/spree/payment_method/bogus_credit_card.rb +18 -18
  81. data/app/models/spree/payment_method/check.rb +3 -3
  82. data/app/models/spree/payment_method/credit_card.rb +1 -1
  83. data/app/models/spree/payment_method/simple_bogus_credit_card.rb +3 -3
  84. data/app/models/spree/payment_method/store_credit.rb +13 -13
  85. data/app/models/spree/payment_method.rb +12 -11
  86. data/app/models/spree/payment_source.rb +2 -2
  87. data/app/models/spree/permission_sets/dashboard_display.rb +3 -3
  88. data/app/models/spree/permission_sets/default_customer.rb +1 -1
  89. data/app/models/spree/preference.rb +1 -1
  90. data/app/models/spree/price.rb +7 -6
  91. data/app/models/spree/product/scopes.rb +23 -23
  92. data/app/models/spree/product.rb +37 -41
  93. data/app/models/spree/product_option_type.rb +2 -2
  94. data/app/models/spree/product_property.rb +3 -3
  95. data/app/models/spree/refund.rb +10 -10
  96. data/app/models/spree/refund_reason.rb +2 -2
  97. data/app/models/spree/reimbursement/credit.rb +1 -1
  98. data/app/models/spree/reimbursement.rb +8 -8
  99. data/app/models/spree/reimbursement_tax_calculator.rb +1 -1
  100. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +1 -1
  101. data/app/models/spree/reimbursement_type.rb +2 -2
  102. data/app/models/spree/return_authorization.rb +7 -6
  103. data/app/models/spree/return_item/eligibility_validator/base_validator.rb +2 -2
  104. data/app/models/spree/return_item/eligibility_validator/default.rb +1 -1
  105. data/app/models/spree/return_item/eligibility_validator/inventory_shipped.rb +1 -1
  106. data/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +1 -1
  107. data/app/models/spree/return_item/eligibility_validator/order_completed.rb +1 -1
  108. data/app/models/spree/return_item/eligibility_validator/rma_required.rb +1 -1
  109. data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +1 -1
  110. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +6 -6
  111. data/app/models/spree/return_item.rb +31 -30
  112. data/app/models/spree/return_reason.rb +1 -1
  113. data/app/models/spree/role.rb +1 -1
  114. data/app/models/spree/role_user.rb +1 -1
  115. data/app/models/spree/shipment.rb +37 -29
  116. data/app/models/spree/shipping_method.rb +9 -9
  117. data/app/models/spree/shipping_method_category.rb +2 -2
  118. data/app/models/spree/shipping_rate.rb +12 -10
  119. data/app/models/spree/shipping_rate_tax.rb +5 -4
  120. data/app/models/spree/simple_order_contents.rb +2 -2
  121. data/app/models/spree/state.rb +1 -1
  122. data/app/models/spree/stock/availability.rb +9 -9
  123. data/app/models/spree/stock/availability_validator.rb +3 -3
  124. data/app/models/spree/stock/differentiator.rb +2 -2
  125. data/app/models/spree/stock/estimator.rb +4 -4
  126. data/app/models/spree/stock/inventory_validator.rb +1 -1
  127. data/app/models/spree/stock/package.rb +3 -3
  128. data/app/models/spree/stock_item.rb +5 -5
  129. data/app/models/spree/stock_location.rb +6 -6
  130. data/app/models/spree/stock_movement.rb +2 -2
  131. data/app/models/spree/stock_quantities.rb +2 -2
  132. data/app/models/spree/store.rb +3 -3
  133. data/app/models/spree/store_credit.rb +30 -29
  134. data/app/models/spree/store_credit_category.rb +2 -2
  135. data/app/models/spree/store_credit_event.rb +6 -6
  136. data/app/models/spree/store_credit_reason.rb +1 -1
  137. data/app/models/spree/store_credit_type.rb +3 -3
  138. data/app/models/spree/store_selector/by_server_name.rb +1 -1
  139. data/app/models/spree/store_selector/legacy.rb +1 -1
  140. data/app/models/spree/tax/item_tax.rb +1 -0
  141. data/app/models/spree/tax/order_tax.rb +1 -0
  142. data/app/models/spree/tax_category.rb +3 -3
  143. data/app/models/spree/tax_rate.rb +5 -5
  144. data/app/models/spree/tax_rate_tax_category.rb +2 -2
  145. data/app/models/spree/taxon/active_storage_attachment.rb +2 -2
  146. data/app/models/spree/taxon/paperclip_attachment.rb +4 -4
  147. data/app/models/spree/taxon.rb +16 -17
  148. data/app/models/spree/taxon_brand_selector.rb +3 -3
  149. data/app/models/spree/unauthorized_redirect_handler.rb +1 -1
  150. data/app/models/spree/unit_cancel.rb +4 -4
  151. data/app/models/spree/user_address.rb +3 -3
  152. data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +6 -8
  153. data/app/models/spree/user_last_url_storer.rb +1 -1
  154. data/app/models/spree/variant/price_selector.rb +1 -1
  155. data/app/models/spree/variant/scopes.rb +9 -9
  156. data/app/models/spree/variant.rb +25 -25
  157. data/app/models/spree/variant_property_rule.rb +2 -2
  158. data/app/models/spree/variant_property_rule_condition.rb +1 -1
  159. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +4 -4
  160. data/app/models/spree/wallet/default_payment_builder.rb +1 -1
  161. data/app/models/spree/wallet_payment_source.rb +2 -2
  162. data/app/models/spree/zone.rb +18 -18
  163. data/app/models/spree/zone_member.rb +1 -1
  164. data/app/subscribers/spree/carton_shipped_mailer_subscriber.rb +2 -2
  165. data/app/subscribers/spree/order_cancel_mailer_subscriber.rb +2 -2
  166. data/app/subscribers/spree/order_confirmation_mailer_subscriber.rb +2 -2
  167. data/app/subscribers/spree/order_inventory_cancellation_mailer_subscriber.rb +2 -2
  168. data/app/subscribers/spree/reimbursement_mailer_subscriber.rb +2 -2
  169. data/config/initializers/assets.rb +1 -1
  170. data/config/initializers/db_query_matchers.rb +9 -0
  171. data/config/initializers/friendly_id.rb +2 -2
  172. data/config/initializers/inflections.rb +1 -1
  173. data/config/initializers/money.rb +1 -1
  174. data/config/locales/en.yml +1 -0
  175. data/db/default/spree/countries.rb +7 -7
  176. data/db/default/spree/return_reasons.rb +11 -11
  177. data/db/default/spree/stock_locations.rb +1 -1
  178. data/db/default/spree/store_credit.rb +3 -4
  179. data/db/default/spree/stores.rb +1 -1
  180. data/db/default/spree/zones.rb +5 -5
  181. data/db/migrate/20160101010000_solidus_one_four.rb +16 -16
  182. data/db/migrate/20160420044191_create_spree_wallet_payment_sources.rb +3 -3
  183. data/db/migrate/20160420181916_migrate_credit_cards_to_wallet_payment_sources.rb +7 -6
  184. data/db/migrate/20161014221052_add_available_to_columns_and_remove_display_on_from_payment_methods.rb +10 -10
  185. data/db/migrate/20161123154034_add_available_to_users_and_remove_display_on_from_shipping_methods.rb +6 -6
  186. data/db/migrate/20161129035810_add_index_to_spree_payments_number.rb +1 -1
  187. data/db/migrate/20170319191942_remove_order_id_from_inventory_units.rb +4 -4
  188. data/db/migrate/20180322142651_add_amount_remaining_to_store_credit_events.rb +9 -16
  189. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +1 -0
  190. data/db/migrate/20210815004823_add_unique_index_to_option_values_variants.rb +3 -3
  191. data/db/migrate/20250207104016_add_primary_taxon_to_products.rb +1 -1
  192. data/db/migrate/20250214094207_add_reverse_charge_status_to_store.rb +1 -1
  193. data/db/migrate/20250225051308_add_vat_id_email_and_reverse_charge_status_to_addresses.rb +1 -1
  194. data/db/seeds.rb +3 -3
  195. data/lib/generators/solidus/install/app_templates/authentication/custom.rb +2 -2
  196. data/lib/generators/solidus/install/app_templates/authentication/devise.rb +3 -3
  197. data/lib/generators/solidus/install/app_templates/authentication/existing.rb +1 -1
  198. data/lib/generators/solidus/install/app_templates/frontend/starter.rb +1 -1
  199. data/lib/generators/solidus/install/app_templates/payment_method/braintree.rb +1 -1
  200. data/lib/generators/solidus/install/app_templates/payment_method/paypal.rb +1 -1
  201. data/lib/generators/solidus/install/app_templates/payment_method/stripe.rb +2 -2
  202. data/lib/generators/solidus/install/install_generator.rb +51 -51
  203. data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +3 -0
  204. data/lib/generators/solidus/update/update_generator.rb +29 -29
  205. data/lib/generators/spree/custom_user/custom_user_generator.rb +6 -6
  206. data/lib/generators/spree/dummy/dummy_generator.rb +22 -24
  207. data/lib/generators/spree/dummy/templates/rails/boot.rb +3 -3
  208. data/lib/generators/spree/dummy/templates/rails/test.rb +4 -4
  209. data/lib/solidus_core.rb +1 -1
  210. data/lib/spree/app_configuration.rb +59 -47
  211. data/lib/spree/bus.rb +1 -1
  212. data/lib/spree/config.rb +1 -1
  213. data/lib/spree/core/active_merchant_dependencies.rb +8 -8
  214. data/lib/spree/core/class_constantizer.rb +1 -1
  215. data/lib/spree/core/engine.rb +15 -15
  216. data/lib/spree/core/environment.rb +1 -1
  217. data/lib/spree/core/environment_extension.rb +2 -2
  218. data/lib/spree/core/importer/order.rb +15 -15
  219. data/lib/spree/core/importer/product.rb +4 -4
  220. data/lib/spree/core/importer.rb +2 -2
  221. data/lib/spree/core/null_promotion_configuration.rb +7 -7
  222. data/lib/spree/core/permalinks.rb +1 -1
  223. data/lib/spree/core/product_filters.rb +94 -93
  224. data/lib/spree/core/role_configuration.rb +3 -3
  225. data/lib/spree/core/search/base.rb +5 -6
  226. data/lib/spree/core/search/variant.rb +3 -3
  227. data/lib/spree/core/stock_configuration.rb +10 -49
  228. data/lib/spree/core/validators/email.rb +1 -1
  229. data/lib/spree/core/version.rb +3 -3
  230. data/lib/spree/core/versioned_value.rb +4 -6
  231. data/lib/spree/core.rb +49 -49
  232. data/lib/spree/deprecated_instance_variable_proxy.rb +1 -1
  233. data/lib/spree/deprecation.rb +1 -1
  234. data/lib/spree/deprecator.rb +2 -2
  235. data/lib/spree/i18n.rb +2 -2
  236. data/lib/spree/localized_number.rb +3 -3
  237. data/lib/spree/manipulative_query_monitor.rb +19 -0
  238. data/lib/spree/migrations.rb +2 -2
  239. data/lib/spree/permitted_attributes.rb +10 -10
  240. data/lib/spree/preferences/configuration.rb +5 -5
  241. data/lib/spree/preferences/preferable.rb +8 -10
  242. data/lib/spree/preferences/preferable_class_methods.rb +16 -16
  243. data/lib/spree/preferences/preference_differentiator.rb +1 -1
  244. data/lib/spree/preferences/scoped_store.rb +2 -2
  245. data/lib/spree/preferences/static_model_preferences.rb +2 -2
  246. data/lib/spree/preferences/store.rb +6 -6
  247. data/lib/spree/testing_support/ability_helpers.rb +30 -30
  248. data/lib/spree/testing_support/authorization_helpers.rb +6 -5
  249. data/lib/spree/testing_support/blacklist_urls.rb +1 -1
  250. data/lib/spree/testing_support/bus_helpers.rb +1 -1
  251. data/lib/spree/testing_support/capybara_driver.rb +1 -1
  252. data/lib/spree/testing_support/capybara_ext.rb +12 -12
  253. data/lib/spree/testing_support/common_rake.rb +17 -16
  254. data/lib/spree/testing_support/dummy_ability.rb +1 -1
  255. data/lib/spree/testing_support/dummy_app/migrations.rb +1 -1
  256. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +5 -5
  257. data/lib/spree/testing_support/dummy_app/routes.rb +1 -1
  258. data/lib/spree/testing_support/dummy_app.rb +34 -34
  259. data/lib/spree/testing_support/extension_rake.rb +2 -2
  260. data/lib/spree/testing_support/factories/address_factory.rb +12 -12
  261. data/lib/spree/testing_support/factories/adjustment_factory.rb +7 -7
  262. data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +1 -1
  263. data/lib/spree/testing_support/factories/calculator_factory.rb +6 -6
  264. data/lib/spree/testing_support/factories/carton_factory.rb +1 -1
  265. data/lib/spree/testing_support/factories/country_factory.rb +3 -3
  266. data/lib/spree/testing_support/factories/credit_card_factory.rb +3 -3
  267. data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -2
  268. data/lib/spree/testing_support/factories/image_factory.rb +2 -2
  269. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +4 -4
  270. data/lib/spree/testing_support/factories/line_item_factory.rb +2 -2
  271. data/lib/spree/testing_support/factories/option_type_factory.rb +2 -2
  272. data/lib/spree/testing_support/factories/option_value_factory.rb +2 -2
  273. data/lib/spree/testing_support/factories/order_factory.rb +16 -16
  274. data/lib/spree/testing_support/factories/payment_factory.rb +9 -9
  275. data/lib/spree/testing_support/factories/payment_method_factory.rb +10 -10
  276. data/lib/spree/testing_support/factories/price_factory.rb +2 -2
  277. data/lib/spree/testing_support/factories/product_factory.rb +2 -2
  278. data/lib/spree/testing_support/factories/product_option_type_factory.rb +1 -1
  279. data/lib/spree/testing_support/factories/product_property_factory.rb +1 -1
  280. data/lib/spree/testing_support/factories/property_factory.rb +3 -3
  281. data/lib/spree/testing_support/factories/refund_factory.rb +2 -2
  282. data/lib/spree/testing_support/factories/refund_reason_factory.rb +1 -1
  283. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  284. data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +1 -1
  285. data/lib/spree/testing_support/factories/return_authorization_factory.rb +3 -3
  286. data/lib/spree/testing_support/factories/return_item_factory.rb +1 -1
  287. data/lib/spree/testing_support/factories/return_reason_factory.rb +1 -1
  288. data/lib/spree/testing_support/factories/role_factory.rb +2 -2
  289. data/lib/spree/testing_support/factories/shipment_factory.rb +3 -3
  290. data/lib/spree/testing_support/factories/shipping_category_factory.rb +1 -1
  291. data/lib/spree/testing_support/factories/shipping_method_factory.rb +7 -7
  292. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +1 -1
  293. data/lib/spree/testing_support/factories/state_factory.rb +4 -4
  294. data/lib/spree/testing_support/factories/stock_item_factory.rb +1 -1
  295. data/lib/spree/testing_support/factories/stock_location_factory.rb +7 -7
  296. data/lib/spree/testing_support/factories/stock_movement_factory.rb +3 -3
  297. data/lib/spree/testing_support/factories/stock_package_factory.rb +3 -3
  298. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +1 -1
  299. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +8 -8
  300. data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -1
  301. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +1 -1
  302. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +6 -6
  303. data/lib/spree/testing_support/factories/store_factory.rb +2 -2
  304. data/lib/spree/testing_support/factories/tax_category_factory.rb +1 -1
  305. data/lib/spree/testing_support/factories/tax_rate_factory.rb +1 -1
  306. data/lib/spree/testing_support/factories/taxon_factory.rb +3 -3
  307. data/lib/spree/testing_support/factories/taxonomy_factory.rb +1 -1
  308. data/lib/spree/testing_support/factories/user_factory.rb +2 -2
  309. data/lib/spree/testing_support/factories/variant_factory.rb +2 -2
  310. data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +1 -1
  311. data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +1 -1
  312. data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +1 -1
  313. data/lib/spree/testing_support/factories/zone_factory.rb +3 -3
  314. data/lib/spree/testing_support/factory_bot.rb +1 -1
  315. data/lib/spree/testing_support/flaky.rb +3 -2
  316. data/lib/spree/testing_support/flash.rb +2 -2
  317. data/lib/spree/testing_support/order_walkthrough.rb +7 -7
  318. data/lib/spree/testing_support/preferences.rb +1 -1
  319. data/lib/spree/testing_support/rake.rb +1 -1
  320. data/lib/spree/testing_support/shared_examples/calculator.rb +1 -1
  321. data/lib/spree/testing_support/shared_examples/gallery.rb +7 -7
  322. data/lib/spree/testing_support/shared_examples/order_factory.rb +9 -9
  323. data/lib/spree/testing_support/shared_examples/working_factory.rb +1 -1
  324. data/lib/spree/testing_support/translations.rb +1 -1
  325. data/lib/spree_core.rb +1 -1
  326. data/lib/tasks/payment_method.rake +2 -2
  327. data/solidus_core.gemspec +49 -49
  328. metadata +60 -54
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spree/core'
3
+ require "spree/core"
4
4
 
5
5
  module Spree
6
6
  Deprecation = Spree.deprecator
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_support/deprecation'
3
+ require "active_support/deprecation"
4
4
 
5
5
  module Spree
6
6
  def self.deprecator
7
- @deprecator ||= ActiveSupport::Deprecation.new('5.0', 'Solidus')
7
+ @deprecator ||= ActiveSupport::Deprecation.new("5.0", "Solidus")
8
8
  end
9
9
  end
data/lib/spree/i18n.rb CHANGED
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'i18n'
3
+ require "i18n"
4
4
 
5
5
  module Spree
6
6
  def self.i18n_available_locales
7
7
  I18n.available_locales.select do |locale|
8
- I18n.t('spree.i18n.this_file_language', locale:, fallback: false, default: nil)
8
+ I18n.t("spree.i18n.this_file_language", locale:, fallback: false, default: nil)
9
9
  end
10
10
  end
11
11
 
@@ -14,14 +14,14 @@ module Spree
14
14
 
15
15
  # I18n.t('number.currency.format.delimiter') could be useful here, but is
16
16
  # unnecessary as it is stripped by the non_number_characters gsub.
17
- separator = I18n.t(:'number.currency.format.separator')
17
+ separator = I18n.t(:"number.currency.format.separator")
18
18
  non_number_characters = /[^0-9\-#{separator}]/
19
19
 
20
20
  # strip everything else first
21
- number = number.gsub(non_number_characters, '')
21
+ number = number.gsub(non_number_characters, "")
22
22
 
23
23
  # then replace the locale-specific decimal separator with the standard separator if necessary
24
- number = number.gsub(separator, '.') unless separator == '.'
24
+ number = number.gsub(separator, ".") unless separator == "."
25
25
 
26
26
  # Handle empty string for ruby 2.4 compatibility
27
27
  BigDecimal(number.presence || 0)
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ class ManipulativeQueryMonitor
5
+ def self.call(&block)
6
+ counter = ::DBQueryMatchers::QueryCounter.new({matches: [/^\ *(INSERT|UPDATE|DELETE\ FROM)/]})
7
+ ActiveSupport::Notifications.subscribed(counter.to_proc,
8
+ "sql.active_record",
9
+ &block)
10
+ if counter.count > 0
11
+ message = "Detected #{counter.count} manipulative queries. #{counter.log.join(", ")}\n"
12
+
13
+ message += caller.select { |line| line.include?(Rails.root.to_s) || line.include?("solidus") }.join("\n")
14
+
15
+ Rails.logger.warn(message)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -25,12 +25,12 @@ module Spree
25
25
  def check
26
26
  return unless File.directory?(app_dir)
27
27
  return if missing_migrations.empty?
28
- return if ENV['SOLIDUS_SKIP_MIGRATIONS_CHECK']
28
+ return if ENV["SOLIDUS_SKIP_MIGRATIONS_CHECK"]
29
29
 
30
30
  prefix = "[WARNING #{engine_name.capitalize}]"
31
31
  warn <<~WARN
32
32
  #{prefix} Missing migrations.
33
- #{missing_migrations.map {|m| "#{prefix} - #{m}"}.join("\n")}
33
+ #{missing_migrations.map { |m| "#{prefix} - #{m}" }.join("\n")}
34
34
  #{prefix}
35
35
  #{prefix} Run `bin/rails railties:install:migrations` to get them.
36
36
  #{prefix} You can silence this warning by setting the `SOLIDUS_SKIP_MIGRATIONS_CHECK` environment variable.
@@ -89,13 +89,13 @@ module Spree
89
89
  @@property_attributes = [:name, :presentation]
90
90
 
91
91
  @@return_authorization_attributes = [:memo, :stock_location_id, :return_reason_id,
92
- customer_metadata: {},
93
- return_items_attributes: [
94
- :inventory_unit_id,
95
- :exchange_variant_id,
96
- :return_reason_id,
97
- :preferred_reimbursement_type_id
98
- ]]
92
+ customer_metadata: {},
93
+ return_items_attributes: [
94
+ :inventory_unit_id,
95
+ :exchange_variant_id,
96
+ :return_reason_id,
97
+ :preferred_reimbursement_type_id
98
+ ]]
99
99
 
100
100
  @@shipment_attributes = [
101
101
  :special_instructions, :stock_location_id, :id, :tracking,
@@ -123,9 +123,9 @@ module Spree
123
123
  ]
124
124
 
125
125
  @@store_attributes = [:name, :url, :seo_title, :meta_keywords,
126
- :meta_description, :default_currency,
127
- :mail_from_address, :cart_tax_country_iso,
128
- :bcc_email, :reverse_charge_status]
126
+ :meta_description, :default_currency,
127
+ :mail_from_address, :cart_tax_country_iso,
128
+ :bcc_email, :reverse_charge_status]
129
129
 
130
130
  @@taxonomy_attributes = [:name]
131
131
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spree/core/versioned_value'
4
- require 'spree/preferences/preferable'
3
+ require "spree/core/versioned_value"
4
+ require "spree/preferences/preferable"
5
5
 
6
6
  module Spree::Preferences
7
7
  # This takes the preferrable methods and adds some
@@ -107,10 +107,10 @@ module Spree::Preferences
107
107
  set(default_preferences)
108
108
  end
109
109
 
110
- alias :[] :get_preference
111
- alias :[]= :set_preference
110
+ alias_method :[], :get_preference
111
+ alias_method :[]=, :set_preference
112
112
 
113
- alias :get :get_preference
113
+ alias_method :get, :get_preference
114
114
 
115
115
  # @param preferences [Hash] a hash of preferences to set
116
116
  def set(preferences)
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spree/preferences/preferable_class_methods'
4
- require 'active_support/concern'
5
- require 'active_support/core_ext/hash/keys'
3
+ require "spree/preferences/preferable_class_methods"
4
+ require "active_support/concern"
5
+ require "active_support/core_ext/hash/keys"
6
6
 
7
7
  module Spree
8
8
  module Preferences
@@ -117,11 +117,9 @@ module Spree
117
117
  # This may raise an infinite loop error if any of the defaults are
118
118
  # dependent on other preferences defaults.
119
119
  def default_preferences
120
- Hash[
121
- defined_preferences.map do |preference|
122
- [preference, preference_default(preference)]
123
- end
124
- ]
120
+ defined_preferences.map do |preference|
121
+ [preference, preference_default(preference)]
122
+ end.to_h
125
123
  end
126
124
 
127
125
  # Preference names representable as form fields in Solidus backend
@@ -165,8 +163,8 @@ module Spree
165
163
  value.to_i
166
164
  when :boolean
167
165
  if !value ||
168
- value.to_s =~ /\A(f|false|0|^)\Z/i ||
169
- (value.respond_to?(:empty?) && value.empty?)
166
+ value.to_s =~ /\A(f|false|0|^)\Z/i ||
167
+ (value.respond_to?(:empty?) && value.empty?)
170
168
  false
171
169
  else
172
170
  true
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spree/encryptor'
3
+ require "spree/encryptor"
4
4
 
5
5
  module Spree::Preferences
6
6
  module PreferableClassMethods
7
- DEFAULT_ADMIN_FORM_PREFERENCE_TYPES = %i(
7
+ DEFAULT_ADMIN_FORM_PREFERENCE_TYPES = %i[
8
8
  boolean
9
9
  decimal
10
10
  integer
@@ -12,7 +12,7 @@ module Spree::Preferences
12
12
  string
13
13
  text
14
14
  encrypted_string
15
- )
15
+ ]
16
16
 
17
17
  def defined_preferences
18
18
  []
@@ -27,13 +27,13 @@ module Spree::Preferences
27
27
  end
28
28
 
29
29
  default = begin
30
- given = options[:default]
31
- if given.is_a?(Proc)
32
- given
33
- else
34
- proc { given }
35
- end
36
- end
30
+ given = options[:default]
31
+ if given.is_a?(Proc)
32
+ given
33
+ else
34
+ proc { given }
35
+ end
36
+ end
37
37
 
38
38
  # The defined preferences on a class are all those defined directly on
39
39
  # that class as well as those defined on ancestors.
@@ -76,25 +76,25 @@ module Spree::Preferences
76
76
  end
77
77
 
78
78
  def preference_getter_method(name)
79
- "preferred_#{name}".to_sym
79
+ :"preferred_#{name}"
80
80
  end
81
81
 
82
82
  def preference_setter_method(name)
83
- "preferred_#{name}=".to_sym
83
+ :"preferred_#{name}="
84
84
  end
85
85
 
86
86
  def preference_default_getter_method(name)
87
- "preferred_#{name}_default".to_sym
87
+ :"preferred_#{name}_default"
88
88
  end
89
89
 
90
90
  def preference_type_getter_method(name)
91
- "preferred_#{name}_type".to_sym
91
+ :"preferred_#{name}_type"
92
92
  end
93
93
 
94
94
  def preference_encryptor(options)
95
95
  key = options[:encryption_key] ||
96
- ENV['SOLIDUS_PREFERENCES_MASTER_KEY'] ||
97
- Rails.application.credentials.secret_key_base
96
+ ENV["SOLIDUS_PREFERENCES_MASTER_KEY"] ||
97
+ Rails.application.credentials.secret_key_base
98
98
 
99
99
  Spree::Encryptor.new(key)
100
100
  end
@@ -19,7 +19,7 @@ module Spree
19
19
  changes
20
20
  else
21
21
  changes.merge(
22
- pref_key => { from: value_from, to: value_to }
22
+ pref_key => {from: value_from, to: value_to}
23
23
  )
24
24
  end
25
25
  end
@@ -26,11 +26,11 @@ module Spree::Preferences
26
26
  private
27
27
 
28
28
  def key_for(key)
29
- [rails_cache_id, @prefix, key, @suffix].compact.join('/')
29
+ [rails_cache_id, @prefix, key, @suffix].compact.join("/")
30
30
  end
31
31
 
32
32
  def rails_cache_id
33
- ENV['RAILS_CACHE_ID']
33
+ ENV["RAILS_CACHE_ID"]
34
34
  end
35
35
  end
36
36
  end
@@ -55,8 +55,8 @@ module Spree
55
55
  next if extra_keys.empty?
56
56
 
57
57
  raise \
58
- "Unexpected keys found for #{klass} under #{name}: #{extra_keys.sort.join(', ')} " \
59
- "(expected keys: #{klass_keys.sort.join(', ')})"
58
+ "Unexpected keys found for #{klass} under #{name}: #{extra_keys.sort.join(", ")} " \
59
+ "(expected keys: #{klass_keys.sort.join(", ")})"
60
60
  end
61
61
  end
62
62
  end
@@ -3,7 +3,7 @@
3
3
  # Use singleton class Spree::Preferences::Store.instance to access
4
4
  #
5
5
 
6
- require 'singleton'
6
+ require "singleton"
7
7
 
8
8
  module Spree::Preferences
9
9
  class StoreInstance
@@ -35,19 +35,19 @@ module Spree::Preferences
35
35
  # has been cleared from the cache
36
36
 
37
37
  # does it exist in the database?
38
- if preference = Spree::Preference.find_by(key:)
38
+ val = if (preference = Spree::Preference.find_by(key:))
39
39
  # it does exist
40
- val = preference.value
40
+ preference.value
41
41
  else
42
42
  # use the fallback value
43
- val = yield
43
+ yield
44
44
  end
45
45
 
46
46
  # Cache either the value from the db or the fallback value.
47
47
  # This avoids hitting the db with subsequent queries.
48
48
  @cache.write(key, val)
49
49
 
50
- return val
50
+ val
51
51
  else
52
52
  yield
53
53
  end
@@ -77,7 +77,7 @@ module Spree::Preferences
77
77
  return unless should_persist?
78
78
 
79
79
  preference = Spree::Preference.find_by(key: cache_key)
80
- preference.destroy if preference
80
+ preference&.destroy
81
81
  end
82
82
 
83
83
  def should_persist?
@@ -1,107 +1,107 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- RSpec.shared_examples_for 'access granted' do
4
- it 'should allow show' do
3
+ RSpec.shared_examples_for "access granted" do
4
+ it "should allow show" do
5
5
  expect(ability).to be_able_to(:show, resource, token) if token
6
6
  expect(ability).to be_able_to(:show, resource) unless token
7
7
  end
8
8
 
9
- it 'should allow create' do
9
+ it "should allow create" do
10
10
  expect(ability).to be_able_to(:create, resource, token) if token
11
11
  expect(ability).to be_able_to(:create, resource) unless token
12
12
  end
13
13
 
14
- it 'should allow update' do
14
+ it "should allow update" do
15
15
  expect(ability).to be_able_to(:update, resource, token) if token
16
16
  expect(ability).to be_able_to(:update, resource) unless token
17
17
  end
18
18
  end
19
19
 
20
- RSpec.shared_examples_for 'access denied' do
21
- it 'should not allow show' do
20
+ RSpec.shared_examples_for "access denied" do
21
+ it "should not allow show" do
22
22
  expect(ability).to_not be_able_to(:show, resource)
23
23
  end
24
24
 
25
- it 'should not allow create' do
25
+ it "should not allow create" do
26
26
  expect(ability).to_not be_able_to(:create, resource)
27
27
  end
28
28
 
29
- it 'should not allow update' do
29
+ it "should not allow update" do
30
30
  expect(ability).to_not be_able_to(:update, resource)
31
31
  end
32
32
  end
33
33
 
34
- RSpec.shared_examples_for 'admin granted' do
35
- it 'should allow admin' do
34
+ RSpec.shared_examples_for "admin granted" do
35
+ it "should allow admin" do
36
36
  expect(ability).to be_able_to(:admin, resource, token) if token
37
37
  expect(ability).to be_able_to(:admin, resource) unless token
38
38
  end
39
39
  end
40
40
 
41
- RSpec.shared_examples_for 'admin denied' do
42
- it 'should not allow admin' do
41
+ RSpec.shared_examples_for "admin denied" do
42
+ it "should not allow admin" do
43
43
  expect(ability).to_not be_able_to(:admin, resource)
44
44
  end
45
45
  end
46
46
 
47
- RSpec.shared_examples_for 'index allowed' do
48
- it 'should allow index' do
47
+ RSpec.shared_examples_for "index allowed" do
48
+ it "should allow index" do
49
49
  expect(ability).to be_able_to(:index, resource)
50
50
  end
51
51
  end
52
52
 
53
- RSpec.shared_examples_for 'no index allowed' do
54
- it 'should not allow index' do
53
+ RSpec.shared_examples_for "no index allowed" do
54
+ it "should not allow index" do
55
55
  expect(ability).to_not be_able_to(:index, resource)
56
56
  end
57
57
  end
58
58
 
59
- RSpec.shared_examples_for 'create only' do
60
- it 'should allow create' do
59
+ RSpec.shared_examples_for "create only" do
60
+ it "should allow create" do
61
61
  expect(ability).to be_able_to(:create, resource)
62
62
  end
63
63
 
64
- it 'should not allow show' do
64
+ it "should not allow show" do
65
65
  expect(ability).to_not be_able_to(:show, resource)
66
66
  end
67
67
 
68
- it 'should not allow update' do
68
+ it "should not allow update" do
69
69
  expect(ability).to_not be_able_to(:update, resource)
70
70
  end
71
71
 
72
- it 'should not allow index' do
72
+ it "should not allow index" do
73
73
  expect(ability).to_not be_able_to(:index, resource)
74
74
  end
75
75
  end
76
76
 
77
- RSpec.shared_examples_for 'read only' do
78
- it 'should not allow create' do
77
+ RSpec.shared_examples_for "read only" do
78
+ it "should not allow create" do
79
79
  expect(ability).to_not be_able_to(:create, resource)
80
80
  end
81
81
 
82
- it 'should not allow update' do
82
+ it "should not allow update" do
83
83
  expect(ability).to_not be_able_to(:update, resource)
84
84
  end
85
85
 
86
- it 'should allow index' do
86
+ it "should allow index" do
87
87
  expect(ability).to be_able_to(:index, resource)
88
88
  end
89
89
  end
90
90
 
91
- RSpec.shared_examples_for 'update only' do
92
- it 'should not allow create' do
91
+ RSpec.shared_examples_for "update only" do
92
+ it "should not allow create" do
93
93
  expect(ability).to_not be_able_to(:create, resource)
94
94
  end
95
95
 
96
- it 'should not allow show' do
96
+ it "should not allow show" do
97
97
  expect(ability).to_not be_able_to(:show, resource)
98
98
  end
99
99
 
100
- it 'should allow update' do
100
+ it "should allow update" do
101
101
  expect(ability).to be_able_to(:update, resource)
102
102
  end
103
103
 
104
- it 'should not allow index' do
104
+ it "should not allow index" do
105
105
  expect(ability).to_not be_able_to(:index, resource)
106
106
  end
107
107
  end
@@ -1,15 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'cancan'
3
+ require "cancan"
4
4
 
5
5
  module Spree
6
6
  module TestingSupport
7
7
  module AuthorizationHelpers
8
8
  module CustomAbility
9
9
  def build_ability(&block)
10
- block ||= proc{ |_u| can :manage, :all }
10
+ block ||= proc { |_u| can :manage, :all }
11
11
  Class.new do
12
12
  include CanCan::Ability
13
+
13
14
  define_method(:initialize, block)
14
15
  end
15
16
  end
@@ -41,9 +42,9 @@ module Spree
41
42
  end
42
43
 
43
44
  before do
44
- allow(Spree.user_class).to receive(:find_by).
45
- with(hash_including(:spree_api_key)).
46
- and_return(Spree.user_class.new)
45
+ allow(Spree.user_class).to receive(:find_by)
46
+ .with(hash_including(:spree_api_key))
47
+ .and_return(Spree.user_class.new)
47
48
  end
48
49
  end
49
50
 
@@ -5,7 +5,7 @@ module Spree
5
5
  module BlacklistUrls
6
6
  def setup_url_blacklist(browser)
7
7
  if browser.respond_to?(:url_blacklist)
8
- browser.url_blacklist = ['https://fonts.googleapis.com']
8
+ browser.url_blacklist = ["https://fonts.googleapis.com"]
9
9
  end
10
10
  end
11
11
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spree/bus'
3
+ require "spree/bus"
4
4
 
5
5
  module Spree
6
6
  module TestingSupport
@@ -6,4 +6,4 @@ require "capybara-screenshot"
6
6
  Capybara::Screenshot.register_driver(:selenium_headless) do |driver, path|
7
7
  driver.browser.save_screenshot(path)
8
8
  end
9
- Capybara.javascript_driver = (ENV['CAPYBARA_DRIVER'] || :selenium_headless).to_sym
9
+ Capybara.javascript_driver = (ENV["CAPYBARA_DRIVER"] || :selenium_headless).to_sym
@@ -8,7 +8,7 @@ module Spree
8
8
  end
9
9
 
10
10
  def eventually_fill_in(field, options = {})
11
- expect(page).to have_css('#' + field)
11
+ expect(page).to have_css("#" + field)
12
12
  fill_in field, options
13
13
  end
14
14
 
@@ -42,7 +42,7 @@ module Spree
42
42
  }.merge(options)
43
43
  label = find_label_by_text(options[:from])
44
44
  within label.first(:xpath, ".//..") do
45
- options[:from] = "##{find('.select2-container')['id']}"
45
+ options[:from] = "##{find(".select2-container")["id"]}"
46
46
  end
47
47
  select2_search_without_selection(options[:search], from: options[:from])
48
48
  select_select2_result(value) if options[:select]
@@ -65,14 +65,14 @@ module Spree
65
65
  # document. Can be used to 'escape' from within the context of another within
66
66
  # block.
67
67
  def within_entire_page(&block)
68
- within(:xpath, '//body', &block)
68
+ within(:xpath, "//body", &block)
69
69
  end
70
70
 
71
71
  def select2(value, options)
72
72
  label = find_label_by_text(options[:from])
73
73
 
74
74
  within label.first(:xpath, ".//..") do
75
- options[:from] = "##{find('.select2-container')['id']}"
75
+ options[:from] = "##{find(".select2-container")["id"]}"
76
76
  end
77
77
  targetted_select2(value, options)
78
78
  end
@@ -89,16 +89,16 @@ module Spree
89
89
 
90
90
  def targetted_select2(value, options)
91
91
  # find select2 element and click it
92
- find(options[:from]).find('a').click
92
+ find(options[:from]).find("a").click
93
93
  select_select2_result(value)
94
94
  end
95
95
 
96
96
  def select_select2_result(value)
97
97
  # results are in a div appended to the end of the document
98
98
  within_entire_page do
99
- expect(page).to have_selector('.select2-result-label', visible: true)
99
+ expect(page).to have_selector(".select2-result-label", visible: true)
100
100
  find("div.select2-result-label", text: /#{Regexp.escape(value)}/i, match: :prefer_exact).click
101
- expect(page).not_to have_selector('.select2-result-label')
101
+ expect(page).not_to have_selector(".select2-result-label")
102
102
  end
103
103
  end
104
104
 
@@ -108,17 +108,17 @@ module Spree
108
108
  # We need to select labels which are not .select2-offscreen, as select2
109
109
  # makes a duplicate label with the same text, and we want to be sure to
110
110
  # find the original.
111
- find('label:not(.select2-offscreen)', text: /#{Regexp.escape(text)}/i, match: :one)
111
+ find("label:not(.select2-offscreen)", text: /#{Regexp.escape(text)}/i, match: :one)
112
112
  end
113
113
 
114
- def dialog(parent: 'body', **options)
114
+ def dialog(parent: "body", **options)
115
115
  within(parent) do
116
- find('dialog', visible: :all, **options)
116
+ find("dialog", visible: :all, **options)
117
117
  end
118
118
  end
119
119
 
120
120
  def turbo_frame_modal
121
- dialog(parent: find('turbo-frame', visible: :all))
121
+ dialog(parent: find("turbo-frame", visible: :all))
122
122
  end
123
123
  end
124
124
  end
@@ -144,4 +144,4 @@ RSpec.configure do |c|
144
144
  end
145
145
 
146
146
  # A workaround for https://github.com/rspec/rspec-rails/issues/1897
147
- Capybara.server = :puma, { Silent: true }
147
+ Capybara.server = :puma, {Silent: true}