solidus_core 4.1.6 → 4.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (308) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/logo/solidus.svg +18 -1
  3. data/app/assets/images/logo/solidus_logo.png +0 -0
  4. data/app/helpers/spree/base_helper.rb +2 -2
  5. data/app/helpers/spree/core/controller_helpers/auth.rb +66 -0
  6. data/app/helpers/spree/core/controller_helpers/common.rb +82 -0
  7. data/app/helpers/spree/core/controller_helpers/order.rb +86 -0
  8. data/app/helpers/spree/core/controller_helpers/payment_parameters.rb +165 -0
  9. data/app/helpers/spree/core/controller_helpers/pricing.rb +19 -0
  10. data/app/helpers/spree/core/controller_helpers/search.rb +16 -0
  11. data/app/helpers/spree/core/controller_helpers/store.rb +19 -0
  12. data/app/helpers/spree/core/controller_helpers/strong_parameters.rb +74 -0
  13. data/app/mailers/spree/base_mailer.rb +1 -1
  14. data/app/mailers/spree/carton_mailer.rb +1 -1
  15. data/app/mailers/spree/order_mailer.rb +3 -3
  16. data/app/mailers/spree/reimbursement_mailer.rb +1 -1
  17. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +1 -1
  18. data/app/models/concerns/spree/active_storage_adapter.rb +1 -1
  19. data/app/models/concerns/spree/display_money.rb +1 -1
  20. data/app/models/concerns/spree/metadata.rb +64 -0
  21. data/app/models/concerns/spree/named_type.rb +2 -0
  22. data/app/models/concerns/spree/ordered_property_value_list.rb +2 -2
  23. data/app/models/concerns/spree/user_address_book.rb +8 -9
  24. data/app/models/concerns/spree/user_methods.rb +3 -3
  25. data/app/models/spree/address.rb +10 -8
  26. data/app/models/spree/adjustment.rb +15 -65
  27. data/app/models/spree/adjustment_reason.rb +2 -0
  28. data/app/models/spree/calculator/returns/default_refund_amount.rb +1 -1
  29. data/app/models/spree/carton.rb +2 -2
  30. data/app/models/spree/core/state_machines/inventory_unit.rb +42 -0
  31. data/app/models/spree/core/state_machines/order/class_methods.rb +217 -0
  32. data/app/models/spree/core/state_machines/order.rb +42 -0
  33. data/app/models/spree/core/state_machines/payment.rb +61 -0
  34. data/app/models/spree/core/state_machines/reimbursement.rb +33 -0
  35. data/app/models/spree/core/state_machines/return_authorization.rb +32 -0
  36. data/app/models/spree/core/state_machines/return_item/acceptance_status.rb +51 -0
  37. data/app/models/spree/core/state_machines/return_item/reception_status.rb +42 -0
  38. data/app/models/spree/core/state_machines/shipment.rb +58 -0
  39. data/app/models/spree/credit_card.rb +12 -9
  40. data/app/models/spree/customer_return.rb +2 -0
  41. data/app/models/spree/deprecated_configurable_class.rb +40 -0
  42. data/app/models/spree/fulfilment_changer.rb +4 -4
  43. data/app/models/spree/inventory_unit.rb +2 -2
  44. data/app/models/spree/item_total.rb +28 -0
  45. data/app/models/spree/legacy_user.rb +1 -0
  46. data/app/models/spree/line_item.rb +22 -4
  47. data/app/models/spree/money.rb +120 -0
  48. data/app/models/spree/null_promotion_adjuster.rb +13 -0
  49. data/app/models/spree/null_promotion_advertiser.rb +9 -0
  50. data/app/models/spree/null_promotion_finder.rb +9 -0
  51. data/app/models/spree/null_promotion_handler.rb +44 -0
  52. data/app/models/spree/option_value.rb +1 -0
  53. data/app/models/spree/order.rb +54 -36
  54. data/app/models/spree/order_cancellations.rb +8 -8
  55. data/app/models/spree/order_inventory.rb +6 -4
  56. data/app/models/spree/order_merger.rb +1 -1
  57. data/app/models/spree/order_mutex.rb +2 -2
  58. data/app/models/spree/order_shipping.rb +9 -9
  59. data/app/models/spree/order_taxation.rb +1 -0
  60. data/app/models/spree/order_updater.rb +19 -40
  61. data/app/models/spree/payment/processing.rb +2 -2
  62. data/app/models/spree/payment.rb +3 -2
  63. data/app/models/spree/payment_create.rb +1 -1
  64. data/app/models/spree/payment_method/bogus_credit_card.rb +14 -9
  65. data/app/models/spree/payment_method/simple_bogus_credit_card.rb +12 -6
  66. data/app/models/spree/payment_method/store_credit.rb +1 -1
  67. data/app/models/spree/payment_method.rb +3 -1
  68. data/app/models/spree/payment_source.rb +5 -1
  69. data/app/models/spree/permission_set.rb +11 -0
  70. data/app/models/spree/permission_sets/base.rb +45 -0
  71. data/app/models/spree/permission_sets/configuration_display.rb +53 -0
  72. data/app/models/spree/permission_sets/configuration_management.rb +52 -0
  73. data/app/models/spree/permission_sets/dashboard_display.rb +28 -0
  74. data/app/models/spree/permission_sets/default_customer.rb +83 -0
  75. data/app/models/spree/permission_sets/order_display.rb +50 -0
  76. data/app/models/spree/permission_sets/order_management.rb +50 -0
  77. data/app/models/spree/permission_sets/product_display.rb +43 -0
  78. data/app/models/spree/permission_sets/product_management.rb +47 -0
  79. data/app/models/spree/permission_sets/restricted_stock_display.rb +33 -0
  80. data/app/models/spree/permission_sets/restricted_stock_management.rb +33 -0
  81. data/app/models/spree/permission_sets/stock_display.rb +26 -0
  82. data/app/models/spree/permission_sets/stock_management.rb +26 -0
  83. data/app/models/spree/permission_sets/super_user.rb +26 -0
  84. data/app/models/spree/permission_sets/user_display.rb +27 -0
  85. data/app/models/spree/permission_sets/user_management.rb +44 -0
  86. data/app/models/spree/preference.rb +1 -1
  87. data/app/models/spree/product.rb +13 -9
  88. data/app/models/spree/refund.rb +3 -1
  89. data/app/models/spree/refund_reason.rb +6 -1
  90. data/app/models/spree/reimbursement.rb +4 -4
  91. data/app/models/spree/reimbursement_performer.rb +3 -3
  92. data/app/models/spree/reimbursement_tax_calculator.rb +2 -2
  93. data/app/models/spree/reimbursement_type/credit.rb +1 -1
  94. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +6 -6
  95. data/app/models/spree/reimbursement_type/store_credit.rb +1 -1
  96. data/app/models/spree/reimbursement_type.rb +6 -1
  97. data/app/models/spree/return_authorization.rb +2 -0
  98. data/app/models/spree/return_item.rb +10 -10
  99. data/app/models/spree/return_reason.rb +6 -1
  100. data/app/models/spree/role.rb +3 -1
  101. data/app/models/spree/role_permission.rb +8 -0
  102. data/app/models/spree/shipment.rb +9 -7
  103. data/app/models/spree/shipping_category.rb +2 -0
  104. data/app/models/spree/shipping_rate.rb +2 -3
  105. data/app/models/spree/{order_contents.rb → simple_order_contents.rb} +8 -12
  106. data/app/models/spree/stock/estimator.rb +1 -1
  107. data/app/models/spree/stock/inventory_unit_builder.rb +1 -1
  108. data/app/models/spree/stock/package.rb +2 -2
  109. data/app/models/spree/stock/simple_coordinator.rb +36 -22
  110. data/app/models/spree/stock_item.rb +1 -0
  111. data/app/models/spree/stock_location.rb +5 -5
  112. data/app/models/spree/store.rb +3 -1
  113. data/app/models/spree/store_credit.rb +17 -15
  114. data/app/models/spree/store_credit_event.rb +4 -3
  115. data/app/models/spree/store_credit_reason.rb +6 -1
  116. data/app/models/spree/store_selector/by_server_name.rb +1 -1
  117. data/app/models/spree/tax/tax_helpers.rb +12 -1
  118. data/app/models/spree/tax_calculator/default.rb +3 -3
  119. data/app/models/spree/tax_calculator/shipping_rate.rb +1 -1
  120. data/app/models/spree/tax_category.rb +3 -1
  121. data/app/models/spree/tax_rate.rb +7 -3
  122. data/app/models/spree/taxon.rb +22 -2
  123. data/app/models/spree/taxon_brand_selector.rb +22 -0
  124. data/app/models/spree/taxonomy.rb +2 -2
  125. data/app/models/spree/unauthorized_redirect_handler.rb +24 -0
  126. data/app/models/spree/unit_cancel.rb +1 -2
  127. data/app/models/spree/user_address.rb +9 -3
  128. data/app/models/spree/variant/scopes.rb +4 -0
  129. data/app/models/spree/variant/vat_price_generator.rb +1 -1
  130. data/app/models/spree/variant.rb +21 -8
  131. data/app/models/spree/wallet.rb +2 -2
  132. data/app/views/spree/order_mailer/cancel_email.html.erb +1 -1
  133. data/app/views/spree/order_mailer/cancel_email.text.erb +1 -1
  134. data/app/views/spree/order_mailer/confirm_email.html.erb +5 -5
  135. data/app/views/spree/order_mailer/confirm_email.text.erb +5 -5
  136. data/app/views/spree/order_mailer/inventory_cancellation_email.html.erb +0 -1
  137. data/config/locales/en.yml +33 -90
  138. data/db/default/spree/permission_sets.rb +10 -0
  139. data/db/default/spree/return_reasons.rb +3 -1
  140. data/db/default/spree/states.rb +1 -1
  141. data/db/migrate/20160101010000_solidus_one_four.rb +0 -127
  142. data/db/migrate/20220419170826_remove_archived_user_addresses.rb +12 -0
  143. data/db/migrate/20230427095534_drop_deprecated_address_id_from_shipments.rb +1 -1
  144. data/db/migrate/20240821173254_create_spree_permission_sets_in_core.rb +9 -0
  145. data/db/migrate/20240821173341_create_spree_roles_permissions_in_core.rb +9 -0
  146. data/db/migrate/20240821173641_add_description_to_spree_roles.rb +5 -0
  147. data/db/migrate/20240904152041_add_privilege_and_category_to_spree_permission_sets.rb +6 -0
  148. data/db/migrate/20250129061658_add_metadata_to_spree_resources.rb +28 -0
  149. data/db/migrate/20250201172950_add_gtin_and_condition_to_spree_variant.rb +6 -0
  150. data/db/migrate/20250207104016_add_primary_taxon_to_products.rb +7 -0
  151. data/db/migrate/20250221152004_add_metadata_to_users.rb +13 -0
  152. data/db/seeds.rb +1 -0
  153. data/lib/generators/solidus/install/app_templates/authentication/custom.rb +0 -5
  154. data/lib/generators/solidus/install/app_templates/frontend/starter.rb +1 -1
  155. data/lib/generators/solidus/install/install_generator.rb +64 -15
  156. data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +15 -12
  157. data/lib/generators/solidus/update/update_generator.rb +1 -1
  158. data/lib/generators/spree/dummy/dummy_generator.rb +1 -1
  159. data/lib/generators/spree/dummy/templates/rails/application.rb.tt +1 -1
  160. data/lib/generators/spree/dummy/templates/rails/database.yml +41 -93
  161. data/lib/generators/spree/dummy/templates/rails/manifest.js +3 -0
  162. data/lib/generators/spree/dummy/templates/rails/test.rb +6 -1
  163. data/lib/spree/app_configuration.rb +102 -67
  164. data/lib/spree/core/class_constantizer.rb +2 -2
  165. data/lib/spree/core/controller_helpers/auth.rb +5 -61
  166. data/lib/spree/core/controller_helpers/common.rb +5 -80
  167. data/lib/spree/core/controller_helpers/order.rb +5 -86
  168. data/lib/spree/core/controller_helpers/payment_parameters.rb +5 -163
  169. data/lib/spree/core/controller_helpers/pricing.rb +5 -17
  170. data/lib/spree/core/controller_helpers/search.rb +5 -14
  171. data/lib/spree/core/controller_helpers/store.rb +5 -17
  172. data/lib/spree/core/controller_helpers/strong_parameters.rb +5 -71
  173. data/lib/spree/core/engine.rb +13 -5
  174. data/lib/spree/core/environment/calculators.rb +35 -3
  175. data/lib/spree/core/environment/promotions.rb +25 -4
  176. data/lib/spree/core/environment_extension.rb +16 -2
  177. data/lib/spree/core/importer/order.rb +5 -5
  178. data/lib/spree/core/importer/product.rb +3 -3
  179. data/lib/spree/core/nested_class_set.rb +28 -0
  180. data/lib/spree/core/null_promotion_configuration.rb +84 -0
  181. data/lib/spree/core/product_filters.rb +1 -1
  182. data/lib/spree/core/search/variant.rb +2 -2
  183. data/lib/spree/core/state_machines/inventory_unit.rb +5 -40
  184. data/lib/spree/core/state_machines/order.rb +5 -251
  185. data/lib/spree/core/state_machines/payment.rb +5 -59
  186. data/lib/spree/core/state_machines/reimbursement.rb +5 -31
  187. data/lib/spree/core/state_machines/return_authorization.rb +5 -30
  188. data/lib/spree/core/state_machines/return_item/acceptance_status.rb +5 -49
  189. data/lib/spree/core/state_machines/return_item/reception_status.rb +5 -40
  190. data/lib/spree/core/state_machines/shipment.rb +5 -56
  191. data/lib/spree/core/state_machines.rb +48 -81
  192. data/lib/spree/core/validators/email.rb +1 -1
  193. data/lib/spree/core/version.rb +2 -2
  194. data/lib/spree/core.rb +2 -14
  195. data/lib/spree/deprecator.rb +9 -0
  196. data/lib/spree/i18n.rb +1 -1
  197. data/lib/spree/mailer_previews/carton_preview.rb +1 -1
  198. data/lib/spree/money.rb +5 -118
  199. data/lib/spree/permission_sets/base.rb +5 -30
  200. data/lib/spree/permission_sets/configuration_display.rb +5 -41
  201. data/lib/spree/permission_sets/configuration_management.rb +5 -40
  202. data/lib/spree/permission_sets/dashboard_display.rb +5 -14
  203. data/lib/spree/permission_sets/default_customer.rb +5 -71
  204. data/lib/spree/permission_sets/order_display.rb +5 -38
  205. data/lib/spree/permission_sets/order_management.rb +5 -38
  206. data/lib/spree/permission_sets/product_display.rb +5 -31
  207. data/lib/spree/permission_sets/product_management.rb +5 -35
  208. data/lib/spree/permission_sets/restricted_stock_display.rb +5 -21
  209. data/lib/spree/permission_sets/restricted_stock_management.rb +5 -21
  210. data/lib/spree/permission_sets/stock_display.rb +5 -14
  211. data/lib/spree/permission_sets/stock_management.rb +5 -14
  212. data/lib/spree/permission_sets/super_user.rb +5 -14
  213. data/lib/spree/permission_sets/user_display.rb +5 -15
  214. data/lib/spree/permission_sets/user_management.rb +5 -32
  215. data/lib/spree/permission_sets.rb +5 -18
  216. data/lib/spree/permitted_attributes.rb +21 -9
  217. data/lib/spree/preferences/configuration.rb +4 -0
  218. data/lib/spree/preferences/persistable.rb +7 -1
  219. data/lib/spree/preferences/store.rb +2 -2
  220. data/lib/spree/testing_support/capybara_ext.rb +11 -1
  221. data/lib/spree/testing_support/common_rake.rb +1 -0
  222. data/lib/spree/testing_support/dummy_ability.rb +7 -0
  223. data/lib/spree/testing_support/dummy_app/assets/stylesheets/solidus_admin/tailwind.css +1 -0
  224. data/lib/spree/testing_support/dummy_app/database.yml +37 -46
  225. data/lib/spree/testing_support/dummy_app/migrations.rb +8 -15
  226. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +3 -6
  227. data/lib/spree/testing_support/dummy_app.rb +33 -19
  228. data/lib/spree/testing_support/factories/adjustment_factory.rb +1 -2
  229. data/lib/spree/testing_support/factories/calculator_factory.rb +1 -5
  230. data/lib/spree/testing_support/factories/carton_factory.rb +2 -2
  231. data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -2
  232. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +3 -3
  233. data/lib/spree/testing_support/factories/order_factory.rb +13 -24
  234. data/lib/spree/testing_support/factories/product_factory.rb +1 -1
  235. data/lib/spree/testing_support/factories/shipment_factory.rb +1 -1
  236. data/lib/spree/testing_support/factories/stock_item_factory.rb +5 -1
  237. data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -1
  238. data/lib/spree/testing_support/factories/user_factory.rb +1 -1
  239. data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
  240. data/lib/spree/testing_support/order_walkthrough.rb +3 -3
  241. data/lib/spree/testing_support/shared_examples/calculator.rb +10 -0
  242. data/lib/spree/testing_support/shared_examples/order_factory.rb +141 -0
  243. data/lib/spree/testing_support/shared_examples/working_factory.rb +15 -0
  244. data/lib/tasks/colorado_delivery_fee.rake +2 -2
  245. data/solidus_core.gemspec +7 -10
  246. metadata +107 -109
  247. data/app/jobs/spree/promotion_code_batch_job.rb +0 -26
  248. data/app/mailers/spree/promotion_code_batch_mailer.rb +0 -15
  249. data/app/models/spree/calculator/distributed_amount.rb +0 -33
  250. data/app/models/spree/calculator/flat_percent_item_total.rb +0 -23
  251. data/app/models/spree/calculator/flexi_rate.rb +0 -22
  252. data/app/models/spree/calculator/percent_on_line_item.rb +0 -13
  253. data/app/models/spree/calculator/tiered_flat_rate.rb +0 -52
  254. data/app/models/spree/calculator/tiered_percent.rb +0 -62
  255. data/app/models/spree/line_item_action.rb +0 -8
  256. data/app/models/spree/order_promotion.rb +0 -27
  257. data/app/models/spree/promotion/actions/create_adjustment.rb +0 -81
  258. data/app/models/spree/promotion/actions/create_item_adjustments.rb +0 -98
  259. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +0 -139
  260. data/app/models/spree/promotion/actions/free_shipping.rb +0 -59
  261. data/app/models/spree/promotion/order_adjustments_recalculator.rb +0 -92
  262. data/app/models/spree/promotion/rules/first_order.rb +0 -38
  263. data/app/models/spree/promotion/rules/first_repeat_purchase_since.rb +0 -36
  264. data/app/models/spree/promotion/rules/item_total.rb +0 -86
  265. data/app/models/spree/promotion/rules/nth_order.rb +0 -45
  266. data/app/models/spree/promotion/rules/one_use_per_user.rb +0 -25
  267. data/app/models/spree/promotion/rules/option_value.rb +0 -50
  268. data/app/models/spree/promotion/rules/product.rb +0 -86
  269. data/app/models/spree/promotion/rules/store.rb +0 -26
  270. data/app/models/spree/promotion/rules/taxon.rb +0 -91
  271. data/app/models/spree/promotion/rules/user.rb +0 -34
  272. data/app/models/spree/promotion/rules/user_logged_in.rb +0 -20
  273. data/app/models/spree/promotion/rules/user_role.rb +0 -45
  274. data/app/models/spree/promotion.rb +0 -271
  275. data/app/models/spree/promotion_action.rb +0 -47
  276. data/app/models/spree/promotion_category.rb +0 -8
  277. data/app/models/spree/promotion_chooser.rb +0 -34
  278. data/app/models/spree/promotion_code/batch_builder.rb +0 -64
  279. data/app/models/spree/promotion_code.rb +0 -54
  280. data/app/models/spree/promotion_code_batch.rb +0 -27
  281. data/app/models/spree/promotion_handler/cart.rb +0 -75
  282. data/app/models/spree/promotion_handler/coupon.rb +0 -123
  283. data/app/models/spree/promotion_handler/page.rb +0 -26
  284. data/app/models/spree/promotion_handler/shipping.rb +0 -61
  285. data/app/models/spree/promotion_rule.rb +0 -55
  286. data/app/models/spree/promotion_rule_role.rb +0 -8
  287. data/app/models/spree/promotion_rule_store.rb +0 -10
  288. data/app/models/spree/promotion_rule_taxon.rb +0 -8
  289. data/app/models/spree/promotion_rule_user.rb +0 -10
  290. data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_errored.text.erb +0 -2
  291. data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_finished.text.erb +0 -2
  292. data/bin/rails +0 -13
  293. data/db/migrate/20161017102621_create_spree_promotion_code_batch.rb +0 -38
  294. data/db/migrate/20180202190713_create_promotion_rule_stores.rb +0 -12
  295. data/db/migrate/20180328172631_add_join_characters_to_promotion_code_batch.rb +0 -11
  296. data/db/migrate/20190106184413_remove_code_from_spree_promotions.rb +0 -42
  297. data/db/migrate/20220317165036_set_promotions_with_any_policy_to_all_if_possible.rb +0 -20
  298. data/db/migrate/20230322085416_remove_match_policy_from_spree_promotion.rb +0 -5
  299. data/db/migrate/20230325132905_remove_unused_columns_from_promotion_rules.rb +0 -6
  300. data/db/migrate/20230325161633_drop_unused_promo_action_line_items.rb +0 -13
  301. data/lib/generators/spree/dummy/templates/rails/script/rails +0 -6
  302. data/lib/solidus/migrations/promotions_with_code_handlers.rb +0 -66
  303. data/lib/spree/permission_sets/promotion_display.rb +0 -25
  304. data/lib/spree/permission_sets/promotion_management.rb +0 -25
  305. data/lib/spree/testing_support/factories/order_promotion_factory.rb +0 -8
  306. data/lib/spree/testing_support/factories/promotion_category_factory.rb +0 -7
  307. data/lib/spree/testing_support/factories/promotion_code_factory.rb +0 -8
  308. data/lib/spree/testing_support/factories/promotion_factory.rb +0 -98
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 38811ef28b9faebde7b3e42b07d31d5565b80d06835baf1ac58bb0ae97414af9
4
- data.tar.gz: 2d6068d00488c061d340b7d3fd64f1e1ee1400b8d74dcb2e7488651b44738fd8
3
+ metadata.gz: 995355f29d96abe41d7beb6b28cbe8bd8198d8c4ebee544dedc223f15b856548
4
+ data.tar.gz: 07b683686244717fc86fe1a83777e29845365dbed70c2117d1aacddf8c729717
5
5
  SHA512:
6
- metadata.gz: e6e9c756ed977b4f49af8d1289917227aab0d7014f48c57c7292cfbe7777ac73663e302845c7d2934c2103d8d67da7af622dbaac06e2c6e5ff20ee7e3d0fa313
7
- data.tar.gz: afd76f1f8e11e2c2c0f18fecb226a197b3c7a7ae70d22449bb3866c48f5e8d3dea0bb2b23113a0324dedb1439820bec6a87f2a4b5c5ad7f743b140e418d722f7
6
+ metadata.gz: '0963f51448492bca5190edb6641ea96206670f8ce17bea75e67c429838b5b98c041a936d64f57b994ca731df036995ef402eb24e723840a3b00efb109bf4e5c0'
7
+ data.tar.gz: 0fc6248571ff6027d618e4840d9c154bba8674fdbfd96805a58fbbc051b7c36d9c31d6e1d20b042bce38b8c5fc2b48d8b3201acb2ec264be2466c29704612c02
@@ -1 +1,18 @@
1
- <svg width="153" height="38" viewBox="0 0 153 38" xmlns="http://www.w3.org/2000/svg"><g fill="#242830" fill-rule="nonzero"><path d="M45.0815035 17.9295775l-4.2797203-.808169c-1.6476923-.2729578-2.5838811-.899155-2.5838811-2.0819719 0-1.6056338 1.8135315-2.4994366 3.6431119-2.4994366 1.3962587 0 3.2472377.4335211 5.3496503 2.2050704l2.4340909-2.9971831c-2.706923-1.93746476-5.1196153-2.75098589-7.863986-2.75098589-4.9537762 0-7.7890909 3.12563379-7.7890909 6.47605629 0 2.8312677 1.5620979 4.6242254 7.1417832 5.6678874l2.4126923.4549295c1.5620979.2943662 2.5838812.9794367 2.5838812 2.2907043 0 1.1025352-1.4818532 2.4994366-3.9373427 2.4994366-2.2040559 0-4.7023426-1.2684507-6.2216433-2.9169014l-2.9637063 2.9597183c2.706923 2.2907042 5.5796853 3.4788732 8.9285664 3.4788732 6.0183566 0 8.3882517-3.7464788 8.3882517-6.6847887s-1.727937-4.6456338-5.2426573-5.2932394zM62.960035 8.99690141c-6.9545455 0-10.9293357 5.20760559-10.9293357 10.43661969 0 5.2290141 4.0175874 10.4312676 10.9293357 10.4312676 6.9117482 0 10.9293356-5.2076056 10.9293356-10.4312676 0-5.2236619-4.0175874-10.43661969-10.9293356-10.43661969zm0 16.89126759c-3.5454364 0-6.4195805-2.8754669-6.4195805-6.4225352 0-3.5470682 2.8741441-6.4225352 6.4195805-6.4225352 3.5454363 0 6.4195804 2.875467 6.4195804 6.4225352.0277543 1.7117236-.6396762 3.3615035-1.8496498 4.572034-1.2099737 1.2105306-2.8589946 1.8782684-4.5699306 1.8505012zM88.5634615 3.58591549c-1.1818121 0-2.1398601.95848899-2.1398601 2.14084507 0 1.18235609.958048 2.14084507 2.1398601 2.14084507 1.1818122 0 2.1398602-.95848898 2.1398602-2.14084507 0-1.18235608-.958048-2.14084507-2.1398602-2.14084507zm-2.1238112 8.53661971h4.2476224v17.763662h-4.2476224v-17.763662zm23.8915387-1.0597183c-1.951059-1.37951017-4.293144-2.09615393-6.681713-2.04450704-6.9063991 0-10.9239865 5.20760564-10.9239865 10.43126764 0 5.2236619 4.0175874 10.4366197 10.9239865 10.4366197 2.388342.0384309 4.727465-.6810542 6.681713-2.0552113v2.0445071h4.247622V3.58591549h-4.247622v7.47690141zm-6.681713 14.8253521c-3.545437 0-6.4195809-2.8754669-6.4195809-6.4225352 0-3.5470682 2.8741439-6.4225352 6.4195809-6.4225352 3.545436 0 6.41958 2.875467 6.41958 6.4225352.027754 1.7117236-.639676 3.3615035-1.84965 4.572034-1.209974 1.2105306-2.858994 1.8782684-4.56993 1.8505012zm26.881993-5.2504225c0 2.9169014-2.139861 4.9988732-4.787938 4.9988732-2.648076 0-4.787937-2.0819718-4.787937-4.9988732V9.03971831h-4.27972V21.0123944c0 5.5822535 4.349266 8.8952112 9.051609 8.8952112 4.702342 0 9.083706-3.3343662 9.083706-8.8952112V9.03971831h-4.27972V20.6377465zm17.118881-2.6439437l-4.279721-.8135211c-1.647692-.2676056-2.583881-.8938028-2.583881-2.0819718 0-1.6056338 1.813532-2.4994367 3.643112-2.4994367 1.396259 0 3.247238.4388733 5.34965 2.2104226l2.434091-2.9971831c-2.701573-1.93746481-5.119615-2.75098594-7.863986-2.75098594-4.953776 0-7.783741 3.12563384-7.783741 6.47605634 0 2.8098592 1.556748 4.6242254 7.115035 5.6411268l2.418042.4602816c1.556748.2890141 2.578532.9794367 2.578532 2.2907043 0 1.1025352-1.476504 2.4994366-3.931993 2.4994366-2.209406 0-4.707693-1.2684507-6.226993-2.9169014l-2.91021 2.9811267c2.680175 2.2907043 5.547587 3.4788733 8.901818 3.4788733 6.013007 0 8.388252-3.7464789 8.388252-6.6847887 0-2.9383099-1.727937-4.6456338-5.248007-5.2932395zm-67.3734969 3.7678873V7.98c0-4.14788732-2.0382167-5.64647887-6.4195804-7.74985916L71.9848951 3.5859155l2.2896504 1.31126761c1.1822727.68507042 1.6637412 1.45577465 1.727937 3.45746479V22.1577465c0 4.1478873 2.0382168 5.6464789 6.4195804 7.7498591l1.8723777-3.3557746-2.2896504-1.3326761c-1.1876224-.6850704-1.6637412-1.4557746-1.7279371-3.4574648zM.20863636 37.8876056H23.6829021V.15521127H.20863636V37.8876056zM3.56821678 3.51633803H20.2698252V34.4729577H3.56821678V3.51633803z"/><path d="M13.5934615 24.2450704V13.6104225c0-3.2112676-1.5727972-4.35126757-4.95912584-5.97295771L7.18993007 10.2225352l1.76538462 1.0169014c.91479021.5352113 1.28391611 1.1239437 1.33206291 2.6760564v10.6507042c0 3.2112676 1.5727972 4.3512676 4.9591259 5.9729577l1.4497552-2.5850704-1.7707342-1.043662c-.9147902-.5298591-1.2839161-1.1239436-1.332063-2.6653521z"/></g></svg>
1
+ <svg width="800" height="154" viewBox="0 0 800 154" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <g clip-path="url(#clip0_1325_2710)">
3
+ <path d="M47.8141 51.0973V102.195L0 54.3805C9.53862 22.9134 38.7766 0 73.3714 0C107.966 0 135.13 21.3237 145.654 51.0973H47.8141Z" fill="#EF3023"/>
4
+ <path d="M146.725 98.9286C137.187 130.413 107.949 153.309 73.3541 153.309C38.7593 153.309 11.595 131.968 1.07137 102.212H98.9114V51.0973L146.725 98.9114V98.9286Z" fill="#EF3023"/>
5
+ <path d="M282.53 99.9481C282.53 79.765 265.734 73.9934 251.028 69.9499C236.478 65.9063 225.972 64.3165 225.972 53.6547C225.972 45.8614 233.109 40.0898 243.615 40.0898C254.121 40.0898 261.811 46.4316 263.072 56.0912H281.13C278.469 36.0463 263.919 23.6392 243.615 23.6392C223.311 23.6392 207.776 36.772 207.776 53.9312C207.776 74.4081 224.434 80.1797 239.278 84.2232C253.828 88.1113 264.61 89.8565 264.61 100.518C264.61 108.156 256.627 113.928 245.568 113.928C232.556 113.928 224.849 107.724 223.173 96.4748H204.7C206.515 117.246 222.62 130.361 245.568 130.361C267.271 130.361 282.513 118.11 282.513 99.9309L282.53 99.9481Z" fill="#222222"/>
6
+ <path d="M345.637 130.378C375.739 130.378 396.44 106.878 396.44 77.0175C396.44 47.1574 375.721 23.6565 345.637 23.6565C315.552 23.6565 294.833 47.1574 294.833 77.0175C294.833 106.878 315.552 130.378 345.637 130.378ZM345.637 112.787C326.888 112.787 313.029 97.3562 313.029 77.0175C313.029 56.6788 326.888 41.2477 345.637 41.2477C364.385 41.2477 378.244 56.9725 378.244 77.0175C378.244 97.0624 362.848 112.787 345.637 112.787Z" fill="#222222"/>
7
+ <path d="M474.961 111.629H428.063V25.0906H410.42V128.927H474.944V111.612L474.961 111.629Z" fill="#222222"/>
8
+ <path d="M493.399 25.0906V128.927H511.042V25.0906H493.399Z" fill="#222222"/>
9
+ <path d="M566.753 25.0908H531.208V128.927H566.753C594.609 128.927 615.189 108.156 615.189 77.0002C615.189 45.8442 594.609 25.0735 566.753 25.0735V25.0908ZM566.338 111.63H548.834V42.4054H566.338C584.811 42.4054 596.993 56.2468 596.993 77.0175C596.993 97.7882 584.811 111.63 566.338 111.63Z" fill="#222222"/>
10
+ <path d="M708.156 25.0906H690.513V89.7009C690.513 103.11 683.238 112.77 668.671 112.77C655.797 112.77 646.829 104.977 646.829 89.7009V25.0906H629.186V90.1329C629.186 114.221 645.274 130.378 668.654 130.378C692.034 130.378 708.122 114.221 708.122 90.1329V25.0906H708.156Z" fill="#222222"/>
11
+ <path d="M800 99.9481C800 79.765 783.204 73.9934 768.498 69.9499C753.949 65.9063 743.442 64.3165 743.442 53.6547C743.442 45.8614 750.579 40.0898 761.085 40.0898C771.592 40.0898 779.281 46.4316 780.543 56.0912H798.6C795.939 36.0463 781.389 23.6392 761.085 23.6392C740.781 23.6392 725.246 36.772 725.246 53.9312C725.246 74.4081 741.904 80.1797 756.748 84.2232C771.298 88.1113 782.081 89.8565 782.081 100.518C782.081 108.156 774.097 113.928 763.038 113.928C750.026 113.928 742.319 107.724 740.643 96.4748H722.17C723.985 117.246 740.09 130.361 763.038 130.361C784.724 130.361 799.983 118.11 799.983 99.9309L800 99.9481Z" fill="#222222"/>
12
+ </g>
13
+ <defs>
14
+ <clipPath id="clip0_1325_2710">
15
+ <rect width="800" height="153.309" fill="white"/>
16
+ </clipPath>
17
+ </defs>
18
+ </svg>
@@ -48,7 +48,7 @@ module Spree
48
48
 
49
49
  def meta_data_tags
50
50
  meta_data.map do |name, content|
51
- tag('meta', name: name, content: content)
51
+ tag('meta', name:, content:)
52
52
  end.join("\n")
53
53
  end
54
54
 
@@ -111,7 +111,7 @@ module Spree
111
111
  end
112
112
 
113
113
  def available_countries(restrict_to_zone: Spree::Config[:checkout_zone])
114
- countries = Spree::Country.available(restrict_to_zone: restrict_to_zone)
114
+ countries = Spree::Country.available(restrict_to_zone:)
115
115
 
116
116
  country_names = Carmen::Country.all.map do |country|
117
117
  [country.code, country.name]
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'cancan'
4
+
5
+ module Spree
6
+ module Core
7
+ module ControllerHelpers
8
+ module Auth
9
+ extend ActiveSupport::Concern
10
+
11
+ # @!attribute [rw] unauthorized_redirect
12
+ # @!scope class
13
+ # Extension point for overriding behaviour of access denied errors.
14
+ # Default behaviour is to redirect back or to "/unauthorized" with a flash
15
+ # message.
16
+ # @return [Proc] action to take when access denied error is raised.
17
+
18
+ included do
19
+ before_action :set_guest_token
20
+ helper_method :spree_current_user
21
+
22
+ class_attribute :unauthorized_redirect
23
+ deprecate :unauthorized_redirect= => "Use a custom Spree::Config.unauthorized_redirect_handler_class instead", :deprecator => Spree.deprecator
24
+
25
+ rescue_from CanCan::AccessDenied, with: :handle_unauthorized_access
26
+ end
27
+
28
+ # Needs to be overriden so that we use Spree's Ability rather than anyone else's.
29
+ def current_ability
30
+ @current_ability ||= Spree::Ability.new(spree_current_user)
31
+ end
32
+
33
+ def redirect_back_or_default(default)
34
+ redirect_to(session["spree_user_return_to"] || default)
35
+ session["spree_user_return_to"] = nil
36
+ end
37
+
38
+ def set_guest_token
39
+ if cookies.signed[:guest_token].blank?
40
+ cookies.permanent.signed[:guest_token] = Spree::Config[:guest_token_cookie_options].merge(
41
+ value: SecureRandom.urlsafe_base64(nil, false),
42
+ httponly: true
43
+ )
44
+ end
45
+ end
46
+
47
+ def store_location
48
+ Spree::UserLastUrlStorer.new(self).store_location
49
+ end
50
+
51
+ # Auth extensions are expected to define it, otherwise it's a no-op
52
+ def spree_current_user
53
+ defined?(super) ? super : nil
54
+ end
55
+
56
+ def handle_unauthorized_access
57
+ if unauthorized_redirect
58
+ instance_exec(&unauthorized_redirect)
59
+ else
60
+ Spree::Config.unauthorized_redirect_handler_class.new(self).call
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'carmen'
4
+
5
+ module Spree
6
+ module Core
7
+ module ControllerHelpers
8
+ module Common
9
+ extend ActiveSupport::Concern
10
+ included do
11
+ helper_method :title
12
+ helper_method :title=
13
+ helper_method :accurate_title
14
+
15
+ layout :get_layout
16
+
17
+ before_action :set_user_language
18
+ end
19
+
20
+ protected
21
+
22
+ # can be used in views as well as controllers.
23
+ # e.g. <% self.title = 'This is a custom title for this view' %>
24
+ attr_writer :title
25
+
26
+ def title
27
+ title_string = @title.presence || accurate_title
28
+ if title_string.present?
29
+ if Spree::Config[:always_put_site_name_in_title]
30
+ [title_string, default_title].join(' - ')
31
+ else
32
+ title_string
33
+ end
34
+ else
35
+ default_title
36
+ end
37
+ end
38
+
39
+ def default_title
40
+ current_store.name
41
+ end
42
+
43
+ # this is a hook for subclasses to provide title
44
+ def accurate_title
45
+ current_store.seo_title
46
+ end
47
+
48
+ private
49
+
50
+ def set_user_language_locale_key
51
+ :locale
52
+ end
53
+
54
+ def set_user_language
55
+ available_locales = Spree.i18n_available_locales
56
+ locale = [
57
+ params[:locale],
58
+ session[set_user_language_locale_key],
59
+ (config_locale if respond_to?(:config_locale, true)),
60
+ I18n.default_locale
61
+ ].detect do |candidate|
62
+ candidate &&
63
+ available_locales.include?(candidate.to_sym)
64
+ end
65
+ session[set_user_language_locale_key] = locale
66
+ I18n.locale = locale
67
+ Carmen.i18n_backend.locale = locale
68
+ end
69
+
70
+ # Returns which layout to render.
71
+ #
72
+ # You can set the layout you want to render inside your Spree configuration with the +:layout+ option.
73
+ #
74
+ # Default layout is: +app/views/spree/layouts/spree_application+
75
+ #
76
+ def get_layout
77
+ Spree::Config[:layout]
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Core
5
+ module ControllerHelpers
6
+ module Order
7
+ extend ActiveSupport::Concern
8
+ include ControllerHelpers::Pricing
9
+
10
+ included do
11
+ helper_method :current_order
12
+ end
13
+
14
+ # The current incomplete order from the guest_token for use in cart and during checkout
15
+ def current_order(options = {})
16
+ should_create = options[:create_order_if_necessary] || false
17
+ should_build = options[:build_order_if_necessary] || should_create
18
+
19
+ return @current_order if @current_order
20
+
21
+ @current_order = find_order_by_token_or_user(lock: options[:lock])
22
+
23
+ if should_build && (@current_order.nil? || @current_order.completed?)
24
+ @current_order = Spree::Order.new(new_order_params)
25
+ @current_order.user ||= spree_current_user
26
+ # See issue https://github.com/spree/spree/issues/3346 for reasons why this line is here
27
+ @current_order.created_by ||= spree_current_user
28
+ @current_order.save! if should_create
29
+ end
30
+
31
+ if @current_order
32
+ @current_order.record_ip_address(ip_address)
33
+ @current_order
34
+ end
35
+ end
36
+
37
+ def associate_user
38
+ @order ||= current_order
39
+ if spree_current_user && @order && (@order.user.blank? || @order.email.blank?)
40
+ @order.associate_user!(spree_current_user)
41
+ end
42
+ end
43
+
44
+ def set_current_order
45
+ if spree_current_user && current_order
46
+ spree_current_user.orders.by_store(current_store).incomplete.where('id != ?', current_order.id).find_each do |order|
47
+ current_order.merge!(order, spree_current_user)
48
+ end
49
+ end
50
+ end
51
+
52
+ def ip_address
53
+ request.remote_ip
54
+ end
55
+
56
+ private
57
+
58
+ def last_incomplete_order
59
+ @last_incomplete_order ||= spree_current_user.last_incomplete_spree_order(store: current_store)
60
+ end
61
+
62
+ def current_order_params
63
+ { currency: current_pricing_options.currency, guest_token: cookies.signed[:guest_token], store_id: current_store.id, user_id: spree_current_user.try(:id) }
64
+ end
65
+
66
+ def new_order_params
67
+ current_order_params.merge(last_ip_address: ip_address)
68
+ end
69
+
70
+ def find_order_by_token_or_user(options = {})
71
+ should_lock = options[:lock] || false
72
+
73
+ # Find any incomplete orders for the guest_token
74
+ order = Spree::Order.incomplete.lock(should_lock).find_by(current_order_params)
75
+
76
+ # Find any incomplete orders for the current user
77
+ if order.nil? && spree_current_user
78
+ order = last_incomplete_order
79
+ end
80
+
81
+ order
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,165 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Core::ControllerHelpers::PaymentParameters
5
+ # This method handles the awkwardness of how the html forms are currently
6
+ # set up for frontend.
7
+ #
8
+ # This method expects a params hash in the format of:
9
+ #
10
+ # {
11
+ # payment_source: {
12
+ # # The keys here are spree_payment_method.id's
13
+ # '1' => {...source attributes for payment method 1...},
14
+ # '2' => {...source attributes for payment method 2...},
15
+ # },
16
+ # order: {
17
+ # # Note that only a single entry is expected/handled in this array
18
+ # payments_attributes: [
19
+ # {
20
+ # payment_method_id: '1',
21
+ # },
22
+ # ],
23
+ # ...other params...
24
+ # },
25
+ # ...other params...
26
+ # }
27
+ #
28
+ # And this method modifies the params into the format of:
29
+ #
30
+ # {
31
+ # order: {
32
+ # payments_attributes: [
33
+ # {
34
+ # payment_method_id: '1',
35
+ # source_attributes: {...source attributes for payment method 1...}
36
+ # },
37
+ # ],
38
+ # ...other params...
39
+ # },
40
+ # ...other params...
41
+ # }
42
+ #
43
+ def move_payment_source_into_payments_attributes(params)
44
+ # Step 1: Gather all the information and ensure all the pieces are there.
45
+
46
+ return params if params[:payment_source].blank?
47
+
48
+ payment_params = params[:order] &&
49
+ params[:order][:payments_attributes] &&
50
+ params[:order][:payments_attributes].first
51
+ return params if payment_params.blank?
52
+
53
+ payment_method_id = payment_params[:payment_method_id]
54
+ return params if payment_method_id.blank?
55
+
56
+ source_params = params[:payment_source][payment_method_id]
57
+ return params if source_params.blank?
58
+
59
+ # Step 2: Perform the modifications.
60
+
61
+ payment_params[:source_attributes] = source_params
62
+ params.delete(:payment_source)
63
+
64
+ params
65
+ end
66
+
67
+ # This method handles the awkwardness of how the html forms are currently
68
+ # set up for frontend.
69
+ #
70
+ # This method expects a params hash in the format of:
71
+ #
72
+ # {
73
+ # order: {
74
+ # wallet_payment_source_id: '123',
75
+ # ...other params...
76
+ # },
77
+ # cvc_confirm: '456', # optional
78
+ # ...other params...
79
+ # }
80
+ #
81
+ # And this method modifies the params into the format of:
82
+ #
83
+ # {
84
+ # order: {
85
+ # payments_attributes: [
86
+ # {
87
+ # source_attributes: {
88
+ # wallet_payment_source_id: '123',
89
+ # verification_value: '456',
90
+ # },
91
+ # },
92
+ # ]
93
+ # ...other params...
94
+ # },
95
+ # ...other params...
96
+ # }
97
+ #
98
+ def move_wallet_payment_source_id_into_payments_attributes(params)
99
+ return params if params[:order].blank?
100
+
101
+ wallet_payment_source_id = params[:order][:wallet_payment_source_id].presence
102
+ cvc_confirm = params[:cvc_confirm].presence
103
+
104
+ return params if wallet_payment_source_id.nil?
105
+
106
+ params[:order][:payments_attributes] = [
107
+ {
108
+ source_attributes: {
109
+ wallet_payment_source_id:,
110
+ verification_value: cvc_confirm
111
+ }
112
+ }
113
+ ]
114
+
115
+ params[:order].delete(:wallet_payment_source_id)
116
+ params.delete(:cvc_confirm)
117
+
118
+ params
119
+ end
120
+
121
+ # This is a strange thing to do since an order can have multiple payments
122
+ # but we always assume that it only has a single payment and that its
123
+ # amount should be the current order total after store credit is applied.
124
+ # We should reconsider this method and its usage at some point.
125
+ #
126
+ # This method expects a params hash in the format of:
127
+ #
128
+ # {
129
+ # order: {
130
+ # # Note that only a single entry is expected/handled in this array
131
+ # payments_attributes: [
132
+ # {
133
+ # ...params...
134
+ # },
135
+ # ],
136
+ # ...other params...
137
+ # },
138
+ # ...other params...
139
+ # }
140
+ #
141
+ # And this method modifies the params into the format of:
142
+ #
143
+ # {
144
+ # order: {
145
+ # payments_attributes: [
146
+ # {
147
+ # ...params...
148
+ # amount: <the order total after store credit>,
149
+ # },
150
+ # ],
151
+ # ...other params...
152
+ # },
153
+ # ...other params...
154
+ # }
155
+ #
156
+ def set_payment_parameters_amount(params, order)
157
+ return params if params[:order].blank?
158
+ return params if params[:order][:payments_attributes].blank?
159
+
160
+ params[:order][:payments_attributes].first[:amount] = order.order_total_after_store_credit
161
+
162
+ params
163
+ end
164
+ end
165
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Core
5
+ module ControllerHelpers
6
+ module Pricing
7
+ extend ActiveSupport::Concern
8
+
9
+ included do
10
+ helper_method :current_pricing_options
11
+ end
12
+
13
+ def current_pricing_options
14
+ Spree::Config.pricing_options_class.from_context(self)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Core
5
+ module ControllerHelpers
6
+ module Search
7
+ def build_searcher(params)
8
+ Spree::Config.searcher_class.new(params).tap do |searcher|
9
+ searcher.current_user = spree_current_user
10
+ searcher.pricing_options = current_pricing_options
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Core
5
+ module ControllerHelpers
6
+ module Store
7
+ extend ActiveSupport::Concern
8
+
9
+ included do
10
+ helper_method :current_store
11
+ end
12
+
13
+ def current_store
14
+ @current_store ||= Spree::Config.current_store_selector_class.new(request).store
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Core
5
+ module ControllerHelpers
6
+ module StrongParameters
7
+ def permitted_attributes
8
+ Spree::PermittedAttributes
9
+ end
10
+
11
+ delegate(*Spree::PermittedAttributes::ATTRIBUTES,
12
+ to: :permitted_attributes,
13
+ prefix: :permitted)
14
+
15
+ def permitted_credit_card_update_attributes
16
+ permitted_attributes.credit_card_update_attributes + [
17
+ address_attributes: permitted_address_attributes
18
+ ]
19
+ end
20
+
21
+ def permitted_payment_attributes
22
+ permitted_attributes.payment_attributes + [
23
+ source_attributes: permitted_source_attributes
24
+ ]
25
+ end
26
+
27
+ def permitted_source_attributes
28
+ permitted_attributes.source_attributes + [
29
+ address_attributes: permitted_address_attributes
30
+ ]
31
+ end
32
+
33
+ def permitted_checkout_address_attributes
34
+ permitted_attributes.checkout_address_attributes
35
+ end
36
+
37
+ def permitted_checkout_delivery_attributes
38
+ permitted_attributes.checkout_delivery_attributes
39
+ end
40
+
41
+ def permitted_checkout_payment_attributes
42
+ permitted_attributes.checkout_payment_attributes
43
+ end
44
+
45
+ def permitted_checkout_confirm_attributes
46
+ permitted_attributes.checkout_confirm_attributes
47
+ end
48
+
49
+ def permitted_order_attributes
50
+ permitted_checkout_address_attributes +
51
+ permitted_checkout_delivery_attributes +
52
+ permitted_checkout_payment_attributes +
53
+ permitted_attributes.customer_metadata_attributes +
54
+ permitted_checkout_confirm_attributes + [
55
+ line_items_attributes: permitted_line_item_attributes
56
+ ]
57
+ end
58
+
59
+ def permitted_product_attributes
60
+ permitted_attributes.product_attributes + [
61
+ product_properties_attributes: permitted_product_properties_attributes
62
+ ]
63
+ end
64
+
65
+ def permitted_user_attributes
66
+ permitted_attributes.user_attributes + [
67
+ bill_address_attributes: permitted_address_attributes,
68
+ ship_address_attributes: permitted_address_attributes
69
+ ]
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -11,7 +11,7 @@ module Spree
11
11
  end
12
12
 
13
13
  def money(amount, currency = Spree::Config[:currency])
14
- Spree::Money.new(amount, currency: currency).to_s
14
+ Spree::Money.new(amount, currency:).to_s
15
15
  end
16
16
  helper_method :money
17
17
 
@@ -19,7 +19,7 @@ module Spree
19
19
  @store = @order.store
20
20
  subject = (options[:resend] ? "[#{t('spree.resend').upcase}] " : '')
21
21
  subject += "#{@store.name} #{t('spree.shipment_mailer.shipped_email.subject')} ##{@order.number}"
22
- mail(to: @order.email, from: from_address(@store), subject: subject)
22
+ mail(to: @order.email, from: from_address(@store), subject:)
23
23
  end
24
24
  end
25
25
  end
@@ -7,7 +7,7 @@ module Spree
7
7
  @store = @order.store
8
8
  subject = build_subject(t('.subject'), resend)
9
9
 
10
- mail(to: @order.email, bcc: bcc_address(@store), from: from_address(@store), subject: subject)
10
+ mail(to: @order.email, bcc: bcc_address(@store), from: from_address(@store), subject:)
11
11
  end
12
12
 
13
13
  def cancel_email(order, resend = false)
@@ -15,7 +15,7 @@ module Spree
15
15
  @store = @order.store
16
16
  subject = build_subject(t('.subject'), resend)
17
17
 
18
- mail(to: @order.email, from: from_address(@store), subject: subject)
18
+ mail(to: @order.email, from: from_address(@store), subject:)
19
19
  end
20
20
 
21
21
  def inventory_cancellation_email(order, inventory_units, resend = false)
@@ -23,7 +23,7 @@ module Spree
23
23
  @store = @order.store
24
24
  subject = build_subject(t('spree.order_mailer.inventory_cancellation.subject'), resend)
25
25
 
26
- mail(to: @order.email, from: from_address(@store), subject: subject)
26
+ mail(to: @order.email, from: from_address(@store), subject:)
27
27
  end
28
28
 
29
29
  private
@@ -7,7 +7,7 @@ module Spree
7
7
  store = @reimbursement.order.store
8
8
  subject = (resend ? "[#{t('spree.resend').upcase}] " : '')
9
9
  subject += "#{store.name} #{t('.subject')} ##{@reimbursement.order.number}"
10
- mail(to: @reimbursement.order.email, from: from_address(store), subject: subject)
10
+ mail(to: @reimbursement.order.email, from: from_address(store), subject:)
11
11
  end
12
12
  end
13
13
  end
@@ -32,7 +32,7 @@ module Spree
32
32
  end
33
33
  attachable.rewind
34
34
 
35
- { io: attachable, filename: filename }
35
+ { io: attachable, filename: }
36
36
  end
37
37
  end
38
38
  end
@@ -34,7 +34,7 @@ module Spree
34
34
  method_name = attachment_name
35
35
  override = Module.new do
36
36
  define_method method_name do |*args|
37
- attachment = Attachment.new(super(), styles: styles)
37
+ attachment = Attachment.new(super(), styles:)
38
38
  if args.empty?
39
39
  attachment
40
40
  else