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
@@ -19,12 +19,12 @@ module Spree
19
19
  belongs_to :zone, class_name: "Spree::Zone", inverse_of: :tax_rates, optional: true
20
20
 
21
21
  has_many :tax_rate_tax_categories,
22
- class_name: 'Spree::TaxRateTaxCategory',
22
+ class_name: "Spree::TaxRateTaxCategory",
23
23
  dependent: :destroy,
24
24
  inverse_of: :tax_rate
25
25
  has_many :tax_categories,
26
26
  through: :tax_rate_tax_categories,
27
- class_name: 'Spree::TaxCategory',
27
+ class_name: "Spree::TaxCategory",
28
28
  inverse_of: :tax_rates
29
29
 
30
30
  has_many :adjustments, as: :source
@@ -37,12 +37,12 @@ module Spree
37
37
  # Finds all tax rates whose zones match a given address
38
38
  scope :for_address, ->(address) { joins(:zone).merge(Spree::Zone.for_address(address)) }
39
39
  scope :for_country,
40
- ->(country) { for_address(Spree::Tax::TaxLocation.new(country:)) }
40
+ ->(country) { for_address(Spree::Tax::TaxLocation.new(country:)) }
41
41
  scope :active, -> do
42
42
  table = arel_table
43
43
  time = Time.current
44
- where(table[:starts_at].eq(nil).or(table[:starts_at].lt(time))).
45
- where(table[:expires_at].eq(nil).or(table[:expires_at].gt(time)))
44
+ where(table[:starts_at].eq(nil).or(table[:starts_at].lt(time)))
45
+ .where(table[:expires_at].eq(nil).or(table[:expires_at].gt(time)))
46
46
  end
47
47
 
48
48
  # Finds geographically matching tax rates for a tax zone.
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Spree
4
4
  class TaxRateTaxCategory < Spree::Base
5
- belongs_to :tax_rate, class_name: 'Spree::TaxRate', inverse_of: :tax_rate_tax_categories, optional: true
6
- belongs_to :tax_category, class_name: 'Spree::TaxCategory', inverse_of: :tax_rate_tax_categories, optional: true
5
+ belongs_to :tax_rate, class_name: "Spree::TaxRate", inverse_of: :tax_rate_tax_categories, optional: true
6
+ belongs_to :tax_category, class_name: "Spree::TaxCategory", inverse_of: :tax_rate_tax_categories, optional: true
7
7
  end
8
8
  end
@@ -6,8 +6,8 @@ module Spree::Taxon::ActiveStorageAttachment
6
6
 
7
7
  included do
8
8
  has_attachment :icon,
9
- styles: Spree::Config.taxon_image_styles,
10
- default_style: Spree::Config.taxon_image_style_default
9
+ styles: Spree::Config.taxon_image_styles,
10
+ default_style: Spree::Config.taxon_image_style_default
11
11
  validate :icon_is_an_image
12
12
  end
13
13
  end
@@ -7,12 +7,12 @@ module Spree::Taxon::PaperclipAttachment
7
7
  has_attached_file :icon,
8
8
  styles: Spree::Config.taxon_image_styles,
9
9
  default_style: Spree::Config.taxon_image_style_default,
10
- url: '/spree/taxons/:id/:style/:basename.:extension',
11
- path: ':rails_root/public/spree/taxons/:id/:style/:basename.:extension',
12
- default_url: '/assets/default_taxon.png'
10
+ url: "/spree/taxons/:id/:style/:basename.:extension",
11
+ path: ":rails_root/public/spree/taxons/:id/:style/:basename.:extension",
12
+ default_url: "/assets/default_taxon.png"
13
13
 
14
14
  validates_attachment :icon,
15
- content_type: { content_type: Spree::Config.allowed_image_mime_types }
15
+ content_type: {content_type: Spree::Config.allowed_image_mime_types}
16
16
  end
17
17
 
18
18
  def icon_present?
@@ -1,15 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spree/core/product_filters'
4
-
5
3
  module Spree
6
4
  class Taxon < Spree::Base
7
5
  extend FriendlyId
6
+
8
7
  friendly_id :permalink, use: :history, slug_column: :permalink
9
8
 
10
9
  acts_as_nested_set dependent: :destroy
11
10
 
12
- belongs_to :taxonomy, class_name: 'Spree::Taxonomy', inverse_of: :taxons
11
+ belongs_to :taxonomy, class_name: "Spree::Taxonomy", inverse_of: :taxons
13
12
  has_many :classifications, -> { order(:position) }, dependent: :delete_all, inverse_of: :taxon
14
13
  has_many :products, through: :classifications
15
14
 
@@ -17,11 +16,11 @@ module Spree
17
16
  after_update :update_child_permalinks, if: :saved_change_to_permalink?
18
17
 
19
18
  validates :name, presence: true
20
- validates :name, uniqueness: { scope: :parent_id, message: :must_be_unique_under_same_parent }
21
- validates :meta_keywords, length: { maximum: 255 }
22
- validates :meta_description, length: { maximum: 255 }
23
- validates :meta_title, length: { maximum: 255 }
24
- validates :taxonomy_id, uniqueness: { scope: :parent_id, message: :can_have_only_one_root }, if: -> { root? }
19
+ validates :name, uniqueness: {scope: :parent_id, message: :must_be_unique_under_same_parent}
20
+ validates :meta_keywords, length: {maximum: 255}
21
+ validates :meta_description, length: {maximum: 255}
22
+ validates :meta_title, length: {maximum: 255}
23
+ validates :taxonomy_id, uniqueness: {scope: :parent_id, message: :can_have_only_one_root}, if: -> { root? }
25
24
 
26
25
  after_save :touch_ancestors_and_taxonomy
27
26
  after_touch :touch_ancestors_and_taxonomy
@@ -43,7 +42,7 @@ module Spree
43
42
  # Sets this taxons permalink to a valid url encoded string based on its
44
43
  # name and its parents permalink (if present.)
45
44
  def set_permalink
46
- permalink_tail = permalink.present? ? permalink.split('/').last : name
45
+ permalink_tail = permalink.present? ? permalink.split("/").last : name
47
46
  self.permalink_part = Spree::Config.taxon_url_parametizer_class.parameterize(permalink_tail)
48
47
  end
49
48
 
@@ -75,7 +74,7 @@ module Spree
75
74
  def all_products
76
75
  scope = Product.joins(:taxons)
77
76
  scope.where(
78
- spree_taxons: { id: self_and_descendants.select(:id) }
77
+ spree_taxons: {id: self_and_descendants.select(:id)}
79
78
  )
80
79
  end
81
80
 
@@ -109,14 +108,14 @@ module Spree
109
108
  end
110
109
 
111
110
  def permalink_part
112
- permalink.split('/').last
111
+ permalink.split("/").last
113
112
  end
114
113
 
115
114
  def permalink_part=(value)
116
- if parent.present?
117
- self.permalink = "#{parent.permalink}/#{value}"
115
+ self.permalink = if parent.present?
116
+ "#{parent.permalink}/#{value}"
118
117
  else
119
- self.permalink = value
118
+ value
120
119
  end
121
120
  end
122
121
 
@@ -129,13 +128,13 @@ module Spree
129
128
  # override for {FriendlyId::Slugged#normalize_friendly_id} method,
130
129
  # to control over the slug format
131
130
  def normalize_friendly_id(value)
132
- return '' if value.blank?
131
+ return "" if value.blank?
133
132
 
134
- parts = value.to_s.split('/')
133
+ parts = value.to_s.split("/")
135
134
  last_word = parts.pop
136
135
  corrected_last_word = Spree::Config.taxon_url_parametizer_class.parameterize(last_word)
137
136
 
138
- (parts << corrected_last_word).join('/')
137
+ (parts << corrected_last_word).join("/")
139
138
  end
140
139
 
141
140
  private
@@ -10,9 +10,9 @@ module Spree
10
10
 
11
11
  def call
12
12
  product.taxons
13
- .joins(:taxonomy)
14
- .where(spree_taxonomies: { name: BRANDS_TAXONOMY_NAME })
15
- .first
13
+ .joins(:taxonomy)
14
+ .where(spree_taxonomies: {name: BRANDS_TAXONOMY_NAME})
15
+ .first
16
16
  end
17
17
 
18
18
  private
@@ -11,7 +11,7 @@ module Spree
11
11
 
12
12
  # This method is responsible for handling unauthorized redirects
13
13
  def call
14
- flash[:error] = I18n.t('spree.authorization_failure')
14
+ flash[:error] = I18n.t("spree.authorization_failure")
15
15
  redirect_back(fallback_location: "/unauthorized")
16
16
  end
17
17
 
@@ -4,8 +4,8 @@
4
4
  # The reason specifies why it was canceled.
5
5
  # This class should encapsulate logic related to canceling inventory after order complete
6
6
  class Spree::UnitCancel < Spree::Base
7
- SHORT_SHIP = 'Short Ship'
8
- DEFAULT_REASON = 'Cancel'
7
+ SHORT_SHIP = "Short Ship"
8
+ DEFAULT_REASON = "Cancel"
9
9
 
10
10
  belongs_to :inventory_unit, optional: true
11
11
  has_one :adjustment, as: :source, dependent: :destroy
@@ -22,7 +22,7 @@ class Spree::UnitCancel < Spree::Base
22
22
  source: self,
23
23
  amount:,
24
24
  order: inventory_unit.order,
25
- label: "#{I18n.t('spree.cancellation')} - #{reason}",
25
+ label: "#{I18n.t("spree.cancellation")} - #{reason}",
26
26
  finalized: true
27
27
  )
28
28
 
@@ -47,6 +47,6 @@ class Spree::UnitCancel < Spree::Base
47
47
  end
48
48
 
49
49
  def quantity_of_line_item(line_item)
50
- BigDecimal(line_item.inventory_units.not_canceled.reject(&:original_return_item).size)
50
+ BigDecimal(line_item.inventory_units.not_canceled.count { |element| !element.original_return_item })
51
51
  end
52
52
  end
@@ -5,8 +5,8 @@ module Spree
5
5
  belongs_to :user, class_name: UserClassHandle.new, foreign_key: "user_id", inverse_of: :user_addresses
6
6
  belongs_to :address, class_name: "Spree::Address"
7
7
 
8
- validates :address_id, uniqueness: { scope: :user_id }
9
- validates :user_id, uniqueness: { conditions: -> { default_shipping }, message: :default_address_exists, if: :default? }
8
+ validates :address_id, uniqueness: {scope: :user_id}
9
+ validates :user_id, uniqueness: {conditions: -> { default_shipping }, message: :default_address_exists, if: :default?}
10
10
 
11
11
  scope :with_address_values, ->(address_attributes) do
12
12
  joins(:address).merge(
@@ -25,6 +25,6 @@ module Spree
25
25
  all
26
26
  }
27
27
 
28
- default_scope -> { order([default: :desc, updated_at: :desc]) }
28
+ default_scope -> { order([{default: :desc, updated_at: :desc}]) }
29
29
  end
30
30
  end
@@ -20,15 +20,13 @@ module Spree
20
20
 
21
21
  def disallowed_urls(controller)
22
22
  @disallowed_urls ||= {}
23
- @disallowed_urls[controller.controller_name] ||= begin
24
- [].tap do |disallowed_urls|
25
- AUTHENTICATION_ROUTES.each do |route|
26
- if controller.respond_to?(route)
27
- disallowed_urls << controller.send(route)
28
- end
23
+ @disallowed_urls[controller.controller_name] ||= [].tap do |disallowed_urls|
24
+ AUTHENTICATION_ROUTES.each do |route|
25
+ if controller.respond_to?(route)
26
+ disallowed_urls << controller.send(route)
29
27
  end
30
- end.map! { |url| url[/\/\w+$/] }
31
- end
28
+ end
29
+ end.map! { |url| url[/\/\w+$/] }
32
30
  end
33
31
  end
34
32
  end
@@ -34,7 +34,7 @@ module Spree
34
34
  def store_location
35
35
  return if self.class.rules.any? { |rule| rule.match? controller }
36
36
 
37
- session[:spree_user_return_to] = request.fullpath.gsub('//', '/')
37
+ session[:spree_user_return_to] = request.fullpath.gsub("//", "/")
38
38
  end
39
39
 
40
40
  private
@@ -45,7 +45,7 @@ module Spree
45
45
  [
46
46
  price.country_iso.nil? ? 0 : 1,
47
47
  price.updated_at || Time.zone.now,
48
- price.id || Float::INFINITY,
48
+ price.id || Float::INFINITY
49
49
  ]
50
50
  end.reverse
51
51
  end
@@ -11,7 +11,7 @@ module Spree
11
11
  }
12
12
 
13
13
  scope :by_stock_location, ->(stock_location_id) {
14
- joins(:stock_locations).where(spree_stock_locations: { id: stock_location_id })
14
+ joins(:stock_locations).where(spree_stock_locations: {id: stock_location_id})
15
15
  }
16
16
 
17
17
  class << self
@@ -24,19 +24,19 @@ module Spree
24
24
  option_types = Spree::OptionType.table_name
25
25
 
26
26
  option_type_conditions = case option_type
27
- when OptionType then { "#{option_types}.name" => option_type.name }
28
- when String then { "#{option_types}.name" => option_type }
29
- else { "#{option_types}.id" => option_type }
30
- end
27
+ when OptionType then {"#{option_types}.name" => option_type.name}
28
+ when String then {"#{option_types}.name" => option_type}
29
+ else {"#{option_types}.id" => option_type}
30
+ end
31
31
 
32
32
  relation = joins(option_values: :option_type).where(option_type_conditions)
33
33
 
34
34
  option_values.each do |option_value|
35
35
  option_value_conditions = case option_value
36
- when OptionValue then { "#{Spree::OptionValue.table_name}.name" => option_value.name }
37
- when String then { "#{Spree::OptionValue.table_name}.name" => option_value }
38
- else { "#{Spree::OptionValue.table_name}.id" => option_value }
39
- end
36
+ when OptionValue then {"#{Spree::OptionValue.table_name}.name" => option_value.name}
37
+ when String then {"#{Spree::OptionValue.table_name}.name" => option_value}
38
+ else {"#{Spree::OptionValue.table_name}.id" => option_value}
39
+ end
40
40
  relation = relation.where(option_value_conditions)
41
41
  end
42
42
 
@@ -30,15 +30,15 @@ module Spree
30
30
 
31
31
  # Consider that not all platforms digest structured data in the same way,
32
32
  # you might have to modify the output on the frontend or in feeds accordingly.
33
- enum :condition, { damaged: "damaged", new: "new", refurbished: "refurbished", used: "used" }, prefix: true
33
+ enum :condition, {damaged: "damaged", new: "new", refurbished: "refurbished", used: "used"}, prefix: true
34
34
 
35
- belongs_to :product, -> { with_discarded }, touch: true, class_name: 'Spree::Product', inverse_of: :variants_including_master, optional: false
36
- belongs_to :tax_category, class_name: 'Spree::TaxCategory', optional: true
35
+ belongs_to :product, -> { with_discarded }, touch: true, class_name: "Spree::Product", inverse_of: :variants_including_master, optional: false
36
+ belongs_to :tax_category, class_name: "Spree::TaxCategory", optional: true
37
37
  belongs_to :shipping_category, class_name: "Spree::ShippingCategory", optional: true
38
38
 
39
39
  delegate :name, :description, :slug, :available_on, :discontinue_on, :discontinued?,
40
- :meta_description, :meta_keywords,
41
- to: :product
40
+ :meta_description, :meta_keywords,
41
+ to: :product
42
42
  delegate :tax_category, :tax_category_id, to: :product, prefix: true
43
43
  delegate :shipping_category, :shipping_category_id,
44
44
  to: :product, prefix: true
@@ -60,7 +60,7 @@ module Spree
60
60
 
61
61
  has_many :prices,
62
62
  -> { with_discarded },
63
- class_name: 'Spree::Price',
63
+ class_name: "Spree::Price",
64
64
  dependent: :destroy,
65
65
  inverse_of: :variant,
66
66
  autosave: true
@@ -72,9 +72,9 @@ module Spree
72
72
  validates :product, presence: true
73
73
  validate :check_price
74
74
 
75
- validates :cost_price, numericality: { greater_than_or_equal_to: 0, allow_nil: true }
76
- validates :price, numericality: { greater_than_or_equal_to: 0, allow_nil: true }
77
- validates :sku, uniqueness: { allow_blank: true, case_sensitive: true, conditions: -> { where(deleted_at: nil) }, if: :enforce_unique_sku? }
75
+ validates :cost_price, numericality: {greater_than_or_equal_to: 0, allow_nil: true}
76
+ validates :price, numericality: {greater_than_or_equal_to: 0, allow_nil: true}
77
+ validates :sku, uniqueness: {allow_blank: true, case_sensitive: true, conditions: -> { where(deleted_at: nil) }, if: :enforce_unique_sku?}
78
78
 
79
79
  after_create :create_stock_items
80
80
  after_create :set_master_out_of_stock, unless: :is_master?
@@ -85,7 +85,7 @@ module Spree
85
85
  after_destroy :destroy_option_values_variants
86
86
 
87
87
  scope :template_variants, -> do
88
- left_joins(product: { option_types: :option_values }).where(is_master: true).where.not(spree_option_values: { id: nil }).reorder(nil).distinct
88
+ left_joins(product: {option_types: :option_values}).where(is_master: true).where.not(spree_option_values: {id: nil}).reorder(nil).distinct
89
89
  end
90
90
  scope :non_template_variants, -> { where.not(id: template_variants) }
91
91
 
@@ -101,7 +101,7 @@ module Spree
101
101
  return all unless Spree::Config.track_inventory_levels
102
102
  in_stock_variants = joins(:stock_items).where(Spree::StockItem.arel_table[:count_on_hand].gt(0).or(arel_table[:track_inventory].eq(false)))
103
103
  if stock_locations.present?
104
- in_stock_variants = in_stock_variants.where(spree_stock_items: { stock_location_id: stock_locations.map(&:id) })
104
+ in_stock_variants = in_stock_variants.where(spree_stock_items: {stock_location_id: stock_locations.map(&:id)})
105
105
  end
106
106
  in_stock_variants.distinct
107
107
  end
@@ -132,16 +132,16 @@ module Spree
132
132
  # @return [ActiveRecord::Relation]
133
133
  def self.with_prices(pricing_options = Spree::Config.default_pricing_options)
134
134
  where(
135
- Spree::Price.
136
- where(Spree::Variant.arel_table[:id].eq(Spree::Price.arel_table[:variant_id])).
135
+ Spree::Price
136
+ .where(Spree::Variant.arel_table[:id].eq(Spree::Price.arel_table[:variant_id])).
137
137
  # This next clause should just be `where(pricing_options.search_arguments)`, but ActiveRecord
138
138
  # generates invalid SQL, so the SQL here is written manually.
139
139
  where(
140
140
  "spree_prices.currency = ? AND (spree_prices.country_iso IS NULL OR spree_prices.country_iso = ?)",
141
141
  pricing_options.search_arguments[:currency],
142
142
  pricing_options.search_arguments[:country_iso].compact
143
- ).
144
- arel.exists
143
+ )
144
+ .arel.exists
145
145
  )
146
146
  end
147
147
 
@@ -200,12 +200,12 @@ module Spree
200
200
  #
201
201
  # @return [Fixnum]
202
202
  def on_backorder
203
- inventory_units.with_state('backordered').size
203
+ inventory_units.with_state("backordered").size
204
204
  end
205
205
 
206
206
  # @return [Boolean] true if this variant can be backordered
207
207
  def is_backorderable?
208
- Spree::Stock::Quantifier.new(self).backorderable?
208
+ Spree::Config.stock.quantifier_class.new(self).backorderable?
209
209
  end
210
210
 
211
211
  # Creates a sentence out of the variant's (sorted) option values.
@@ -220,7 +220,7 @@ module Spree
220
220
  "#{ov.option_type.presentation}: #{ov.presentation}"
221
221
  end
222
222
 
223
- values.to_sentence({ words_connector: ", ", two_words_connector: ", " })
223
+ values.to_sentence({words_connector: ", ", two_words_connector: ", "})
224
224
  end
225
225
 
226
226
  # Determines the name of an Exchange variant.
@@ -235,7 +235,7 @@ module Spree
235
235
  #
236
236
  # @return [String] the generated name
237
237
  def descriptive_name
238
- is_master? ? name + ' - Master' : name + ' - ' + options_text
238
+ is_master? ? name + " - Master" : name + " - " + options_text
239
239
  end
240
240
 
241
241
  # Returns whether this variant has been deleted. Provided as a method of
@@ -315,7 +315,7 @@ module Spree
315
315
 
316
316
  def price_same_as_master?(pricing_options = Spree::Config.default_pricing_options)
317
317
  diff = price_difference_from_master(pricing_options)
318
- diff && diff.zero?
318
+ diff&.zero?
319
319
  end
320
320
 
321
321
  # Generates a friendly name and sku string.
@@ -345,7 +345,7 @@ module Spree
345
345
  # check inventory in all available StockLocations.
346
346
  # @return [Boolean] true if the desired quantity can be supplied
347
347
  def can_supply?(quantity = 1, stock_location = nil)
348
- Spree::Stock::Quantifier.new(self, stock_location).can_supply?(quantity)
348
+ Spree::Config.stock.quantifier_class.new(self, stock_location).can_supply?(quantity)
349
349
  end
350
350
 
351
351
  # Fetches the on-hand quantity of the variant.
@@ -355,7 +355,7 @@ module Spree
355
355
  # check inventory in all available StockLocations.
356
356
  # @return [Fixnum] the number currently on-hand
357
357
  def total_on_hand(stock_location = nil)
358
- Spree::Stock::Quantifier.new(self, stock_location).total_on_hand
358
+ Spree::Config.stock.quantifier_class.new(self, stock_location).total_on_hand
359
359
  end
360
360
 
361
361
  # Shortcut method to determine if inventory tracking is enabled for this
@@ -392,7 +392,7 @@ module Spree
392
392
  end
393
393
 
394
394
  def set_master_out_of_stock
395
- if product.master && product.master.in_stock?
395
+ if product.master&.in_stock?
396
396
  product.master.stock_items.update_all(backorderable: false)
397
397
  product.master.stock_items.each(&:reduce_count_on_hand_to_zero)
398
398
  end
@@ -405,7 +405,7 @@ module Spree
405
405
 
406
406
  def check_price
407
407
  if price.nil? && Spree::Config[:require_master_price] && is_master?
408
- errors.add :price, 'Must supply price for variant or master.price for product.'
408
+ errors.add :price, "Must supply price for variant or master.price for product."
409
409
  end
410
410
  end
411
411
 
@@ -441,4 +441,4 @@ module Spree
441
441
  end
442
442
  end
443
443
 
444
- require_dependency 'spree/variant/scopes'
444
+ require_dependency "spree/variant/scopes"
@@ -15,9 +15,9 @@ module Spree
15
15
  class VariantPropertyRule < Spree::Base
16
16
  belongs_to :product, touch: true
17
17
 
18
- has_many :values, class_name: 'Spree::VariantPropertyRuleValue', dependent: :destroy
18
+ has_many :values, class_name: "Spree::VariantPropertyRuleValue", dependent: :destroy
19
19
  has_many :properties, through: :values
20
- has_many :conditions, class_name: 'Spree::VariantPropertyRuleCondition', dependent: :destroy
20
+ has_many :conditions, class_name: "Spree::VariantPropertyRuleCondition", dependent: :destroy
21
21
  has_many :option_values, through: :conditions
22
22
 
23
23
  accepts_nested_attributes_for :values, allow_destroy: true, reject_if: lambda { |val| val[:property_name].blank? }
@@ -5,6 +5,6 @@ module Spree
5
5
  belongs_to :option_value, optional: true
6
6
  belongs_to :variant_property_rule, touch: true, optional: true
7
7
 
8
- validates :option_value_id, uniqueness: { scope: :variant_property_rule_id }
8
+ validates :option_value_id, uniqueness: {scope: :variant_property_rule_id}
9
9
  end
10
10
  end
@@ -16,10 +16,10 @@ class Spree::Wallet::AddPaymentSourcesToWallet
16
16
  if !order.temporary_payment_source && order.user
17
17
  # select valid sources
18
18
  payments = order.payments.valid
19
- sources = payments.map(&:source).
20
- uniq.
21
- compact.
22
- select { |payment| payment.try(:reusable?) }
19
+ sources = payments.map(&:source)
20
+ .uniq
21
+ .compact
22
+ .select { |payment| payment.try(:reusable?) }
23
23
 
24
24
  # add valid sources to wallet and optionally set a default
25
25
  if sources.any?
@@ -17,7 +17,7 @@ class Spree::Wallet::DefaultPaymentBuilder
17
17
  if default && order.payments.where(source_type: default.payment_source_type).none?
18
18
  Spree::Payment.new(
19
19
  payment_method: default.payment_source.payment_method,
20
- source: default.payment_source,
20
+ source: default.payment_source
21
21
  )
22
22
  end
23
23
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Spree
4
4
  class WalletPaymentSource < Spree::Base
5
- belongs_to :user, class_name: Spree::UserClassHandle.new, foreign_key: 'user_id', inverse_of: :wallet_payment_sources, optional: true
5
+ belongs_to :user, class_name: Spree::UserClassHandle.new, foreign_key: "user_id", inverse_of: :wallet_payment_sources, optional: true
6
6
  belongs_to :payment_source, polymorphic: true, inverse_of: :wallet_payment_sources, optional: true
7
7
 
8
8
  validates :user, presence: true
@@ -27,7 +27,7 @@ module Spree
27
27
  return unless payment_source.present?
28
28
 
29
29
  if payment_source.respond_to?(:user_id) &&
30
- payment_source.user_id != user_id
30
+ payment_source.user_id != user_id
31
31
  errors.add(:payment_source, :not_owned_by_user)
32
32
  end
33
33
  end
@@ -13,7 +13,7 @@ module Spree
13
13
  has_many :shipping_method_zones, dependent: :destroy
14
14
  has_many :shipping_methods, through: :shipping_method_zones
15
15
 
16
- validates :name, presence: true, uniqueness: { allow_blank: true, case_sensitive: true }
16
+ validates :name, presence: true, uniqueness: {allow_blank: true, case_sensitive: true}
17
17
  after_save :remove_defunct_members
18
18
 
19
19
  scope :with_member_ids, ->(state_ids, country_ids) do
@@ -22,11 +22,11 @@ module Spree
22
22
  else
23
23
  spree_zone_members_table = Spree::ZoneMember.arel_table
24
24
  matching_state =
25
- spree_zone_members_table[:zoneable_type].eq("Spree::State").
26
- and(spree_zone_members_table[:zoneable_id].in(state_ids))
25
+ spree_zone_members_table[:zoneable_type].eq("Spree::State")
26
+ .and(spree_zone_members_table[:zoneable_id].in(state_ids))
27
27
  matching_country =
28
- spree_zone_members_table[:zoneable_type].eq("Spree::Country").
29
- and(spree_zone_members_table[:zoneable_id].in(country_ids))
28
+ spree_zone_members_table[:zoneable_type].eq("Spree::Country")
29
+ .and(spree_zone_members_table[:zoneable_id].in(country_ids))
30
30
  joins(:zone_members).where(matching_state.or(matching_country)).distinct
31
31
  end
32
32
  end
@@ -39,8 +39,8 @@ module Spree
39
39
  end
40
40
  end
41
41
 
42
- alias :members :zone_members
43
- accepts_nested_attributes_for :zone_members, allow_destroy: true, reject_if: proc { |member| member['zoneable_id'].blank? }
42
+ alias_method :members, :zone_members
43
+ accepts_nested_attributes_for :zone_members, allow_destroy: true, reject_if: proc { |member| member["zoneable_id"].blank? }
44
44
 
45
45
  self.allowed_ransackable_attributes = %w[name description]
46
46
 
@@ -74,9 +74,9 @@ module Spree
74
74
 
75
75
  members.any? do |zone_member|
76
76
  case zone_member.zoneable_type
77
- when 'Spree::Country'
77
+ when "Spree::Country"
78
78
  zone_member.zoneable_id == address.country_id
79
- when 'Spree::State'
79
+ when "Spree::State"
80
80
  zone_member.zoneable_id == address.state_id
81
81
  else
82
82
  false
@@ -87,10 +87,10 @@ module Spree
87
87
  # convenience method for returning the countries contained within a zone
88
88
  def country_list
89
89
  @countries ||= case kind
90
- when 'country' then zoneables
91
- when 'state' then zoneables.collect(&:country)
92
- else []
93
- end.flatten.compact.uniq
90
+ when "country" then zoneables
91
+ when "state" then zoneables.collect(&:country)
92
+ else []
93
+ end.flatten.compact.uniq
94
94
  end
95
95
 
96
96
  def <=>(other)
@@ -104,7 +104,7 @@ module Spree
104
104
  end
105
105
 
106
106
  def country_ids
107
- if kind == 'country'
107
+ if kind == "country"
108
108
  members.pluck(:zoneable_id)
109
109
  else
110
110
  []
@@ -112,7 +112,7 @@ module Spree
112
112
  end
113
113
 
114
114
  def state_ids
115
- if kind == 'state'
115
+ if kind == "state"
116
116
  members.pluck(:zoneable_id)
117
117
  else
118
118
  []
@@ -120,18 +120,18 @@ module Spree
120
120
  end
121
121
 
122
122
  def country_ids=(ids)
123
- set_zone_members(ids, 'Spree::Country')
123
+ set_zone_members(ids, "Spree::Country")
124
124
  end
125
125
 
126
126
  def state_ids=(ids)
127
- set_zone_members(ids, 'Spree::State')
127
+ set_zone_members(ids, "Spree::State")
128
128
  end
129
129
 
130
130
  private
131
131
 
132
132
  def remove_defunct_members
133
133
  if zone_members.any?
134
- zone_members.where('zoneable_id IS NULL OR zoneable_type != ?', "Spree::#{kind.classify}").destroy_all
134
+ zone_members.where("zoneable_id IS NULL OR zoneable_type != ?", "Spree::#{kind.classify}").destroy_all
135
135
  end
136
136
  end
137
137
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Spree
4
4
  class ZoneMember < Spree::Base
5
- belongs_to :zone, class_name: 'Spree::Zone', counter_cache: true, inverse_of: :zone_members, optional: true
5
+ belongs_to :zone, class_name: "Spree::Zone", counter_cache: true, inverse_of: :zone_members, optional: true
6
6
  belongs_to :zoneable, polymorphic: true, optional: true
7
7
 
8
8
  delegate :name, to: :zoneable, allow_nil: true