spree_core 4.2.3 → 4.3.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (274) hide show
  1. checksums.yaml +4 -4
  2. data/app/finders/concerns/spree/product_filterable.rb +9 -0
  3. data/app/finders/spree/cms_pages/find.rb +41 -0
  4. data/app/finders/spree/menus/find.rb +11 -0
  5. data/app/finders/spree/option_values/find_available.rb +20 -0
  6. data/app/finders/spree/orders/find_complete.rb +14 -2
  7. data/app/finders/spree/orders/find_current.rb +1 -13
  8. data/app/finders/spree/product_properties/find_available.rb +20 -0
  9. data/app/finders/spree/products/find.rb +57 -25
  10. data/app/finders/spree/stores/find_current.rb +24 -0
  11. data/app/helpers/spree/base_helper.rb +63 -2
  12. data/app/helpers/spree/locale_helper.rb +5 -1
  13. data/app/helpers/spree/products_helper.rb +7 -3
  14. data/app/models/concerns/spree/display_link.rb +42 -0
  15. data/app/models/concerns/spree/filter_param.rb +21 -0
  16. data/app/models/concerns/spree/memoized_data.rb +24 -0
  17. data/app/models/concerns/spree/multi_store_resource.rb +24 -0
  18. data/app/models/concerns/spree/product_scopes.rb +59 -8
  19. data/app/models/concerns/spree/single_store_resource.rb +9 -0
  20. data/app/models/concerns/spree/user_address.rb +19 -0
  21. data/app/models/concerns/spree/user_methods.rb +5 -4
  22. data/app/models/concerns/spree/user_payment_source.rb +1 -1
  23. data/app/models/spree/ability.rb +3 -1
  24. data/app/models/spree/address.rb +27 -6
  25. data/app/models/spree/app_configuration.rb +8 -0
  26. data/app/models/spree/app_dependencies.rb +18 -6
  27. data/app/models/spree/base.rb +18 -0
  28. data/app/models/spree/classification.rb +3 -0
  29. data/app/models/spree/cms/pages/feature_page.rb +7 -0
  30. data/app/models/spree/cms/pages/homepage.rb +20 -0
  31. data/app/models/spree/cms/pages/standard_page.rb +4 -0
  32. data/app/models/spree/cms/sections/featured_article.rb +29 -0
  33. data/app/models/spree/cms/sections/hero_image.rb +47 -0
  34. data/app/models/spree/cms/sections/image_gallery.rb +103 -0
  35. data/app/models/spree/cms/sections/product_carousel.rb +14 -0
  36. data/app/models/spree/cms/sections/rich_text_content.rb +13 -0
  37. data/app/models/spree/cms/sections/side_by_side_images.rb +74 -0
  38. data/app/models/spree/cms_page.rb +66 -0
  39. data/app/models/spree/cms_section.rb +57 -0
  40. data/app/models/spree/country.rb +14 -6
  41. data/app/models/spree/credit_card.rb +2 -8
  42. data/app/models/spree/customer_return.rb +8 -2
  43. data/app/models/spree/icon.rb +9 -0
  44. data/app/models/spree/image/configuration/active_storage.rb +2 -0
  45. data/app/models/spree/inventory_unit.rb +1 -1
  46. data/app/models/spree/line_item.rb +1 -1
  47. data/app/models/spree/menu.rb +63 -0
  48. data/app/models/spree/menu_item.rb +76 -0
  49. data/app/models/spree/option_type.rb +1 -1
  50. data/app/models/spree/option_value.rb +11 -0
  51. data/app/models/spree/option_value_variant.rb +1 -1
  52. data/app/models/spree/order.rb +46 -45
  53. data/app/models/spree/order/address_book.rb +3 -5
  54. data/app/models/spree/order/currency_updater.rb +1 -1
  55. data/app/models/spree/order/emails.rb +32 -0
  56. data/app/models/spree/order/payments.rb +1 -1
  57. data/app/models/spree/order/store_credit.rb +1 -1
  58. data/app/models/spree/payment.rb +7 -0
  59. data/app/models/spree/payment_method.rb +4 -0
  60. data/app/models/spree/preferences/preferable.rb +12 -0
  61. data/app/models/spree/preferences/preferable_class_methods.rb +10 -1
  62. data/app/models/spree/product.rb +36 -22
  63. data/app/models/spree/product_property.rb +19 -4
  64. data/app/models/spree/promotion.rb +6 -15
  65. data/app/models/spree/promotion/rules/country.rb +1 -1
  66. data/app/models/spree/promotion/rules/first_order.rb +4 -3
  67. data/app/models/spree/promotion/rules/taxon.rb +10 -7
  68. data/app/models/spree/promotion_handler/cart.rb +7 -2
  69. data/app/models/spree/promotion_handler/coupon.rb +5 -4
  70. data/app/models/spree/promotion_handler/free_shipping.rb +5 -6
  71. data/app/models/spree/promotion_handler/page.rb +3 -2
  72. data/app/models/spree/promotion_handler/promotion_duplicator.rb +1 -0
  73. data/app/models/spree/promotion_rule.rb +2 -0
  74. data/app/models/spree/property.rb +27 -0
  75. data/app/models/spree/reimbursement.rb +3 -1
  76. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +2 -1
  77. data/app/models/spree/shipment_handler.rb +4 -2
  78. data/app/models/spree/stock/quantifier.rb +6 -6
  79. data/app/models/spree/stock_location.rb +19 -12
  80. data/app/models/spree/store.rb +90 -7
  81. data/app/models/spree/store_credit.rb +7 -3
  82. data/app/models/spree/store_credit_event.rb +2 -2
  83. data/app/models/spree/store_payment_method.rb +11 -0
  84. data/app/models/spree/store_product.rb +11 -0
  85. data/app/models/spree/store_promotion.rb +11 -0
  86. data/app/models/spree/taxon.rb +21 -1
  87. data/app/models/spree/taxon_image/configuration/active_storage.rb +2 -0
  88. data/app/models/spree/taxonomy.rb +3 -1
  89. data/app/models/spree/variant.rb +13 -4
  90. data/app/presenters/spree/filters/options_presenter.rb +27 -0
  91. data/app/presenters/spree/filters/price_presenter.rb +22 -0
  92. data/app/presenters/spree/filters/price_range_presenter.rb +29 -0
  93. data/app/presenters/spree/filters/properties_presenter.rb +23 -0
  94. data/app/presenters/spree/filters/property_presenter.rb +22 -0
  95. data/app/presenters/spree/filters/quantified_price_range_presenter.rb +44 -0
  96. data/app/services/spree/account/addresses/create.rb +1 -0
  97. data/app/services/spree/account/addresses/helper.rb +6 -0
  98. data/app/services/spree/account/addresses/update.rb +9 -3
  99. data/app/services/spree/account/create.rb +17 -0
  100. data/app/services/spree/account/update.rb +15 -0
  101. data/app/services/spree/build_localized_redirect_url.rb +1 -1
  102. data/app/services/spree/cart/create.rb +5 -3
  103. data/app/services/spree/cart/destroy.rb +40 -0
  104. data/app/services/spree/cart/empty.rb +36 -0
  105. data/app/services/spree/cart/estimate_shipping_rates.rb +3 -3
  106. data/app/services/spree/checkout/add_store_credit.rb +1 -1
  107. data/app/services/spree/classifications/reposition.rb +18 -0
  108. data/app/services/spree/credit_cards/destroy.rb +41 -0
  109. data/app/validators/db_maximum_length_validator.rb +5 -0
  110. data/app/validators/email_validator.rb +3 -1
  111. data/app/views/spree/shared/_purchased_items_table.text.erb +25 -0
  112. data/config/initializers/active_storage.rb +2 -0
  113. data/config/locales/en.yml +166 -2
  114. data/config/routes.rb +0 -5
  115. data/db/migrate/20191016134113_add_deafult_value_for_store_default_currency.rb +1 -1
  116. data/db/migrate/20191017121054_add_supported_currencies_to_store.rb +1 -1
  117. data/db/migrate/20200102141311_add_social_to_spree_stores.rb +1 -1
  118. data/db/migrate/20200212144523_add_hide_from_nav_to_taxons.rb +1 -1
  119. data/db/migrate/20200308210757_add_default_locale_to_spree_store.rb +1 -1
  120. data/db/migrate/20200310145140_add_customer_support_email_to_spree_store.rb +1 -1
  121. data/db/migrate/20200421095017_add_compare_at_amount_to_spree_prices.rb +1 -1
  122. data/db/migrate/20200423123001_add_default_country_id_to_spree_store.rb +1 -1
  123. data/db/migrate/20200430072209_add_footer_fields_to_spree_stores.rb +1 -1
  124. data/db/migrate/20200513154939_add_show_property_to_spree_product_properties.rb +1 -1
  125. data/db/migrate/20200607161221_add_store_owner_order_notification_delivered_to_spree_orders.rb +1 -1
  126. data/db/migrate/20200607161222_add_new_order_notifications_email_to_spree_stores.rb +1 -1
  127. data/db/migrate/20200610113542_add_label_to_spree_addresses.rb +1 -1
  128. data/db/migrate/20200826075557_add_unique_index_on_taxon_id_and_product_id_to_spree_products_taxons.rb +1 -1
  129. data/db/migrate/20201006110150_add_checkout_zone_field_to_store.rb +1 -1
  130. data/db/migrate/20201012091259_add_filterable_column_to_spree_option_types.rb +1 -1
  131. data/db/migrate/20201013084504_add_seo_robots_to_spree_stores.rb +1 -1
  132. data/db/migrate/20201023152810_add_filterable_to_spree_properties.rb +8 -0
  133. data/db/migrate/20201127084048_add_default_country_kind_to_spree_zones.rb +1 -1
  134. data/db/migrate/20210112193440_remove_contact_email_from_spree_stores.rb +1 -1
  135. data/db/migrate/20210114182625_create_spree_payment_methods_stores.rb +1 -1
  136. data/db/migrate/20210114220232_migrate_data_payment_methods_stores.rb +1 -1
  137. data/db/migrate/20210117112551_remove_store_id_from_spree_payment_methods.rb +1 -1
  138. data/db/migrate/20210120142527_ensure_default_locale_in_spree_stores.rb +1 -1
  139. data/db/migrate/20210205211040_add_supported_locales_to_spree_stores.rb +1 -1
  140. data/db/migrate/20210215202602_migrate_spree_i18n_globalize_config.rb +1 -1
  141. data/db/migrate/20210407200948_create_spree_menus.rb +16 -0
  142. data/db/migrate/20210408092939_create_spree_menu_items.rb +31 -0
  143. data/db/migrate/20210504163720_add_filter_param_to_spree_product_properties.rb +8 -0
  144. data/db/migrate/20210505114659_add_filter_param_to_spree_properties.rb +8 -0
  145. data/db/migrate/20210512191732_create_spree_cms_pages.rb +24 -0
  146. data/db/migrate/20210514204251_create_spree_cms_sections.rb +22 -0
  147. data/db/migrate/20210527094055_create_spree_products_stores.rb +29 -0
  148. data/db/migrate/20210608045519_ensure_store_default_country_is_set.rb +5 -0
  149. data/db/migrate/20210702112334_add_missing_timestamp_columns.rb +46 -0
  150. data/db/migrate/20210713131614_add_unique_index_on_property_id_and_product_id_to_product_properties.rb +29 -0
  151. data/db/migrate/20210715091956_add_store_id_to_spree_store_credits.rb +10 -0
  152. data/db/migrate/20210716093151_add_store_id_to_spree_taxonomies.rb +11 -0
  153. data/db/migrate/20210716104141_add_index_on_name_parent_id_and_taxonomy_id_on_spree_taxons.rb +31 -0
  154. data/db/migrate/20210721120857_add_index_on_permalink_parent_id_and_taxonomy_id_on_spree_taxons.rb +31 -0
  155. data/db/migrate/20210721125657_create_spree_promotions_stores.rb +29 -0
  156. data/db/migrate/20210722090705_add_store_id_to_spree_customer_returns.rb +11 -0
  157. data/db/migrate/20210726065456_change_integer_id_columns_into_bigint.rb +305 -0
  158. data/db/migrate/20210730154425_fix_promotion_code_and_path_unique_indexes.rb +9 -0
  159. data/lib/generators/spree/dummy/dummy_generator.rb +11 -7
  160. data/lib/generators/spree/dummy_model/templates/model.rb.tt +1 -1
  161. data/lib/generators/spree/install/install_generator.rb +12 -24
  162. data/lib/spree/core.rb +8 -4
  163. data/lib/spree/core/components.rb +8 -0
  164. data/lib/spree/core/controller_helpers/auth.rb +7 -1
  165. data/lib/spree/core/controller_helpers/common.rb +1 -1
  166. data/lib/spree/core/controller_helpers/order.rb +4 -4
  167. data/lib/spree/core/controller_helpers/search.rb +1 -0
  168. data/lib/spree/core/controller_helpers/store.rb +10 -1
  169. data/lib/spree/core/engine.rb +6 -0
  170. data/lib/spree/core/importer/product.rb +3 -1
  171. data/lib/spree/core/product_duplicator.rb +1 -0
  172. data/lib/spree/core/search/base.rb +17 -22
  173. data/lib/spree/core/version.rb +1 -1
  174. data/lib/spree/i18n.rb +1 -1
  175. data/lib/spree/money.rb +2 -1
  176. data/lib/spree/permitted_attributes.rb +14 -3
  177. data/lib/spree/testing_support/authorization_helpers.rb +6 -3
  178. data/lib/spree/testing_support/capybara_config.rb +3 -1
  179. data/lib/spree/testing_support/common_rake.rb +17 -4
  180. data/lib/spree/testing_support/extension_rake.rb +2 -2
  181. data/lib/spree/testing_support/factories/address_factory.rb +1 -1
  182. data/lib/spree/testing_support/factories/classification_factory.rb +8 -0
  183. data/lib/spree/testing_support/factories/cms_page_factory.rb +20 -0
  184. data/lib/spree/testing_support/factories/cms_section_factory.rb +31 -0
  185. data/lib/spree/testing_support/factories/customer_return_factory.rb +24 -17
  186. data/lib/spree/testing_support/factories/icon_factory.rb +7 -0
  187. data/lib/spree/testing_support/factories/line_item_factory.rb +6 -2
  188. data/lib/spree/testing_support/factories/menu_factory.rb +16 -0
  189. data/lib/spree/testing_support/factories/menu_item_factory.rb +10 -0
  190. data/lib/spree/testing_support/factories/options_factory.rb +15 -0
  191. data/lib/spree/testing_support/factories/order_factory.rb +11 -2
  192. data/lib/spree/testing_support/factories/payment_method_factory.rb +21 -4
  193. data/lib/spree/testing_support/factories/product_factory.rb +11 -1
  194. data/lib/spree/testing_support/factories/product_property_factory.rb +1 -1
  195. data/lib/spree/testing_support/factories/promotion_factory.rb +18 -9
  196. data/lib/spree/testing_support/factories/property_factory.rb +22 -0
  197. data/lib/spree/testing_support/factories/stock_location_factory.rb +5 -4
  198. data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -0
  199. data/lib/spree/testing_support/factories/store_factory.rb +11 -0
  200. data/lib/spree/testing_support/factories/taxon_factory.rb +3 -1
  201. data/lib/spree/testing_support/factories/taxon_image_factory.rb +7 -0
  202. data/lib/spree/testing_support/factories/taxonomy_factory.rb +1 -0
  203. data/lib/spree/testing_support/factories/user_factory.rb +7 -2
  204. data/lib/spree/testing_support/factories/variant_factory.rb +2 -2
  205. data/lib/spree/testing_support/flatpickr_capybara.rb +58 -35
  206. data/lib/spree/testing_support/order_walkthrough.rb +9 -9
  207. data/lib/tasks/core.rake +1 -1
  208. data/spec/fixtures/favicon.ico +0 -0
  209. data/spec/fixtures/files/icon_256x256.gif +0 -0
  210. data/spec/fixtures/files/icon_256x256.png +0 -0
  211. data/spec/fixtures/files/icon_512x512.png +0 -0
  212. data/spec/fixtures/files/img_256x128.png +0 -0
  213. data/spree_core.gemspec +20 -20
  214. metadata +222 -205
  215. data/app/assets/images/logo/spree_50.png +0 -0
  216. data/app/assets/images/noimage/large.png +0 -0
  217. data/app/assets/images/noimage/mini.png +0 -0
  218. data/app/assets/images/noimage/product.png +0 -0
  219. data/app/assets/images/noimage/small.png +0 -0
  220. data/app/assets/javascripts/spree.js +0 -78
  221. data/app/controllers/spree/errors_controller.rb +0 -11
  222. data/app/helpers/spree/mail_helper.rb +0 -29
  223. data/app/mailers/spree/base_mailer.rb +0 -46
  224. data/app/mailers/spree/order_mailer.rb +0 -26
  225. data/app/mailers/spree/reimbursement_mailer.rb +0 -12
  226. data/app/mailers/spree/shipment_mailer.rb +0 -12
  227. data/app/mailers/spree/test_mailer.rb +0 -8
  228. data/app/models/spree/validations/db_maximum_length_validator.rb +0 -22
  229. data/app/views/layouts/spree/base_mailer.html.erb +0 -46
  230. data/app/views/spree/errors/forbidden.html.erb +0 -0
  231. data/app/views/spree/errors/unauthorized.html.erb +0 -0
  232. data/app/views/spree/order_mailer/cancel_email.html.erb +0 -24
  233. data/app/views/spree/order_mailer/cancel_email.text.erb +0 -38
  234. data/app/views/spree/order_mailer/confirm_email.html.erb +0 -23
  235. data/app/views/spree/order_mailer/confirm_email.text.erb +0 -39
  236. data/app/views/spree/order_mailer/store_owner_notification_email.html.erb +0 -23
  237. data/app/views/spree/order_mailer/store_owner_notification_email.text.erb +0 -38
  238. data/app/views/spree/reimbursement_mailer/reimbursement_email.html.erb +0 -56
  239. data/app/views/spree/reimbursement_mailer/reimbursement_email.text.erb +0 -24
  240. data/app/views/spree/shared/_base_mailer_footer.html.erb +0 -12
  241. data/app/views/spree/shared/_base_mailer_header.html.erb +0 -13
  242. data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +0 -456
  243. data/app/views/spree/shared/_error_messages.html.erb +0 -11
  244. data/app/views/spree/shared/_mailer_line_item.html.erb +0 -16
  245. data/app/views/spree/shared/_paths.html.erb +0 -8
  246. data/app/views/spree/shared/_purchased_items_table.html.erb +0 -69
  247. data/app/views/spree/shared/purchased_items_table/_adjustment.html.erb +0 -13
  248. data/app/views/spree/shared/purchased_items_table/_line_item.html.erb +0 -27
  249. data/app/views/spree/shared/purchased_items_table/_subtotal.html.erb +0 -13
  250. data/app/views/spree/shared/purchased_items_table/_total.html.erb +0 -13
  251. data/app/views/spree/shipment_mailer/shipped_email.html.erb +0 -36
  252. data/app/views/spree/shipment_mailer/shipped_email.text.erb +0 -17
  253. data/app/views/spree/test_mailer/test_email.html.erb +0 -40
  254. data/app/views/spree/test_mailer/test_email.text.erb +0 -4
  255. data/config/initializers/assets.rb +0 -2
  256. data/config/initializers/premailer_assets.rb +0 -1
  257. data/config/initializers/premailer_rails.rb +0 -3
  258. data/db/migrate/20140805171219_make_existing_credit_cards_default.rb +0 -10
  259. data/lib/generators/spree/dummy/templates/initializers/bullet.rb +0 -5
  260. data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -15
  261. data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -16
  262. data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -16
  263. data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -16
  264. data/lib/generators/spree/mailers_preview/mailers_preview_generator.rb +0 -23
  265. data/lib/generators/spree/mailers_preview/templates/mailers/previews/order_preview.rb +0 -13
  266. data/lib/generators/spree/mailers_preview/templates/mailers/previews/reimbursement_preview.rb +0 -5
  267. data/lib/generators/spree/mailers_preview/templates/mailers/previews/shipment_preview.rb +0 -5
  268. data/lib/generators/spree/mailers_preview/templates/mailers/previews/user_preview.rb +0 -11
  269. data/lib/tasks/email.rake +0 -10
  270. data/vendor/assets/javascripts/cleave.js +0 -1669
  271. data/vendor/assets/javascripts/fetch.umd.js +0 -531
  272. data/vendor/assets/javascripts/jquery.payment.js +0 -652
  273. data/vendor/assets/javascripts/jsuri.js +0 -458
  274. data/vendor/assets/javascripts/polyfill.min.js +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8c152a93c7f008f29d4924552002413386a57ffad6889e735b020e5cb59ec7e0
4
- data.tar.gz: 973a4f63078cab9a925ef921323df6a8207d2d2c49b5a1770cae4dd725db42a2
3
+ metadata.gz: 2b031163e0c77da6776854068fb9769ed6cd44ff048e75a088ee6526c40db986
4
+ data.tar.gz: 2cfbcbfb7a1c5221270e7b677222a94047b5965cb32e5144ca6540d927f2b51b
5
5
  SHA512:
6
- metadata.gz: fd78758868388f04c61383131a2510e6253d3b8e334f9d74dca40f83c064de6b9e2afd5a5a3944b1114a70b53e846e7d33c690c6ee846319e7ef951458367aaa
7
- data.tar.gz: 796583a22125857aa1c5e9dc883030e47c1b92b55d2118bb0b8bcef73fa7264c3af1bbc0ad55cb000bf3da11246369dc28c02e7b152ff1eb663b499e51b14548
6
+ metadata.gz: 375bd44efe93e706a1bd58abcc9be1fb3f2af0b0a993fe223a1e093033193105012284e0a7f03413fad0099feb105fa4b1526b8d576d76e58e62e37967c67768
7
+ data.tar.gz: c82f2406e121b6fff092677e91d0344e35c5b6e19aee5aca1916ee819d7909a42ef854653922413e215c67934cb73df2a1af002fbe3d48f53db99ff854d80f93
@@ -0,0 +1,9 @@
1
+ module Spree
2
+ module ProductFilterable
3
+ private
4
+
5
+ def find_available(scope, products_scope)
6
+ scope.filterable.for_products(products_scope)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,41 @@
1
+ module Spree
2
+ module CmsPages
3
+ class Find < ::Spree::BaseFinder
4
+ ALLOWED_KINDS = %w[standard home feature].freeze
5
+
6
+ def initialize(scope:, params:)
7
+ @scope = scope
8
+ @title = params.dig(:filter, :title)
9
+ @kind = params.dig(:filter, :type)
10
+ end
11
+
12
+ def execute
13
+ pages = by_title(scope)
14
+ pages = by_kind(pages)
15
+
16
+ pages
17
+ end
18
+
19
+ private
20
+
21
+ attr_reader :scope, :title, :kind
22
+
23
+ def title_matcher
24
+ Spree::CmsPage.arel_table[:title].matches("%#{title}%")
25
+ end
26
+
27
+ def by_title(pages)
28
+ return pages if title.blank?
29
+
30
+ pages.where(title_matcher)
31
+ end
32
+
33
+ def by_kind(pages)
34
+ return pages if kind.blank?
35
+ return pages if ALLOWED_KINDS.exclude?(kind)
36
+
37
+ pages.send(kind)
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,11 @@
1
+ module Spree
2
+ module Menus
3
+ class Find < ::Spree::BaseFinder
4
+ def execute
5
+ return scope.where(location: params[:filter]['location']) if params[:filter].present? && params[:filter]['location'].present?
6
+
7
+ scope
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,20 @@
1
+ module Spree
2
+ module OptionValues
3
+ class FindAvailable
4
+ include ProductFilterable
5
+
6
+ def initialize(scope: OptionValue.spree_base_scopes, products_scope: Product.spree_base_scopes)
7
+ @scope = scope
8
+ @products_scope = products_scope
9
+ end
10
+
11
+ def execute
12
+ find_available(scope, products_scope)
13
+ end
14
+
15
+ private
16
+
17
+ attr_reader :scope, :products_scope
18
+ end
19
+ end
20
+ end
@@ -1,18 +1,20 @@
1
1
  module Spree
2
2
  module Orders
3
3
  class FindComplete
4
- attr_reader :user, :number, :token
4
+ attr_reader :user, :number, :token, :store
5
5
 
6
- def initialize(user: nil, number: nil, token: nil)
6
+ def initialize(user: nil, number: nil, token: nil, store: nil)
7
7
  @user = user
8
8
  @number = number
9
9
  @token = token
10
+ @store = store
10
11
  end
11
12
 
12
13
  def execute
13
14
  orders = by_user(scope)
14
15
  orders = by_number(orders)
15
16
  orders = by_token(orders)
17
+ orders = by_store(orders)
16
18
 
17
19
  orders
18
20
  end
@@ -35,6 +37,10 @@ module Spree
35
37
  token.present?
36
38
  end
37
39
 
40
+ def store?
41
+ store.present?
42
+ end
43
+
38
44
  def by_user(orders)
39
45
  return orders unless user?
40
46
 
@@ -53,6 +59,12 @@ module Spree
53
59
  orders.where(token: token)
54
60
  end
55
61
 
62
+ def by_store(orders)
63
+ return orders unless store?
64
+
65
+ orders.where(store: store)
66
+ end
67
+
56
68
  def scope_includes
57
69
  {
58
70
  line_items: [
@@ -15,19 +15,7 @@ module Spree
15
15
  private
16
16
 
17
17
  def incomplete_orders
18
- Spree::Order.incomplete.not_canceled.includes(scope_includes)
19
- end
20
-
21
- def scope_includes
22
- {
23
- line_items: [
24
- variant: [
25
- :images,
26
- option_values: :option_type,
27
- product: :product_properties,
28
- ]
29
- ]
30
- }
18
+ Spree::Order.incomplete.not_canceled
31
19
  end
32
20
  end
33
21
  end
@@ -0,0 +1,20 @@
1
+ module Spree
2
+ module ProductProperties
3
+ class FindAvailable
4
+ include ProductFilterable
5
+
6
+ def initialize(scope: ProductProperty.spree_base_scopes, products_scope: Product.spree_base_scopes)
7
+ @scope = scope
8
+ @products_scope = products_scope
9
+ end
10
+
11
+ def execute
12
+ find_available(scope, products_scope)
13
+ end
14
+
15
+ private
16
+
17
+ attr_reader :scope, :products_scope
18
+ end
19
+ end
20
+ end
@@ -1,13 +1,23 @@
1
1
  module Spree
2
2
  module Products
3
3
  class Find
4
- def initialize(scope:, params:, current_currency:)
4
+ def initialize(scope:, params:, current_currency: nil)
5
5
  @scope = scope
6
6
 
7
+ ActiveSupport::Deprecation.warn('`current_currency` param is deprecated and will be removed in Spree 5') if current_currency
8
+
9
+ if current_currency.present?
10
+ ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
11
+ `current_currency` param is deprecated and will be removed in Spree 5.
12
+ Please pass `:currency` in `params` hash instead.
13
+ DEPRECATION
14
+ end
15
+
7
16
  @ids = String(params.dig(:filter, :ids)).split(',')
8
17
  @skus = String(params.dig(:filter, :skus)).split(',')
9
- @price = String(params.dig(:filter, :price)).split(',').map(&:to_f)
10
- @currency = current_currency
18
+ @store = params[:store] || Spree::Store.default
19
+ @price = map_prices(String(params.dig(:filter, :price)).split(','))
20
+ @currency = current_currency || params.dig(:filter, :currency) || params[:currency]
11
21
  @taxons = taxon_ids(params.dig(:filter, :taxons))
12
22
  @concat_taxons = taxon_ids(params.dig(:filter, :concat_taxons))
13
23
  @name = params.dig(:filter, :name)
@@ -16,6 +26,7 @@ module Spree
16
26
  @sort_by = params.dig(:sort_by)
17
27
  @deleted = params.dig(:filter, :show_deleted)
18
28
  @discontinued = params.dig(:filter, :show_discontinued)
29
+ @properties = params.dig(:filter, :properties)
19
30
  end
20
31
 
21
32
  def execute
@@ -28,6 +39,7 @@ module Spree
28
39
  products = by_name(products)
29
40
  products = by_options(products)
30
41
  products = by_option_value_ids(products)
42
+ products = by_properties(products)
31
43
  products = include_deleted(products)
32
44
  products = include_discontinued(products)
33
45
  products = ordered(products)
@@ -38,7 +50,7 @@ module Spree
38
50
  private
39
51
 
40
52
  attr_reader :ids, :skus, :price, :currency, :taxons, :concat_taxons, :name, :options,
41
- :option_value_ids, :scope, :sort_by, :deleted, :discontinued
53
+ :option_value_ids, :scope, :sort_by, :deleted, :discontinued, :properties, :store
42
54
 
43
55
  def ids?
44
56
  ids.present?
@@ -80,8 +92,8 @@ module Spree
80
92
  sort_by.present?
81
93
  end
82
94
 
83
- def name_matcher
84
- Spree::Product.arel_table[:name].matches("%#{name}%")
95
+ def properties?
96
+ properties.present? && properties.values.reject(&:empty?).present?
85
97
  end
86
98
 
87
99
  def by_ids(products)
@@ -99,19 +111,13 @@ module Spree
99
111
  def by_price(products)
100
112
  return products unless price?
101
113
 
102
- products.joins(master: :prices).
103
- where(
104
- spree_prices: {
105
- amount: price.min..price.max,
106
- currency: currency&.upcase
107
- }
108
- )
114
+ products.price_between(price.min, price.max)
109
115
  end
110
116
 
111
117
  def by_currency(products)
112
118
  return products unless currency?
113
119
 
114
- products.joins(master: :prices).where(spree_prices: { currency: currency.upcase })
120
+ products.with_currency(currency)
115
121
  end
116
122
 
117
123
  def by_taxons(products)
@@ -136,17 +142,14 @@ module Spree
136
142
  def by_name(products)
137
143
  return products unless name?
138
144
 
139
- products.where(name_matcher)
145
+ products.like_any([:name], [name])
140
146
  end
141
147
 
142
148
  def by_options(products)
143
149
  return products unless options?
144
150
 
145
- products.where(
146
- id: options.map do |key, value|
147
- products.with_option_value(key, value).ids
148
- end.flatten.compact.uniq
149
- )
151
+ products_ids = options.map { |key, value| products.with_option_value(key, value).ids }
152
+ products.where(id: products_ids.reduce(&:intersection))
150
153
  end
151
154
 
152
155
  def by_option_value_ids(products)
@@ -163,6 +166,27 @@ module Spree
163
166
  products.where(id: product_ids)
164
167
  end
165
168
 
169
+ def by_properties(products)
170
+ return products unless properties?
171
+
172
+ product_ids = []
173
+ index = 0
174
+
175
+ properties.to_unsafe_hash.each do |property_filter_param, product_properties_values|
176
+ next if property_filter_param.blank? || product_properties_values.empty?
177
+
178
+ values = product_properties_values.split(',').reject(&:empty?).uniq.map(&:parameterize)
179
+
180
+ next if values.empty?
181
+
182
+ ids = products.with_property_values(property_filter_param, values).ids
183
+ product_ids = index == 0 ? ids : product_ids & ids
184
+ index += 1
185
+ end
186
+
187
+ products.where(id: product_ids)
188
+ end
189
+
166
190
  def option_types_count(option_value_ids)
167
191
  Spree::OptionValue.
168
192
  where(id: option_value_ids).
@@ -176,12 +200,14 @@ module Spree
176
200
  case sort_by
177
201
  when 'default'
178
202
  if taxons?
179
- products.
180
- select("#{Product.table_name}.*, #{Classification.table_name}.position").
181
- order("#{Classification.table_name}.position" => :asc)
203
+ products.ascend_by_taxons_min_position(taxons)
182
204
  else
183
205
  products
184
206
  end
207
+ when 'name-a-z'
208
+ products.order(name: :asc)
209
+ when 'name-z-a'
210
+ products.order(name: :desc)
185
211
  when 'newest-first'
186
212
  products.order(available_on: :desc)
187
213
  when 'price-high-to-low'
@@ -202,13 +228,19 @@ module Spree
202
228
  end
203
229
 
204
230
  def include_discontinued(products)
205
- discontinued ? products : products.available
231
+ discontinued ? products : products.active(currency)
232
+ end
233
+
234
+ def map_prices(prices)
235
+ prices.map do |price|
236
+ price == 'Infinity' ? Float::INFINITY : price.to_f
237
+ end
206
238
  end
207
239
 
208
240
  def taxon_ids(taxons_ids)
209
241
  return if taxons_ids.nil? || taxons_ids.to_s.blank?
210
242
 
211
- taxons = Spree::Taxon.where(id: taxons_ids.to_s.split(','))
243
+ taxons = store.taxons.where(id: taxons_ids.to_s.split(','))
212
244
  taxons.map(&:cached_self_and_descendants_ids).flatten.compact.uniq.map(&:to_s)
213
245
  end
214
246
  end
@@ -0,0 +1,24 @@
1
+ module Spree
2
+ module Stores
3
+ class FindCurrent
4
+ def initialize(scope: nil, url: nil)
5
+ @scope = scope || Spree::Store
6
+ @url = url
7
+ end
8
+
9
+ def execute
10
+ by_url(scope) || scope.default
11
+ end
12
+
13
+ protected
14
+
15
+ attr_reader :scope, :url
16
+
17
+ def by_url(scope)
18
+ return if url.blank?
19
+
20
+ scope.by_url(url).first
21
+ end
22
+ end
23
+ end
24
+ end
@@ -9,6 +9,25 @@ module Spree
9
9
  end.sort_by { |c| c.name.parameterize }
10
10
  end
11
11
 
12
+ def all_countries
13
+ countries = Spree::Country.all
14
+
15
+ countries.collect do |country|
16
+ country.name = Spree.t(country.iso, scope: 'country_names', default: country.name)
17
+ country
18
+ end.sort_by { |c| c.name.parameterize }
19
+ end
20
+
21
+ def spree_resource_path(resource)
22
+ last_word = resource.class.name.split('::', 10).last
23
+
24
+ spree_class_name_as_path(last_word)
25
+ end
26
+
27
+ def spree_class_name_as_path(class_name)
28
+ class_name.underscore.humanize.parameterize(separator: '_')
29
+ end
30
+
12
31
  def display_price(product_or_variant)
13
32
  product_or_variant.
14
33
  price_in(current_currency).
@@ -36,6 +55,11 @@ module Spree
36
55
  end
37
56
 
38
57
  def logo(image_path = nil, options = {})
58
+ ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
59
+ `BaseHelper#logo` is deprecated and will be removed in Spree 5.0.
60
+ Please use `FrontendHelper#logo` instead
61
+ DEPRECATION
62
+
39
63
  image_path ||= if current_store.logo.attached? && current_store.logo.variable?
40
64
  main_app.url_for(current_store.logo.variant(resize: '244x104>'))
41
65
  elsif current_store.logo.attached? && current_store.logo.image?
@@ -51,6 +75,10 @@ module Spree
51
75
  end
52
76
  end
53
77
 
78
+ def spree_favicon_path
79
+ main_app.url_for(current_store.favicon || 'favicon.ico')
80
+ end
81
+
54
82
  def object
55
83
  instance_variable_get('@' + controller_name.singularize)
56
84
  end
@@ -95,7 +123,7 @@ module Spree
95
123
  description: [object.name, current_store.meta_description].reject(&:blank?).join(', '))
96
124
  else
97
125
  meta.reverse_merge!(keywords: (current_store.meta_keywords || current_store.seo_title),
98
- description: (current_store.meta_description || current_store.seo_title))
126
+ description: (current_store.homepage(I18n.locale)&.seo_meta_description || current_store.seo_meta_description))
99
127
  end
100
128
  end
101
129
  meta
@@ -143,6 +171,34 @@ module Spree
143
171
  Spree::Core::Engine.frontend_available?
144
172
  end
145
173
 
174
+ def rails_5?
175
+ Rails::VERSION::STRING < '6.0'
176
+ end
177
+
178
+ def spree_storefront_resource_url(resource, options = {})
179
+ if defined?(locale_param) && locale_param.present?
180
+ options.merge!(locale: locale_param)
181
+ end
182
+
183
+ localize = if options[:locale].present?
184
+ "/#{options[:locale]}"
185
+ else
186
+ ''
187
+ end
188
+
189
+ if resource.instance_of?(Spree::Product)
190
+ "#{current_store.formatted_url + localize}/#{Spree::Config[:storefront_products_path]}/#{resource.slug}"
191
+ elsif resource.instance_of?(Spree::Taxon)
192
+ "#{current_store.formatted_url + localize}/#{Spree::Config[:storefront_taxons_path]}/#{resource.permalink}"
193
+ elsif resource.instance_of?(Spree::Cms::Pages::FeaturePage) || resource.instance_of?(Spree::Cms::Pages::StandardPage)
194
+ "#{current_store.formatted_url + localize}/#{Spree::Config[:storefront_pages_path]}/#{resource.slug}"
195
+ elsif localize.blank?
196
+ current_store.formatted_url
197
+ else
198
+ current_store.formatted_url + localize
199
+ end
200
+ end
201
+
146
202
  # we should always try to render image of the default variant
147
203
  # same as it's done on PDP
148
204
  def default_image_for_product(product)
@@ -170,7 +226,8 @@ module Spree
170
226
  end
171
227
 
172
228
  def base_cache_key
173
- [I18n.locale, current_currency]
229
+ [I18n.locale, current_currency, defined?(try_spree_current_user) && try_spree_current_user.present?,
230
+ defined?(try_spree_current_user) && try_spree_current_user.try(:has_spree_role?, 'admin')]
174
231
  end
175
232
 
176
233
  def maximum_quantity
@@ -210,5 +267,9 @@ module Spree
210
267
 
211
268
  tag('meta', name: 'robots', content: current_store.seo_robots)
212
269
  end
270
+
271
+ def taxon_wysiwyg_editor_enabled?
272
+ Spree::Config[:taxon_wysiwyg_editor_enabled]
273
+ end
213
274
  end
214
275
  end