solidus_core 2.10.0 → 2.11.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 (495) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree.js.erb +31 -2
  3. data/app/controllers/spree/base_controller.rb +1 -0
  4. data/app/mailers/spree/base_mailer.rb +4 -0
  5. data/app/mailers/spree/order_mailer.rb +1 -1
  6. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +69 -0
  7. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
  8. data/app/models/concerns/spree/active_storage_adapter.rb +116 -0
  9. data/app/models/concerns/spree/default_price.rb +1 -1
  10. data/app/models/concerns/spree/soft_deletable.rb +18 -0
  11. data/app/models/concerns/spree/user_address_book.rb +86 -32
  12. data/app/models/concerns/spree/user_methods.rb +3 -2
  13. data/app/models/spree/ability.rb +34 -10
  14. data/app/models/spree/address/name.rb +49 -0
  15. data/app/models/spree/address/state_validator.rb +71 -0
  16. data/app/models/spree/address.rb +94 -17
  17. data/app/models/spree/adjustment.rb +1 -1
  18. data/app/models/spree/base.rb +1 -0
  19. data/app/models/spree/calculator/default_tax.rb +1 -1
  20. data/app/models/spree/calculator/percent_per_item.rb +4 -4
  21. data/app/models/spree/calculator/price_sack.rb +1 -1
  22. data/app/models/spree/credit_card.rb +2 -2
  23. data/app/models/spree/customer_return.rb +4 -2
  24. data/app/models/spree/exchange.rb +1 -1
  25. data/app/models/spree/image/active_storage_attachment.rb +21 -0
  26. data/app/models/spree/inventory_unit.rb +1 -1
  27. data/app/models/spree/line_item.rb +13 -4
  28. data/app/models/spree/option_type.rb +1 -1
  29. data/app/models/spree/option_value.rb +2 -2
  30. data/app/models/spree/order/checkout.rb +1 -0
  31. data/app/models/spree/order.rb +91 -20
  32. data/app/models/spree/order_inventory.rb +16 -4
  33. data/app/models/spree/order_merger.rb +6 -4
  34. data/app/models/spree/order_promotion.rb +1 -1
  35. data/app/models/spree/order_updater.rb +11 -10
  36. data/app/models/spree/payment/cancellation.rb +3 -3
  37. data/app/models/spree/payment/processing.rb +54 -30
  38. data/app/models/spree/payment.rb +3 -3
  39. data/app/models/spree/payment_method.rb +8 -9
  40. data/app/models/spree/preference.rb +1 -1
  41. data/app/models/spree/price.rb +2 -8
  42. data/app/models/spree/product/scopes.rb +10 -5
  43. data/app/models/spree/product.rb +19 -14
  44. data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
  45. data/app/models/spree/promotion.rb +18 -7
  46. data/app/models/spree/promotion_action.rb +1 -7
  47. data/app/models/spree/promotion_code.rb +6 -1
  48. data/app/models/spree/promotion_code_batch.rb +1 -1
  49. data/app/models/spree/promotion_handler/coupon.rb +2 -2
  50. data/app/models/spree/promotion_rule.rb +1 -1
  51. data/app/models/spree/promotion_rule_role.rb +1 -1
  52. data/app/models/spree/refund.rb +54 -12
  53. data/app/models/spree/reimbursement.rb +27 -0
  54. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +10 -3
  55. data/app/models/spree/return_authorization.rb +1 -1
  56. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
  57. data/app/models/spree/return_item.rb +21 -10
  58. data/app/models/spree/role.rb +1 -1
  59. data/app/models/spree/shipment.rb +2 -2
  60. data/app/models/spree/shipping_calculator.rb +1 -1
  61. data/app/models/spree/shipping_manifest.rb +2 -2
  62. data/app/models/spree/shipping_method.rb +2 -9
  63. data/app/models/spree/shipping_rate.rb +1 -1
  64. data/app/models/spree/shipping_rate_tax.rb +1 -1
  65. data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
  66. data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
  67. data/app/models/spree/stock/package.rb +1 -1
  68. data/app/models/spree/stock/simple_coordinator.rb +1 -3
  69. data/app/models/spree/stock_item.rb +2 -8
  70. data/app/models/spree/stock_movement.rb +2 -0
  71. data/app/models/spree/store.rb +1 -1
  72. data/app/models/spree/store_credit.rb +1 -7
  73. data/app/models/spree/store_credit_category.rb +30 -3
  74. data/app/models/spree/store_credit_event.rb +1 -7
  75. data/app/models/spree/store_credit_reason.rb +0 -4
  76. data/app/models/spree/tax/tax_helpers.rb +1 -1
  77. data/app/models/spree/tax_category.rb +2 -8
  78. data/app/models/spree/tax_rate.rb +7 -7
  79. data/app/models/spree/taxon/active_storage_attachment.rb +19 -0
  80. data/app/models/spree/taxon.rb +1 -1
  81. data/app/models/spree/user_address.rb +8 -2
  82. data/app/models/spree/variant.rb +7 -13
  83. data/app/models/spree/variant_property_rule.rb +5 -1
  84. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +8 -3
  85. data/app/models/spree/zone.rb +1 -1
  86. data/config/locales/en.yml +44 -5
  87. data/db/default/spree/countries.rb +1 -1
  88. data/db/default/spree/states.rb +12 -4
  89. data/db/default/spree/store_credit.rb +2 -2
  90. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
  91. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
  92. data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
  93. data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
  94. data/lib/generators/solidus/install/install_generator.rb +253 -0
  95. data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +36 -5
  96. data/lib/generators/spree/install/install_generator.rb +7 -189
  97. data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
  98. data/lib/spree/app_configuration.rb +117 -51
  99. data/lib/spree/awesome_nested_set_override.rb +44 -0
  100. data/lib/spree/core/controller_helpers/auth.rb +17 -4
  101. data/lib/spree/core/controller_helpers/current_host.rb +17 -0
  102. data/lib/spree/core/controller_helpers/order.rb +8 -7
  103. data/lib/spree/core/controller_helpers/strong_parameters.rb +21 -7
  104. data/lib/spree/core/engine.rb +39 -2
  105. data/lib/spree/core/importer/order.rb +26 -11
  106. data/lib/spree/core/permalinks.rb +1 -3
  107. data/lib/spree/core/product_filters.rb +6 -5
  108. data/lib/spree/core/state_machines/order.rb +249 -0
  109. data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
  110. data/lib/spree/core/state_machines.rb +20 -1
  111. data/lib/spree/core/version.rb +1 -1
  112. data/lib/spree/core.rb +5 -11
  113. data/lib/spree/encryptor.rb +25 -0
  114. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  115. data/lib/spree/event/configuration.rb +11 -6
  116. data/lib/spree/event/subscriber.rb +38 -18
  117. data/lib/spree/event/subscriber_registry.rb +92 -0
  118. data/lib/spree/event.rb +40 -7
  119. data/lib/spree/i18n.rb +1 -1
  120. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  121. data/lib/spree/paranoia_deprecations.rb +32 -12
  122. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  123. data/lib/spree/permission_sets/default_customer.rb +16 -16
  124. data/lib/spree/permission_sets/order_display.rb +11 -11
  125. data/lib/spree/permission_sets/order_management.rb +1 -1
  126. data/lib/spree/permission_sets/product_display.rb +9 -9
  127. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  128. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  129. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  130. data/lib/spree/permission_sets/stock_display.rb +2 -2
  131. data/lib/spree/permission_sets/stock_management.rb +1 -1
  132. data/lib/spree/permission_sets/user_display.rb +3 -3
  133. data/lib/spree/permission_sets/user_management.rb +4 -3
  134. data/lib/spree/permitted_attributes.rb +79 -9
  135. data/lib/spree/preferences/preferable.rb +4 -3
  136. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  137. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  138. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  139. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  140. data/lib/spree/testing_support/capybara_ext.rb +3 -0
  141. data/lib/spree/testing_support/common_rake.rb +3 -3
  142. data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
  143. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
  144. data/lib/spree/testing_support/dummy_app.rb +44 -23
  145. data/lib/spree/testing_support/factories/address_factory.rb +1 -2
  146. data/lib/spree/testing_support/factories/image_factory.rb +1 -1
  147. data/lib/spree/testing_support/factories/promotion_factory.rb +6 -0
  148. data/lib/spree/testing_support/factories/refund_factory.rb +1 -0
  149. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  150. data/lib/spree/testing_support/factories/return_item_factory.rb +0 -1
  151. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +8 -0
  152. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -0
  153. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +3 -1
  154. data/lib/spree/testing_support/factories/taxon_factory.rb +4 -0
  155. data/lib/spree/testing_support/factories/user_factory.rb +4 -1
  156. data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
  157. data/lib/spree/testing_support/job_helpers.rb +24 -0
  158. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  159. data/lib/spree/testing_support/preferences.rb +3 -1
  160. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  161. data/lib/spree/testing_support/translations.rb +25 -0
  162. data/solidus_core.gemspec +8 -5
  163. metadata +81 -359
  164. data/script/rails +0 -10
  165. data/spec/fixtures/thinking-cat.jpg +0 -0
  166. data/spec/helpers/base_helper_spec.rb +0 -168
  167. data/spec/helpers/products_helper_spec.rb +0 -202
  168. data/spec/helpers/taxons_helper_spec.rb +0 -43
  169. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  170. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  171. data/spec/lib/i18n_spec.rb +0 -97
  172. data/spec/lib/search/base_spec.rb +0 -91
  173. data/spec/lib/search/variant_spec.rb +0 -115
  174. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  175. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  176. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  177. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  178. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  179. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  180. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  181. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  182. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -41
  183. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  184. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  185. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  186. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  187. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
  188. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  189. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  190. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  191. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  192. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  193. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  194. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  195. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  196. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  197. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  198. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  199. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  200. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  201. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  202. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  203. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  204. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  205. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  206. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  207. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  208. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  209. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  210. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  211. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  212. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  213. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  214. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  215. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  216. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  217. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  218. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  219. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  220. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  221. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  222. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  223. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  224. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  225. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  226. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  227. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  228. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  229. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  230. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  231. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  232. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  233. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  234. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  235. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  236. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  237. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  238. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  239. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  240. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  241. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  242. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  243. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  244. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  245. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  246. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  247. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  248. data/spec/lib/spree/core/version_spec.rb +0 -19
  249. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  250. data/spec/lib/spree/event_spec.rb +0 -130
  251. data/spec/lib/spree/localized_number_spec.rb +0 -45
  252. data/spec/lib/spree/migrations_spec.rb +0 -32
  253. data/spec/lib/spree/money_spec.rb +0 -298
  254. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  255. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  256. data/spec/lib/tasks/dummy_task.rake +0 -12
  257. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  258. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  259. data/spec/mailers/carton_mailer_spec.rb +0 -44
  260. data/spec/mailers/order_mailer_spec.rb +0 -117
  261. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  262. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  263. data/spec/mailers/test_mailer_spec.rb +0 -13
  264. data/spec/models/spree/ability_spec.rb +0 -279
  265. data/spec/models/spree/address_spec.rb +0 -399
  266. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  267. data/spec/models/spree/adjustment_spec.rb +0 -339
  268. data/spec/models/spree/asset_spec.rb +0 -25
  269. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  270. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  271. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  272. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  273. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  274. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  275. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  276. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  277. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  278. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  279. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  280. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  281. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  282. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  283. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
  284. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  285. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  286. data/spec/models/spree/calculator_spec.rb +0 -43
  287. data/spec/models/spree/carton_spec.rb +0 -145
  288. data/spec/models/spree/classification_spec.rb +0 -126
  289. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  290. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  291. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  292. data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
  293. data/spec/models/spree/country_spec.rb +0 -154
  294. data/spec/models/spree/credit_card_spec.rb +0 -373
  295. data/spec/models/spree/customer_return_spec.rb +0 -294
  296. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  297. data/spec/models/spree/exchange_spec.rb +0 -76
  298. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  299. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  300. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  301. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  302. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  303. data/spec/models/spree/gateway_spec.rb +0 -14
  304. data/spec/models/spree/image_spec.rb +0 -25
  305. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  306. data/spec/models/spree/line_item_spec.rb +0 -240
  307. data/spec/models/spree/option_type_spec.rb +0 -16
  308. data/spec/models/spree/option_value_spec.rb +0 -52
  309. data/spec/models/spree/order/address_spec.rb +0 -52
  310. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  311. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  312. data/spec/models/spree/order/checkout_spec.rb +0 -740
  313. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  314. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  315. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  316. data/spec/models/spree/order/payment_spec.rb +0 -280
  317. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  318. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  319. data/spec/models/spree/order/totals_spec.rb +0 -26
  320. data/spec/models/spree/order/validations_spec.rb +0 -17
  321. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  322. data/spec/models/spree/order_capturing_spec.rb +0 -16
  323. data/spec/models/spree/order_contents_spec.rb +0 -362
  324. data/spec/models/spree/order_inventory_spec.rb +0 -285
  325. data/spec/models/spree/order_merger_spec.rb +0 -162
  326. data/spec/models/spree/order_mutex_spec.rb +0 -89
  327. data/spec/models/spree/order_promotion_spec.rb +0 -33
  328. data/spec/models/spree/order_shipping_spec.rb +0 -247
  329. data/spec/models/spree/order_spec.rb +0 -1687
  330. data/spec/models/spree/order_taxation_spec.rb +0 -128
  331. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  332. data/spec/models/spree/order_updater_spec.rb +0 -556
  333. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  334. data/spec/models/spree/payment_create_spec.rb +0 -195
  335. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  336. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  337. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  338. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  339. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  340. data/spec/models/spree/payment_method_spec.rb +0 -408
  341. data/spec/models/spree/payment_spec.rb +0 -1270
  342. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  343. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  344. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  345. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  346. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  347. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  348. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  349. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  350. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  351. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  352. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  353. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  354. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  355. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  356. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  357. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
  358. data/spec/models/spree/preference_spec.rb +0 -79
  359. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  360. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  361. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  362. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  363. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  364. data/spec/models/spree/preferences/store_spec.rb +0 -40
  365. data/spec/models/spree/price_spec.rb +0 -150
  366. data/spec/models/spree/product/scopes_spec.rb +0 -164
  367. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  368. data/spec/models/spree/product_filter_spec.rb +0 -28
  369. data/spec/models/spree/product_property_spec.rb +0 -20
  370. data/spec/models/spree/product_spec.rb +0 -584
  371. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  372. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  373. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  374. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  375. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  376. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  377. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  378. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  379. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  380. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  381. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  382. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  383. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -226
  384. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  385. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  386. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  387. data/spec/models/spree/promotion_action_spec.rb +0 -44
  388. data/spec/models/spree/promotion_category_spec.rb +0 -19
  389. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  390. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  391. data/spec/models/spree/promotion_code_spec.rb +0 -206
  392. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  393. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  394. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  395. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  396. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  397. data/spec/models/spree/promotion_spec.rb +0 -945
  398. data/spec/models/spree/refund_spec.rb +0 -200
  399. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  400. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  401. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  402. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  403. data/spec/models/spree/reimbursement_spec.rb +0 -278
  404. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  405. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  406. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  407. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  408. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  409. data/spec/models/spree/return_authorization_spec.rb +0 -226
  410. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  411. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  412. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  413. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  414. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  415. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  416. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  417. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  418. data/spec/models/spree/return_item_spec.rb +0 -785
  419. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  420. data/spec/models/spree/shipment_spec.rb +0 -914
  421. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  422. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  423. data/spec/models/spree/shipping_method_spec.rb +0 -292
  424. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  425. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  426. data/spec/models/spree/state_spec.rb +0 -43
  427. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  428. data/spec/models/spree/stock/availability_spec.rb +0 -143
  429. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  430. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  431. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  432. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  433. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  434. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  435. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  436. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  437. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  438. data/spec/models/spree/stock/package_spec.rb +0 -182
  439. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  440. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  441. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  442. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  443. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  444. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  445. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  446. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  447. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  448. data/spec/models/spree/stock_item_spec.rb +0 -348
  449. data/spec/models/spree/stock_location_spec.rb +0 -288
  450. data/spec/models/spree/stock_movement_spec.rb +0 -58
  451. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  452. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  453. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  454. data/spec/models/spree/store_credit_spec.rb +0 -900
  455. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  456. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  457. data/spec/models/spree/store_spec.rb +0 -156
  458. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  459. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  460. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  461. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  462. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  463. data/spec/models/spree/tax_category_spec.rb +0 -50
  464. data/spec/models/spree/tax_rate_spec.rb +0 -317
  465. data/spec/models/spree/taxon_spec.rb +0 -197
  466. data/spec/models/spree/taxonomy_spec.rb +0 -15
  467. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
  468. data/spec/models/spree/unit_cancel_spec.rb +0 -126
  469. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
  470. data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
  471. data/spec/models/spree/user_spec.rb +0 -247
  472. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  473. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  474. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  475. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  476. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  477. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  478. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  479. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  480. data/spec/models/spree/variant_spec.rb +0 -862
  481. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  482. data/spec/models/spree/wallet_spec.rb +0 -155
  483. data/spec/models/spree/zone_spec.rb +0 -248
  484. data/spec/rails_helper.rb +0 -46
  485. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  486. data/spec/spec_helper.rb +0 -36
  487. data/spec/support/big_decimal.rb +0 -7
  488. data/spec/support/concerns/default_price.rb +0 -44
  489. data/spec/support/concerns/payment_source.rb +0 -66
  490. data/spec/support/concerns/working_factories.rb +0 -15
  491. data/spec/support/dummy_ability.rb +0 -7
  492. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
  493. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
  494. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
  495. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0aabcb199c31d99f564afef69740c95363dff238117b5692ff26226f91f6bf06
4
- data.tar.gz: fd982fa13569c953468edb060c7019f541b435cd404787b8c0674ff3db324606
3
+ metadata.gz: 67f52a65e6e81c1ce08998d4e78697917ec11a458b2186407c8787e5f720f438
4
+ data.tar.gz: 744a81976801433d6db59d9b91838b5f726a5760248d5d35bf5479d10b6548c8
5
5
  SHA512:
6
- metadata.gz: d0532174df1e8cac35d61f180102c5123dec9f43d41b29d61a6ce37a87cb1d29f60a902de56ba5b0394094ef5c0ea28e13ca81033df598de93209dcf7105dbc5
7
- data.tar.gz: 9df7b935ee802245a93da97b4341aacb7343aac7e6319b5b1673b30a0145f9f46d539aa5c2e3ab190e1e7dbf69b37843ff8c4739497ef24233a572fa49eb6d4d
6
+ metadata.gz: 656ba324a01abefe949d50477b37f1414176ebc8ae025e6875d61d505fd71255243ef3814cf5c3283a32910c4275c434883e445257be8d3e0c98c42b256858d0
7
+ data.tar.gz: 4efde61091581ff5c04c56363b070278be880cf797ac5d0c494667842486c6896b20c5feb5342e565e891e7dd2b8f3c52c350956258210d6b074cb8664452099
@@ -51,12 +51,41 @@ Spree.ajax = function(url, options) {
51
51
  return $.ajax(url, options);
52
52
  };
53
53
 
54
- Spree.routes = {
54
+ /**
55
+ * @deprecated Spree.routes will be removed in a future release. Please use Spree.pathFor instead.
56
+ * See: https://github.com/solidusio/solidus/issues/3405
57
+ */
58
+ Spree.routesDeprecationProxy = {
59
+ get: function(obj, prop) {
60
+ <% if Rails.env != "production" %>
61
+ console.log("Spree.routes is deprecated, please use pathFor instead. See: https://github.com/solidusio/solidus/issues/3405");
62
+ <% end %>
63
+
64
+ return obj[prop]
65
+ },
66
+
67
+ set: function(obj, prop, value) {
68
+ <% if Rails.env != "production" %>
69
+ console.log("Spree.routes is deprecated, please use pathFor instead. See: https://github.com/solidusio/solidus/issues/3405");
70
+ <% end %>
71
+
72
+ obj[prop] = value
73
+ return value;
74
+ }
75
+ };
76
+
77
+ var frontend_routes = {
55
78
  states_search: Spree.pathFor('api/states'),
56
79
  apply_coupon_code: function(order_id) {
57
80
  return Spree.pathFor("api/orders/" + order_id + "/coupon_codes");
58
81
  }
59
- };
82
+ }
83
+
84
+ if(typeof Proxy == "function") {
85
+ Spree.routes = new Proxy(frontend_routes, Spree.routesDeprecationProxy);
86
+ } else {
87
+ Spree.routes = frontend_routes
88
+ }
60
89
 
61
90
  Spree.getJSON = function(url, data, success) {
62
91
  if (typeof data === 'function') {
@@ -4,6 +4,7 @@ require 'cancan'
4
4
  require_dependency 'spree/core/controller_helpers/strong_parameters'
5
5
 
6
6
  class Spree::BaseController < ApplicationController
7
+ include Spree::Core::ControllerHelpers::CurrentHost
7
8
  include Spree::Core::ControllerHelpers::Auth
8
9
  include Spree::Core::ControllerHelpers::Common
9
10
  include Spree::Core::ControllerHelpers::PaymentParameters
@@ -6,6 +6,10 @@ module Spree
6
6
  store.mail_from_address
7
7
  end
8
8
 
9
+ def bcc_address(store)
10
+ store.bcc_email
11
+ end
12
+
9
13
  def money(amount, currency = Spree::Config[:currency])
10
14
  Spree::Money.new(amount, currency: currency).to_s
11
15
  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, from: from_address(@store), subject: subject)
10
+ mail(to: @order.email, bcc: bcc_address(@store), from: from_address(@store), subject: subject)
11
11
  end
12
12
 
13
13
  def cancel_email(order, resend = false)
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'mini_magick'
4
+
5
+ module Spree
6
+ module ActiveStorageAdapter
7
+ # Decorares AtiveStorage attachment to add methods exptected by Solidus'
8
+ # Paperclip-oriented attachment support.
9
+ class Attachment
10
+ delegate_missing_to :@attachment
11
+
12
+ DEFAULT_SIZE = '100%'
13
+
14
+ def initialize(attachment, styles: {})
15
+ @attachment = attachment
16
+ @styles = styles
17
+ end
18
+
19
+ def exists?
20
+ attached?
21
+ end
22
+
23
+ def filename
24
+ blob.filename.to_s
25
+ end
26
+
27
+ def url(style = nil)
28
+ variant(style).url
29
+ end
30
+
31
+ def variant(style = nil)
32
+ size = style_to_size(style&.to_sym)
33
+ @attachment.variant(
34
+ resize: size,
35
+ strip: true,
36
+ 'auto-orient': true,
37
+ colorspace: 'sRGB',
38
+ ).processed
39
+ end
40
+
41
+ def height
42
+ metadata[:height]
43
+ end
44
+
45
+ def width
46
+ metadata[:width]
47
+ end
48
+
49
+ def destroy
50
+ return false unless attached?
51
+
52
+ purge
53
+ true
54
+ end
55
+
56
+ private
57
+
58
+ def metadata
59
+ analyze unless analyzed?
60
+
61
+ @attachment.metadata
62
+ end
63
+
64
+ def style_to_size(style)
65
+ @styles.fetch(style) { DEFAULT_SIZE }
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module ActiveStorageAdapter
5
+ # Contains normalization methods to make objects compliant with
6
+ # ActiveStorage API.
7
+ module Normalization
8
+ # Normalizes an attachable
9
+ def normalize_attachable(attachable)
10
+ case attachable
11
+ when ActiveStorage::Blob, ActionDispatch::Http::UploadedFile,
12
+ Rack::Test::UploadedFile, Hash, String
13
+ attachable
14
+ when Attachment, ActiveStorage::Attached
15
+ attachable_blob(attachable)
16
+ else # assume it's an IO
17
+ attachable_io(attachable)
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ def attachable_blob(attachable)
24
+ attachable.blob
25
+ end
26
+
27
+ def attachable_io(attachable)
28
+ filename = if attachable.respond_to?(:to_path)
29
+ attachable.to_path
30
+ else
31
+ SecureRandom.uuid
32
+ end
33
+ attachable.rewind
34
+
35
+ { io: attachable, filename: filename }
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,116 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ # Adapts ActiveStorage interface to make it compliant with Solidus'
5
+ # Paperclip-oriented attachment support.
6
+ module ActiveStorageAdapter
7
+ extend ActiveSupport::Concern
8
+ include Spree::ActiveStorageAdapter::Normalization
9
+
10
+ included do
11
+ next if Rails.gem_version >= Gem::Version.new('6.1.0.alpha')
12
+
13
+ abort <<~MESSAGE
14
+ Configuration Error: Solidus ActiveStorage attachment adpater requires Rails >= 6.1.0.
15
+
16
+ Spree::Config.image_attachment_module preference is set to #{Spree::Config.image_attachment_module}
17
+ Spree::Config.taxon_attachment_module preference is set to #{Spree::Config.taxon_attachment_module}
18
+ Rails version is #{Rails.gem_version}
19
+
20
+ To solve the problem you can upgrade to a Rails version greater than or equal to 6.1.0
21
+ or use legacy Paperclip attachment adapter by editing `config/initialiers/spree/rb`:
22
+ config.image_attachment_module = 'Spree::Image::PaperclipAttachment'
23
+ config.taxon_attachment_module = 'Spree::Taxon::PaperclipAttachment'
24
+ MESSAGE
25
+ end
26
+
27
+ class_methods do
28
+ attr_reader :attachment_name
29
+ attr_reader :attachment_definition
30
+
31
+ # Specifies the relation between a single attachment and the model
32
+ def has_attachment(name, definition)
33
+ @attachment_name = name.to_sym
34
+ @attachment_definition = definition
35
+
36
+ has_one_attached attachment_name
37
+
38
+ override_reader
39
+ override_writer
40
+ define_image_validation
41
+ define_presence_reader
42
+ end
43
+
44
+ def attachment_definitions
45
+ { attachment_name => attachment_definition }
46
+ end
47
+
48
+ private
49
+
50
+ def override_reader
51
+ method_name = attachment_name
52
+ override = Module.new do
53
+ define_method method_name do |*args|
54
+ attachment = Attachment.new(super(), styles: styles)
55
+ if args.empty?
56
+ attachment
57
+ else
58
+ style = args.first || default_style
59
+ attachment.url(style)
60
+ end
61
+ end
62
+ end
63
+ prepend override
64
+
65
+ alias_method :attachment, method_name if method_name != :attachment
66
+ end
67
+
68
+ def override_writer
69
+ method_name = :"#{attachment_name}="
70
+ override = Module.new do
71
+ define_method method_name do |attachable|
72
+ no_other_changes = persisted? && !changed?
73
+ super(normalize_attachable(attachable))
74
+ save if no_other_changes
75
+ end
76
+ end
77
+ prepend override
78
+ end
79
+
80
+ def define_image_validation
81
+ define_method :"#{attachment_name}_is_an_image" do
82
+ return unless attachment.attached?
83
+ return if attachment.image?
84
+
85
+ errors.add(self.class.attachment_name, 'is not an image')
86
+ end
87
+ end
88
+
89
+ def define_presence_reader
90
+ define_method :"#{attachment_name}_present?" do
91
+ attachment.attached?
92
+ end
93
+ end
94
+ end
95
+
96
+ def styles
97
+ self.class.attachment_definition[:styles]
98
+ end
99
+
100
+ def default_style
101
+ self.class.attachment_definition[:default_style]
102
+ end
103
+
104
+ def filename
105
+ attachment.filename
106
+ end
107
+
108
+ def url(style = default_style)
109
+ attachment.url(style)
110
+ end
111
+
112
+ def destroy_attachment(_name)
113
+ attachment.destroy
114
+ end
115
+ end
116
+ end
@@ -6,7 +6,7 @@ module Spree
6
6
 
7
7
  included do
8
8
  has_one :default_price,
9
- -> { with_deleted.currently_valid.with_default_attributes },
9
+ -> { with_discarded.currently_valid.with_default_attributes },
10
10
  class_name: 'Spree::Price',
11
11
  inverse_of: :variant,
12
12
  dependent: :destroy,
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'discard'
4
+
5
+ module Spree
6
+ module SoftDeletable
7
+ extend ActiveSupport::Concern
8
+
9
+ included do
10
+ acts_as_paranoid
11
+ include Spree::ParanoiaDeprecations::InstanceMethods
12
+ extend Spree::ParanoiaDeprecations::ClassMethods
13
+
14
+ include Discard::Model
15
+ self.discard_column = :deleted_at
16
+ end
17
+ end
18
+ end
@@ -5,62 +5,92 @@ module Spree
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  included do
8
- has_many :user_addresses, -> { active }, { foreign_key: "user_id", class_name: "Spree::UserAddress" } do
8
+ has_many :user_addresses, -> { active }, foreign_key: "user_id", class_name: "Spree::UserAddress" do
9
9
  def find_first_by_address_values(address_attrs)
10
10
  detect { |ua| ua.address == Spree::Address.new(address_attrs) }
11
11
  end
12
12
 
13
- # @note this method enforces only one default address per user
14
- def mark_default(user_address)
15
- # the checks of persisted? allow us to build a User and associate Addresses at once
13
+ def mark_default(user_address, address_type: :shipping)
14
+ column_for_default = address_type == :shipping ? :default : :default_billing
16
15
  ActiveRecord::Base.transaction do
17
- (self - [user_address]).each do |ua| # update_all would be nice, but it bypasses ActiveRecord callbacks
18
- ua.persisted? ? ua.update!(default: false) : ua.default = false
16
+ (self - [user_address]).each do |address| # update_all would be nice, but it bypasses ActiveRecord callbacks
17
+ if address.persisted?
18
+ address.update!(column_for_default => false)
19
+ else
20
+ address.write_attribute(column_for_default, false)
21
+ end
22
+ end
23
+
24
+ if user_address.persisted?
25
+ user_address.update!(column_for_default => true, archived: false)
26
+ else
27
+ user_address.write_attribute(column_for_default, true)
19
28
  end
20
- user_address.persisted? ? user_address.update!(default: true, archived: false) : user_address.default = true
21
29
  end
22
30
  end
23
31
  end
24
32
 
25
33
  has_many :addresses, through: :user_addresses
26
34
 
27
- # bill_address is only minimally used now, but we can't get rid of it without a major version release
28
- belongs_to :bill_address, class_name: 'Spree::Address', optional: true
35
+ has_one :default_user_bill_address, ->{ default_billing }, class_name: 'Spree::UserAddress', foreign_key: 'user_id'
36
+ has_one :bill_address, through: :default_user_bill_address, source: :address
29
37
 
30
- has_one :default_user_address, ->{ default }, class_name: 'Spree::UserAddress', foreign_key: 'user_id'
31
- has_one :default_address, through: :default_user_address, source: :address
32
- alias_method :ship_address, :default_address
38
+ has_one :default_user_ship_address, ->{ default_shipping }, class_name: 'Spree::UserAddress', foreign_key: 'user_id'
39
+ has_one :ship_address, through: :default_user_ship_address, source: :address
33
40
  end
34
41
 
35
- def bill_address=(address)
36
- # stow a copy in our address book too
37
- address = save_in_address_book(address.attributes) if address
38
- super(address)
42
+ def default_address
43
+ Spree::Deprecation.warn "#default_address is deprecated. Please start using #ship_address."
44
+ ship_address
39
45
  end
40
46
 
41
- def bill_address_attributes=(attributes)
42
- self.bill_address = Spree::Address.immutable_merge(bill_address, attributes)
47
+ def default_user_address
48
+ Spree::Deprecation.warn "#default_user_address is deprecated. Please start using #default_user_ship_address."
49
+ default_user_ship_address
43
50
  end
44
51
 
45
52
  def default_address=(address)
46
- save_in_address_book(address.attributes, true) if address
53
+ Spree::Deprecation.warn(
54
+ "#default_address= does not take Spree::Config.automatic_default_address into account and is deprecated. " \
55
+ "Please use #ship_address=."
56
+ )
57
+
58
+ self.ship_address = address if address
47
59
  end
48
60
 
49
61
  def default_address_attributes=(attributes)
50
62
  # see "Nested Attributes Examples" section of http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for
51
63
  # this #{fieldname}_attributes= method works with fields_for in the views
52
64
  # even without declaring accepts_nested_attributes_for
53
- self.default_address = Spree::Address.immutable_merge(default_address, attributes)
54
- end
65
+ Spree::Deprecation.warn "#default_address_attributes= is deprecated. Please use #ship_address_attributes=."
55
66
 
56
- alias_method :ship_address_attributes=, :default_address_attributes=
67
+ self.default_address = Spree::Address.immutable_merge(ship_address, attributes)
68
+ end
57
69
 
58
70
  # saves address in address book
59
71
  # sets address to the default if automatic_default_address is set to true
60
72
  # if address is nil, does nothing and returns nil
61
73
  def ship_address=(address)
62
- be_default = Spree::Config.automatic_default_address
63
- save_in_address_book(address.attributes, be_default) if address
74
+ if address
75
+ save_in_address_book(address.attributes,
76
+ Spree::Config.automatic_default_address)
77
+ end
78
+ end
79
+
80
+ def ship_address_attributes=(attributes)
81
+ self.ship_address = Spree::Address.immutable_merge(ship_address, attributes)
82
+ end
83
+
84
+ def bill_address=(address)
85
+ if address
86
+ save_in_address_book(address.attributes,
87
+ Spree::Config.automatic_default_address,
88
+ :billing)
89
+ end
90
+ end
91
+
92
+ def bill_address_attributes=(attributes)
93
+ self.bill_address = Spree::Address.immutable_merge(bill_address, attributes)
64
94
  end
65
95
 
66
96
  # saves order.ship_address and order.bill_address in address book
@@ -73,15 +103,16 @@ module Spree
73
103
  order.ship_address.attributes,
74
104
  Spree::Config.automatic_default_address
75
105
  )
76
- self.ship_address_id = address.id if address && address.persisted?
106
+ self.ship_address_id = address.id if address&.persisted?
77
107
  end
78
108
 
79
109
  if order.bill_address
80
110
  address = save_in_address_book(
81
111
  order.bill_address.attributes,
82
- order.ship_address.nil? && Spree::Config.automatic_default_address
112
+ Spree::Config.automatic_default_address,
113
+ :billing
83
114
  )
84
- self.bill_address_id = address.id if address && address.persisted?
115
+ self.bill_address_id = address.id if address&.persisted?
85
116
  end
86
117
 
87
118
  save! # In case the ship_address_id or bill_address_id was set
@@ -92,8 +123,9 @@ module Spree
92
123
  # treated as value equality to de-dup among existing Addresses
93
124
  # @param default set whether or not this address will show up from
94
125
  # #default_address or not
95
- def save_in_address_book(address_attributes, default = false)
96
- return nil unless address_attributes.present?
126
+ def save_in_address_book(address_attributes, default = false, address_type = :shipping)
127
+ return nil if address_attributes.blank?
128
+
97
129
  address_attributes = address_attributes.to_h.with_indifferent_access
98
130
 
99
131
  new_address = Spree::Address.factory(address_attributes)
@@ -106,7 +138,7 @@ module Spree
106
138
  end
107
139
 
108
140
  user_address = prepare_user_address(new_address)
109
- user_addresses.mark_default(user_address) if default || first_one
141
+ user_addresses.mark_default(user_address, address_type: address_type) if default || first_one
110
142
 
111
143
  if persisted?
112
144
  user_address.save!
@@ -116,20 +148,36 @@ module Spree
116
148
  # user_addresses need to be reset to get the new ordering based on any changes
117
149
  # {default_,}user_address needs to be reset as its result is likely to have changed.
118
150
  user_addresses.reset
119
- association(:default_user_address).reset
120
- association(:default_address).reset
151
+ association(:default_user_ship_address).reset
152
+ association(:ship_address).reset
153
+ association(:default_user_bill_address).reset
154
+ association(:bill_address).reset
121
155
  end
122
156
 
123
157
  user_address.address
124
158
  end
125
159
 
126
160
  def mark_default_address(address)
161
+ Spree::Deprecation.warn(
162
+ "#mark_default_address is deprecated and it sets the ship_address only. " \
163
+ "Please use #mark_default_ship_address."
164
+ )
165
+
166
+ mark_default_ship_address(address)
167
+ end
168
+
169
+ def mark_default_ship_address(address)
127
170
  user_addresses.mark_default(user_addresses.find_by(address: address))
128
171
  end
129
172
 
173
+ def mark_default_bill_address(address)
174
+ user_addresses.mark_default(user_addresses.find_by(address: address), address_type: :billing)
175
+ end
176
+
130
177
  def remove_from_address_book(address_id)
131
178
  user_address = user_addresses.find_by(address_id: address_id)
132
179
  if user_address
180
+ remove_user_address_reference(address_id)
133
181
  user_address.update(archived: true, default: false)
134
182
  else
135
183
  false
@@ -145,5 +193,11 @@ module Spree
145
193
  user_address.archived = false
146
194
  user_address
147
195
  end
196
+
197
+ def remove_user_address_reference(address_id)
198
+ self.bill_address_id = bill_address_id == address_id.to_i ? nil : bill_address_id
199
+ self.ship_address_id = ship_address_id == address_id.to_i ? nil : ship_address_id
200
+ save if changed?
201
+ end
148
202
  end
149
203
  end
@@ -34,12 +34,13 @@ module Spree
34
34
 
35
35
  include Spree::RansackableAttributes unless included_modules.include?(Spree::RansackableAttributes)
36
36
 
37
+ ransack_alias :firstname_or_lastname, :addresses_firstname_or_addresses_lastname
37
38
  self.whitelisted_ransackable_associations = %w[addresses spree_roles]
38
- self.whitelisted_ransackable_attributes = %w[id email created_at]
39
+ self.whitelisted_ransackable_attributes = %w[firstname_or_lastname id email created_at]
39
40
  end
40
41
 
41
42
  def wallet
42
- Spree::Wallet.new(self)
43
+ @wallet ||= Spree::Wallet.new(self)
43
44
  end
44
45
 
45
46
  # has_spree_role? simply needs to return true or false whether a user has a role or not.
@@ -14,6 +14,13 @@ module Spree
14
14
 
15
15
  attr_reader :user
16
16
 
17
+ CUSTOM_ALIASES_MAP = {
18
+ delete: :destroy,
19
+ display: :read,
20
+ new_action: :create,
21
+ read: :show
22
+ }.freeze
23
+
17
24
  # Allows us to go beyond the standard cancan initialize method which makes it difficult for engines to
18
25
  # modify the default +Ability+ of an application. The +ability+ argument must be a class that includes
19
26
  # the +CanCan::Ability+ module. The registered ability should behave properly as a stand-alone class
@@ -29,23 +36,40 @@ module Spree
29
36
  def initialize(current_user)
30
37
  @user = current_user || Spree.user_class.new
31
38
 
32
- alias_actions
33
39
  activate_permission_sets
34
40
  register_extension_abilities
35
41
  end
36
42
 
43
+ def can?(action, *args)
44
+ super(normalize_action(action), *args)
45
+ end
46
+
47
+ def model_adapter(model_class, action)
48
+ super(model_class, normalize_action(action))
49
+ end
50
+
37
51
  private
38
52
 
39
- def alias_actions
40
- clear_aliased_actions
53
+ def normalize_action(action)
54
+ return action unless Spree::Config.use_custom_cancancan_actions
55
+
56
+ normalized_action = CUSTOM_ALIASES_MAP.fetch(action, action)
57
+
58
+ if action == :read
59
+ Spree::Deprecation.warn <<~WARN, caller(3)
60
+ The behavior of CanCanCan `:read` action alias will be changing in Solidus 3.0.
61
+ The current alias is: `:show, :to => :read`,
62
+ the new alias will be compliant with CanCanCan's default: `index, :show, :to => :read`
63
+ WARN
64
+ elsif CUSTOM_ALIASES_MAP.key? action
65
+ Spree::Deprecation.warn <<~WARN, caller(3)
66
+ Calling CanCanCan alias action #{action.inspect} is deprecated.
67
+ In Solidus 3.0 non-standard CanCanCan action aliases will be replaced with default ones,
68
+ please replace with #{normalized_action.inspect}.
69
+ WARN
70
+ end
41
71
 
42
- # override cancan default aliasing (we don't want to differentiate between read and index)
43
- alias_action :delete, to: :destroy
44
- alias_action :edit, to: :update
45
- alias_action :new, to: :create
46
- alias_action :new_action, to: :create
47
- alias_action :show, to: :read
48
- alias_action :index, :read, to: :display
72
+ normalized_action
49
73
  end
50
74
 
51
75
  # Before, this was the only way to extend this ability. Permission sets have been added since.
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ class Address
5
+ # Provides a value object to help transitioning from legacy
6
+ # firstname and lastname fields to a unified name field.
7
+ class Name
8
+ attr_reader :first_name, :last_name, :value
9
+
10
+ # Creates an instance of Spree::Address::Name parsing input attributes.
11
+ # @param attributes [Hash] an hash possibly containing name-related
12
+ # attributes (name, firstname, lastname, first_name, last_name)
13
+ # @return [Spree::Address::Name] the object created
14
+ def self.from_attributes(attributes)
15
+ params = attributes.with_indifferent_access
16
+
17
+ if params[:name].present?
18
+ Spree::Address::Name.new(params[:name])
19
+ elsif params[:firstname].present?
20
+ Spree::Address::Name.new(params[:firstname], params[:lastname])
21
+ elsif params[:first_name].present?
22
+ Spree::Address::Name.new(params[:first_name], params[:last_name])
23
+ else
24
+ Spree::Address::Name.new
25
+ end
26
+ end
27
+
28
+ def initialize(*components)
29
+ @value = components.join(' ').strip
30
+ initialize_name_components(components)
31
+ end
32
+
33
+ def to_s
34
+ @value
35
+ end
36
+
37
+ private
38
+
39
+ def initialize_name_components(components)
40
+ if components.size == 2
41
+ @first_name = components[0].to_s
42
+ @last_name = components[1].to_s
43
+ else
44
+ @first_name, @last_name = @value.split(/[[:space:]]/, 2)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end