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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 54346c8f091dd2395832f0e0118d80c50e52f6fc7bda852c0147164061f28055
4
- data.tar.gz: 445ada16ce8a53ae7f4904fdacae27215954de7f2f1387a39ae4f6b8c8ee73be
3
+ metadata.gz: 83a084afb161c2cb55167e455d6b84e305c50fe62403210a689e0aedd84e24dd
4
+ data.tar.gz: a19d4dc02d4f0aa3d55fe61dc04fe9676c95bc41c60080ba0976165aca6351c2
5
5
  SHA512:
6
- metadata.gz: 92d7572979dddd22c078e452a0ade011ac4f230876ea24cbb130917d7c088086d316685e2efe6618d73ed5317a24aa17aeb9376cb6d18c4a4704c56f0f3caf51
7
- data.tar.gz: e815c14e8992cdb3549c44711338c43e24f8dfe2195b6f0540b9427f0f7043832d94e7f78c32028af579ea842a53a8edbb53714d5fa7ee97fda962e12b8b19c6
6
+ metadata.gz: a46112878fad1da1501aa4f6a802cacf8b532df996057050c35749ba7cf9b299f80f0fc5094a5859c730602fbeddbeb98ec0463e6adcc3f1a0ed88272cde788d
7
+ data.tar.gz: 41f5daa52188b4c1bfcfa186bc6ebeb0ae55b05bbdb9d267b8cc09d4e5a741e62198879fd68000314a5054bf2fc4ed9105a0d515cf86260d0141d8c37a21aad6
data/Rakefile CHANGED
@@ -1,34 +1,34 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'rubygems'
4
- require 'rake'
5
- require 'rake/testtask'
6
- require 'rspec/core/rake_task'
7
- require 'spree/testing_support/dummy_app/rake_tasks'
8
- require 'bundler/gem_tasks'
3
+ require "rubygems"
4
+ require "rake"
5
+ require "rake/testtask"
6
+ require "rspec/core/rake_task"
7
+ require "spree/testing_support/dummy_app/rake_tasks"
8
+ require "bundler/gem_tasks"
9
9
 
10
10
  RSpec::Core::RakeTask.new
11
11
  task default: :spec
12
12
 
13
13
  DummyApp::RakeTasks.new(
14
14
  gem_root: File.dirname(__FILE__),
15
- lib_name: 'solidus_core'
15
+ lib_name: "solidus_core"
16
16
  )
17
17
 
18
- require 'yard/rake/yardoc_task'
18
+ require "yard/rake/yardoc_task"
19
19
  YARD::Rake::YardocTask.new(:yard)
20
20
  # The following workaround can be removed
21
21
  # once https://github.com/lsegal/yard/pull/1457 is merged.
22
- task('yard:require') { require 'yard' }
23
- task yard: 'yard:require'
22
+ task("yard:require") { require "yard" }
23
+ task yard: "yard:require"
24
24
 
25
25
  namespace :spec do
26
26
  task :isolated do
27
- spec_files = Dir['spec/**/*_spec.rb']
27
+ spec_files = Dir["spec/**/*_spec.rb"]
28
28
  failed_specs =
29
29
  spec_files.reject do |file|
30
30
  puts "rspec #{file}"
31
- system('rspec', file)
31
+ system("rspec", file)
32
32
  end
33
33
 
34
34
  if !failed_specs.empty?
@@ -39,4 +39,4 @@ namespace :spec do
39
39
  end
40
40
  end
41
41
 
42
- task test_app: 'db:reset'
42
+ task test_app: "db:reset"
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'cancan'
4
- require_dependency 'spree/core/controller_helpers/strong_parameters'
3
+ require "cancan"
4
+ require_dependency "spree/core/controller_helpers/strong_parameters"
5
5
 
6
6
  class Spree::BaseController < ApplicationController
7
7
  include ActiveStorage::SetCurrent
@@ -1,19 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'carmen'
3
+ require "carmen"
4
4
 
5
5
  module Spree
6
6
  module BaseHelper
7
7
  def link_to_cart(text = nil)
8
- text = text ? h(text) : t('spree.cart')
8
+ text = text ? h(text) : t("spree.cart")
9
9
  css_class = nil
10
10
 
11
11
  if current_order.nil? || current_order.item_count.zero?
12
- text = "#{text}: (#{t('spree.empty')})"
13
- css_class = 'empty'
12
+ text = "#{text}: (#{t("spree.empty")})"
13
+ css_class = "empty"
14
14
  else
15
15
  text = "#{text}: (#{current_order.item_count}) <span class='amount'>#{current_order.display_total.to_html}</span>"
16
- css_class = 'full'
16
+ css_class = "full"
17
17
  end
18
18
 
19
19
  link_to text.html_safe, spree.cart_path, class: "cart-info #{css_class}"
@@ -25,7 +25,7 @@ module Spree
25
25
  end
26
26
 
27
27
  def meta_data
28
- object = instance_variable_get('@' + controller_name.singularize)
28
+ object = instance_variable_get("@" + controller_name.singularize)
29
29
  meta = {}
30
30
 
31
31
  if object.is_a? ActiveRecord::Base
@@ -34,7 +34,7 @@ module Spree
34
34
  end
35
35
 
36
36
  if meta[:description].blank? && object.is_a?(Spree::Product)
37
- meta[:description] = truncate(strip_tags(object.description), length: 160, separator: ' ')
37
+ meta[:description] = truncate(strip_tags(object.description), length: 160, separator: " ")
38
38
  end
39
39
 
40
40
  if meta[:keywords].blank? || meta[:description].blank?
@@ -48,12 +48,12 @@ module Spree
48
48
 
49
49
  def meta_data_tags
50
50
  meta_data.map do |name, content|
51
- tag('meta', name:, content:)
51
+ tag("meta", name:, content:)
52
52
  end.join("\n")
53
53
  end
54
54
 
55
55
  def body_class
56
- @body_class ||= content_for?(:sidebar) ? 'two-col' : 'one-col'
56
+ @body_class ||= content_for?(:sidebar) ? "two-col" : "one-col"
57
57
  @body_class
58
58
  end
59
59
 
@@ -72,12 +72,12 @@ module Spree
72
72
  nil
73
73
  end
74
74
 
75
- def taxon_breadcrumbs(taxon, separator = '&nbsp;&raquo;&nbsp;', breadcrumb_class = 'inline')
76
- return '' if current_page?('/') || taxon.nil?
75
+ def taxon_breadcrumbs(taxon, separator = "&nbsp;&raquo;&nbsp;", breadcrumb_class = "inline")
76
+ return "" if current_page?("/") || taxon.nil?
77
77
 
78
- crumbs = [[t('spree.home'), spree.root_path]]
78
+ crumbs = [[t("spree.home"), spree.root_path]]
79
79
 
80
- crumbs << [t('spree.products'), products_path]
80
+ crumbs << [t("spree.products"), products_path]
81
81
  if taxon
82
82
  crumbs += taxon.ancestors.collect { |ancestor| [ancestor.name, spree.nested_taxons_path(ancestor.permalink)] } unless taxon.ancestors.empty?
83
83
  crumbs << [taxon.name, spree.nested_taxons_path(taxon.permalink)]
@@ -86,24 +86,24 @@ module Spree
86
86
  separator = raw(separator)
87
87
 
88
88
  items = crumbs.each_with_index.collect do |crumb, index|
89
- content_tag(:li, itemprop: 'itemListElement', itemscope: '', itemtype: 'https://schema.org/ListItem') do
90
- link_to(crumb.last, itemprop: 'item') do
91
- content_tag(:span, crumb.first, itemprop: 'name') + tag('meta', { itemprop: 'position', content: (index + 1).to_s }, false, false)
92
- end + (crumb == crumbs.last ? '' : separator)
89
+ content_tag(:li, itemprop: "itemListElement", itemscope: "", itemtype: "https://schema.org/ListItem") do
90
+ link_to(crumb.last, itemprop: "item") do
91
+ content_tag(:span, crumb.first, itemprop: "name") + tag("meta", {itemprop: "position", content: (index + 1).to_s}, false, false)
92
+ end + ((crumb == crumbs.last) ? "" : separator)
93
93
  end
94
94
  end
95
95
 
96
- content_tag(:nav, content_tag(:ol, raw(items.map(&:mb_chars).join), class: breadcrumb_class, itemscope: '', itemtype: 'https://schema.org/BreadcrumbList'), id: 'breadcrumbs', class: 'sixteen columns')
96
+ content_tag(:nav, content_tag(:ol, raw(items.map(&:mb_chars).join), class: breadcrumb_class, itemscope: "", itemtype: "https://schema.org/BreadcrumbList"), id: "breadcrumbs", class: "sixteen columns")
97
97
  end
98
98
 
99
99
  def taxons_tree(root_taxon, current_taxon, max_level = 1)
100
- return '' if max_level < 1 || root_taxon.children.empty?
101
- content_tag :ul, class: 'taxons-list' do
100
+ return "" if max_level < 1 || root_taxon.children.empty?
101
+ content_tag :ul, class: "taxons-list" do
102
102
  taxons = root_taxon.children.map do |taxon|
103
- css_class = (current_taxon && current_taxon.self_and_ancestors.include?(taxon)) ? 'current' : nil
103
+ css_class = current_taxon&.self_and_ancestors&.include?(taxon) ? "current" : nil
104
104
  content_tag :li, class: css_class do
105
- link_to(taxon.name, seo_url(taxon)) +
106
- taxons_tree(taxon, current_taxon, max_level - 1)
105
+ link_to(taxon.name, seo_url(taxon)) +
106
+ taxons_tree(taxon, current_taxon, max_level - 1)
107
107
  end
108
108
  end
109
109
  safe_join(taxons, "\n")
@@ -117,7 +117,7 @@ module Spree
117
117
  [country.code, country.name]
118
118
  end.to_h
119
119
 
120
- country_names.update I18n.t('spree.country_names', default: {}).stringify_keys
120
+ country_names.update I18n.t("spree.country_names", default: {}).stringify_keys
121
121
 
122
122
  countries.collect do |country|
123
123
  country.name = country_names.fetch(country.iso, country.name)
@@ -16,18 +16,18 @@ module Spree
16
16
  state_index = states.index(state)
17
17
 
18
18
  if state_index < current_index
19
- css_classes << 'completed'
19
+ css_classes << "completed"
20
20
  text = link_to text, checkout_state_path(state)
21
21
  end
22
22
 
23
- css_classes << 'next' if state_index == current_index + 1
24
- css_classes << 'current' if state == @order.state
25
- css_classes << 'first' if state_index == 0
26
- css_classes << 'last' if state_index == states.length - 1
23
+ css_classes << "next" if state_index == current_index + 1
24
+ css_classes << "current" if state == @order.state
25
+ css_classes << "first" if state_index == 0
26
+ css_classes << "last" if state_index == states.length - 1
27
27
  # It'd be nice to have separate classes but combining them with a dash helps out for IE6 which only sees the last class
28
- content_tag('li', content_tag('span', text), class: css_classes.join('-'))
28
+ content_tag("li", content_tag("span", text), class: css_classes.join("-"))
29
29
  end
30
- content_tag('ol', raw(items.join("\n")), class: 'progress-steps', id: "checkout-step-#{@order.state}")
30
+ content_tag("ol", raw(items.join("\n")), class: "progress-steps", id: "checkout-step-#{@order.state}")
31
31
  end
32
32
  end
33
33
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'cancan'
3
+ require "cancan"
4
4
 
5
5
  module Spree
6
6
  module Core
@@ -1,12 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'carmen'
3
+ require "carmen"
4
4
 
5
5
  module Spree
6
6
  module Core
7
7
  module ControllerHelpers
8
8
  module Common
9
9
  extend ActiveSupport::Concern
10
+
10
11
  included do
11
12
  helper_method :title
12
13
  helper_method :title=
@@ -27,7 +28,7 @@ module Spree
27
28
  title_string = @title.presence || accurate_title
28
29
  if title_string.present?
29
30
  if Spree::Config[:always_put_site_name_in_title]
30
- [title_string, default_title].join(' - ')
31
+ [title_string, default_title].join(" - ")
31
32
  else
32
33
  title_string
33
34
  end
@@ -42,10 +42,8 @@ module Spree
42
42
  end
43
43
 
44
44
  def set_current_order
45
- if spree_current_user && current_order
46
- spree_current_user.orders.by_store(current_store).incomplete.where('id != ?', current_order.id).find_each do |order|
47
- current_order.merge!(order, spree_current_user)
48
- end
45
+ Spree::Config.mergeable_orders_finder_class.new(context: self).call.find_each do |order|
46
+ current_order.merge!(order, spree_current_user)
49
47
  end
50
48
  end
51
49
 
@@ -60,7 +58,7 @@ module Spree
60
58
  end
61
59
 
62
60
  def current_order_params
63
- { currency: current_pricing_options.currency, guest_token: cookies.signed[:guest_token], store_id: current_store.id, user_id: spree_current_user.try(:id) }
61
+ {currency: current_pricing_options.currency, guest_token: cookies.signed[:guest_token], store_id: current_store.id, user_id: spree_current_user.try(:id)}
64
62
  end
65
63
 
66
64
  def new_order_params
@@ -46,8 +46,7 @@ module Spree
46
46
  return params if params[:payment_source].blank?
47
47
 
48
48
  payment_params = params[:order] &&
49
- params[:order][:payments_attributes] &&
50
- params[:order][:payments_attributes].first
49
+ params[:order][:payments_attributes]&.first
51
50
  return params if payment_params.blank?
52
51
 
53
52
  payment_method_id = payment_params[:payment_method_id]
@@ -9,24 +9,24 @@ module Spree
9
9
  end
10
10
 
11
11
  delegate(*Spree::PermittedAttributes::ATTRIBUTES,
12
- to: :permitted_attributes,
13
- prefix: :permitted)
12
+ to: :permitted_attributes,
13
+ prefix: :permitted)
14
14
 
15
15
  def permitted_credit_card_update_attributes
16
16
  permitted_attributes.credit_card_update_attributes + [
17
- address_attributes: permitted_address_attributes
17
+ {address_attributes: permitted_address_attributes}
18
18
  ]
19
19
  end
20
20
 
21
21
  def permitted_payment_attributes
22
22
  permitted_attributes.payment_attributes + [
23
- source_attributes: permitted_source_attributes
23
+ {source_attributes: permitted_source_attributes}
24
24
  ]
25
25
  end
26
26
 
27
27
  def permitted_source_attributes
28
28
  permitted_attributes.source_attributes + [
29
- address_attributes: permitted_address_attributes
29
+ {address_attributes: permitted_address_attributes}
30
30
  ]
31
31
  end
32
32
 
@@ -52,20 +52,20 @@ module Spree
52
52
  permitted_checkout_payment_attributes +
53
53
  permitted_attributes.customer_metadata_attributes +
54
54
  permitted_checkout_confirm_attributes + [
55
- line_items_attributes: permitted_line_item_attributes
56
- ]
55
+ {line_items_attributes: permitted_line_item_attributes}
56
+ ]
57
57
  end
58
58
 
59
59
  def permitted_product_attributes
60
60
  permitted_attributes.product_attributes + [
61
- product_properties_attributes: permitted_product_properties_attributes
61
+ {product_properties_attributes: permitted_product_properties_attributes}
62
62
  ]
63
63
  end
64
64
 
65
65
  def permitted_user_attributes
66
66
  permitted_attributes.user_attributes + [
67
- bill_address_attributes: permitted_address_attributes,
68
- ship_address_attributes: permitted_address_attributes
67
+ {bill_address_attributes: permitted_address_attributes,
68
+ ship_address_attributes: permitted_address_attributes}
69
69
  ]
70
70
  end
71
71
  end
@@ -24,7 +24,7 @@ module Spree
24
24
  return if variant.price_same_as_master?(current_pricing_options)
25
25
  difference = variant.price_difference_from_master(current_pricing_options)
26
26
  absolute_amount = Spree::Money.new(difference.to_d.abs, currency: difference.currency.iso_code)
27
- i18n_key = difference.to_d > 0 ? :price_diff_add_html : :price_diff_subtract_html
27
+ i18n_key = (difference.to_d > 0) ? :price_diff_add_html : :price_diff_subtract_html
28
28
  t(i18n_key, scope: [:spree, :helpers, :products], amount_html: absolute_amount.to_html)
29
29
  end
30
30
 
@@ -35,8 +35,8 @@ module Spree
35
35
  # @return [Spree::Money] the full price
36
36
  def variant_full_price(variant)
37
37
  return if variant.product.variants
38
- .with_prices(current_pricing_options)
39
- .all? { |variant_with_prices| variant_with_prices.price_same_as_master?(current_pricing_options) }
38
+ .with_prices(current_pricing_options)
39
+ .all? { |variant_with_prices| variant_with_prices.price_same_as_master?(current_pricing_options) }
40
40
 
41
41
  variant.price_for_options(current_pricing_options)&.money&.to_html
42
42
  end
@@ -59,9 +59,9 @@ module Spree
59
59
  # @return [String] the filtered text
60
60
  def line_item_description_text(description_text)
61
61
  if description_text.present?
62
- truncate(strip_tags(description_text.gsub('&nbsp;', ' ')), length: 100)
62
+ truncate(strip_tags(description_text.gsub("&nbsp;", " ")), length: 100)
63
63
  else
64
- t('spree.product_has_no_description')
64
+ t("spree.product_has_no_description")
65
65
  end
66
66
  end
67
67
 
@@ -6,7 +6,7 @@ module Spree
6
6
  module StoreHelper
7
7
  # @return [Boolean] true when it is appropriate to show the store menu
8
8
  def store_menu?
9
- %w{thank_you}.exclude? params[:action]
9
+ %w[thank_you].exclude? params[:action]
10
10
  end
11
11
  end
12
12
  end
@@ -15,10 +15,10 @@ module Spree
15
15
  @order = options.fetch(:order)
16
16
  @carton = options.fetch(:carton)
17
17
  @manifest = @carton.manifest_for_order(@order)
18
- options = { resend: false }.merge(options)
18
+ options = {resend: false}.merge(options)
19
19
  @store = @order.store
20
- subject = (options[:resend] ? "[#{t('spree.resend').upcase}] " : '')
21
- subject += "#{@store.name} #{t('spree.shipment_mailer.shipped_email.subject')} ##{@order.number}"
20
+ subject = (options[:resend] ? "[#{t("spree.resend").upcase}] " : "")
21
+ subject += "#{@store.name} #{t("spree.shipment_mailer.shipped_email.subject")} ##{@order.number}"
22
22
  mail(to: @order.email, from: from_address(@store), subject:)
23
23
  end
24
24
  end
@@ -5,7 +5,7 @@ module Spree
5
5
  def confirm_email(order, resend = false)
6
6
  @order = order
7
7
  @store = @order.store
8
- subject = build_subject(t('.subject'), resend)
8
+ subject = build_subject(t(".subject"), resend)
9
9
 
10
10
  mail(to: @order.email, bcc: bcc_address(@store), from: from_address(@store), subject:)
11
11
  end
@@ -13,7 +13,7 @@ module Spree
13
13
  def cancel_email(order, resend = false)
14
14
  @order = order
15
15
  @store = @order.store
16
- subject = build_subject(t('.subject'), resend)
16
+ subject = build_subject(t(".subject"), resend)
17
17
 
18
18
  mail(to: @order.email, from: from_address(@store), subject:)
19
19
  end
@@ -21,7 +21,7 @@ module Spree
21
21
  def inventory_cancellation_email(order, inventory_units, resend = false)
22
22
  @order, @inventory_units = order, inventory_units
23
23
  @store = @order.store
24
- subject = build_subject(t('spree.order_mailer.inventory_cancellation.subject'), resend)
24
+ subject = build_subject(t("spree.order_mailer.inventory_cancellation.subject"), resend)
25
25
 
26
26
  mail(to: @order.email, from: from_address(@store), subject:)
27
27
  end
@@ -29,7 +29,7 @@ module Spree
29
29
  private
30
30
 
31
31
  def build_subject(subject_text, resend)
32
- resend_text = (resend ? "[#{t('spree.resend').upcase}] " : '')
32
+ resend_text = (resend ? "[#{t("spree.resend").upcase}] " : "")
33
33
  "#{resend_text}#{@order.store.name} #{subject_text} ##{@order.number}"
34
34
  end
35
35
  end
@@ -5,8 +5,8 @@ module Spree
5
5
  def reimbursement_email(reimbursement, resend = false)
6
6
  @reimbursement = reimbursement.respond_to?(:id) ? reimbursement : Spree::Reimbursement.find(reimbursement)
7
7
  store = @reimbursement.order.store
8
- subject = (resend ? "[#{t('spree.resend').upcase}] " : '')
9
- subject += "#{store.name} #{t('.subject')} ##{@reimbursement.order.number}"
8
+ subject = (resend ? "[#{t("spree.resend").upcase}] " : "")
9
+ subject += "#{store.name} #{t(".subject")} ##{@reimbursement.order.number}"
10
10
  mail(to: @reimbursement.order.email, from: from_address(store), subject:)
11
11
  end
12
12
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'mini_magick'
3
+ require "mini_magick"
4
4
 
5
5
  module Spree
6
6
  module ActiveStorageAdapter
@@ -62,7 +62,7 @@ module Spree
62
62
  rescue ActiveStorage::FileNotFoundError => error
63
63
  logger.error("#{error} - Image id: #{attachment.record.id} is corrupted or cannot be found")
64
64
 
65
- { identified: nil, width: nil, height: nil, analyzed: true }
65
+ {identified: nil, width: nil, height: nil, analyzed: true}
66
66
  end
67
67
 
68
68
  def styles_to_transformations(styles)
@@ -70,18 +70,18 @@ module Spree
70
70
  end
71
71
 
72
72
  def imagemagick_to_image_processing_definition(definition)
73
- width_height = definition.split('x').map(&:to_i)
73
+ width_height = definition.split("x").map(&:to_i)
74
74
 
75
75
  case definition[-1].to_sym
76
76
  when :^
77
- { resize_to_fill: width_height }
77
+ {resize_to_fill: width_height}
78
78
  else
79
79
  default_transformation(*width_height)
80
80
  end
81
81
  end
82
82
 
83
83
  def default_transformation(width, height)
84
- { resize_to_limit: [width, height] }
84
+ {resize_to_limit: [width, height]}
85
85
  end
86
86
  end
87
87
  end
@@ -26,13 +26,13 @@ module Spree
26
26
 
27
27
  def attachable_io(attachable)
28
28
  filename = if attachable.respond_to?(:to_path)
29
- attachable.to_path
30
- else
31
- SecureRandom.uuid
32
- end
29
+ attachable.to_path
30
+ else
31
+ SecureRandom.uuid
32
+ end
33
33
  attachable.rewind
34
34
 
35
- { io: attachable, filename: }
35
+ {io: attachable, filename:}
36
36
  end
37
37
  end
38
38
  end
@@ -25,7 +25,7 @@ module Spree
25
25
  end
26
26
 
27
27
  def attachment_definitions
28
- { attachment_name => attachment_definition }
28
+ {attachment_name => attachment_definition}
29
29
  end
30
30
 
31
31
  private
@@ -65,7 +65,7 @@ module Spree
65
65
  return unless attachment.attached?
66
66
  return if attachment.image?
67
67
 
68
- errors.add(self.class.attachment_name, 'is not an image')
68
+ errors.add(self.class.attachment_name, "is not an image")
69
69
  end
70
70
  end
71
71
 
@@ -3,10 +3,10 @@
3
3
  module Spree
4
4
  module AdjustmentSource
5
5
  def remove_adjustments_from_incomplete_orders
6
- adjustments.
7
- joins(:order).
8
- merge(Spree::Order.incomplete).
9
- destroy_all
6
+ adjustments
7
+ .joins(:order)
8
+ .merge(Spree::Order.incomplete)
9
+ .destroy_all
10
10
  end
11
11
  end
12
12
  end
@@ -21,10 +21,10 @@ module Spree
21
21
  # money_methods tax_amount: { currency: "CAD", no_cents: true }, :price
22
22
  def money_methods(*args)
23
23
  args.each do |money_method|
24
- money_method = { money_method => {} } unless money_method.is_a? Hash
24
+ money_method = {money_method => {}} unless money_method.is_a? Hash
25
25
  money_method.each do |method_name, opts|
26
26
  define_method("display_#{method_name}") do
27
- default_opts = respond_to?(:currency) ? { currency: } : {}
27
+ default_opts = respond_to?(:currency) ? {currency:} : {}
28
28
  Spree::Money.new(send(method_name), default_opts.merge(opts))
29
29
  end
30
30
  end
@@ -10,7 +10,7 @@ module Spree
10
10
  scope :active, -> { where(active: true) }
11
11
  default_scope -> { order(arel_table[:name].lower) }
12
12
 
13
- validates :name, presence: true, uniqueness: { case_sensitive: false, allow_blank: true }
13
+ validates :name, presence: true, uniqueness: {case_sensitive: false, allow_blank: true}
14
14
  end
15
15
  end
16
16
  end
@@ -13,12 +13,12 @@ module Spree
13
13
 
14
14
  # virtual attributes for use with AJAX autocompletion
15
15
  def property_name
16
- property.name if property
16
+ property&.name
17
17
  end
18
18
 
19
19
  def property_name=(name)
20
20
  unless name.blank?
21
- unless property = Spree::Property.find_by(name:)
21
+ unless (property = Spree::Property.find_by(name:))
22
22
  property = Spree::Property.create(name:, presentation: name)
23
23
  end
24
24
  self.property = property
@@ -8,7 +8,7 @@ module Spree
8
8
  included do
9
9
  include Spree::Preferences::Preferable
10
10
 
11
- if Rails.gem_version >= Gem::Version.new('7.1')
11
+ if Rails.gem_version >= Gem::Version.new("7.1")
12
12
  serialize :preferences, type: Hash, coder: YAML
13
13
  else
14
14
  serialize :preferences, Hash, coder: YAML
@@ -2,6 +2,7 @@
2
2
 
3
3
  module Spree::RansackableAttributes
4
4
  extend ActiveSupport::Concern
5
+
5
6
  included do
6
7
  class_attribute :allowed_ransackable_associations, default: []
7
8
  class_attribute :allowed_ransackable_attributes, default: []
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'discard'
3
+ require "discard"
4
4
 
5
5
  module Spree
6
6
  module SoftDeletable
@@ -8,6 +8,7 @@ module Spree
8
8
 
9
9
  included do
10
10
  include Discard::Model
11
+
11
12
  self.discard_column = :deleted_at
12
13
 
13
14
  default_scope { kept }
@@ -16,7 +16,7 @@ module Spree
16
16
 
17
17
  # Enqueue background job to track state changes asynchronously
18
18
  def enqueue_state_change_tracking
19
- previous_state, current_state = saved_changes['state']
19
+ previous_state, current_state = saved_changes["state"]
20
20
 
21
21
  # Enqueue the job to track this state change
22
22
  Spree::Config.state_change_tracking_class.call(