solidus_core 2.9.6 → 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 (575) 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/helpers/spree/base_helper.rb +4 -4
  5. data/app/helpers/spree/products_helper.rb +2 -1
  6. data/app/jobs/spree/promotion_code_batch_job.rb +2 -2
  7. data/app/mailers/spree/base_mailer.rb +4 -0
  8. data/app/mailers/spree/order_mailer.rb +1 -1
  9. data/app/models/concerns/spree/active_storage_adapter.rb +116 -0
  10. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +69 -0
  11. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
  12. data/app/models/concerns/spree/default_price.rb +1 -1
  13. data/app/models/concerns/spree/soft_deletable.rb +18 -0
  14. data/app/models/concerns/spree/user_address_book.rb +87 -33
  15. data/app/models/concerns/spree/user_methods.rb +5 -4
  16. data/app/models/spree/ability.rb +34 -10
  17. data/app/models/spree/address.rb +103 -30
  18. data/app/models/spree/address/name.rb +49 -0
  19. data/app/models/spree/address/state_validator.rb +71 -0
  20. data/app/models/spree/adjustment.rb +21 -10
  21. data/app/models/spree/asset.rb +1 -1
  22. data/app/models/spree/base.rb +1 -2
  23. data/app/models/spree/calculator.rb +1 -1
  24. data/app/models/spree/calculator/default_tax.rb +1 -1
  25. data/app/models/spree/calculator/percent_per_item.rb +4 -4
  26. data/app/models/spree/calculator/price_sack.rb +1 -1
  27. data/app/models/spree/calculator/shipping/flexi_rate.rb +2 -2
  28. data/app/models/spree/calculator/tiered_flat_rate.rb +5 -5
  29. data/app/models/spree/calculator/tiered_percent.rb +6 -6
  30. data/app/models/spree/carton.rb +3 -3
  31. data/app/models/spree/classification.rb +2 -2
  32. data/app/models/spree/credit_card.rb +6 -6
  33. data/app/models/spree/customer_return.rb +5 -3
  34. data/app/models/spree/exchange.rb +1 -1
  35. data/app/models/spree/image/active_storage_attachment.rb +21 -0
  36. data/app/models/spree/image/paperclip_attachment.rb +1 -1
  37. data/app/models/spree/inventory_unit.rb +5 -23
  38. data/app/models/spree/line_item.rb +16 -7
  39. data/app/models/spree/line_item_action.rb +2 -2
  40. data/app/models/spree/log_entry.rb +1 -1
  41. data/app/models/spree/option_type.rb +1 -1
  42. data/app/models/spree/option_value.rb +3 -3
  43. data/app/models/spree/option_values_variant.rb +2 -2
  44. data/app/models/spree/order.rb +85 -30
  45. data/app/models/spree/order/checkout.rb +2 -1
  46. data/app/models/spree/order/payments.rb +2 -2
  47. data/app/models/spree/order_cancellations.rb +1 -1
  48. data/app/models/spree/order_capturing.rb +2 -2
  49. data/app/models/spree/order_contents.rb +2 -2
  50. data/app/models/spree/order_inventory.rb +16 -4
  51. data/app/models/spree/order_merger.rb +6 -4
  52. data/app/models/spree/order_mutex.rb +1 -1
  53. data/app/models/spree/order_promotion.rb +4 -4
  54. data/app/models/spree/order_shipping.rb +1 -1
  55. data/app/models/spree/order_taxation.rb +3 -3
  56. data/app/models/spree/order_updater.rb +11 -10
  57. data/app/models/spree/payment.rb +10 -47
  58. data/app/models/spree/payment/cancellation.rb +3 -3
  59. data/app/models/spree/payment/processing.rb +57 -33
  60. data/app/models/spree/payment_capture_event.rb +1 -1
  61. data/app/models/spree/payment_method.rb +13 -11
  62. data/app/models/spree/payment_method/bogus_credit_card.rb +1 -1
  63. data/app/models/spree/payment_source.rb +1 -1
  64. data/app/models/spree/preference.rb +1 -1
  65. data/app/models/spree/price.rb +3 -9
  66. data/app/models/spree/product.rb +24 -19
  67. data/app/models/spree/product/scopes.rb +223 -210
  68. data/app/models/spree/product_option_type.rb +2 -2
  69. data/app/models/spree/product_promotion_rule.rb +2 -2
  70. data/app/models/spree/product_property.rb +2 -2
  71. data/app/models/spree/promotion.rb +46 -20
  72. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +1 -1
  73. data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
  74. data/app/models/spree/promotion/rules/option_value.rb +2 -2
  75. data/app/models/spree/promotion/rules/product.rb +3 -3
  76. data/app/models/spree/promotion_action.rb +3 -9
  77. data/app/models/spree/promotion_chooser.rb +2 -2
  78. data/app/models/spree/promotion_code.rb +17 -11
  79. data/app/models/spree/promotion_code/batch_builder.rb +3 -3
  80. data/app/models/spree/promotion_code_batch.rb +2 -2
  81. data/app/models/spree/promotion_handler/coupon.rb +2 -2
  82. data/app/models/spree/promotion_rule.rb +3 -3
  83. data/app/models/spree/promotion_rule_role.rb +3 -3
  84. data/app/models/spree/promotion_rule_store.rb +2 -2
  85. data/app/models/spree/promotion_rule_taxon.rb +2 -2
  86. data/app/models/spree/promotion_rule_user.rb +2 -2
  87. data/app/models/spree/refund.rb +59 -17
  88. data/app/models/spree/reimbursement.rb +32 -13
  89. data/app/models/spree/reimbursement/credit.rb +2 -2
  90. data/app/models/spree/reimbursement/reimbursement_type_engine.rb +1 -1
  91. data/app/models/spree/reimbursement_tax_calculator.rb +1 -1
  92. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +12 -5
  93. data/app/models/spree/return_authorization.rb +5 -11
  94. data/app/models/spree/return_item.rb +33 -61
  95. data/app/models/spree/return_item/eligibility_validator/default.rb +1 -1
  96. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
  97. data/app/models/spree/role.rb +1 -1
  98. data/app/models/spree/role_user.rb +2 -2
  99. data/app/models/spree/shipment.rb +9 -43
  100. data/app/models/spree/shipping_calculator.rb +1 -5
  101. data/app/models/spree/shipping_manifest.rb +5 -5
  102. data/app/models/spree/shipping_method.rb +3 -10
  103. data/app/models/spree/shipping_method_category.rb +2 -2
  104. data/app/models/spree/shipping_method_stock_location.rb +2 -2
  105. data/app/models/spree/shipping_method_zone.rb +2 -2
  106. data/app/models/spree/shipping_rate.rb +2 -2
  107. data/app/models/spree/shipping_rate_tax.rb +3 -3
  108. data/app/models/spree/state.rb +2 -2
  109. data/app/models/spree/state_change.rb +2 -2
  110. data/app/models/spree/stock/differentiator.rb +1 -1
  111. data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
  112. data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
  113. data/app/models/spree/stock/package.rb +2 -2
  114. data/app/models/spree/stock/simple_coordinator.rb +1 -3
  115. data/app/models/spree/stock_item.rb +4 -10
  116. data/app/models/spree/stock_location.rb +2 -2
  117. data/app/models/spree/stock_movement.rb +4 -2
  118. data/app/models/spree/stock_quantities.rb +13 -12
  119. data/app/models/spree/store.rb +1 -1
  120. data/app/models/spree/store_credit.rb +9 -15
  121. data/app/models/spree/store_credit_category.rb +30 -3
  122. data/app/models/spree/store_credit_event.rb +4 -10
  123. data/app/models/spree/store_credit_reason.rb +0 -4
  124. data/app/models/spree/store_payment_method.rb +2 -2
  125. data/app/models/spree/store_shipping_method.rb +2 -2
  126. data/app/models/spree/tax/tax_helpers.rb +1 -1
  127. data/app/models/spree/tax_calculator/default.rb +0 -4
  128. data/app/models/spree/tax_calculator/shipping_rate.rb +0 -3
  129. data/app/models/spree/tax_category.rb +2 -8
  130. data/app/models/spree/tax_rate.rb +12 -8
  131. data/app/models/spree/tax_rate_tax_category.rb +2 -2
  132. data/app/models/spree/taxon.rb +1 -1
  133. data/app/models/spree/taxon/active_storage_attachment.rb +19 -0
  134. data/app/models/spree/taxon/paperclip_attachment.rb +13 -0
  135. data/app/models/spree/unit_cancel.rb +5 -2
  136. data/app/models/spree/user_address.rb +10 -4
  137. data/app/models/spree/user_last_url_storer.rb +46 -0
  138. data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +36 -0
  139. data/app/models/spree/user_stock_location.rb +2 -2
  140. data/app/models/spree/variant.rb +17 -23
  141. data/app/models/spree/variant/scopes.rb +37 -29
  142. data/app/models/spree/variant_property_rule.rb +6 -2
  143. data/app/models/spree/variant_property_rule_condition.rb +2 -2
  144. data/app/models/spree/variant_property_rule_value.rb +2 -2
  145. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +9 -4
  146. data/app/models/spree/wallet_payment_source.rb +2 -2
  147. data/app/models/spree/zone.rb +2 -2
  148. data/app/models/spree/zone_member.rb +2 -2
  149. data/config/initializers/inflections.rb +5 -0
  150. data/config/initializers/money.rb +2 -0
  151. data/config/locales/en.yml +78 -8
  152. data/db/default/spree/countries.rb +1 -1
  153. data/db/default/spree/states.rb +12 -4
  154. data/db/default/spree/store_credit.rb +2 -2
  155. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
  156. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
  157. data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
  158. data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
  159. data/lib/generators/solidus/install/install_generator.rb +253 -0
  160. data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +42 -3
  161. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
  162. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
  163. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
  164. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
  165. data/lib/generators/spree/dummy/dummy_generator.rb +2 -0
  166. data/lib/generators/spree/install/install_generator.rb +7 -189
  167. data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
  168. data/lib/spree/app_configuration.rb +135 -54
  169. data/lib/spree/awesome_nested_set_override.rb +44 -0
  170. data/lib/spree/core.rb +6 -0
  171. data/lib/spree/core/controller_helpers/auth.rb +18 -17
  172. data/lib/spree/core/controller_helpers/current_host.rb +17 -0
  173. data/lib/spree/core/controller_helpers/order.rb +8 -7
  174. data/lib/spree/core/engine.rb +41 -4
  175. data/lib/spree/core/importer/order.rb +47 -33
  176. data/lib/spree/core/importer/product.rb +2 -2
  177. data/lib/spree/core/permalinks.rb +1 -3
  178. data/lib/spree/core/product_filters.rb +16 -15
  179. data/lib/spree/core/role_configuration.rb +2 -2
  180. data/lib/spree/core/search/variant.rb +1 -1
  181. data/lib/spree/core/state_machines.rb +97 -0
  182. data/lib/spree/core/state_machines/inventory_unit.rb +42 -0
  183. data/lib/spree/core/state_machines/order.rb +249 -0
  184. data/lib/spree/core/state_machines/payment.rb +61 -0
  185. data/lib/spree/core/state_machines/reimbursement.rb +33 -0
  186. data/lib/spree/core/state_machines/return_authorization.rb +32 -0
  187. data/lib/spree/core/state_machines/return_item/acceptance_status.rb +51 -0
  188. data/lib/spree/core/state_machines/return_item/reception_status.rb +42 -0
  189. data/lib/spree/core/state_machines/shipment.rb +58 -0
  190. data/lib/spree/core/stock_configuration.rb +1 -0
  191. data/lib/spree/core/validators/email.rb +1 -8
  192. data/lib/spree/core/version.rb +1 -1
  193. data/lib/spree/encryptor.rb +25 -0
  194. data/lib/spree/event.rb +40 -7
  195. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  196. data/lib/spree/event/configuration.rb +11 -6
  197. data/lib/spree/event/subscriber.rb +38 -18
  198. data/lib/spree/event/subscriber_registry.rb +92 -0
  199. data/lib/spree/i18n.rb +1 -1
  200. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  201. data/lib/spree/money.rb +2 -2
  202. data/lib/spree/paranoia_deprecations.rb +32 -12
  203. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  204. data/lib/spree/permission_sets/default_customer.rb +16 -16
  205. data/lib/spree/permission_sets/order_display.rb +11 -11
  206. data/lib/spree/permission_sets/order_management.rb +1 -1
  207. data/lib/spree/permission_sets/product_display.rb +9 -9
  208. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  209. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  210. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  211. data/lib/spree/permission_sets/stock_display.rb +2 -2
  212. data/lib/spree/permission_sets/stock_management.rb +1 -1
  213. data/lib/spree/permission_sets/user_display.rb +3 -3
  214. data/lib/spree/permission_sets/user_management.rb +7 -3
  215. data/lib/spree/permitted_attributes.rb +7 -6
  216. data/lib/spree/preferences/preferable.rb +4 -3
  217. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  218. data/lib/spree/preferences/static_model_preferences.rb +2 -2
  219. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  220. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  221. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  222. data/lib/spree/testing_support/capybara_ext.rb +3 -0
  223. data/lib/spree/testing_support/common_rake.rb +3 -3
  224. data/lib/spree/testing_support/dummy_app.rb +45 -21
  225. data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
  226. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +6 -4
  227. data/lib/spree/testing_support/factories/address_factory.rb +1 -2
  228. data/lib/spree/testing_support/factories/image_factory.rb +1 -1
  229. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +8 -1
  230. data/lib/spree/testing_support/factories/promotion_factory.rb +13 -0
  231. data/lib/spree/testing_support/factories/refund_factory.rb +1 -0
  232. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  233. data/lib/spree/testing_support/factories/return_item_factory.rb +0 -1
  234. data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -1
  235. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +8 -0
  236. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -0
  237. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +3 -1
  238. data/lib/spree/testing_support/factories/taxon_factory.rb +4 -0
  239. data/lib/spree/testing_support/factories/user_factory.rb +4 -1
  240. data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
  241. data/lib/spree/testing_support/job_helpers.rb +24 -0
  242. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  243. data/lib/spree/testing_support/preferences.rb +3 -1
  244. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  245. data/lib/spree/testing_support/translations.rb +25 -0
  246. data/solidus_core.gemspec +12 -9
  247. metadata +120 -393
  248. data/script/rails +0 -10
  249. data/spec/fixtures/thinking-cat.jpg +0 -0
  250. data/spec/helpers/base_helper_spec.rb +0 -168
  251. data/spec/helpers/products_helper_spec.rb +0 -202
  252. data/spec/helpers/taxons_helper_spec.rb +0 -43
  253. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  254. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  255. data/spec/lib/i18n_spec.rb +0 -97
  256. data/spec/lib/search/base_spec.rb +0 -87
  257. data/spec/lib/search/variant_spec.rb +0 -115
  258. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  259. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  260. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  261. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  262. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  263. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  264. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  265. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  266. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -48
  267. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  268. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  269. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  270. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  271. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -59
  272. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  273. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  274. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  275. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  276. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  277. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  278. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  279. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  280. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  281. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  282. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  283. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  284. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  285. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  286. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  287. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  288. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  289. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  290. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  291. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  292. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  293. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  294. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  295. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  296. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  297. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  298. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  299. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  300. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  301. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  302. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  303. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  304. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  305. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  306. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  307. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  308. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  309. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  310. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  311. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  312. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  313. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  314. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  315. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  316. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  317. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  318. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  319. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  320. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  321. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  322. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  323. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  324. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  325. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  326. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  327. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  328. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  329. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  330. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  331. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  332. data/spec/lib/spree/core/version_spec.rb +0 -19
  333. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  334. data/spec/lib/spree/event_spec.rb +0 -118
  335. data/spec/lib/spree/localized_number_spec.rb +0 -45
  336. data/spec/lib/spree/migrations_spec.rb +0 -32
  337. data/spec/lib/spree/money_spec.rb +0 -298
  338. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  339. data/spec/lib/spree/permitted_attributes_spec.rb +0 -41
  340. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  341. data/spec/lib/tasks/dummy_task.rake +0 -12
  342. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  343. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  344. data/spec/mailers/carton_mailer_spec.rb +0 -44
  345. data/spec/mailers/order_mailer_spec.rb +0 -117
  346. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  347. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  348. data/spec/mailers/test_mailer_spec.rb +0 -13
  349. data/spec/migrate/20190106184413_remove_code_from_spree_promotions_spec.rb +0 -148
  350. data/spec/models/spree/ability_spec.rb +0 -279
  351. data/spec/models/spree/address_spec.rb +0 -376
  352. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  353. data/spec/models/spree/adjustment_spec.rb +0 -339
  354. data/spec/models/spree/asset_spec.rb +0 -25
  355. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  356. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  357. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  358. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  359. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  360. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  361. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  362. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  363. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  364. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  365. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  366. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  367. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  368. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  369. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -35
  370. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  371. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  372. data/spec/models/spree/calculator_spec.rb +0 -43
  373. data/spec/models/spree/carton_spec.rb +0 -137
  374. data/spec/models/spree/classification_spec.rb +0 -114
  375. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  376. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  377. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  378. data/spec/models/spree/concerns/user_methods_spec.rb +0 -121
  379. data/spec/models/spree/country_spec.rb +0 -154
  380. data/spec/models/spree/credit_card_spec.rb +0 -373
  381. data/spec/models/spree/customer_return_spec.rb +0 -294
  382. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  383. data/spec/models/spree/exchange_spec.rb +0 -76
  384. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  385. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  386. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  387. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  388. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  389. data/spec/models/spree/gateway_spec.rb +0 -14
  390. data/spec/models/spree/image_spec.rb +0 -25
  391. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  392. data/spec/models/spree/line_item_spec.rb +0 -240
  393. data/spec/models/spree/option_type_spec.rb +0 -16
  394. data/spec/models/spree/option_value_spec.rb +0 -52
  395. data/spec/models/spree/order/address_spec.rb +0 -52
  396. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  397. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  398. data/spec/models/spree/order/checkout_spec.rb +0 -740
  399. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  400. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  401. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  402. data/spec/models/spree/order/payment_spec.rb +0 -280
  403. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  404. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  405. data/spec/models/spree/order/totals_spec.rb +0 -26
  406. data/spec/models/spree/order/updating_spec.rb +0 -18
  407. data/spec/models/spree/order/validations_spec.rb +0 -17
  408. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  409. data/spec/models/spree/order_capturing_spec.rb +0 -16
  410. data/spec/models/spree/order_contents_spec.rb +0 -362
  411. data/spec/models/spree/order_inventory_spec.rb +0 -285
  412. data/spec/models/spree/order_merger_spec.rb +0 -162
  413. data/spec/models/spree/order_mutex_spec.rb +0 -89
  414. data/spec/models/spree/order_promotion_spec.rb +0 -33
  415. data/spec/models/spree/order_shipping_spec.rb +0 -247
  416. data/spec/models/spree/order_spec.rb +0 -1694
  417. data/spec/models/spree/order_taxation_spec.rb +0 -128
  418. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  419. data/spec/models/spree/order_updater_spec.rb +0 -555
  420. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  421. data/spec/models/spree/payment_create_spec.rb +0 -205
  422. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  423. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  424. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  425. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  426. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  427. data/spec/models/spree/payment_method_spec.rb +0 -408
  428. data/spec/models/spree/payment_spec.rb +0 -1270
  429. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  430. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  431. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  432. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  433. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  434. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  435. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  436. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  437. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  438. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  439. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  440. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  441. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  442. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  443. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  444. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -56
  445. data/spec/models/spree/preference_spec.rb +0 -79
  446. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  447. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  448. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  449. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  450. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  451. data/spec/models/spree/preferences/store_spec.rb +0 -40
  452. data/spec/models/spree/price_spec.rb +0 -150
  453. data/spec/models/spree/product/scopes_spec.rb +0 -164
  454. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  455. data/spec/models/spree/product_filter_spec.rb +0 -28
  456. data/spec/models/spree/product_property_spec.rb +0 -20
  457. data/spec/models/spree/product_spec.rb +0 -584
  458. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  459. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  460. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  461. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  462. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  463. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  464. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  465. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  466. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  467. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  468. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  469. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  470. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -227
  471. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  472. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  473. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  474. data/spec/models/spree/promotion_action_spec.rb +0 -44
  475. data/spec/models/spree/promotion_category_spec.rb +0 -19
  476. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  477. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  478. data/spec/models/spree/promotion_code_spec.rb +0 -206
  479. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  480. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  481. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  482. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  483. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  484. data/spec/models/spree/promotion_spec.rb +0 -928
  485. data/spec/models/spree/refund_spec.rb +0 -200
  486. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  487. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  488. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  489. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  490. data/spec/models/spree/reimbursement_spec.rb +0 -278
  491. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  492. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  493. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  494. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  495. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  496. data/spec/models/spree/return_authorization_spec.rb +0 -226
  497. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  498. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  499. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  500. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  501. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  502. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  503. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  504. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  505. data/spec/models/spree/return_item_spec.rb +0 -785
  506. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  507. data/spec/models/spree/shipment_spec.rb +0 -914
  508. data/spec/models/spree/shipping_calculator_spec.rb +0 -57
  509. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  510. data/spec/models/spree/shipping_method_spec.rb +0 -260
  511. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  512. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  513. data/spec/models/spree/state_spec.rb +0 -43
  514. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  515. data/spec/models/spree/stock/availability_spec.rb +0 -143
  516. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  517. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  518. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  519. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  520. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  521. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  522. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  523. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  524. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  525. data/spec/models/spree/stock/package_spec.rb +0 -182
  526. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  527. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  528. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  529. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  530. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  531. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  532. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  533. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  534. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  535. data/spec/models/spree/stock_item_spec.rb +0 -348
  536. data/spec/models/spree/stock_location_spec.rb +0 -288
  537. data/spec/models/spree/stock_movement_spec.rb +0 -58
  538. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  539. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  540. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  541. data/spec/models/spree/store_credit_spec.rb +0 -900
  542. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  543. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  544. data/spec/models/spree/store_spec.rb +0 -156
  545. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  546. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  547. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  548. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  549. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  550. data/spec/models/spree/tax_category_spec.rb +0 -50
  551. data/spec/models/spree/tax_rate_spec.rb +0 -316
  552. data/spec/models/spree/taxon_spec.rb +0 -197
  553. data/spec/models/spree/taxonomy_spec.rb +0 -15
  554. data/spec/models/spree/unit_cancel_spec.rb +0 -121
  555. data/spec/models/spree/user_spec.rb +0 -247
  556. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  557. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  558. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  559. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  560. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  561. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  562. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  563. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  564. data/spec/models/spree/variant_spec.rb +0 -862
  565. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  566. data/spec/models/spree/wallet_spec.rb +0 -155
  567. data/spec/models/spree/zone_spec.rb +0 -248
  568. data/spec/rails_helper.rb +0 -46
  569. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  570. data/spec/spec_helper.rb +0 -36
  571. data/spec/support/big_decimal.rb +0 -7
  572. data/spec/support/concerns/default_price.rb +0 -44
  573. data/spec/support/concerns/payment_source.rb +0 -66
  574. data/spec/support/concerns/working_factories.rb +0 -15
  575. data/spec/support/dummy_ability.rb +0 -7
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Spree
4
4
  class Asset < Spree::Base
5
- belongs_to :viewable, polymorphic: true, touch: true
5
+ belongs_to :viewable, polymorphic: true, touch: true, optional: true
6
6
  acts_as_list scope: [:viewable_id, :viewable_type]
7
7
  end
8
8
  end
@@ -2,12 +2,11 @@
2
2
 
3
3
  class Spree::Base < ActiveRecord::Base
4
4
  include Spree::Preferences::Preferable
5
+ include Spree::Core::Permalinks
5
6
  serialize :preferences, Hash
6
7
 
7
8
  include Spree::RansackableAttributes
8
9
 
9
- self.belongs_to_required_by_default = false
10
-
11
10
  def initialize_preference_defaults
12
11
  if has_attribute?(:preferences)
13
12
  self.preferences = default_preferences.merge(preferences)
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Spree
4
4
  class Calculator < Spree::Base
5
- belongs_to :calculable, polymorphic: true
5
+ belongs_to :calculable, polymorphic: true, optional: true
6
6
 
7
7
  # This method calls a compute_<computable> method. must be overriden in concrete calculator.
8
8
  #
@@ -54,7 +54,7 @@ module Spree
54
54
  end
55
55
 
56
56
  def sum_of_included_tax_rates(item)
57
- rates_for_item(item).map(&:amount).sum
57
+ rates_for_item(item).sum(&:amount)
58
58
  end
59
59
  end
60
60
  end
@@ -16,9 +16,9 @@ module Spree
16
16
 
17
17
  def compute(object = nil)
18
18
  return 0 if object.nil?
19
- object.line_items.map { |line_item|
19
+ object.line_items.sum { |line_item|
20
20
  value_for_line_item(line_item)
21
- }.sum
21
+ }
22
22
  end
23
23
 
24
24
  private
@@ -28,9 +28,9 @@ module Spree
28
28
  # Copied from per_item.rb
29
29
  def matching_products
30
30
  if compute_on_promotion?
31
- calculable.promotion.rules.map do |rule|
31
+ calculable.promotion.rules.flat_map do |rule|
32
32
  rule.respond_to?(:products) ? rule.products : []
33
- end.flatten
33
+ end
34
34
  end
35
35
  end
36
36
 
@@ -12,7 +12,7 @@ module Spree
12
12
  # as object we always get line items, as calculable we have Coupon, ShippingMethod
13
13
  def compute(object)
14
14
  if object.is_a?(Array)
15
- base = object.map { |o| o.respond_to?(:amount) ? o.amount : BigDecimal(o.to_s) }.sum
15
+ base = object.sum { |element| element.respond_to?(:amount) ? element.amount : BigDecimal(element.to_s) }
16
16
  else
17
17
  base = object.respond_to?(:amount) ? object.amount : BigDecimal(object.to_s)
18
18
  end
@@ -18,9 +18,9 @@ module Spree
18
18
  def compute_from_quantity(quantity)
19
19
  sum = 0
20
20
  max = preferred_max_items.to_i
21
- quantity.times do |i|
21
+ quantity.times do |index|
22
22
  # check max value to avoid divide by 0 errors
23
- if (max == 0 && i == 0) || (max > 0) && (i % max == 0)
23
+ if (max == 0 && index == 0) || (max > 0) && (index % max == 0)
24
24
  sum += preferred_first_item.to_f
25
25
  else
26
26
  sum += preferred_additional_item.to_f
@@ -11,8 +11,8 @@ module Spree
11
11
  before_validation do
12
12
  # Convert tier values to decimals. Strings don't do us much good.
13
13
  if preferred_tiers.is_a?(Hash)
14
- self.preferred_tiers = preferred_tiers.map do |k, v|
15
- [cast_to_d(k.to_s), cast_to_d(v.to_s)]
14
+ self.preferred_tiers = preferred_tiers.map do |key, value|
15
+ [cast_to_d(key.to_s), cast_to_d(value.to_s)]
16
16
  end.to_h
17
17
  end
18
18
  end
@@ -20,8 +20,8 @@ module Spree
20
20
  validate :preferred_tiers_content
21
21
 
22
22
  def compute(object)
23
- _base, amount = preferred_tiers.sort.reverse.detect do |b, _|
24
- object.amount >= b
23
+ _base, amount = preferred_tiers.sort.reverse.detect do |value, _|
24
+ object.amount >= value
25
25
  end
26
26
 
27
27
  if preferred_currency.casecmp(object.currency).zero?
@@ -41,7 +41,7 @@ module Spree
41
41
 
42
42
  def preferred_tiers_content
43
43
  if preferred_tiers.is_a? Hash
44
- unless preferred_tiers.keys.all?{ |k| k.is_a?(Numeric) && k > 0 }
44
+ unless preferred_tiers.keys.all?{ |key| key.is_a?(Numeric) && key > 0 }
45
45
  errors.add(:base, :keys_should_be_positive_number)
46
46
  end
47
47
  else
@@ -11,8 +11,8 @@ module Spree
11
11
  before_validation do
12
12
  # Convert tier values to decimals. Strings don't do us much good.
13
13
  if preferred_tiers.is_a?(Hash)
14
- self.preferred_tiers = preferred_tiers.map do |k, v|
15
- [cast_to_d(k.to_s), cast_to_d(v.to_s)]
14
+ self.preferred_tiers = preferred_tiers.map do |key, value|
15
+ [cast_to_d(key.to_s), cast_to_d(value.to_s)]
16
16
  end.to_h
17
17
  end
18
18
  end
@@ -26,8 +26,8 @@ module Spree
26
26
  def compute(object)
27
27
  order = object.is_a?(Order) ? object : object.order
28
28
 
29
- _base, percent = preferred_tiers.sort.reverse.detect do |b, _|
30
- order.item_total >= b
29
+ _base, percent = preferred_tiers.sort.reverse.detect do |value, _|
30
+ order.item_total >= value
31
31
  end
32
32
 
33
33
  if preferred_currency.casecmp(order.currency).zero?
@@ -48,10 +48,10 @@ module Spree
48
48
 
49
49
  def preferred_tiers_content
50
50
  if preferred_tiers.is_a? Hash
51
- unless preferred_tiers.keys.all?{ |k| k.is_a?(Numeric) && k > 0 }
51
+ unless preferred_tiers.keys.all?{ |key| key.is_a?(Numeric) && key > 0 }
52
52
  errors.add(:base, :keys_should_be_positive_number)
53
53
  end
54
- unless preferred_tiers.values.all?{ |k| k.is_a?(Numeric) && k >= 0 && k <= 100 }
54
+ unless preferred_tiers.values.all?{ |key| key.is_a?(Numeric) && key >= 0 && key <= 100 }
55
55
  errors.add(:base, :values_should_be_percent)
56
56
  end
57
57
  else
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Spree::Carton < Spree::Base
4
- belongs_to :address, class_name: 'Spree::Address'
5
- belongs_to :stock_location, class_name: 'Spree::StockLocation', inverse_of: :cartons
6
- belongs_to :shipping_method, class_name: 'Spree::ShippingMethod', inverse_of: :cartons
4
+ belongs_to :address, class_name: 'Spree::Address', optional: true
5
+ belongs_to :stock_location, class_name: 'Spree::StockLocation', inverse_of: :cartons, optional: true
6
+ belongs_to :shipping_method, -> { with_discarded }, class_name: 'Spree::ShippingMethod', inverse_of: :cartons, optional: true
7
7
 
8
8
  has_many :inventory_units, class_name: "Spree::InventoryUnit", inverse_of: :carton, dependent: :nullify
9
9
  has_many :orders, -> { distinct }, through: :inventory_units
@@ -4,8 +4,8 @@ module Spree
4
4
  class Classification < Spree::Base
5
5
  self.table_name = 'spree_products_taxons'
6
6
  acts_as_list scope: :taxon
7
- belongs_to :product, class_name: "Spree::Product", inverse_of: :classifications, touch: true
8
- belongs_to :taxon, class_name: "Spree::Taxon", inverse_of: :classifications, touch: true
7
+ belongs_to :product, class_name: "Spree::Product", inverse_of: :classifications, touch: true, optional: true
8
+ belongs_to :taxon, class_name: "Spree::Taxon", inverse_of: :classifications, touch: true, optional: true
9
9
 
10
10
  # For https://github.com/spree/spree/issues/3494
11
11
  validates_uniqueness_of :taxon_id, scope: :product_id, message: :already_linked
@@ -4,8 +4,8 @@ module Spree
4
4
  # The default `source` of a `Spree::Payment`.
5
5
  #
6
6
  class CreditCard < Spree::PaymentSource
7
- belongs_to :user, class_name: Spree::UserClassHandle.new, foreign_key: 'user_id'
8
- belongs_to :address
7
+ belongs_to :user, class_name: Spree::UserClassHandle.new, foreign_key: 'user_id', optional: true
8
+ belongs_to :address, optional: true
9
9
 
10
10
  before_save :set_last_digits
11
11
 
@@ -47,13 +47,13 @@ module Spree
47
47
  }.freeze
48
48
 
49
49
  def default
50
- Spree::Deprecation.warn("CreditCard.default is deprecated. Please use user.wallet.default_wallet_payment_source instead.", caller)
50
+ Spree::Deprecation.warn("CreditCard#default is deprecated. Please use user.wallet.default_wallet_payment_source instead.", caller)
51
51
  return false if user.nil?
52
52
  user.wallet.default_wallet_payment_source.try!(:payment_source) == self
53
53
  end
54
54
 
55
55
  def default=(set_as_default)
56
- Spree::Deprecation.warn("CreditCard.default= is deprecated. Please use user.wallet.default_wallet_payment_source= instead.", caller)
56
+ Spree::Deprecation.warn("CreditCard#default= is deprecated. Please use user.wallet.default_wallet_payment_source= instead.", caller)
57
57
  if user.nil?
58
58
  raise "Cannot set 'default' on a credit card without a user"
59
59
  elsif set_as_default # setting this card as default
@@ -163,7 +163,7 @@ module Spree
163
163
  # the object to ActiveMerchant.
164
164
  # @return [String] the first name on this credit card
165
165
  def first_name
166
- name.to_s.split(/[[:space:]]/, 2)[0]
166
+ Spree::Address::Name.new(name).first_name
167
167
  end
168
168
 
169
169
  # @note ActiveMerchant needs first_name/last_name because we pass it a
@@ -172,7 +172,7 @@ module Spree
172
172
  # the object to ActiveMerchant.
173
173
  # @return [String] the last name on this credit card
174
174
  def last_name
175
- name.to_s.split(/[[:space:]]/, 2)[1]
175
+ Spree::Address::Name.new(name).last_name
176
176
  end
177
177
 
178
178
  # @return [ActiveMerchant::Billing::CreditCard] an ActiveMerchant credit
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Spree
4
4
  class CustomerReturn < Spree::Base
5
- belongs_to :stock_location
5
+ belongs_to :stock_location, optional: true
6
6
 
7
7
  has_many :return_items, inverse_of: :customer_return
8
8
  has_many :return_authorizations, through: :return_items
@@ -17,6 +17,8 @@ module Spree
17
17
 
18
18
  accepts_nested_attributes_for :return_items
19
19
 
20
+ self.whitelisted_ransackable_attributes = ['number']
21
+
20
22
  extend DisplayMoney
21
23
  money_methods :pre_tax_total, :total, :total_excluding_vat, :amount
22
24
  deprecate display_pre_tax_total: :display_total_excluding_vat, deprecator: Spree::Deprecation
@@ -25,11 +27,11 @@ module Spree
25
27
  delegate :id, to: :order, prefix: true, allow_nil: true
26
28
 
27
29
  def total
28
- return_items.map(&:total).sum
30
+ return_items.sum(&:total)
29
31
  end
30
32
 
31
33
  def total_excluding_vat
32
- return_items.map(&:total_excluding_vat).sum
34
+ return_items.sum(&:total_excluding_vat)
33
35
  end
34
36
  alias pre_tax_total total_excluding_vat
35
37
  deprecate pre_tax_total: :total_excluding_vat, deprecator: Spree::Deprecation
@@ -17,7 +17,7 @@ module Spree
17
17
  end
18
18
 
19
19
  def display_amount
20
- Spree::Money.new @reimbursement_objects.map(&:total).sum
20
+ Spree::Money.new @reimbursement_objects.sum(&:total)
21
21
  end
22
22
 
23
23
  def perform!
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree::Image::ActiveStorageAttachment
4
+ extend ActiveSupport::Concern
5
+ include Spree::ActiveStorageAdapter
6
+
7
+ delegate :width, :height, to: :attachment, prefix: true
8
+
9
+ included do
10
+ has_attachment :attachment,
11
+ styles: {
12
+ mini: '48x48>',
13
+ small: '400x400>',
14
+ product: '680x680>',
15
+ large: '1200x1200>'
16
+ },
17
+ default_style: :product
18
+ validates :attachment, presence: true
19
+ validate :attachment_is_an_image
20
+ end
21
+ end
@@ -7,7 +7,7 @@ module Spree::Image::PaperclipAttachment
7
7
  validate :no_attachment_errors
8
8
 
9
9
  has_attached_file :attachment,
10
- styles: { mini: '48x48>', small: '100x100>', product: '240x240>', large: '600x600>' },
10
+ styles: { mini: '48x48>', small: '400x400>', product: '680x680>', large: '1200x1200>' },
11
11
  default_style: :product,
12
12
  default_url: 'noimage/:style.png',
13
13
  url: '/spree/products/:id/:style/:basename.:extension',
@@ -8,10 +8,10 @@ module Spree
8
8
  POST_SHIPMENT_STATES = %w(returned)
9
9
  CANCELABLE_STATES = ['on_hand', 'backordered', 'shipped']
10
10
 
11
- belongs_to :variant, -> { with_deleted }, class_name: "Spree::Variant", inverse_of: :inventory_units
12
- belongs_to :shipment, class_name: "Spree::Shipment", touch: true, inverse_of: :inventory_units
13
- belongs_to :carton, class_name: "Spree::Carton", inverse_of: :inventory_units
14
- belongs_to :line_item, class_name: "Spree::LineItem", inverse_of: :inventory_units
11
+ belongs_to :variant, -> { with_discarded }, class_name: "Spree::Variant", inverse_of: :inventory_units, optional: true
12
+ belongs_to :shipment, class_name: "Spree::Shipment", touch: true, inverse_of: :inventory_units, optional: true
13
+ belongs_to :carton, class_name: "Spree::Carton", inverse_of: :inventory_units, optional: true
14
+ belongs_to :line_item, class_name: "Spree::LineItem", inverse_of: :inventory_units, optional: true
15
15
 
16
16
  has_many :return_items, inverse_of: :inventory_unit, dependent: :destroy
17
17
  has_one :original_return_item, class_name: "Spree::ReturnItem", foreign_key: :exchange_inventory_unit_id, dependent: :destroy
@@ -58,25 +58,7 @@ module Spree
58
58
 
59
59
  scope :shippable, -> { on_hand }
60
60
 
61
- # state machine (see http://github.com/pluginaweek/state_machine/tree/master for details)
62
- state_machine initial: :on_hand do
63
- event :fill_backorder do
64
- transition to: :on_hand, from: :backordered
65
- end
66
- after_transition on: :fill_backorder, do: :fulfill_order
67
-
68
- event :ship do
69
- transition to: :shipped, if: :allow_ship?
70
- end
71
-
72
- event :return do
73
- transition to: :returned, from: :shipped
74
- end
75
-
76
- event :cancel do
77
- transition to: :canceled, from: CANCELABLE_STATES.map(&:to_sym)
78
- end
79
- end
61
+ include ::Spree::Config.state_machines.inventory_unit
80
62
 
81
63
  # Updates the given inventory units to not be pending.
82
64
  #
@@ -12,9 +12,9 @@ module Spree
12
12
  class LineItem < Spree::Base
13
13
  class CurrencyMismatch < StandardError; end
14
14
 
15
- belongs_to :order, class_name: "Spree::Order", inverse_of: :line_items, touch: true
16
- belongs_to :variant, -> { with_deleted }, class_name: "Spree::Variant", inverse_of: :line_items
17
- belongs_to :tax_category, class_name: "Spree::TaxCategory"
15
+ belongs_to :order, class_name: "Spree::Order", inverse_of: :line_items, touch: true, optional: true
16
+ belongs_to :variant, -> { with_discarded }, class_name: "Spree::Variant", inverse_of: :line_items, optional: true
17
+ belongs_to :tax_category, class_name: "Spree::TaxCategory", optional: true
18
18
 
19
19
  has_one :product, through: :variant
20
20
 
@@ -33,6 +33,7 @@ module Spree
33
33
  greater_than: -1
34
34
  }
35
35
  validates :price, numericality: true
36
+ validate :price_match_order_currency
36
37
 
37
38
  after_save :update_inventory
38
39
 
@@ -42,7 +43,7 @@ module Spree
42
43
  delegate :name, :description, :sku, :should_track_inventory?, to: :variant
43
44
  delegate :currency, to: :order, allow_nil: true
44
45
 
45
- attr_accessor :target_shipment
46
+ attr_accessor :target_shipment, :price_currency
46
47
 
47
48
  self.whitelisted_ransackable_associations = ['variant']
48
49
  self.whitelisted_ransackable_attributes = ['variant_id']
@@ -72,7 +73,7 @@ module Spree
72
73
  # @return [BigDecimal] the amount of this item, taking into consideration
73
74
  # all non-tax adjustments.
74
75
  def total_before_tax
75
- amount + adjustments.select { |a| !a.tax? && a.eligible? }.sum(&:amount)
76
+ amount + adjustments.select { |value| !value.tax? && value.eligible? }.sum(&:amount)
76
77
  end
77
78
 
78
79
  # @return [BigDecimal] the amount of this line item before VAT tax
@@ -111,9 +112,11 @@ module Spree
111
112
  def money_price=(money)
112
113
  if !money
113
114
  self.price = nil
114
- elsif money.currency.iso_code != currency
115
- raise CurrencyMismatch, "Line item price currency must match order currency!"
115
+ elsif money.currency.iso_code != currency && Spree::Config.raise_with_invalid_currency
116
+ line_item_errors = ActiveModel::Errors.new(self)
117
+ raise CurrencyMismatch, line_item_errors.generate_message(:price, :does_not_match_order_currency, locale: :en)
116
118
  else
119
+ self.price_currency = money.currency.iso_code
117
120
  self.price = money.to_d
118
121
  end
119
122
  end
@@ -202,5 +205,11 @@ module Spree
202
205
  def destroy_inventory_units
203
206
  inventory_units.destroy_all
204
207
  end
208
+
209
+ def price_match_order_currency
210
+ return if price_currency.blank? || price_currency == currency
211
+
212
+ errors.add(:price, :does_not_match_order_currency)
213
+ end
205
214
  end
206
215
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Spree
4
4
  class LineItemAction < Spree::Base
5
- belongs_to :line_item
6
- belongs_to :action, class_name: "Spree::PromotionAction"
5
+ belongs_to :line_item, optional: true
6
+ belongs_to :action, class_name: "Spree::PromotionAction", optional: true
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Spree
4
4
  class LogEntry < Spree::Base
5
- belongs_to :source, polymorphic: true
5
+ belongs_to :source, polymorphic: true, optional: true
6
6
 
7
7
  def parsed_details
8
8
  @details ||= YAML.load(details)
@@ -15,7 +15,7 @@ module Spree
15
15
  has_many :product_option_types, dependent: :destroy, inverse_of: :option_type
16
16
  has_many :products, through: :product_option_types
17
17
 
18
- validates :name, presence: true, uniqueness: { allow_blank: true }
18
+ validates :name, presence: true, uniqueness: { allow_blank: true, case_sensitive: true }
19
19
  validates :presentation, presence: true
20
20
 
21
21
  default_scope -> { order(:position) }
@@ -2,19 +2,19 @@
2
2
 
3
3
  module Spree
4
4
  class OptionValue < Spree::Base
5
- belongs_to :option_type, class_name: 'Spree::OptionType', inverse_of: :option_values
5
+ belongs_to :option_type, class_name: 'Spree::OptionType', inverse_of: :option_values, optional: true
6
6
  acts_as_list scope: :option_type
7
7
 
8
8
  has_many :option_values_variants, dependent: :destroy
9
9
  has_many :variants, through: :option_values_variants
10
10
 
11
- validates :name, presence: true, uniqueness: { scope: :option_type_id, allow_blank: true }
11
+ validates :name, presence: true, uniqueness: { scope: :option_type_id, allow_blank: true, case_sensitive: true }
12
12
  validates :presentation, presence: true
13
13
 
14
14
  after_save :touch, if: :saved_changes?
15
15
  after_touch :touch_all_variants
16
16
 
17
- delegate :name, :presentation, to: :option_type, prefix: :option_type
17
+ delegate :name, :presentation, to: :option_type, prefix: :option_type, allow_nil: true
18
18
 
19
19
  self.whitelisted_ransackable_attributes = %w[name presentation]
20
20