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
@@ -43,7 +43,7 @@ class Spree::OrderShipping
43
43
  # @param tracking_number An option tracking number.
44
44
  # @return The carton created.
45
45
  def ship(inventory_units:, stock_location:, address:, shipping_method:,
46
- shipped_at: Time.current, external_number: nil, tracking_number: nil, suppress_mailer: false)
46
+ shipped_at: Time.current, external_number: nil, tracking_number: nil, suppress_mailer: false)
47
47
  carton = nil
48
48
 
49
49
  Spree::InventoryUnit.transaction do
@@ -18,13 +18,14 @@ module Spree
18
18
  # associations try to save and then in turn try to call +update!+ again.)
19
19
  def recalculate
20
20
  order.transaction do
21
- update_item_count
21
+ recalculate_line_item_prices
22
+ recalculate_item_count
22
23
  update_shipment_amounts
23
24
  update_totals
24
25
  if order.completed?
25
- update_payment_state
26
+ recalculate_payment_state
26
27
  update_shipments
27
- update_shipment_state
28
+ recalculate_shipment_state
28
29
  end
29
30
  Spree::Bus.publish(:order_recalculated, order:)
30
31
  persist_totals
@@ -43,15 +44,17 @@ module Spree
43
44
  # pending when all Shipments are in the "pending" state
44
45
  #
45
46
  # The +shipment_state+ value helps with reporting, etc. since it provides a quick and easy way to locate Orders needing attention.
46
- def update_shipment_state
47
- log_state_change('shipment') do
47
+ def recalculate_shipment_state
48
+ log_state_change("shipment") do
48
49
  order.shipment_state = determine_shipment_state
49
50
  end
50
51
 
51
52
  order.shipment_state
52
53
  end
54
+ alias_method :update_shipment_state, :recalculate_shipment_state
55
+ deprecate update_shipment_state: :recalculate_shipment_state, deprecator: Spree.deprecator
53
56
 
54
- # Updates the +payment_state+ attribute according to the following logic:
57
+ # Recalculates the +payment_state+ attribute according to the following logic:
55
58
  #
56
59
  # paid when +payment_total+ is equal to +total+
57
60
  # balance_due when +payment_total+ is less than +total+
@@ -60,40 +63,42 @@ module Spree
60
63
  # void when the order has been canceled and the payment total is 0
61
64
  #
62
65
  # The +payment_state+ value helps with reporting, etc. since it provides a quick and easy way to locate Orders needing attention.
63
- def update_payment_state
64
- log_state_change('payment') do
66
+ def recalculate_payment_state
67
+ log_state_change("payment") do
65
68
  order.payment_state = determine_payment_state
66
69
  end
67
70
 
68
71
  order.payment_state
69
72
  end
73
+ alias_method :update_payment_state, :recalculate_payment_state
74
+ deprecate update_payment_state: :recalculate_payment_state, deprecator: Spree.deprecator
70
75
 
71
76
  private
72
77
 
73
78
  def determine_payment_state
74
79
  if payments.present? && payments.valid.empty? && order.outstanding_balance != 0
75
- 'failed'
76
- elsif order.state == 'canceled' && order.payment_total.zero?
77
- 'void'
80
+ "failed"
81
+ elsif order.state == "canceled" && order.payment_total.zero?
82
+ "void"
78
83
  elsif order.outstanding_balance > 0
79
- 'balance_due'
84
+ "balance_due"
80
85
  elsif order.outstanding_balance < 0
81
- 'credit_owed'
86
+ "credit_owed"
82
87
  else
83
88
  # outstanding_balance == 0
84
- 'paid'
89
+ "paid"
85
90
  end
86
91
  end
87
92
 
88
93
  def determine_shipment_state
89
94
  if order.backordered?
90
- 'backorder'
95
+ "backorder"
91
96
  else
92
97
  # get all the shipment states for this order
93
98
  shipment_states = shipments.states
94
99
  if shipment_states.size > 1
95
100
  # multiple shiment states means it's most likely partially shipped
96
- 'partial'
101
+ "partial"
97
102
  else
98
103
  # will return nil if no shipments are found
99
104
  shipment_states.first
@@ -106,7 +111,7 @@ module Spree
106
111
  # fields (promo_total, included_tax_total, additional_tax_total, and
107
112
  # adjustment_total) on the item.
108
113
  # @return [void]
109
- def recalculate_adjustments
114
+ def update_adjustments
110
115
  # Promotion adjustments must be applied first, then tax adjustments.
111
116
  # This fits the criteria for VAT tax as outlined here:
112
117
  # http://www.hmrc.gov.uk/vat/managing/charging/discounts-etc.htm#1
@@ -114,8 +119,10 @@ module Spree
114
119
  # http://www.boe.ca.gov/formspubs/pub113/
115
120
  update_promotions
116
121
  update_tax_adjustments
117
- update_item_totals
122
+ recalculate_item_totals
118
123
  end
124
+ alias_method :recalculate_adjustments, :update_adjustments
125
+ deprecate recalculate_adjustments: :update_adjustments, deprecator: Spree.deprecator
119
126
 
120
127
  # Updates the following Order total values:
121
128
  #
@@ -125,9 +132,9 @@ module Spree
125
132
  # +promo_total+ The total value of all promotion adjustments
126
133
  # +total+ The so-called "order total." This is equivalent to +item_total+ plus +adjustment_total+.
127
134
  def update_totals
128
- update_payment_total
129
- update_item_total
130
- update_shipment_total
135
+ recalculate_payment_total
136
+ recalculate_item_total
137
+ recalculate_shipment_total
131
138
  update_adjustment_total
132
139
  end
133
140
 
@@ -140,23 +147,29 @@ module Spree
140
147
  shipments.each(&:update_state)
141
148
  end
142
149
 
143
- def update_payment_total
150
+ def recalculate_payment_total
144
151
  order.payment_total = payments.completed.includes(:refunds).sum { |payment| payment.amount - payment.refunds.sum(:amount) }
145
152
  end
153
+ alias_method :update_payment_total, :recalculate_payment_total
154
+ deprecate update_payment_total: :recalculate_payment_total, deprecator: Spree.deprecator
146
155
 
147
- def update_shipment_total
156
+ def recalculate_shipment_total
148
157
  order.shipment_total = shipments.to_a.sum(&:cost)
149
- update_order_total
158
+ recalculate_order_total
150
159
  end
160
+ alias_method :update_shipment_total, :recalculate_shipment_total
161
+ deprecate update_shipment_total: :recalculate_shipment_total, deprecator: Spree.deprecator
151
162
 
152
- def update_order_total
163
+ def recalculate_order_total
153
164
  order.total = order.item_total + order.shipment_total + order.adjustment_total
154
165
  end
166
+ alias_method :update_order_total, :recalculate_order_total
167
+ deprecate update_order_total: :recalculate_order_total, deprecator: Spree.deprecator
155
168
 
156
169
  def update_adjustment_total
157
- recalculate_adjustments
170
+ update_adjustments
158
171
 
159
- all_items = line_items + shipments
172
+ all_items = (line_items + shipments).reject(&:marked_for_destruction?)
160
173
  # Ignore any adjustments that have been marked for destruction in our
161
174
  # calculations. They'll get removed when/if we persist the order.
162
175
  valid_adjustments = adjustments.reject(&:marked_for_destruction?)
@@ -166,17 +179,21 @@ module Spree
166
179
  order.included_tax_total = all_items.sum(&:included_tax_total) + order_tax_adjustments.select(&:included?).sum(&:amount)
167
180
  order.additional_tax_total = all_items.sum(&:additional_tax_total) + order_tax_adjustments.reject(&:included?).sum(&:amount)
168
181
 
169
- update_order_total
182
+ recalculate_order_total
170
183
  end
171
184
 
172
- def update_item_count
185
+ def recalculate_item_count
173
186
  order.item_count = line_items.to_a.sum(&:quantity)
174
187
  end
188
+ alias_method :update_item_count, :recalculate_item_count
189
+ deprecate update_item_count: :recalculate_item_count, deprecator: Spree.deprecator
175
190
 
176
- def update_item_total
191
+ def recalculate_item_total
177
192
  order.item_total = line_items.to_a.sum(&:amount)
178
- update_order_total
193
+ recalculate_order_total
179
194
  end
195
+ alias_method :update_item_total, :recalculate_item_total
196
+ deprecate update_item_total: :recalculate_item_total, deprecator: Spree.deprecator
180
197
 
181
198
  def persist_totals
182
199
  order.save!
@@ -210,20 +227,25 @@ module Spree
210
227
  end
211
228
  deprecate :update_cancellations, deprecator: Spree.deprecator
212
229
 
213
- def update_item_totals
230
+ def recalculate_item_totals
214
231
  [*line_items, *shipments].each do |item|
215
232
  Spree::Config.item_total_class.new(item).recalculate!
216
233
 
217
234
  next unless item.changed?
218
235
 
219
- item.update_columns(
220
- promo_total: item.promo_total,
221
- included_tax_total: item.included_tax_total,
236
+ item.assign_attributes(
237
+ promo_total: item.promo_total,
238
+ included_tax_total: item.included_tax_total,
222
239
  additional_tax_total: item.additional_tax_total,
223
- adjustment_total: item.adjustment_total,
224
- updated_at: Time.current,
240
+ adjustment_total: item.adjustment_total
225
241
  )
226
242
  end
227
243
  end
244
+
245
+ def recalculate_line_item_prices
246
+ if Spree::Config.recalculate_cart_prices
247
+ line_items.each(&:recalculate_price)
248
+ end
249
+ end
228
250
  end
229
251
  end
@@ -8,7 +8,7 @@ module Spree
8
8
  # creating a refund about the full amount instead.
9
9
  #
10
10
  class Cancellation
11
- DEFAULT_REASON = 'Order canceled'.freeze
11
+ DEFAULT_REASON = "Order canceled"
12
12
 
13
13
  attr_reader :reason
14
14
 
@@ -26,7 +26,7 @@ module Spree
26
26
  # @param payment [Spree::Payment] - the payment that should be canceled
27
27
  #
28
28
  def cancel(payment)
29
- if response = payment.payment_method.try_void(payment)
29
+ if (response = payment.payment_method.try_void(payment))
30
30
  payment.handle_void_response(response)
31
31
  else
32
32
  payment.refunds.create!(amount: payment.credit_allowed, reason: refund_reason).perform!
@@ -43,7 +43,7 @@ module Spree
43
43
  response = payment_method.authorize(
44
44
  money.money.cents,
45
45
  source,
46
- gateway_options,
46
+ gateway_options
47
47
  )
48
48
  pend! if handle_response(response)
49
49
  end
@@ -59,7 +59,7 @@ module Spree
59
59
  response = payment_method.purchase(
60
60
  money.money.cents,
61
61
  source,
62
- gateway_options,
62
+ gateway_options
63
63
  )
64
64
  complete! if handle_response(response)
65
65
  end
@@ -95,13 +95,13 @@ module Spree
95
95
  return false unless amount.positive?
96
96
 
97
97
  protect_from_connection_error do
98
- if payment_method.payment_profiles_supported?
98
+ response = if payment_method.payment_profiles_supported?
99
99
  # Gateways supporting payment profiles will need access to credit card object because this stores the payment profile information
100
100
  # so supply the authorization itself as well as the credit card, rather than just the authorization code
101
- response = payment_method.void(response_code, source, gateway_options)
101
+ payment_method.void(response_code, source, gateway_options)
102
102
  else
103
103
  # Standard ActiveMerchant void usage
104
- response = payment_method.void(response_code, gateway_options)
104
+ payment_method.void(response_code, gateway_options)
105
105
  end
106
106
 
107
107
  handle_void_response(response)
@@ -170,12 +170,12 @@ module Spree
170
170
  return unless payment_method.source_required?
171
171
 
172
172
  unless source
173
- gateway_error(I18n.t('spree.payment_processing_failed'))
173
+ gateway_error(I18n.t("spree.payment_processing_failed"))
174
174
  end
175
175
 
176
176
  unless payment_method.supports?(source)
177
177
  invalidate!
178
- gateway_error(I18n.t('spree.payment_method_not_supported'))
178
+ gateway_error(I18n.t("spree.payment_method_not_supported"))
179
179
  end
180
180
 
181
181
  true
@@ -194,11 +194,11 @@ module Spree
194
194
 
195
195
  unless response.authorization.nil?
196
196
  self.response_code = response.authorization
197
- self.avs_response = response.avs_result['code']
197
+ self.avs_response = response.avs_result["code"]
198
198
 
199
199
  if response.cvv_result
200
- self.cvv_response_code = response.cvv_result['code']
201
- self.cvv_response_message = response.cvv_result['message']
200
+ self.cvv_response_code = response.cvv_result["code"]
201
+ self.cvv_response_message = response.cvv_result["message"]
202
202
  end
203
203
  end
204
204
 
@@ -217,18 +217,18 @@ module Spree
217
217
 
218
218
  def gateway_error(error)
219
219
  message, log = case error
220
- when ActiveMerchant::Billing::Response
221
- [
222
- error.params['message'] || error.params['response_reason_text'] || error.message,
223
- basic_response_info(error)
224
- ]
225
- when ActiveMerchant::ConnectionError
226
- [I18n.t('spree.unable_to_connect_to_gateway')] * 2
227
- else
228
- [error.to_s, error]
229
- end
230
-
231
- logger.error("#{I18n.t('spree.gateway_error')}: #{log}")
220
+ when ActiveMerchant::Billing::Response
221
+ [
222
+ error.params["message"] || error.params["response_reason_text"] || error.message,
223
+ basic_response_info(error)
224
+ ]
225
+ when ActiveMerchant::ConnectionError
226
+ [I18n.t("spree.unable_to_connect_to_gateway")] * 2
227
+ else
228
+ [error.to_s, error]
229
+ end
230
+
231
+ logger.error("#{I18n.t("spree.gateway_error")}: #{log}")
232
232
  raise Core::GatewayError.new(message)
233
233
  end
234
234
 
@@ -9,17 +9,17 @@ module Spree
9
9
  include Spree::Payment::Processing
10
10
  include Metadata
11
11
 
12
- IDENTIFIER_CHARS = (('A'..'Z').to_a + ('0'..'9').to_a - %w(0 1 I O)).freeze
13
- NON_RISKY_AVS_CODES = ['B', 'D', 'H', 'J', 'M', 'Q', 'T', 'V', 'X', 'Y'].freeze
14
- RISKY_AVS_CODES = ['A', 'C', 'E', 'F', 'G', 'I', 'K', 'L', 'N', 'O', 'P', 'R', 'S', 'U', 'W', 'Z'].freeze
12
+ IDENTIFIER_CHARS = (("A".."Z").to_a + ("0".."9").to_a - %w[0 1 I O]).freeze
13
+ NON_RISKY_AVS_CODES = ["B", "D", "H", "J", "M", "Q", "T", "V", "X", "Y"].freeze
14
+ RISKY_AVS_CODES = ["A", "C", "E", "F", "G", "I", "K", "L", "N", "O", "P", "R", "S", "U", "W", "Z"].freeze
15
15
 
16
- belongs_to :order, class_name: 'Spree::Order', touch: true, inverse_of: :payments, optional: true
16
+ belongs_to :order, class_name: "Spree::Order", touch: true, inverse_of: :payments, optional: true
17
17
  belongs_to :source, polymorphic: true, optional: true
18
- belongs_to :payment_method, -> { with_discarded }, class_name: 'Spree::PaymentMethod', inverse_of: :payments, optional: true
18
+ belongs_to :payment_method, -> { with_discarded }, class_name: "Spree::PaymentMethod", inverse_of: :payments, optional: true
19
19
 
20
20
  has_many :log_entries, as: :source
21
21
  has_many :state_changes, as: :stateful
22
- has_many :capture_events, class_name: 'Spree::PaymentCaptureEvent'
22
+ has_many :capture_events, class_name: "Spree::PaymentCaptureEvent"
23
23
  has_many :refunds, inverse_of: :payment
24
24
 
25
25
  before_validation :validate_source, unless: :invalid?
@@ -43,17 +43,17 @@ module Spree
43
43
 
44
44
  default_scope -> { order(:created_at) }
45
45
 
46
- scope :from_credit_card, -> { where(source_type: 'Spree::CreditCard') }
46
+ scope :from_credit_card, -> { where(source_type: "Spree::CreditCard") }
47
47
  scope :with_state, ->(state) { where(state: state.to_s) }
48
48
 
49
- scope :checkout, -> { with_state('checkout') }
50
- scope :completed, -> { with_state('completed') }
51
- scope :pending, -> { with_state('pending') }
52
- scope :processing, -> { with_state('processing') }
53
- scope :failed, -> { with_state('failed') }
49
+ scope :checkout, -> { with_state("checkout") }
50
+ scope :completed, -> { with_state("completed") }
51
+ scope :pending, -> { with_state("pending") }
52
+ scope :processing, -> { with_state("processing") }
53
+ scope :failed, -> { with_state("failed") }
54
54
 
55
- scope :risky, -> { failed.or(where(avs_response: RISKY_AVS_CODES)).or(where.not(cvv_response_code: [nil, '', 'M'])) }
56
- scope :valid, -> { where.not(state: %w(failed invalid void)) }
55
+ scope :risky, -> { failed.or(where(avs_response: RISKY_AVS_CODES)).or(where.not(cvv_response_code: [nil, "", "M"])) }
56
+ scope :valid, -> { where.not(state: %w[failed invalid void]) }
57
57
 
58
58
  scope :store_credits, -> { where(source_type: Spree::StoreCredit.to_s) }
59
59
  scope :not_store_credits, -> { where(arel_table[:source_type].not_eq(Spree::StoreCredit.to_s).or(arel_table[:source_type].eq(nil))) }
@@ -70,9 +70,9 @@ module Spree
70
70
 
71
71
  # @return [Spree::Money] this amount of this payment as money object
72
72
  def money
73
- Spree::Money.new(amount, { currency: })
73
+ Spree::Money.new(amount, {currency:})
74
74
  end
75
- alias display_amount money
75
+ alias_method :display_amount, :money
76
76
 
77
77
  # Sets the amount, parsing it based on i18n settings if it is a string.
78
78
  #
@@ -81,8 +81,8 @@ module Spree
81
81
  self[:amount] =
82
82
  case amount
83
83
  when String
84
- separator = I18n.t('number.currency.format.separator')
85
- number = amount.delete("^0-9-#{separator}\.").tr(separator, '.')
84
+ separator = I18n.t("number.currency.format.separator")
85
+ number = amount.delete("^0-9-#{separator}.").tr(separator, ".")
86
86
  number.presence&.to_d
87
87
  end || amount
88
88
  end
@@ -119,7 +119,7 @@ module Spree
119
119
 
120
120
  # @return [Boolean] true when this payment is risky
121
121
  def risky?
122
- is_avs_risky? || is_cvv_risky? || state == 'failed'
122
+ is_avs_risky? || is_cvv_risky? || state == "failed"
123
123
  end
124
124
 
125
125
  # @return [Boolean] true when this payment is risky based on address
@@ -153,7 +153,7 @@ module Spree
153
153
  private
154
154
 
155
155
  def source_actions
156
- return [] unless payment_source && payment_source.respond_to?(:actions)
156
+ return [] unless payment_source&.respond_to?(:actions)
157
157
  payment_source.actions.select { |action| !payment_source.respond_to?("can_#{action}?") || payment_source.send("can_#{action}?", self) }
158
158
  end
159
159
 
@@ -161,7 +161,7 @@ module Spree
161
161
  if source && !source.valid?
162
162
  source.errors.each do |error|
163
163
  field_name = I18n.t("activerecord.attributes.#{source.class.to_s.underscore}.#{error.attribute}")
164
- errors.add(I18n.t(source.class.to_s.demodulize.underscore, scope: 'spree'), "#{field_name} #{error.message}")
164
+ errors.add(I18n.t(source.class.to_s.demodulize.underscore, scope: "spree"), "#{field_name} #{error.message}")
165
165
  end
166
166
  end
167
167
  if errors.any?
@@ -179,7 +179,7 @@ module Spree
179
179
 
180
180
  def create_payment_profile
181
181
  # Don't attempt to create on bad payments.
182
- return if %w(invalid failed).include?(state)
182
+ return if %w[invalid failed].include?(state)
183
183
  # Payment profile cannot be created without source
184
184
  return unless source
185
185
  # Imported payments shouldn't create a payment profile.
@@ -191,9 +191,9 @@ module Spree
191
191
  end
192
192
 
193
193
  def invalidate_old_payments
194
- if !store_credit? && !['invalid', 'failed'].include?(state)
194
+ if !store_credit? && !["invalid", "failed"].include?(state)
195
195
  order.payments.select { |payment|
196
- payment.state == 'checkout' && !payment.store_credit? && payment.id != id
196
+ payment.state == "checkout" && !payment.store_credit? && payment.id != id
197
197
  }.each(&:invalidate!)
198
198
  end
199
199
  end
@@ -217,7 +217,7 @@ module Spree
217
217
  end
218
218
 
219
219
  def generate_identifier
220
- Array.new(8){ IDENTIFIER_CHARS.sample }.join
220
+ Array.new(8) { IDENTIFIER_CHARS.sample }.join
221
221
  end
222
222
 
223
223
  def create_eligible_credit_event
@@ -2,10 +2,10 @@
2
2
 
3
3
  module Spree
4
4
  class PaymentCaptureEvent < Spree::Base
5
- belongs_to :payment, class_name: 'Spree::Payment', optional: true
5
+ belongs_to :payment, class_name: "Spree::Payment", optional: true
6
6
 
7
7
  def display_amount
8
- Spree::Money.new(amount, { currency: payment.currency })
8
+ Spree::Money.new(amount, {currency: payment.currency})
9
9
  end
10
10
  end
11
11
  end
@@ -71,7 +71,7 @@ module Spree
71
71
  end
72
72
 
73
73
  def available_cards
74
- if user_id = order.user_id
74
+ if (user_id = order.user_id)
75
75
  Spree::CreditCard.where(user_id:)
76
76
  else
77
77
  Spree::CreditCard.none
@@ -2,16 +2,16 @@
2
2
 
3
3
  module Spree
4
4
  class PaymentMethod::BogusCreditCard < PaymentMethod::CreditCard
5
- TEST_VISA = ['4111111111111111', '4012888888881881', '4222222222222']
6
- TEST_MC = ['5500000000000004', '5555555555554444', '5105105105105100']
7
- TEST_AMEX = ['378282246310005', '371449635398431', '378734493671000', '340000000000009']
8
- TEST_DISC = ['6011000000000004', '6011111111111117', '6011000990139424']
5
+ TEST_VISA = ["4111111111111111", "4012888888881881", "4222222222222"]
6
+ TEST_MC = ["5500000000000004", "5555555555554444", "5105105105105100"]
7
+ TEST_AMEX = ["378282246310005", "371449635398431", "378734493671000", "340000000000009"]
8
+ TEST_DISC = ["6011000000000004", "6011111111111117", "6011000990139424"]
9
9
 
10
- VALID_CCS = ['1', TEST_VISA, TEST_MC, TEST_AMEX, TEST_DISC].flatten
10
+ VALID_CCS = ["1", TEST_VISA, TEST_MC, TEST_AMEX, TEST_DISC].flatten
11
11
 
12
- AUTHORIZATION_CODE = '12345'
13
- FAILURE_MESSAGE = 'Bogus Gateway: Forced failure'
14
- SUCCESS_MESSAGE = 'Bogus Gateway: Forced success'
12
+ AUTHORIZATION_CODE = "12345"
13
+ FAILURE_MESSAGE = "Bogus Gateway: Forced failure"
14
+ SUCCESS_MESSAGE = "Bogus Gateway: Forced success"
15
15
 
16
16
  attr_accessor :test
17
17
 
@@ -22,7 +22,7 @@ module Spree
22
22
  def create_profile(payment)
23
23
  return if payment.source.has_payment_profile?
24
24
  # simulate the storage of credit card profile using remote service
25
- if success = VALID_CCS.include?(payment.source.number)
25
+ if (success = VALID_CCS.include?(payment.source.number))
26
26
  payment.source.update(gateway_customer_profile_id: generate_profile_id(success))
27
27
  end
28
28
  end
@@ -30,18 +30,18 @@ module Spree
30
30
  def authorize(_money, credit_card, _options = {})
31
31
  profile_id = credit_card.gateway_customer_profile_id
32
32
  message_detail = " - #{__method__}"
33
- if VALID_CCS.include?(credit_card.number) || (profile_id && profile_id.starts_with?('BGS-'))
34
- ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE + message_detail, {}, test: true, authorization: AUTHORIZATION_CODE, avs_result: { code: 'D' })
33
+ if VALID_CCS.include?(credit_card.number) || profile_id&.starts_with?("BGS-")
34
+ ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE + message_detail, {}, test: true, authorization: AUTHORIZATION_CODE, avs_result: {code: "D"})
35
35
  else
36
- ActiveMerchant::Billing::Response.new(false, FAILURE_MESSAGE + message_detail, { message: FAILURE_MESSAGE + message_detail }, test: true)
36
+ ActiveMerchant::Billing::Response.new(false, FAILURE_MESSAGE + message_detail, {message: FAILURE_MESSAGE + message_detail}, test: true)
37
37
  end
38
38
  end
39
39
 
40
40
  def purchase(_money, credit_card, _options = {})
41
41
  profile_id = credit_card.gateway_customer_profile_id
42
42
  message_detail = " - #{__method__}"
43
- if VALID_CCS.include?(credit_card.number) || (profile_id && profile_id.starts_with?('BGS-'))
44
- ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE + message_detail, {}, test: true, authorization: AUTHORIZATION_CODE, avs_result: { code: 'M' })
43
+ if VALID_CCS.include?(credit_card.number) || profile_id&.starts_with?("BGS-")
44
+ ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE + message_detail, {}, test: true, authorization: AUTHORIZATION_CODE, avs_result: {code: "M"})
45
45
  else
46
46
  ActiveMerchant::Billing::Response.new(false, FAILURE_MESSAGE + message_detail, message: FAILURE_MESSAGE + message_detail, test: true)
47
47
  end
@@ -54,7 +54,7 @@ module Spree
54
54
 
55
55
  def capture(_money, authorization, _gateway_options)
56
56
  message_detail = " - #{__method__}"
57
- if authorization == '12345'
57
+ if authorization == "12345"
58
58
  ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE + message_detail, {}, test: true)
59
59
  else
60
60
  ActiveMerchant::Billing::Response.new(false, FAILURE_MESSAGE + message_detail, error: FAILURE_MESSAGE + message_detail, test: true)
@@ -80,16 +80,16 @@ module Spree
80
80
  end
81
81
 
82
82
  def actions
83
- %w(capture void credit)
83
+ %w[capture void credit]
84
84
  end
85
85
 
86
86
  private
87
87
 
88
88
  def generate_profile_id(success)
89
89
  record = true
90
- prefix = success ? 'BGS' : 'FAIL'
90
+ prefix = success ? "BGS" : "FAIL"
91
91
  while record
92
- random = "#{prefix}-#{Array.new(6){ rand(6) }.join}"
92
+ random = "#{prefix}-#{Array.new(6) { rand(6) }.join}"
93
93
  record = Spree::CreditCard.where(gateway_customer_profile_id: random).first
94
94
  end
95
95
  random
@@ -3,17 +3,17 @@
3
3
  module Spree
4
4
  class PaymentMethod::Check < PaymentMethod
5
5
  def actions
6
- %w{capture void credit}
6
+ %w[capture void credit]
7
7
  end
8
8
 
9
9
  # Indicates whether its possible to capture the payment
10
10
  def can_capture?(payment)
11
- ['checkout', 'pending'].include?(payment.state)
11
+ ["checkout", "pending"].include?(payment.state)
12
12
  end
13
13
 
14
14
  # Indicates whether its possible to void the payment.
15
15
  def can_void?(payment)
16
- payment.state != 'void'
16
+ payment.state != "void"
17
17
  end
18
18
 
19
19
  def capture(*)
@@ -10,7 +10,7 @@ module Spree
10
10
  end
11
11
 
12
12
  def partial_name
13
- 'gateway'
13
+ "gateway"
14
14
  end
15
15
 
16
16
  def supports?(source)
@@ -11,9 +11,9 @@ module Spree
11
11
  message_detail = " - #{__method__}"
12
12
 
13
13
  if VALID_CCS.include? credit_card.number
14
- ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE + message_detail, {}, test: true, authorization: AUTHORIZATION_CODE, avs_result: { code: 'A' })
14
+ ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE + message_detail, {}, test: true, authorization: AUTHORIZATION_CODE, avs_result: {code: "A"})
15
15
  else
16
- ActiveMerchant::Billing::Response.new(false, FAILURE_MESSAGE + message_detail, { message: FAILURE_MESSAGE }, test: true)
16
+ ActiveMerchant::Billing::Response.new(false, FAILURE_MESSAGE + message_detail, {message: FAILURE_MESSAGE}, test: true)
17
17
  end
18
18
  end
19
19
 
@@ -21,7 +21,7 @@ module Spree
21
21
  message_detail = " - #{__method__}"
22
22
 
23
23
  if VALID_CCS.include? credit_card.number
24
- ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE + message_detail, {}, test: true, authorization: AUTHORIZATION_CODE, avs_result: { code: 'A' })
24
+ ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE + message_detail, {}, test: true, authorization: AUTHORIZATION_CODE, avs_result: {code: "A"})
25
25
  else
26
26
  ActiveMerchant::Billing::Response.new(false, FAILURE_MESSAGE + message_detail, message: FAILURE_MESSAGE, test: true)
27
27
  end