spree_core 4.3.3 → 4.4.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (518) hide show
  1. checksums.yaml +4 -4
  2. data/app/finders/spree/option_values/find_available.rb +9 -1
  3. data/app/finders/spree/products/find.rb +1 -1
  4. data/app/helpers/spree/base_helper.rb +1 -5
  5. data/app/helpers/spree/currency_helper.rb +1 -1
  6. data/app/helpers/spree/products_helper.rb +1 -15
  7. data/app/jobs/spree/base_job.rb +4 -0
  8. data/app/jobs/spree/stock_locations/stock_items/create_job.rb +13 -0
  9. data/app/models/concerns/spree/default_price.rb +1 -1
  10. data/app/models/concerns/spree/display_money.rb +3 -1
  11. data/app/models/concerns/spree/memoized_data.rb +1 -1
  12. data/app/models/concerns/spree/metadata.rb +10 -0
  13. data/app/models/concerns/spree/multi_store_resource.rb +1 -1
  14. data/app/models/concerns/spree/named_type.rb +1 -1
  15. data/app/models/concerns/spree/number_identifier.rb +18 -0
  16. data/app/models/concerns/spree/product_scopes.rb +52 -22
  17. data/app/models/concerns/spree/unique_name.rb +10 -0
  18. data/app/models/concerns/spree/user_methods.rb +9 -0
  19. data/app/models/concerns/spree/user_reporting.rb +1 -1
  20. data/app/models/concerns/spree/user_roles.rb +20 -2
  21. data/app/models/spree/ability.rb +11 -3
  22. data/app/models/spree/address.rb +4 -2
  23. data/app/models/spree/adjustment.rb +1 -0
  24. data/app/models/spree/app_configuration.rb +21 -24
  25. data/app/models/spree/asset.rb +1 -0
  26. data/app/models/spree/base.rb +14 -0
  27. data/app/models/spree/calculator/flat_rate.rb +1 -1
  28. data/app/models/spree/calculator/flexi_rate.rb +1 -1
  29. data/app/models/spree/calculator/price_sack.rb +1 -1
  30. data/app/models/spree/calculator/shipping/digital_delivery.rb +22 -0
  31. data/app/models/spree/calculator/shipping/flat_rate.rb +1 -1
  32. data/app/models/spree/calculator/shipping/flexi_rate.rb +1 -1
  33. data/app/models/spree/calculator/shipping/per_item.rb +1 -1
  34. data/app/models/spree/calculator/shipping/price_sack.rb +1 -1
  35. data/app/models/spree/calculator.rb +1 -1
  36. data/app/models/spree/cms_page.rb +3 -3
  37. data/app/models/spree/cms_section.rb +1 -1
  38. data/app/models/spree/country.rb +4 -2
  39. data/app/models/spree/credit_card.rb +10 -0
  40. data/app/models/spree/customer_return.rb +3 -1
  41. data/app/models/spree/digital.rb +15 -0
  42. data/app/models/spree/digital_link.rb +50 -0
  43. data/app/models/spree/gateway/bogus.rb +4 -0
  44. data/app/models/spree/image/configuration/active_storage.rb +2 -19
  45. data/app/models/spree/legacy_user.rb +1 -0
  46. data/app/models/spree/line_item.rb +11 -3
  47. data/app/models/spree/option_type.rb +4 -4
  48. data/app/models/spree/option_value.rb +2 -0
  49. data/app/models/spree/order/checkout.rb +7 -1
  50. data/app/models/spree/order/digital.rb +33 -0
  51. data/app/models/spree/order/store_credit.rb +0 -8
  52. data/app/models/spree/order.rb +34 -22
  53. data/app/models/spree/order_inventory.rb +1 -1
  54. data/app/models/spree/order_promotion.rb +1 -1
  55. data/app/models/spree/payment/processing.rb +1 -0
  56. data/app/models/spree/payment.rb +25 -4
  57. data/app/models/spree/payment_method.rb +3 -1
  58. data/app/models/spree/preference.rb +2 -1
  59. data/app/models/spree/preferences/configuration.rb +2 -2
  60. data/app/models/spree/preferences/store.rb +1 -1
  61. data/app/models/spree/price.rb +1 -1
  62. data/app/models/spree/product.rb +18 -17
  63. data/app/models/spree/promotion/rules/product.rb +1 -1
  64. data/app/models/spree/promotion.rb +3 -1
  65. data/app/models/spree/promotion_action.rb +1 -1
  66. data/app/models/spree/property.rb +1 -0
  67. data/app/models/spree/prototype.rb +2 -0
  68. data/app/models/spree/refund.rb +2 -0
  69. data/app/models/spree/reimbursement.rb +1 -1
  70. data/app/models/spree/return_authorization.rb +3 -2
  71. data/app/models/spree/return_item.rb +1 -1
  72. data/app/models/spree/role.rb +2 -2
  73. data/app/models/spree/shipment.rb +4 -30
  74. data/app/models/spree/shipping_category.rb +1 -1
  75. data/app/models/spree/shipping_method.rb +2 -0
  76. data/app/models/spree/state.rb +1 -1
  77. data/app/models/spree/stock/quantifier.rb +1 -1
  78. data/app/models/spree/stock/splitter/digital.rb +35 -0
  79. data/app/models/spree/stock_item.rb +2 -2
  80. data/app/models/spree/stock_location.rb +6 -28
  81. data/app/models/spree/stock_movement.rb +3 -0
  82. data/app/models/spree/stock_transfer.rb +3 -6
  83. data/app/models/spree/store.rb +41 -8
  84. data/app/models/spree/store_credit.rb +5 -1
  85. data/app/models/spree/store_credit_category.rb +2 -0
  86. data/app/models/spree/store_credit_event.rb +2 -7
  87. data/app/models/spree/store_credit_type.rb +2 -0
  88. data/app/models/spree/tax_category.rb +3 -1
  89. data/app/models/spree/tax_rate.rb +3 -1
  90. data/app/models/spree/taxon.rb +11 -0
  91. data/app/models/spree/taxon_image/configuration/active_storage.rb +2 -12
  92. data/app/models/spree/taxonomy.rb +7 -0
  93. data/app/models/spree/variant.rb +20 -10
  94. data/app/models/spree/wished_item.rb +29 -0
  95. data/app/models/spree/wishlist.rb +35 -0
  96. data/app/models/spree/zone.rb +8 -6
  97. data/app/services/spree/account/addresses/create.rb +1 -17
  98. data/app/services/spree/account/addresses/update.rb +1 -22
  99. data/app/services/spree/addresses/create.rb +24 -0
  100. data/app/services/spree/addresses/helper.rb +41 -0
  101. data/app/services/spree/addresses/update.rb +27 -0
  102. data/app/services/spree/cart/add_item.rb +4 -2
  103. data/app/services/spree/cart/create.rb +4 -2
  104. data/app/services/spree/cart/update.rb +2 -2
  105. data/app/services/spree/checkout/add_store_credit.rb +4 -1
  106. data/app/services/spree/checkout/select_shipping_method.rb +49 -0
  107. data/app/services/spree/checkout/update.rb +3 -10
  108. data/app/services/spree/line_items/create.rb +20 -0
  109. data/app/services/spree/line_items/destroy.rb +18 -0
  110. data/app/services/spree/line_items/helper.rb +11 -0
  111. data/app/services/spree/line_items/update.rb +17 -0
  112. data/app/services/spree/orders/approve.rb +18 -0
  113. data/app/services/spree/orders/cancel.rb +18 -0
  114. data/app/services/spree/payments/create.rb +66 -0
  115. data/app/services/spree/seeds/all.rb +26 -0
  116. data/app/services/spree/seeds/countries.rb +50 -0
  117. data/app/services/spree/seeds/default_reimbursement_types.rb +12 -0
  118. data/app/services/spree/seeds/roles.rb +11 -0
  119. data/app/services/spree/seeds/shipping_categories.rb +12 -0
  120. data/app/services/spree/seeds/states.rb +72 -0
  121. data/app/services/spree/seeds/stock_locations.rb +18 -0
  122. data/app/services/spree/seeds/store_credit_categories.rb +12 -0
  123. data/app/services/spree/seeds/stores.rb +31 -0
  124. data/app/services/spree/seeds/zones.rb +39 -0
  125. data/app/services/spree/shipments/add_item.rb +32 -0
  126. data/app/services/spree/shipments/change_state.rb +14 -0
  127. data/app/services/spree/shipments/create.rb +48 -0
  128. data/app/services/spree/shipments/helper.rb +23 -0
  129. data/app/services/spree/shipments/remove_item.rb +55 -0
  130. data/app/services/spree/shipments/update.rb +40 -0
  131. data/app/services/spree/stock_locations/stock_items/create.rb +31 -0
  132. data/app/services/spree/wallet/create_payment_source.rb +26 -0
  133. data/app/validators/spree/url_validator.rb +23 -0
  134. data/brakeman.ignore +20 -0
  135. data/config/initializers/active_storage.rb +0 -6
  136. data/config/locales/en.yml +14 -168
  137. data/db/migrate/20210914000000_spree_four_three.rb +1205 -0
  138. data/db/migrate/20210915064321_add_metadata_to_spree_orders.rb +13 -0
  139. data/db/migrate/20210915064322_add_metadata_to_spree_products.rb +13 -0
  140. data/db/migrate/20210915064323_add_metadata_to_spree_variants.rb +13 -0
  141. data/db/migrate/20210915064324_add_metadata_to_spree_line_items.rb +13 -0
  142. data/db/migrate/20210915064325_add_metadata_to_spree_shipments.rb +13 -0
  143. data/db/migrate/20210915064326_add_metadata_to_spree_payments.rb +13 -0
  144. data/db/migrate/20210915064327_add_metadata_to_spree_taxons_and_taxonomies.rb +18 -0
  145. data/db/migrate/20210915064328_add_metadata_to_spree_stock_transfers.rb +13 -0
  146. data/db/migrate/20210915064329_add_metadata_to_spree_multiple_tables.rb +30 -0
  147. data/db/migrate/20210920090344_add_deleted_at_to_spree_stores.rb +8 -0
  148. data/db/migrate/20210921070812_rename_column_access_hash_to_token.rb +8 -0
  149. data/db/migrate/20210921070813_create_spree_wishlists.rb +18 -0
  150. data/db/migrate/20210921070814_create_spree_wished_products.rb +16 -0
  151. data/db/migrate/20210921070815_rename_spree_wished_products_to_spree_wished_items.rb +5 -0
  152. data/db/migrate/20210921090344_add_unique_stock_item_stock_location_variant_deleted_at_index.rb +5 -0
  153. data/db/migrate/20210929090344_create_stock_item_stock_location_id_variant_id_coalesce_deleted_at_unique_index.rb +32 -0
  154. data/db/migrate/20210929091444_create_spree_digital_links.rb +13 -0
  155. data/db/migrate/20210929093238_create_spree_digitals.rb +9 -0
  156. data/db/migrate/20210930143043_rename_secret_to_token_on_spree_digital_links.rb +5 -0
  157. data/db/migrate/20210930155649_add_settings_to_spree_stores.rb +11 -0
  158. data/db/seeds.rb +1 -5
  159. data/lib/generators/spree/dummy/dummy_generator.rb +1 -1
  160. data/lib/generators/spree/dummy/templates/rails/database.yml +20 -18
  161. data/{app/models/spree → lib/spree/core}/app_dependencies.rb +32 -4
  162. data/lib/spree/core/controller_helpers/auth.rb +4 -4
  163. data/lib/spree/core/controller_helpers/common.rb +15 -1
  164. data/lib/spree/core/controller_helpers/currency.rb +1 -1
  165. data/lib/spree/core/engine.rb +10 -4
  166. data/lib/spree/core/importer/product.rb +1 -1
  167. data/lib/spree/core/number_generator.rb +0 -2
  168. data/lib/spree/core/version.rb +1 -1
  169. data/lib/spree/core.rb +21 -13
  170. data/lib/spree/money.rb +2 -2
  171. data/lib/spree/permitted_attributes.rb +31 -13
  172. data/lib/spree/testing_support/authorization_helpers.rb +3 -1
  173. data/lib/spree/testing_support/capybara_config.rb +14 -19
  174. data/lib/spree/testing_support/capybara_ext.rb +1 -6
  175. data/lib/spree/testing_support/common_rake.rb +22 -4
  176. data/lib/spree/testing_support/factories/asset_factory.rb +15 -0
  177. data/lib/spree/testing_support/factories/cms_section_factory.rb +2 -2
  178. data/lib/spree/testing_support/factories/digital_factory.rb +10 -0
  179. data/lib/spree/testing_support/factories/digital_link_factory.rb +6 -0
  180. data/lib/spree/testing_support/factories/log_entry_factory.rb +6 -0
  181. data/lib/spree/testing_support/factories/order_factory.rb +4 -1
  182. data/lib/spree/testing_support/factories/payment_capture_event_factory.rb +6 -0
  183. data/lib/spree/testing_support/factories/payment_factory.rb +3 -3
  184. data/lib/spree/testing_support/factories/promotion_action_factory.rb +5 -0
  185. data/lib/spree/testing_support/factories/reimbursement_credit_factory.rb +7 -0
  186. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +7 -0
  187. data/lib/spree/testing_support/factories/state_change_factory.rb +8 -0
  188. data/lib/spree/testing_support/factories/stock_item_factory.rb +7 -0
  189. data/lib/spree/testing_support/factories/stock_location_factory.rb +1 -1
  190. data/lib/spree/testing_support/factories/stock_transfer_factory.rb +9 -0
  191. data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -1
  192. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +5 -0
  193. data/lib/spree/testing_support/factories/tax_rate_factory.rb +1 -0
  194. data/lib/spree/testing_support/factories/user_factory.rb +2 -0
  195. data/lib/spree/testing_support/factories/wished_variant_factory.rb +6 -0
  196. data/lib/spree/testing_support/factories/wishlist_factory.rb +18 -0
  197. data/lib/spree/testing_support/jobs.rb +9 -0
  198. data/lib/tasks/core.rake +4 -4
  199. data/spree_core.gemspec +2 -1
  200. metadata +104 -324
  201. data/app/models/spree/order_contents.rb +0 -31
  202. data/app/services/spree/account/addresses/helper.rb +0 -43
  203. data/app/services/spree/build_localized_redirect_url.rb +0 -101
  204. data/db/default/spree/countries.rb +0 -24
  205. data/db/default/spree/default_reimbursement_type.rb +0 -1
  206. data/db/default/spree/roles.rb +0 -2
  207. data/db/default/spree/states.rb +0 -49
  208. data/db/default/spree/store_credit_categories.rb +0 -1
  209. data/db/default/spree/stores.rb +0 -21
  210. data/db/default/spree/zones.rb +0 -29
  211. data/db/migrate/20120831092320_spree_one_two.rb +0 -481
  212. data/db/migrate/20120831092359_spree_promo_one_two.rb +0 -45
  213. data/db/migrate/20120905145253_add_tax_rate_label.rb +0 -5
  214. data/db/migrate/20120905151823_add_toggle_tax_rate_display.rb +0 -5
  215. data/db/migrate/20120929093553_remove_unused_preference_columns.rb +0 -8
  216. data/db/migrate/20121009142519_add_lock_version_to_variant.rb +0 -5
  217. data/db/migrate/20121010142909_add_states_required_to_countries.rb +0 -5
  218. data/db/migrate/20121012071449_add_on_demand_to_product_and_variant.rb +0 -6
  219. data/db/migrate/20121017010007_remove_not_null_constraint_from_products_on_hand.rb +0 -11
  220. data/db/migrate/20121031162139_split_prices_from_variants.rb +0 -31
  221. data/db/migrate/20121107003422_remove_not_null_from_spree_prices_amount.rb +0 -9
  222. data/db/migrate/20121107184631_add_currency_to_line_items.rb +0 -5
  223. data/db/migrate/20121107194006_add_currency_to_orders.rb +0 -5
  224. data/db/migrate/20121109173623_add_cost_currency_to_variants.rb +0 -5
  225. data/db/migrate/20121111231553_remove_display_on_from_payment_methods.rb +0 -5
  226. data/db/migrate/20121124203911_add_position_to_taxonomies.rb +0 -5
  227. data/db/migrate/20121126040517_add_last_ip_to_spree_orders.rb +0 -5
  228. data/db/migrate/20121213162028_add_state_to_spree_adjustments.rb +0 -6
  229. data/db/migrate/20130114053446_add_display_on_to_spree_payment_methods.rb +0 -9
  230. data/db/migrate/20130120201805_add_position_to_product_properties.spree.rb +0 -6
  231. data/db/migrate/20130203232234_add_identifier_to_spree_payments.rb +0 -5
  232. data/db/migrate/20130207155350_add_order_id_index_to_payments.rb +0 -9
  233. data/db/migrate/20130208032954_add_primary_to_spree_products_taxons.rb +0 -5
  234. data/db/migrate/20130211190146_create_spree_stock_items.rb +0 -14
  235. data/db/migrate/20130211191120_create_spree_stock_locations.rb +0 -11
  236. data/db/migrate/20130213191427_create_default_stock.rb +0 -33
  237. data/db/migrate/20130222032153_add_order_id_index_to_shipments.rb +0 -5
  238. data/db/migrate/20130226032817_change_meta_description_on_spree_products_to_text.rb +0 -5
  239. data/db/migrate/20130226191231_add_stock_location_id_to_spree_shipments.rb +0 -5
  240. data/db/migrate/20130227143905_add_pending_to_inventory_unit.rb +0 -6
  241. data/db/migrate/20130228164411_remove_on_demand_from_product_and_variant.rb +0 -6
  242. data/db/migrate/20130228210442_create_shipping_method_zone.rb +0 -21
  243. data/db/migrate/20130301162745_remove_shipping_category_id_from_shipping_method.rb +0 -5
  244. data/db/migrate/20130301162924_create_shipping_method_categories.rb +0 -13
  245. data/db/migrate/20130301205200_add_tracking_url_to_spree_shipping_methods.rb +0 -5
  246. data/db/migrate/20130304162240_create_spree_shipping_rates.rb +0 -24
  247. data/db/migrate/20130304192936_remove_category_match_attributes_from_shipping_method.rb +0 -7
  248. data/db/migrate/20130305143310_create_stock_movements.rb +0 -12
  249. data/db/migrate/20130306181701_add_address_fields_to_stock_location.rb +0 -22
  250. data/db/migrate/20130306191917_add_active_field_to_stock_locations.rb +0 -5
  251. data/db/migrate/20130306195650_add_backorderable_to_stock_item.rb +0 -5
  252. data/db/migrate/20130307161754_add_default_quantity_to_stock_movement.rb +0 -5
  253. data/db/migrate/20130318151756_add_source_and_destination_to_stock_movements.rb +0 -8
  254. data/db/migrate/20130319062004_change_orders_total_precision.rb +0 -8
  255. data/db/migrate/20130319063911_change_spree_payments_amount_precision.rb +0 -7
  256. data/db/migrate/20130319064308_change_spree_return_authorization_amount_precision.rb +0 -7
  257. data/db/migrate/20130319082943_change_adjustments_amount_precision.rb +0 -7
  258. data/db/migrate/20130319183250_add_originator_to_stock_movement.rb +0 -7
  259. data/db/migrate/20130319190507_drop_source_and_destination_from_stock_movement.rb +0 -15
  260. data/db/migrate/20130325163316_migrate_inventory_unit_sold_to_on_hand.rb +0 -9
  261. data/db/migrate/20130326175857_add_stock_location_to_rma.rb +0 -5
  262. data/db/migrate/20130328130308_update_shipment_state_for_canceled_orders.rb +0 -15
  263. data/db/migrate/20130328195253_add_seo_metas_to_taxons.rb +0 -9
  264. data/db/migrate/20130329134939_remove_stock_item_and_variant_lock.rb +0 -14
  265. data/db/migrate/20130413230529_add_name_to_spree_credit_cards.rb +0 -5
  266. data/db/migrate/20130414000512_update_name_fields_on_spree_credit_cards.rb +0 -13
  267. data/db/migrate/20130417120034_add_index_to_source_columns_on_adjustments.rb +0 -5
  268. data/db/migrate/20130417120035_update_adjustment_states.rb +0 -16
  269. data/db/migrate/20130417123427_add_shipping_rates_to_shipments.rb +0 -15
  270. data/db/migrate/20130418125341_create_spree_stock_transfers.rb +0 -14
  271. data/db/migrate/20130423110707_drop_products_count_on_hand.rb +0 -5
  272. data/db/migrate/20130423223847_set_default_shipping_rate_cost.rb +0 -5
  273. data/db/migrate/20130509115210_add_number_to_stock_transfer.rb +0 -23
  274. data/db/migrate/20130514151929_add_sku_index_to_spree_variants.rb +0 -5
  275. data/db/migrate/20130515180736_add_backorderable_default_to_spree_stock_location.rb +0 -5
  276. data/db/migrate/20130516151222_add_propage_all_variants_to_spree_stock_location.rb +0 -5
  277. data/db/migrate/20130611054351_rename_shipping_methods_zones_to_spree_shipping_methods_zones.rb +0 -5
  278. data/db/migrate/20130611185927_add_user_id_index_to_spree_orders.rb +0 -5
  279. data/db/migrate/20130618041418_add_updated_at_to_spree_countries.rb +0 -9
  280. data/db/migrate/20130619012236_add_updated_at_to_spree_states.rb +0 -9
  281. data/db/migrate/20130626232741_add_cvv_result_code_and_cvv_result_message_to_spree_payments.rb +0 -6
  282. data/db/migrate/20130628021056_add_unique_index_to_permalink_on_spree_products.rb +0 -5
  283. data/db/migrate/20130628022817_add_unique_index_to_orders_shipments_and_stock_transfers.rb +0 -7
  284. data/db/migrate/20130708052307_add_deleted_at_to_spree_tax_rates.rb +0 -5
  285. data/db/migrate/20130711200933_remove_lock_version_from_inventory_units.rb +0 -6
  286. data/db/migrate/20130718042445_add_cost_price_to_line_item.rb +0 -5
  287. data/db/migrate/20130718233855_set_backorderable_to_default_to_false.rb +0 -6
  288. data/db/migrate/20130725031716_add_created_by_id_to_spree_orders.rb +0 -5
  289. data/db/migrate/20130729214043_index_completed_at_on_spree_orders.rb +0 -5
  290. data/db/migrate/20130802014537_add_tax_category_id_to_spree_line_items.rb +0 -5
  291. data/db/migrate/20130802022321_migrate_tax_categories_to_line_items.rb +0 -10
  292. data/db/migrate/20130806022521_drop_spree_mail_methods.rb +0 -12
  293. data/db/migrate/20130806145853_set_default_stock_location_on_shipments.rb +0 -8
  294. data/db/migrate/20130807024301_upgrade_adjustments.rb +0 -46
  295. data/db/migrate/20130807024302_rename_adjustment_fields.rb +0 -20
  296. data/db/migrate/20130809164245_add_admin_name_column_to_spree_shipping_methods.rb +0 -5
  297. data/db/migrate/20130809164330_add_admin_name_column_to_spree_stock_locations.rb +0 -5
  298. data/db/migrate/20130813004002_add_shipment_total_to_spree_orders.rb +0 -5
  299. data/db/migrate/20130813140619_expand_order_number_size.rb +0 -9
  300. data/db/migrate/20130813232134_rename_activators_to_promotions.rb +0 -5
  301. data/db/migrate/20130815000406_add_adjustment_total_to_line_items.rb +0 -5
  302. data/db/migrate/20130815024413_add_adjustment_total_to_shipments.rb +0 -5
  303. data/db/migrate/20130826062534_add_depth_to_spree_taxons.rb +0 -16
  304. data/db/migrate/20130828234942_add_tax_total_to_line_items_shipments_and_orders.rb +0 -8
  305. data/db/migrate/20130830001033_add_shipping_category_to_shipping_methods_and_products.rb +0 -15
  306. data/db/migrate/20130830001159_migrate_old_shipping_calculators.rb +0 -19
  307. data/db/migrate/20130903183026_add_code_to_spree_promotion_rules.rb +0 -5
  308. data/db/migrate/20130909115621_change_states_required_for_countries.rb +0 -9
  309. data/db/migrate/20130915032339_add_deleted_at_to_spree_stock_items.rb +0 -5
  310. data/db/migrate/20130917024658_remove_promotions_event_name_field.rb +0 -5
  311. data/db/migrate/20130924040529_add_promo_total_to_line_items_and_shipments_and_orders.rb +0 -7
  312. data/db/migrate/20131001013410_remove_unused_credit_card_fields.rb +0 -16
  313. data/db/migrate/20131026154747_add_track_inventory_to_variant.rb +0 -5
  314. data/db/migrate/20131107132123_add_tax_category_to_variants.rb +0 -6
  315. data/db/migrate/20131113035136_add_channel_to_spree_orders.rb +0 -5
  316. data/db/migrate/20131118043959_add_included_to_adjustments.rb +0 -5
  317. data/db/migrate/20131118050234_rename_tax_total_fields.rb +0 -11
  318. data/db/migrate/20131118183431_add_line_item_id_to_spree_inventory_units.rb +0 -21
  319. data/db/migrate/20131120234456_add_updated_at_to_variants.rb +0 -5
  320. data/db/migrate/20131127001002_add_position_to_classifications.rb +0 -5
  321. data/db/migrate/20131211112807_create_spree_orders_promotions.rb +0 -8
  322. data/db/migrate/20131211192741_unique_shipping_method_categories.rb +0 -24
  323. data/db/migrate/20131218054603_add_item_count_to_spree_orders.rb +0 -5
  324. data/db/migrate/20140106065820_remove_value_type_from_spree_preferences.rb +0 -8
  325. data/db/migrate/20140106224208_rename_permalink_to_slug_for_products.rb +0 -5
  326. data/db/migrate/20140120160805_add_index_to_variant_id_and_currency_on_prices.rb +0 -5
  327. data/db/migrate/20140124023232_rename_activator_id_in_rules_and_actions_to_promotion_id.rb +0 -6
  328. data/db/migrate/20140129024326_add_deleted_at_to_spree_prices.rb +0 -5
  329. data/db/migrate/20140203161722_add_approver_id_and_approved_at_to_orders.rb +0 -6
  330. data/db/migrate/20140204115338_add_confirmation_delivered_to_spree_orders.rb +0 -5
  331. data/db/migrate/20140204192230_add_auto_capture_to_payment_methods.rb +0 -5
  332. data/db/migrate/20140205120320_create_spree_payment_capture_events.rb +0 -12
  333. data/db/migrate/20140205144710_add_uncaptured_amount_to_payments.rb +0 -5
  334. data/db/migrate/20140205181631_default_variant_weight_to_zero.rb +0 -11
  335. data/db/migrate/20140207085910_add_tax_category_id_to_shipping_methods.rb +0 -5
  336. data/db/migrate/20140207093021_add_tax_rate_id_to_shipping_rates.rb +0 -5
  337. data/db/migrate/20140211040159_add_pre_tax_amount_to_line_items_and_shipments.rb +0 -6
  338. data/db/migrate/20140213184916_add_more_indexes.rb +0 -13
  339. data/db/migrate/20140219060952_add_considered_risky_to_orders.rb +0 -5
  340. data/db/migrate/20140227112348_add_preference_store_to_everything.rb +0 -8
  341. data/db/migrate/20140307235515_add_user_id_to_spree_credit_cards.rb +0 -13
  342. data/db/migrate/20140309023735_migrate_old_preferences.rb +0 -27
  343. data/db/migrate/20140309024355_create_spree_stores.rb +0 -25
  344. data/db/migrate/20140309033438_create_store_from_preferences.rb +0 -42
  345. data/db/migrate/20140315053743_add_timestamps_to_spree_assets.rb +0 -6
  346. data/db/migrate/20140318191500_create_spree_taxons_promotion_rules.rb +0 -8
  347. data/db/migrate/20140331100557_add_additional_store_fields.rb +0 -8
  348. data/db/migrate/20140410141842_add_many_missing_indexes.rb +0 -18
  349. data/db/migrate/20140410150358_correct_some_polymorphic_index_and_add_more_missing.rb +0 -66
  350. data/db/migrate/20140415041315_add_user_id_created_by_id_index_to_order.rb +0 -5
  351. data/db/migrate/20140508151342_change_spree_price_amount_precision.rb +0 -8
  352. data/db/migrate/20140518174634_add_token_to_spree_orders.rb +0 -5
  353. data/db/migrate/20140530024945_move_order_token_from_tokenized_permission.rb +0 -29
  354. data/db/migrate/20140601011216_set_shipment_total_for_users_upgrading.rb +0 -10
  355. data/db/migrate/20140604135309_drop_credit_card_first_name_and_last_name.rb +0 -6
  356. data/db/migrate/20140609201656_add_deleted_at_to_spree_promotion_actions.rb +0 -6
  357. data/db/migrate/20140616202624_remove_uncaptured_amount_from_spree_payments.rb +0 -5
  358. data/db/migrate/20140625214618_create_spree_refunds.rb +0 -12
  359. data/db/migrate/20140702140656_create_spree_return_authorization_inventory_unit.rb +0 -12
  360. data/db/migrate/20140707125621_rename_return_authorization_inventory_unit_to_return_items.rb +0 -5
  361. data/db/migrate/20140709160534_backfill_line_item_pre_tax_amount.rb +0 -10
  362. data/db/migrate/20140710041921_recreate_spree_return_authorizations.rb +0 -55
  363. data/db/migrate/20140710181204_add_amount_fields_to_return_items.rb +0 -7
  364. data/db/migrate/20140710190048_drop_return_authorization_amount.rb +0 -5
  365. data/db/migrate/20140713140455_create_spree_return_authorization_reasons.rb +0 -28
  366. data/db/migrate/20140713140527_create_spree_refund_reasons.rb +0 -14
  367. data/db/migrate/20140713142214_rename_return_authorization_reason.rb +0 -5
  368. data/db/migrate/20140715182625_create_spree_promotion_categories.rb +0 -11
  369. data/db/migrate/20140716204111_drop_received_at_on_return_items.rb +0 -9
  370. data/db/migrate/20140716212330_add_reception_and_acceptance_status_to_return_items.rb +0 -6
  371. data/db/migrate/20140717155155_create_default_refund_reason.rb +0 -9
  372. data/db/migrate/20140717185932_add_default_to_spree_stock_locations.rb +0 -7
  373. data/db/migrate/20140718133010_create_spree_customer_returns.rb +0 -9
  374. data/db/migrate/20140718133349_add_customer_return_id_to_return_item.rb +0 -6
  375. data/db/migrate/20140718195325_create_friendly_id_slugs.rb +0 -15
  376. data/db/migrate/20140723004419_rename_spree_refund_return_authorization_id.rb +0 -5
  377. data/db/migrate/20140723152808_increase_return_item_pre_tax_amount_precision.rb +0 -13
  378. data/db/migrate/20140723214541_copy_product_slugs_to_slug_history.rb +0 -15
  379. data/db/migrate/20140725131539_create_spree_reimbursements.rb +0 -21
  380. data/db/migrate/20140728225422_add_promotionable_to_spree_products.rb +0 -5
  381. data/db/migrate/20140729133613_add_exchange_inventory_unit_foreign_keys.rb +0 -7
  382. data/db/migrate/20140730155938_add_acceptance_status_errors_to_return_item.rb +0 -5
  383. data/db/migrate/20140731150017_create_spree_reimbursement_types.rb +0 -20
  384. data/db/migrate/20140804185157_add_default_to_shipment_cost.rb +0 -10
  385. data/db/migrate/20140805171035_add_default_to_spree_credit_cards.rb +0 -5
  386. data/db/migrate/20140806144901_add_type_to_reimbursement_type.rb +0 -9
  387. data/db/migrate/20140808184039_create_spree_reimbursement_credits.rb +0 -10
  388. data/db/migrate/20140827170513_add_meta_title_to_spree_products.rb +0 -7
  389. data/db/migrate/20140911173301_add_kind_to_zone.rb +0 -11
  390. data/db/migrate/20140924164824_add_code_to_spree_tax_categories.rb +0 -5
  391. data/db/migrate/20140927193717_default_pre_tax_amount_should_be_zero.rb +0 -6
  392. data/db/migrate/20141002191113_add_code_to_spree_shipping_methods.rb +0 -5
  393. data/db/migrate/20141007230328_add_cancel_audit_fields_to_spree_orders.rb +0 -6
  394. data/db/migrate/20141009204607_add_store_id_to_orders.rb +0 -8
  395. data/db/migrate/20141012083513_create_spree_taxons_prototypes.rb +0 -8
  396. data/db/migrate/20141021194502_add_state_lock_version_to_order.rb +0 -5
  397. data/db/migrate/20141023005240_add_counter_cache_from_spree_variants_to_spree_stock_items.rb +0 -8
  398. data/db/migrate/20141101231208_fix_adjustment_order_presence.rb +0 -13
  399. data/db/migrate/20141105213646_update_classifications_positions.rb +0 -9
  400. data/db/migrate/20141120135441_add_guest_token_index_to_spree_orders.rb +0 -5
  401. data/db/migrate/20141215232040_remove_token_permissions_table.rb +0 -6
  402. data/db/migrate/20141215235502_remove_extra_products_slug_index.rb +0 -5
  403. data/db/migrate/20141217215630_update_product_slug_index.rb +0 -6
  404. data/db/migrate/20141218025915_rename_identifier_to_number_for_payment.rb +0 -5
  405. data/db/migrate/20150118210639_create_spree_store_credits.rb +0 -24
  406. data/db/migrate/20150118211500_create_spree_store_credit_categories.rb +0 -8
  407. data/db/migrate/20150118212051_create_spree_store_credit_events.rb +0 -17
  408. data/db/migrate/20150118212101_create_spree_store_credit_types.rb +0 -10
  409. data/db/migrate/20150121022521_remove_environment_from_payment_method.rb +0 -6
  410. data/db/migrate/20150122145607_add_resellable_to_return_items.rb +0 -5
  411. data/db/migrate/20150122202432_add_code_to_spree_promotion_categories.rb +0 -5
  412. data/db/migrate/20150128032538_remove_environment_from_tracker.rb +0 -8
  413. data/db/migrate/20150128060325_remove_spree_configurations.rb +0 -16
  414. data/db/migrate/20150216173445_add_index_to_spree_stock_items_variant_id.rb +0 -13
  415. data/db/migrate/20150309161154_ensure_payments_have_numbers.rb +0 -13
  416. data/db/migrate/20150314013438_add_missing_indexes_on_spree_tables.rb +0 -67
  417. data/db/migrate/20150317174308_remove_duplicated_indexes_from_multi_columns.rb +0 -18
  418. data/db/migrate/20150324104002_remove_user_index_from_spree_state_changes.rb +0 -14
  419. data/db/migrate/20150515211137_fix_adjustment_order_id.rb +0 -70
  420. data/db/migrate/20150522071831_add_position_to_spree_payment_methods.rb +0 -5
  421. data/db/migrate/20150522181728_add_deleted_at_to_friendly_id_slugs.rb +0 -6
  422. data/db/migrate/20150609093816_increase_scale_on_pre_tax_amounts.rb +0 -16
  423. data/db/migrate/20150626181949_add_taxable_adjustment_total_to_line_item.rb +0 -19
  424. data/db/migrate/20150627090949_migrate_payment_methods_display.rb +0 -12
  425. data/db/migrate/20150707204155_enable_acts_as_paranoid_on_calculators.rb +0 -6
  426. data/db/migrate/20150714154102_spree_payment_method_store_credits.rb +0 -12
  427. data/db/migrate/20150726141425_rename_has_and_belongs_to_associations_to_model_names.rb +0 -18
  428. data/db/migrate/20150727191614_spree_store_credit_types.rb +0 -11
  429. data/db/migrate/20150819154308_add_discontinued_to_products_and_variants.rb +0 -68
  430. data/db/migrate/20151220072838_remove_shipping_method_id_from_spree_orders.rb +0 -13
  431. data/db/migrate/20160207191757_add_id_column_to_earlier_habtm_tables.rb +0 -16
  432. data/db/migrate/20160219165458_add_indexes.rb +0 -14
  433. data/db/migrate/20160509064646_remove_counter_cache_from_spree_variants_to_spree_stock_items.rb +0 -10
  434. data/db/migrate/20160608090604_add_zipcode_required_to_spree_countries.rb +0 -7
  435. data/db/migrate/20161014145148_add_created_at_to_variant.rb +0 -8
  436. data/db/migrate/20161014152814_add_null_false_to_spree_variants_timestamps.rb +0 -6
  437. data/db/migrate/20161125065505_add_quantity_to_inventory_units.rb +0 -5
  438. data/db/migrate/20170119122701_add_original_return_item_id_to_spree_inventory_units.rb +0 -29
  439. data/db/migrate/20170315152755_add_unique_index_on_number_to_spree_orders.rb +0 -16
  440. data/db/migrate/20170316154338_add_unique_index_on_number_to_spree_stock_transfer.rb +0 -16
  441. data/db/migrate/20170316205511_add_unique_index_on_number_to_spree_shipment.rb +0 -16
  442. data/db/migrate/20170320134043_add_unique_index_on_number_to_spree_payments.rb +0 -17
  443. data/db/migrate/20170320142750_add_unique_index_on_number_to_spree_return_authorizations.rb +0 -16
  444. data/db/migrate/20170320145040_add_unique_index_on_number_to_spree_customer_returns.rb +0 -16
  445. data/db/migrate/20170320145518_add_unique_index_on_number_to_spree_reimbursements.rb +0 -16
  446. data/db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb +0 -37
  447. data/db/migrate/20170329110859_add_index_on_stock_location_to_spree_customer_returns.rb +0 -5
  448. data/db/migrate/20170329113917_add_index_on_prototype_to_spree_option_type_prototype.rb +0 -19
  449. data/db/migrate/20170330082155_add_indexes_to_spree_option_value_variant.rb +0 -19
  450. data/db/migrate/20170330132215_add_index_on_promotion_id_to_order_promotions.rb +0 -5
  451. data/db/migrate/20170331101758_add_indexes_for_property_prototype.rb +0 -20
  452. data/db/migrate/20170331103334_add_index_for_prototype_id_to_prototype_taxons.rb +0 -5
  453. data/db/migrate/20170331110454_add_indexes_to_refunds.rb +0 -6
  454. data/db/migrate/20170331111757_add_indexes_to_reimbursement_credits.rb +0 -6
  455. data/db/migrate/20170331115246_add_indexes_to_return_authorizations.rb +0 -6
  456. data/db/migrate/20170331120125_add_indexes_to_return_items.rb +0 -11
  457. data/db/migrate/20170331121725_add_index_to_role_users.rb +0 -18
  458. data/db/migrate/20170331123625_add_index_to_shipping_method_categories.rb +0 -5
  459. data/db/migrate/20170331123832_add_index_to_shipping_method_zones.rb +0 -20
  460. data/db/migrate/20170331124251_add_index_to_spree_shipping_rates.rb +0 -6
  461. data/db/migrate/20170331124513_add_index_to_spree_stock_items.rb +0 -5
  462. data/db/migrate/20170331124924_add_index_to_spree_stock_movement.rb +0 -5
  463. data/db/migrate/20170413211707_change_indexes_on_friendly_id_slugs.rb +0 -10
  464. data/db/migrate/20170722102643_add_analytics_kind_to_spree_trackers.rb +0 -5
  465. data/db/migrate/20170727103056_rename_tracker_kind_field.rb +0 -5
  466. data/db/migrate/20171004223836_remove_icon_from_taxons.rb +0 -8
  467. data/db/migrate/20180222133746_add_unique_index_on_spree_promotions_code.rb +0 -6
  468. data/db/migrate/20180613080857_rename_guest_token_to_token_in_orders.rb +0 -5
  469. data/db/migrate/20180915160001_add_timestamps_to_spree_prices.rb +0 -12
  470. data/db/migrate/20181024100754_add_deleted_at_to_spree_credit_cards.rb +0 -6
  471. data/db/migrate/20190305121659_add_iso_and_iso3_validation_on_presence_and_uniqueness.rb +0 -18
  472. data/db/migrate/20190523092729_add_user_id_and_deleted_at_to_spree_addresses.rb +0 -12
  473. data/db/migrate/20191005121504_add_store_id_to_payment_methods.rb +0 -7
  474. data/db/migrate/20191016134113_add_deafult_value_for_store_default_currency.rb +0 -5
  475. data/db/migrate/20191017121054_add_supported_currencies_to_store.rb +0 -11
  476. data/db/migrate/20200102141311_add_social_to_spree_stores.rb +0 -10
  477. data/db/migrate/20200212144523_add_hide_from_nav_to_taxons.rb +0 -5
  478. data/db/migrate/20200308210757_add_default_locale_to_spree_store.rb +0 -7
  479. data/db/migrate/20200310145140_add_customer_support_email_to_spree_store.rb +0 -7
  480. data/db/migrate/20200421095017_add_compare_at_amount_to_spree_prices.rb +0 -7
  481. data/db/migrate/20200423123001_add_default_country_id_to_spree_store.rb +0 -9
  482. data/db/migrate/20200430072209_add_footer_fields_to_spree_stores.rb +0 -8
  483. data/db/migrate/20200513154939_add_show_property_to_spree_product_properties.rb +0 -5
  484. data/db/migrate/20200607161221_add_store_owner_order_notification_delivered_to_spree_orders.rb +0 -7
  485. data/db/migrate/20200607161222_add_new_order_notifications_email_to_spree_stores.rb +0 -7
  486. data/db/migrate/20200610113542_add_label_to_spree_addresses.rb +0 -5
  487. data/db/migrate/20200826075557_add_unique_index_on_taxon_id_and_product_id_to_spree_products_taxons.rb +0 -5
  488. data/db/migrate/20201006110150_add_checkout_zone_field_to_store.rb +0 -12
  489. data/db/migrate/20201012091259_add_filterable_column_to_spree_option_types.rb +0 -10
  490. data/db/migrate/20201013084504_add_seo_robots_to_spree_stores.rb +0 -5
  491. data/db/migrate/20201023152810_add_filterable_to_spree_properties.rb +0 -8
  492. data/db/migrate/20201127084048_add_default_country_kind_to_spree_zones.rb +0 -5
  493. data/db/migrate/20210112193440_remove_contact_email_from_spree_stores.rb +0 -5
  494. data/db/migrate/20210114182625_create_spree_payment_methods_stores.rb +0 -10
  495. data/db/migrate/20210114220232_migrate_data_payment_methods_stores.rb +0 -15
  496. data/db/migrate/20210117112551_remove_store_id_from_spree_payment_methods.rb +0 -5
  497. data/db/migrate/20210120142527_ensure_default_locale_in_spree_stores.rb +0 -5
  498. data/db/migrate/20210205211040_add_supported_locales_to_spree_stores.rb +0 -11
  499. data/db/migrate/20210215202602_migrate_spree_i18n_globalize_config.rb +0 -22
  500. data/db/migrate/20210407200948_create_spree_menus.rb +0 -16
  501. data/db/migrate/20210408092939_create_spree_menu_items.rb +0 -31
  502. data/db/migrate/20210504163720_add_filter_param_to_spree_product_properties.rb +0 -8
  503. data/db/migrate/20210505114659_add_filter_param_to_spree_properties.rb +0 -8
  504. data/db/migrate/20210512191732_create_spree_cms_pages.rb +0 -24
  505. data/db/migrate/20210514204251_create_spree_cms_sections.rb +0 -22
  506. data/db/migrate/20210527094055_create_spree_products_stores.rb +0 -36
  507. data/db/migrate/20210608045519_ensure_store_default_country_is_set.rb +0 -5
  508. data/db/migrate/20210702112334_add_missing_timestamp_columns.rb +0 -46
  509. data/db/migrate/20210713131614_add_unique_index_on_property_id_and_product_id_to_product_properties.rb +0 -29
  510. data/db/migrate/20210715091956_add_store_id_to_spree_store_credits.rb +0 -10
  511. data/db/migrate/20210716093151_add_store_id_to_spree_taxonomies.rb +0 -11
  512. data/db/migrate/20210716104141_add_index_on_name_parent_id_and_taxonomy_id_on_spree_taxons.rb +0 -31
  513. data/db/migrate/20210721120857_add_index_on_permalink_parent_id_and_taxonomy_id_on_spree_taxons.rb +0 -31
  514. data/db/migrate/20210721125657_create_spree_promotions_stores.rb +0 -29
  515. data/db/migrate/20210722090705_add_store_id_to_spree_customer_returns.rb +0 -11
  516. data/db/migrate/20210726065456_change_integer_id_columns_into_bigint.rb +0 -305
  517. data/db/migrate/20210730154425_fix_promotion_code_and_path_unique_indexes.rb +0 -9
  518. /data/lib/spree/{dependencies_helper.rb → core/dependencies_helper.rb} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 96c8f3216e3e5d17e33022ff18a6b6a5eab74963aef31297a70c4c3f1ba4604e
4
- data.tar.gz: 479e325b608c5d19bdd7acb6f69b0dac29f894850dcb63a14a289ca3b5e80a23
3
+ metadata.gz: 7688ca0eb67dbbcd2236ebafb2c3eed22d8d29dbf40924d82b52eba8bf52db9e
4
+ data.tar.gz: '0689424db68d0822931238faad67fcc9292e0f2cd5487ed6c234acbea8b79720'
5
5
  SHA512:
6
- metadata.gz: 706ce33cc84d6423d6ed5a120a38dfe84c3aa1515b448fe8521ebb393104e43d541e94fe67dd5105c66b8a022920fa976af00cee7a0b5382ab49351f93da4644
7
- data.tar.gz: 967829013d91f08dc944a3ecc1d176a95ccf988af3148e0aa142c38a3949a0b9cf21ad7a35464acdf1cb1b76b010d2e1f525298a5e4217ba00e399d633cdea3f
6
+ metadata.gz: 4d8dd9a06af740248a017b5f2b608f11cf19f5df647129837de2c3248c529da621402928dce4c5d9338ded7bb4282509eb0723d772a1a93b9006c8845d213fc6
7
+ data.tar.gz: 7d9689023479c36a36407b650d870d0640f38bff6c456b4722579f5bd0cb9b29a937a9b8c476862e1adcc8bc3339dd801ae4e2b6e8ecf0564e35830d8abc3842
@@ -9,12 +9,20 @@ module Spree
9
9
  end
10
10
 
11
11
  def execute
12
- find_available(scope, products_scope)
12
+ find_available(scope, products_scope).select(select_args).order(order_args)
13
13
  end
14
14
 
15
15
  private
16
16
 
17
17
  attr_reader :scope, :products_scope
18
+
19
+ def select_args
20
+ "#{OptionValue.table_name}.*, #{OptionType.table_name}.position AS option_type_position"
21
+ end
22
+
23
+ def order_args
24
+ "option_type_position, #{OptionValue.table_name}.position"
25
+ end
18
26
  end
19
27
  end
20
28
  end
@@ -154,7 +154,7 @@ module Spree
154
154
  def by_options(products)
155
155
  return products unless options?
156
156
 
157
- products_ids = options.map { |key, value| products.with_option_value(key, value).ids }
157
+ products_ids = options.map { |key, value| products.with_option_value(key, value)&.ids }.compact.uniq
158
158
  products.where(id: products_ids.reduce(&:intersection))
159
159
  end
160
160
 
@@ -65,7 +65,7 @@ module Spree
65
65
  elsif current_store.logo.attached? && current_store.logo.image?
66
66
  main_app.url_for(current_store.logo)
67
67
  else
68
- Spree::Config[:logo]
68
+ 'logo/spree_50.png'
69
69
  end
70
70
 
71
71
  path = spree.respond_to?(:root_path) ? spree.root_path : main_app.root_path
@@ -269,9 +269,5 @@ module Spree
269
269
 
270
270
  tag('meta', name: 'robots', content: current_store.seo_robots)
271
271
  end
272
-
273
- def taxon_wysiwyg_editor_enabled?
274
- Spree::Config[:taxon_wysiwyg_editor_enabled]
275
- end
276
272
  end
277
273
  end
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  module CurrencyHelper
3
3
  def currency_options(selected_value = nil)
4
- selected_value ||= Spree::Config[:currency]
4
+ selected_value ||= Spree::Store.default.default_currency
5
5
  currencies = ::Money::Currency.table.map do |_code, details|
6
6
  iso = details[:iso_code]
7
7
  [iso, "#{details[:name]} (#{iso})"]
@@ -44,20 +44,6 @@ module Spree
44
44
  variants_option_types_presenter(variants, product).options
45
45
  end
46
46
 
47
- def product_wysiwyg_editor_enabled?
48
- Spree::Config[:product_wysiwyg_editor_enabled]
49
- end
50
-
51
- # converts line breaks in product description into <p> tags (for html display purposes)
52
- def product_description(product)
53
- description = if Spree::Config[:show_raw_product_description] || product_wysiwyg_editor_enabled?
54
- product.description
55
- else
56
- product.description.to_s.gsub(/(.*?)\r?\n\r?\n/m, '<p>\1</p>')
57
- end
58
- description.blank? ? Spree.t(:product_has_no_description) : description
59
- end
60
-
61
47
  def line_item_description_text(description_text)
62
48
  if description_text.present?
63
49
  truncate(strip_tags(description_text.gsub('&nbsp;', ' ').squish), length: 100)
@@ -82,7 +68,7 @@ module Spree
82
68
  cache_key_elements.compact.join('/')
83
69
  end
84
70
 
85
- def limit_descritpion(string)
71
+ def limit_description(string)
86
72
  return string if string.length <= 450
87
73
 
88
74
  string.slice(0..449) + '...'
@@ -0,0 +1,4 @@
1
+ module Spree
2
+ class BaseJob < ApplicationJob
3
+ end
4
+ end
@@ -0,0 +1,13 @@
1
+ module Spree
2
+ module StockLocations
3
+ module StockItems
4
+ class CreateJob < Spree::BaseJob
5
+ queue_as :spree_stock_location_stock_items
6
+
7
+ def perform(stock_location)
8
+ Spree::StockLocations::StockItems::Create.call(stock_location: stock_location)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -4,7 +4,7 @@ module Spree
4
4
 
5
5
  included do
6
6
  has_one :default_price,
7
- -> { with_deleted.where(currency: Spree::Config[:currency]) },
7
+ -> { with_deleted.where(currency: Spree::Store.default.default_currency) },
8
8
  class_name: 'Spree::Price',
9
9
  dependent: :destroy
10
10
 
@@ -27,7 +27,9 @@ module Spree
27
27
  define_method("display_#{method_name}") do |**args_list|
28
28
  default_opts = respond_to?(:currency) ? { currency: currency } : {}
29
29
 
30
- Spree::Money.new(send(method_name, **args_list), default_opts.merge(opts).merge(args_list.slice(:currency)))
30
+ amount = args_list.blank? ? send(method_name) : send(method_name, **args_list)
31
+
32
+ Spree::Money.new(amount, default_opts.merge(opts).merge(args_list.slice(:currency)))
31
33
  end
32
34
  end
33
35
  end
@@ -3,7 +3,7 @@ module Spree
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  included do
6
- # reset cache on save inside trasaction and transaction commit
6
+ # reset cache on save inside transaction and transaction commit
7
7
  after_save :reset_memoized_data
8
8
  after_commit :reset_memoized_data
9
9
 
@@ -0,0 +1,10 @@
1
+ module Spree
2
+ module Metadata
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ store :public_metadata, coder: JSON
7
+ store :private_metadata, coder: JSON
8
+ end
9
+ end
10
+ end
@@ -16,7 +16,7 @@ module Spree
16
16
  errors.add(:stores, Spree.t(:must_have_one_store))
17
17
  end
18
18
 
19
- # this can be overriden on model basis
19
+ # this can be overridden on model basis
20
20
  def disable_store_presence_validation?
21
21
  Spree::Config[:disable_store_presence_validation]
22
22
  end
@@ -6,7 +6,7 @@ module Spree
6
6
  scope :active, -> { where(active: true) }
7
7
  default_scope { order(Arel.sql("LOWER(#{table_name}.name)")) }
8
8
 
9
- validates :name, presence: true, uniqueness: { case_sensitive: false }
9
+ include UniqueName
10
10
  end
11
11
  end
12
12
  end
@@ -0,0 +1,18 @@
1
+ module Spree
2
+ module NumberIdentifier
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ before_validation :uppercase_number
7
+
8
+ validates :number, presence: true, length: { maximum: 32, allow_blank: true },
9
+ uniqueness: { allow_blank: true, case_sensitive: true, scope: spree_base_uniqueness_scope }
10
+ end
11
+
12
+ protected
13
+
14
+ def uppercase_number
15
+ number&.to_s&.upcase!
16
+ end
17
+ end
18
+ end
@@ -27,16 +27,21 @@ module Spree
27
27
  next if name.to_s.include?('master_price')
28
28
 
29
29
  parts = name.to_s.match(/(.*)_by_(.*)/)
30
- scope(name.to_s, -> { order(Arel.sql("#{Product.quoted_table_name}.#{parts[2]} #{parts[1] == 'ascend' ? 'ASC' : 'DESC'}")) })
30
+ scope(name.to_s, -> { order(Arel.sql(sanitize_sql("#{Product.quoted_table_name}.#{parts[2]} #{parts[1] == 'ascend' ? 'ASC' : 'DESC'}"))) })
31
31
  end
32
32
  end
33
33
 
34
34
  def self.property_conditions(property)
35
35
  properties = Property.table_name
36
36
  case property
37
- when String then { "#{properties}.name" => property }
38
37
  when Property then { "#{properties}.id" => property.id }
39
- else { "#{properties}.id" => property.to_i }
38
+ when Integer then { "#{properties}.id" => property }
39
+ else
40
+ if Property.column_for_attribute('id').type == :uuid
41
+ ["#{properties.name} = ? OR #{properties.id} = ?", property, property]
42
+ else
43
+ { "#{properties}.name" => property }
44
+ end
40
45
  end
41
46
  end
42
47
 
@@ -139,26 +144,34 @@ module Spree
139
144
  end
140
145
 
141
146
  add_search_scope :with_option do |option|
142
- option_types = OptionType.table_name
143
- conditions = case option
144
- when String then { "#{option_types}.name" => option }
145
- when OptionType then { "#{option_types}.id" => option.id }
146
- else { "#{option_types}.id" => option.to_i }
147
- end
148
-
149
- joins(:option_types).where(conditions)
147
+ if option.is_a?(OptionType)
148
+ joins(:option_types).where(spree_option_types: { id: option.id })
149
+ elsif option.is_a?(Integer)
150
+ joins(:option_types).where(spree_option_types: { id: option })
151
+ elsif OptionType.column_for_attribute('id').type == :uuid
152
+ joins(:option_types).where(spree_option_types: { name: option }).or(Product.joins(:option_types).where(spree_option_types: { id: option }))
153
+ else
154
+ joins(:option_types).where(spree_option_types: { name: option })
155
+ end
150
156
  end
151
157
 
152
158
  add_search_scope :with_option_value do |option, value|
153
- option_values = OptionValue.table_name
154
159
  option_type_id = case option
155
- when String then OptionType.find_by(name: option) || option.to_i
156
160
  when OptionType then option.id
157
- else option.to_i
161
+ when Integer then option
162
+ else
163
+ if OptionType.column_for_attribute('id').type == :uuid
164
+ OptionType.where(id: option).or(OptionType.where(name: option))&.first&.id
165
+ else
166
+ OptionType.where(name: option)&.first&.id
167
+ end
158
168
  end
159
169
 
160
- conditions = "#{option_values}.name = ? AND #{option_values}.option_type_id = ?", value, option_type_id
161
- group('spree_products.id').joins(variants_including_master: :option_values).where(conditions)
170
+ return Product.group("#{Spree::Product.table_name}.id").none if option_type_id.blank?
171
+
172
+ group("#{Spree::Product.table_name}.id").
173
+ joins(variants_including_master: :option_values).
174
+ where(Spree::OptionValue.table_name => { name: value, option_type_id: option_type_id })
162
175
  end
163
176
 
164
177
  # Finds all products which have either:
@@ -245,7 +258,7 @@ module Spree
245
258
  scope = not_discontinued.where("#{Product.quoted_table_name}.available_on <= ?", available_on)
246
259
 
247
260
  unless Spree::Config.show_products_without_price
248
- currency ||= Spree::Config[:currency]
261
+ currency ||= Spree::Store.default.default_currency
249
262
  scope = scope.with_currency(currency)
250
263
  end
251
264
 
@@ -277,6 +290,26 @@ module Spree
277
290
  group('spree_products.id').joins(:taxons).where(Taxon.arel_table[:name].eq(name))
278
291
  end
279
292
 
293
+ # .search_by_name
294
+ if defined?(PgSearch)
295
+ include PgSearch::Model
296
+
297
+ if defined?(SpreeGlobalize)
298
+ pg_search_scope :search_by_name, associated_against: { translations: :name }, using: :tsearch
299
+ else
300
+ pg_search_scope :search_by_name, against: :name, using: :tsearch
301
+ end
302
+ else
303
+ def self.search_by_name(query)
304
+ if defined?(SpreeGlobalize)
305
+ joins(:translations).order(:name).where("LOWER(#{Product::Translation.table_name}.name) LIKE LOWER(:query)", query: "%#{query}%").distinct
306
+ else
307
+ where("LOWER(#{Product.table_name}.name) LIKE LOWER(:query)", query: "%#{query}%")
308
+ end
309
+ end
310
+ end
311
+ search_scopes << :search_by_name
312
+
280
313
  def self.price_table_name
281
314
  Price.quoted_table_name
282
315
  end
@@ -300,14 +333,11 @@ module Spree
300
333
  private_class_method :prepare_words
301
334
 
302
335
  def self.get_taxons(*ids_or_records_or_names)
303
- taxons = Taxon.table_name
304
336
  ids_or_records_or_names.flatten.map do |t|
305
337
  case t
306
- when Integer then Taxon.find_by(id: t)
307
338
  when ApplicationRecord then t
308
- when String
309
- Taxon.find_by(name: t) ||
310
- Taxon.where("#{taxons}.permalink LIKE ? OR #{taxons}.permalink = ?", "%/#{t}/", "#{t}/").first
339
+ else
340
+ Taxon.where(name: t).or(Taxon.where(id: t)).or(Taxon.where("permalink LIKE ? OR permalink = ?", "%/#{t}/", "#{t}/")).first
311
341
  end
312
342
  end.compact.flatten.uniq
313
343
  end
@@ -0,0 +1,10 @@
1
+ module Spree
2
+ module UniqueName
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ validates :name, presence: true,
7
+ uniqueness: { case_sensitive: false, allow_blank: true, scope: spree_base_uniqueness_scope }
8
+ end
9
+ end
10
+ end
@@ -25,6 +25,8 @@ module Spree
25
25
  belongs_to :ship_address, class_name: 'Spree::Address', optional: true
26
26
  belongs_to :bill_address, class_name: 'Spree::Address', optional: true
27
27
 
28
+ has_many :wishlists, class_name: 'Spree::Wishlist', foreign_key: :user_id
29
+
28
30
  self.whitelisted_ransackable_associations = %w[bill_address ship_address addresses]
29
31
  self.whitelisted_ransackable_attributes = %w[id email]
30
32
 
@@ -66,6 +68,13 @@ module Spree
66
68
  end
67
69
  end
68
70
 
71
+ def default_wishlist_for_store(current_store)
72
+ wishlists.find_or_create_by(is_default: true, store_id: current_store.id) do |wishlist|
73
+ wishlist.name = Spree.t(:default_wishlist_name)
74
+ wishlist.save
75
+ end
76
+ end
77
+
69
78
  private
70
79
 
71
80
  def check_completed_orders
@@ -41,7 +41,7 @@ module Spree
41
41
  end
42
42
 
43
43
  def completed_orders(store)
44
- orders.for_store(store).complete
44
+ orders.for_store(store).complete.order(currency: :desc)
45
45
  end
46
46
  end
47
47
  end
@@ -6,18 +6,36 @@ module Spree
6
6
  has_many :role_users, class_name: 'Spree::RoleUser', foreign_key: :user_id, dependent: :destroy
7
7
  has_many :spree_roles, through: :role_users, class_name: 'Spree::Role', source: :role
8
8
 
9
- scope :admin, -> { joins(:spree_roles).where(Spree::Role.table_name => { name: 'admin' }) }
9
+ scope :spree_admin, -> { joins(:spree_roles).where(Spree::Role.table_name => { name: 'admin' }) }
10
10
 
11
11
  # has_spree_role? simply needs to return true or false whether a user has a role or not.
12
12
  def has_spree_role?(role_name)
13
13
  spree_roles.exists?(name: role_name)
14
14
  end
15
15
 
16
+ def self.admin
17
+ ActiveSupport::Deprecation.warn('`User#admin` is deprecated and will be removed in Spree 5. Please use `User#spree_admin`')
18
+
19
+ spree_admin
20
+ end
21
+
16
22
  def self.admin_created?
17
- admin.exists?
23
+ ActiveSupport::Deprecation.warn('`User#admin_created?` is deprecated and will be removed in Spree 5. Please use `User#spree_admin_created?`')
24
+
25
+ spree_admin_created?
18
26
  end
19
27
 
20
28
  def admin?
29
+ ActiveSupport::Deprecation.warn('`User#admin?` is deprecated and will be removed in Spree 5. Please use `User#spree_admin?`')
30
+
31
+ spree_admin?
32
+ end
33
+
34
+ def self.spree_admin_created?
35
+ spree_admin.exists?
36
+ end
37
+
38
+ def spree_admin?
21
39
  has_spree_role?('admin')
22
40
  end
23
41
  end
@@ -1,8 +1,9 @@
1
- # Implementation class for Cancan gem. Instead of overriding this class, consider adding new permissions
1
+ # Implementation class for Cancan gem. Instead of overriding this class, consider adding new permissions
2
2
  # using the special +register_ability+ method which allows extensions to add their own abilities.
3
3
  #
4
- # See http://github.com/ryanb/cancan for more details on cancan.
4
+ # See https://github.com/CanCanCommunity/cancancan for more details.
5
5
  require 'cancan'
6
+
6
7
  module Spree
7
8
  class Ability
8
9
  include CanCan::Ability
@@ -27,7 +28,7 @@ module Spree
27
28
 
28
29
  user ||= Spree.user_class.new
29
30
 
30
- if user.respond_to?(:has_spree_role?) && user.has_spree_role?('admin')
31
+ if user.persisted? && user.try(:spree_admin?)
31
32
  apply_admin_permissions(user)
32
33
  else
33
34
  apply_user_permissions(user)
@@ -85,6 +86,13 @@ module Spree
85
86
  can :read, ::Spree::Taxonomy
86
87
  can :read, ::Spree::Variant
87
88
  can :read, ::Spree::Zone
89
+ can :manage, ::Spree::Wishlist, user_id: user.id
90
+ can :show, ::Spree::Wishlist do |wishlist|
91
+ wishlist.user == user || wishlist.is_private == false
92
+ end
93
+ can [:create, :update, :destroy], ::Spree::WishedItem do |wished_item|
94
+ wished_item.wishlist.user == user
95
+ end
88
96
  end
89
97
 
90
98
  def protect_admin_role
@@ -2,6 +2,8 @@ module Spree
2
2
  class Address < Spree::Base
3
3
  require 'validates_zipcode'
4
4
 
5
+ include Metadata
6
+
5
7
  if Rails::VERSION::STRING >= '6.1'
6
8
  serialize :preferences, Hash, default: {}
7
9
  end
@@ -23,7 +25,7 @@ module Spree
23
25
  # we're not freezing this on purpose so developers can extend and manage
24
26
  # those attributes depending of the logic of their applications
25
27
  ADDRESS_FIELDS = %w(firstname lastname company address1 address2 city state zipcode country phone)
26
- EXCLUDED_KEYS_FOR_COMPARISION = %w(id updated_at created_at deleted_at label user_id)
28
+ EXCLUDED_KEYS_FOR_COMPARISON = %w(id updated_at created_at deleted_at label user_id)
27
29
 
28
30
  scope :not_deleted, -> { where(deleted_at: nil) }
29
31
 
@@ -117,7 +119,7 @@ module Spree
117
119
  end
118
120
 
119
121
  def value_attributes
120
- attributes.except(*EXCLUDED_KEYS_FOR_COMPARISION)
122
+ attributes.except(*EXCLUDED_KEYS_FOR_COMPARISON)
121
123
  end
122
124
 
123
125
  def empty?
@@ -42,6 +42,7 @@ module Spree
42
42
  end
43
43
  end
44
44
 
45
+ # FIXME: we should check if we also need to fire this action after update
45
46
  after_create :update_adjustable_adjustment_total
46
47
  after_destroy :update_adjustable_adjustment_total
47
48
 
@@ -22,49 +22,46 @@ module Spree
22
22
  # Alphabetized to more easily lookup particular preferences
23
23
  preference :address_requires_state, :boolean, default: true # should state/state_name be required
24
24
  preference :address_requires_phone, :boolean, default: true # Determines whether we require phone in address
25
- preference :admin_interface_logo, :string, default: 'admin/logo.png'
26
- preference :admin_path, :string, default: '/admin'
27
- preference :admin_products_per_page, :integer, default: Kaminari.config.default_per_page
28
- preference :admin_orders_per_page, :integer, default: Kaminari.config.default_per_page
29
- preference :admin_properties_per_page, :integer, default: Kaminari.config.default_per_page
30
- preference :admin_promotions_per_page, :integer, default: Kaminari.config.default_per_page
31
- preference :admin_customer_returns_per_page, :integer, default: Kaminari.config.default_per_page
32
- preference :admin_users_per_page, :integer, default: Kaminari.config.default_per_page
33
- preference :admin_show_version, :boolean, default: true
25
+ preference :admin_path, :string, deprecated: true
26
+ preference :admin_products_per_page, :integer, deprecated: true
27
+ preference :admin_orders_per_page, :integer, deprecated: true
28
+ preference :admin_properties_per_page, :integer, deprecated: true
29
+ preference :admin_promotions_per_page, :integer, deprecated: true
30
+ preference :admin_customer_returns_per_page, :integer, deprecated: true
31
+ preference :admin_users_per_page, :integer, deprecated: true
32
+ preference :admin_show_version, :boolean, deprecated: true
34
33
  preference :allow_checkout_on_gateway_error, :boolean, default: false
35
34
  preference :allow_guest_checkout, :boolean, default: true
36
35
  preference :alternative_shipping_phone, :boolean, default: false # Request extra phone for ship addr
37
36
  preference :always_include_confirm_step, :boolean, default: false # Ensures confirmation step is always in checkout_progress bar, but does not force a confirm step if your payment methods do not support it.
38
- preference :always_put_site_name_in_title, :boolean, default: true
39
- preference :title_site_name_separator, :string, default: '-' # When always_put_site_name_in_title is true, insert a separator character before the site name in the title
37
+ preference :always_put_site_name_in_title, :boolean, deprecated: true
38
+ preference :title_site_name_separator, :string, deprecated: true
40
39
  preference :auto_capture, :boolean, default: false # automatically capture the credit card (as opposed to just authorize and capture later)
41
40
  preference :auto_capture_on_dispatch, :boolean, default: false # Captures payment for each shipment in Shipment#after_ship callback, and makes Shipment.ready when payment authorized.
42
41
  preference :binary_inventory_cache, :boolean, default: false # only invalidate product cache when a stock item changes whether it is in_stock
43
- preference :checkout_zone, :string, default: nil # replace with the name of a zone if you would like to limit the countries
42
+ preference :checkout_zone, :string, default: nil, deprecated: true # replace with the name of a zone if you would like to limit the countries
44
43
  preference :company, :boolean, default: false # Request company field for billing and shipping addr
45
- preference :currency, :string, default: 'USD'
46
- preference :default_country_id, :integer
44
+ preference :currency, :string, default: 'USD', deprecated: true
45
+ preference :default_country_id, :integer, deprecated: true
47
46
  preference :disable_sku_validation, :boolean, default: false # when turned off disables the built-in SKU uniqueness validation
48
47
  preference :disable_store_presence_validation, :boolean, default: false # when turned off disables Store presence validation for Products and Payment Methods
49
48
  preference :expedited_exchanges, :boolean, default: false # NOTE this requires payment profiles to be supported on your gateway of choice as well as a delayed job handler to be configured with activejob. kicks off an exchange shipment upon return authorization save. charge customer if they do not return items within timely manner.
50
49
  preference :expedited_exchanges_days_window, :integer, default: 14 # the amount of days the customer has to return their item after the expedited exchange is shipped in order to avoid being charged
51
- preference :layout, :string, default: 'spree/layouts/spree_application'
52
- preference :logo, :string, default: 'logo/spree_50.png'
53
- preference :mailer_logo, :string, default: 'logo/spree_50.png'
54
- preference :max_level_in_taxons_menu, :integer, default: 1 # maximum nesting level in taxons menu
50
+ preference :layout, :string, deprecated: 'Please use Spree::Frontend::Config[:layout] instead'
51
+ preference :logo, :string, deprecated: true
52
+ preference :mailer_logo, :string, deprecated: true
53
+ preference :max_level_in_taxons_menu, :integer, deprecated: true
55
54
  preference :products_per_page, :integer, default: 12
56
- preference :product_wysiwyg_editor_enabled, :boolean, default: true
57
55
  preference :require_master_price, :boolean, default: true
58
56
  preference :restock_inventory, :boolean, default: true # Determines if a return item is restocked automatically once it has been received
59
57
  preference :return_eligibility_number_of_days, :integer, default: 365
60
58
  preference :send_core_emails, :boolean, default: true # Default mail headers settings
61
- preference :shipping_instructions, :boolean, default: false # Request instructions/info for shipping
62
- preference :show_only_complete_orders_by_default, :boolean, default: true
59
+ preference :shipping_instructions, :boolean, deprecated: true
60
+ preference :show_only_complete_orders_by_default, :boolean, deprecated: true
63
61
  preference :show_variant_full_price, :boolean, default: false # Displays variant full price or difference with product price. Default false to be compatible with older behavior
64
62
  preference :show_products_without_price, :boolean, default: false
65
- preference :show_raw_product_description, :boolean, default: false
63
+ preference :show_raw_product_description, :boolean, deprecated: true
66
64
  preference :tax_using_ship_address, :boolean, default: true
67
- preference :taxon_wysiwyg_editor_enabled, :boolean, default: true
68
65
  preference :track_inventory_levels, :boolean, default: true # Determines whether to track on_hand values for variants / products.
69
66
 
70
67
  # Store credits configurations
@@ -72,7 +69,7 @@ module Spree
72
69
  preference :credit_to_new_allocation, :boolean, default: false
73
70
 
74
71
  # Multi store configurations
75
- preference :show_store_selector, :boolean, default: false
72
+ preference :show_store_selector, :boolean, deprecated: true
76
73
 
77
74
  # searcher_class allows spree extension writers to provide their own Search class
78
75
  def searcher_class
@@ -1,6 +1,7 @@
1
1
  module Spree
2
2
  class Asset < Spree::Base
3
3
  include Support::ActiveStorage
4
+ include Metadata
4
5
 
5
6
  belongs_to :viewable, polymorphic: true, touch: true
6
7
  acts_as_list scope: [:viewable_id, :viewable_type]
@@ -36,6 +36,10 @@ class Spree::Base < ApplicationRecord
36
36
  where(nil)
37
37
  end
38
38
 
39
+ def self.spree_base_uniqueness_scope
40
+ ApplicationRecord.try(:spree_base_uniqueness_scope) || []
41
+ end
42
+
39
43
  # FIXME: https://github.com/rails/rails/issues/40943
40
44
  def self.has_many_inversing
41
45
  false
@@ -45,6 +49,16 @@ class Spree::Base < ApplicationRecord
45
49
  column_names.reject { |c| c.match(/_id$|id|preferences|(.*)password|(.*)token|(.*)api_key/) }
46
50
  end
47
51
 
52
+ def self.json_api_permitted_attributes
53
+ skipped_attributes = %w[id]
54
+
55
+ if included_modules.include?(CollectiveIdea::Acts::NestedSet::Model)
56
+ skipped_attributes.push('lft', 'rgt', 'depth')
57
+ end
58
+
59
+ column_names.reject { |c| skipped_attributes.include?(c.to_s) }
60
+ end
61
+
48
62
  def self.json_api_type
49
63
  to_s.demodulize.underscore
50
64
  end
@@ -3,7 +3,7 @@ require_dependency 'spree/calculator'
3
3
  module Spree
4
4
  class Calculator::FlatRate < Calculator
5
5
  preference :amount, :decimal, default: 0
6
- preference :currency, :string, default: -> { Spree::Config[:currency] }
6
+ preference :currency, :string, default: -> { Spree::Store.default.default_currency }
7
7
 
8
8
  def self.description
9
9
  Spree.t(:flat_rate_per_order)
@@ -5,7 +5,7 @@ module Spree
5
5
  preference :first_item, :decimal, default: 0.0
6
6
  preference :additional_item, :decimal, default: 0.0
7
7
  preference :max_items, :integer, default: 0
8
- preference :currency, :string, default: -> { Spree::Config[:currency] }
8
+ preference :currency, :string, default: -> { Spree::Store.default.default_currency }
9
9
 
10
10
  def self.description
11
11
  Spree.t(:flexible_rate)
@@ -5,7 +5,7 @@ module Spree
5
5
  preference :minimal_amount, :decimal, default: 0
6
6
  preference :normal_amount, :decimal, default: 0
7
7
  preference :discount_amount, :decimal, default: 0
8
- preference :currency, :string, default: -> { Spree::Config[:currency] }
8
+ preference :currency, :string, default: -> { Spree::Store.default.default_currency }
9
9
 
10
10
  def self.description
11
11
  Spree.t(:price_sack)