spree_core 4.2.5 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (263) 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 +80 -21
  10. data/app/finders/spree/stores/find_current.rb +24 -0
  11. data/app/finders/spree/taxons/find.rb +22 -6
  12. data/app/helpers/spree/base_helper.rb +69 -7
  13. data/app/helpers/spree/locale_helper.rb +5 -1
  14. data/app/helpers/spree/products_helper.rb +7 -3
  15. data/app/models/concerns/spree/display_link.rb +42 -0
  16. data/app/models/concerns/spree/display_money.rb +6 -2
  17. data/app/models/concerns/spree/filter_param.rb +21 -0
  18. data/app/models/concerns/spree/image_methods.rb +24 -0
  19. data/app/models/concerns/spree/memoized_data.rb +24 -0
  20. data/app/models/concerns/spree/multi_store_resource.rb +24 -0
  21. data/app/models/concerns/spree/product_scopes.rb +71 -8
  22. data/app/models/concerns/spree/single_store_resource.rb +19 -0
  23. data/app/models/concerns/spree/user_address.rb +19 -0
  24. data/app/models/concerns/spree/user_methods.rb +14 -12
  25. data/app/models/concerns/spree/user_payment_source.rb +1 -1
  26. data/app/models/concerns/spree/user_reporting.rb +35 -10
  27. data/app/models/concerns/spree/user_roles.rb +25 -0
  28. data/app/models/spree/ability.rb +3 -1
  29. data/app/models/spree/address.rb +27 -6
  30. data/app/models/spree/app_configuration.rb +8 -0
  31. data/app/models/spree/app_dependencies.rb +20 -6
  32. data/app/models/spree/base.rb +18 -0
  33. data/app/models/spree/classification.rb +3 -0
  34. data/app/models/spree/cms/pages/feature_page.rb +7 -0
  35. data/app/models/spree/cms/pages/homepage.rb +20 -0
  36. data/app/models/spree/cms/pages/standard_page.rb +4 -0
  37. data/app/models/spree/cms/sections/featured_article.rb +22 -0
  38. data/app/models/spree/cms/sections/hero_image.rb +38 -0
  39. data/app/models/spree/cms/sections/image_gallery.rb +103 -0
  40. data/app/models/spree/cms/sections/product_carousel.rb +14 -0
  41. data/app/models/spree/cms/sections/rich_text_content.rb +13 -0
  42. data/app/models/spree/cms/sections/side_by_side_images.rb +74 -0
  43. data/app/models/spree/cms_page.rb +66 -0
  44. data/app/models/spree/cms_section.rb +69 -0
  45. data/app/models/spree/country.rb +14 -6
  46. data/app/models/spree/credit_card.rb +2 -8
  47. data/app/models/spree/customer_return.rb +8 -2
  48. data/app/models/spree/gateway/bogus.rb +6 -4
  49. data/app/models/spree/icon.rb +9 -0
  50. data/app/models/spree/image/configuration/active_storage.rb +2 -0
  51. data/app/models/spree/image.rb +5 -24
  52. data/app/models/spree/inventory_unit.rb +1 -1
  53. data/app/models/spree/line_item.rb +1 -1
  54. data/app/models/spree/menu.rb +63 -0
  55. data/app/models/spree/menu_item.rb +76 -0
  56. data/app/models/spree/option_type.rb +1 -1
  57. data/app/models/spree/option_value.rb +11 -0
  58. data/app/models/spree/option_value_variant.rb +1 -1
  59. data/app/models/spree/order/address_book.rb +3 -5
  60. data/app/models/spree/order/currency_updater.rb +1 -1
  61. data/app/models/spree/order/emails.rb +32 -0
  62. data/app/models/spree/order/payments.rb +1 -1
  63. data/app/models/spree/order/store_credit.rb +1 -1
  64. data/app/models/spree/order.rb +46 -45
  65. data/app/models/spree/payment.rb +7 -0
  66. data/app/models/spree/payment_method.rb +16 -0
  67. data/app/models/spree/preferences/preferable.rb +12 -0
  68. data/app/models/spree/preferences/preferable_class_methods.rb +10 -1
  69. data/app/models/spree/product.rb +37 -30
  70. data/app/models/spree/product_property.rb +19 -4
  71. data/app/models/spree/promotion/rules/country.rb +1 -1
  72. data/app/models/spree/promotion/rules/first_order.rb +4 -3
  73. data/app/models/spree/promotion/rules/taxon.rb +10 -7
  74. data/app/models/spree/promotion.rb +6 -15
  75. data/app/models/spree/promotion_handler/cart.rb +7 -2
  76. data/app/models/spree/promotion_handler/coupon.rb +5 -4
  77. data/app/models/spree/promotion_handler/free_shipping.rb +5 -6
  78. data/app/models/spree/promotion_handler/page.rb +3 -2
  79. data/app/models/spree/promotion_handler/promotion_duplicator.rb +1 -0
  80. data/app/models/spree/promotion_rule.rb +2 -0
  81. data/app/models/spree/property.rb +28 -1
  82. data/app/models/spree/reimbursement.rb +3 -1
  83. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +2 -1
  84. data/app/models/spree/shipment_handler.rb +4 -2
  85. data/app/models/spree/stock/quantifier.rb +6 -6
  86. data/app/models/spree/stock_location.rb +9 -0
  87. data/app/models/spree/store.rb +90 -7
  88. data/app/models/spree/store_credit.rb +7 -3
  89. data/app/models/spree/store_credit_event.rb +2 -2
  90. data/app/models/spree/store_payment_method.rb +11 -0
  91. data/app/models/spree/store_product.rb +11 -0
  92. data/app/models/spree/store_promotion.rb +11 -0
  93. data/app/models/spree/taxon.rb +22 -1
  94. data/app/models/spree/taxon_image/configuration/active_storage.rb +2 -0
  95. data/app/models/spree/taxon_image.rb +1 -0
  96. data/app/models/spree/taxonomy.rb +3 -1
  97. data/app/models/spree/variant.rb +21 -6
  98. data/app/presenters/spree/filters/options_presenter.rb +47 -0
  99. data/app/presenters/spree/filters/price_presenter.rb +22 -0
  100. data/app/presenters/spree/filters/price_range_presenter.rb +29 -0
  101. data/app/presenters/spree/filters/properties_presenter.rb +23 -0
  102. data/app/presenters/spree/filters/property_presenter.rb +42 -0
  103. data/app/presenters/spree/filters/quantified_price_range_presenter.rb +44 -0
  104. data/app/services/spree/account/addresses/create.rb +1 -0
  105. data/app/services/spree/account/addresses/helper.rb +6 -0
  106. data/app/services/spree/account/addresses/update.rb +9 -3
  107. data/app/services/spree/account/create.rb +17 -0
  108. data/app/services/spree/account/update.rb +15 -0
  109. data/app/services/spree/build_localized_redirect_url.rb +1 -1
  110. data/app/services/spree/cart/associate.rb +16 -0
  111. data/app/services/spree/cart/change_currency.rb +27 -0
  112. data/app/services/spree/cart/create.rb +5 -3
  113. data/app/services/spree/cart/destroy.rb +40 -0
  114. data/app/services/spree/cart/empty.rb +36 -0
  115. data/app/services/spree/cart/estimate_shipping_rates.rb +3 -3
  116. data/app/services/spree/checkout/add_store_credit.rb +1 -1
  117. data/app/services/spree/classifications/reposition.rb +18 -0
  118. data/app/services/spree/credit_cards/destroy.rb +41 -0
  119. data/app/sorters/spree/base_sorter.rb +23 -11
  120. data/app/sorters/spree/products/sort.rb +23 -7
  121. data/app/validators/db_maximum_length_validator.rb +5 -0
  122. data/app/validators/email_validator.rb +3 -1
  123. data/config/initializers/active_storage.rb +2 -0
  124. data/config/locales/en.yml +177 -3
  125. data/config/routes.rb +0 -5
  126. data/db/migrate/20201023152810_add_filterable_to_spree_properties.rb +8 -0
  127. data/db/migrate/20210407200948_create_spree_menus.rb +16 -0
  128. data/db/migrate/20210408092939_create_spree_menu_items.rb +31 -0
  129. data/db/migrate/20210504163720_add_filter_param_to_spree_product_properties.rb +8 -0
  130. data/db/migrate/20210505114659_add_filter_param_to_spree_properties.rb +8 -0
  131. data/db/migrate/20210512191732_create_spree_cms_pages.rb +24 -0
  132. data/db/migrate/20210514204251_create_spree_cms_sections.rb +22 -0
  133. data/db/migrate/20210527094055_create_spree_products_stores.rb +36 -0
  134. data/db/migrate/20210608045519_ensure_store_default_country_is_set.rb +5 -0
  135. data/db/migrate/20210702112334_add_missing_timestamp_columns.rb +46 -0
  136. data/db/migrate/20210713131614_add_unique_index_on_property_id_and_product_id_to_product_properties.rb +29 -0
  137. data/db/migrate/20210715091956_add_store_id_to_spree_store_credits.rb +10 -0
  138. data/db/migrate/20210716093151_add_store_id_to_spree_taxonomies.rb +11 -0
  139. data/db/migrate/20210716104141_add_index_on_name_parent_id_and_taxonomy_id_on_spree_taxons.rb +31 -0
  140. data/db/migrate/20210721120857_add_index_on_permalink_parent_id_and_taxonomy_id_on_spree_taxons.rb +31 -0
  141. data/db/migrate/20210721125657_create_spree_promotions_stores.rb +29 -0
  142. data/db/migrate/20210722090705_add_store_id_to_spree_customer_returns.rb +11 -0
  143. data/db/migrate/20210726065456_change_integer_id_columns_into_bigint.rb +305 -0
  144. data/db/migrate/20210730154425_fix_promotion_code_and_path_unique_indexes.rb +9 -0
  145. data/lib/generators/spree/dummy/dummy_generator.rb +11 -6
  146. data/lib/generators/spree/dummy/templates/rails/test.rb +2 -0
  147. data/lib/generators/spree/dummy_model/templates/model.rb.tt +1 -1
  148. data/lib/generators/spree/install/install_generator.rb +12 -24
  149. data/lib/spree/core/components.rb +8 -0
  150. data/lib/spree/core/controller_helpers/auth.rb +7 -1
  151. data/lib/spree/core/controller_helpers/common.rb +1 -1
  152. data/lib/spree/core/controller_helpers/order.rb +4 -4
  153. data/lib/spree/core/controller_helpers/search.rb +1 -0
  154. data/lib/spree/core/controller_helpers/store.rb +24 -1
  155. data/lib/spree/core/engine.rb +6 -0
  156. data/lib/spree/core/importer/product.rb +3 -1
  157. data/lib/spree/core/product_duplicator.rb +1 -0
  158. data/lib/spree/core/search/base.rb +17 -22
  159. data/lib/spree/core/version.rb +1 -1
  160. data/lib/spree/core.rb +8 -4
  161. data/lib/spree/i18n.rb +1 -1
  162. data/lib/spree/money.rb +2 -1
  163. data/lib/spree/permitted_attributes.rb +21 -3
  164. data/lib/spree/testing_support/authorization_helpers.rb +6 -3
  165. data/lib/spree/testing_support/capybara_config.rb +3 -1
  166. data/lib/spree/testing_support/common_rake.rb +17 -4
  167. data/lib/spree/testing_support/extension_rake.rb +2 -2
  168. data/lib/spree/testing_support/factories/address_factory.rb +1 -1
  169. data/lib/spree/testing_support/factories/classification_factory.rb +8 -0
  170. data/lib/spree/testing_support/factories/cms_page_factory.rb +20 -0
  171. data/lib/spree/testing_support/factories/cms_section_factory.rb +31 -0
  172. data/lib/spree/testing_support/factories/customer_return_factory.rb +24 -17
  173. data/lib/spree/testing_support/factories/icon_factory.rb +7 -0
  174. data/lib/spree/testing_support/factories/line_item_factory.rb +6 -2
  175. data/lib/spree/testing_support/factories/menu_factory.rb +16 -0
  176. data/lib/spree/testing_support/factories/menu_item_factory.rb +10 -0
  177. data/lib/spree/testing_support/factories/options_factory.rb +5 -0
  178. data/lib/spree/testing_support/factories/order_factory.rb +11 -2
  179. data/lib/spree/testing_support/factories/payment_method_factory.rb +6 -2
  180. data/lib/spree/testing_support/factories/product_factory.rb +17 -1
  181. data/lib/spree/testing_support/factories/product_property_factory.rb +1 -1
  182. data/lib/spree/testing_support/factories/promotion_factory.rb +18 -9
  183. data/lib/spree/testing_support/factories/property_factory.rb +22 -0
  184. data/lib/spree/testing_support/factories/stock_location_factory.rb +5 -4
  185. data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -0
  186. data/lib/spree/testing_support/factories/store_factory.rb +11 -0
  187. data/lib/spree/testing_support/factories/taxon_factory.rb +3 -1
  188. data/lib/spree/testing_support/factories/taxon_image_factory.rb +7 -0
  189. data/lib/spree/testing_support/factories/taxonomy_factory.rb +1 -0
  190. data/lib/spree/testing_support/factories/user_factory.rb +7 -2
  191. data/lib/spree/testing_support/factories/variant_factory.rb +2 -2
  192. data/lib/spree/testing_support/flatpickr_capybara.rb +58 -35
  193. data/lib/spree/testing_support/locale_helpers.rb +1 -1
  194. data/lib/spree/testing_support/order_walkthrough.rb +9 -9
  195. data/lib/spree/testing_support/rspec_retry_config.rb +5 -0
  196. data/lib/tasks/core.rake +1 -1
  197. data/spec/fixtures/favicon.ico +0 -0
  198. data/spec/fixtures/files/icon_256x256.gif +0 -0
  199. data/spec/fixtures/files/icon_256x256.png +0 -0
  200. data/spec/fixtures/files/icon_512x512.png +0 -0
  201. data/spec/fixtures/files/img_256x128.png +0 -0
  202. data/spree_core.gemspec +12 -11
  203. metadata +211 -159
  204. data/app/assets/images/logo/spree_50.png +0 -0
  205. data/app/assets/images/noimage/large.png +0 -0
  206. data/app/assets/images/noimage/mini.png +0 -0
  207. data/app/assets/images/noimage/product.png +0 -0
  208. data/app/assets/images/noimage/small.png +0 -0
  209. data/app/assets/javascripts/spree.js +0 -78
  210. data/app/controllers/spree/errors_controller.rb +0 -11
  211. data/app/helpers/spree/mail_helper.rb +0 -29
  212. data/app/mailers/spree/base_mailer.rb +0 -46
  213. data/app/mailers/spree/order_mailer.rb +0 -26
  214. data/app/mailers/spree/reimbursement_mailer.rb +0 -12
  215. data/app/mailers/spree/shipment_mailer.rb +0 -12
  216. data/app/mailers/spree/test_mailer.rb +0 -8
  217. data/app/models/spree/validations/db_maximum_length_validator.rb +0 -22
  218. data/app/views/layouts/spree/base_mailer.html.erb +0 -46
  219. data/app/views/spree/errors/forbidden.html.erb +0 -0
  220. data/app/views/spree/errors/unauthorized.html.erb +0 -0
  221. data/app/views/spree/order_mailer/cancel_email.html.erb +0 -24
  222. data/app/views/spree/order_mailer/cancel_email.text.erb +0 -38
  223. data/app/views/spree/order_mailer/confirm_email.html.erb +0 -23
  224. data/app/views/spree/order_mailer/confirm_email.text.erb +0 -39
  225. data/app/views/spree/order_mailer/store_owner_notification_email.html.erb +0 -23
  226. data/app/views/spree/order_mailer/store_owner_notification_email.text.erb +0 -38
  227. data/app/views/spree/reimbursement_mailer/reimbursement_email.html.erb +0 -56
  228. data/app/views/spree/reimbursement_mailer/reimbursement_email.text.erb +0 -24
  229. data/app/views/spree/shared/_base_mailer_footer.html.erb +0 -12
  230. data/app/views/spree/shared/_base_mailer_header.html.erb +0 -13
  231. data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +0 -456
  232. data/app/views/spree/shared/_error_messages.html.erb +0 -11
  233. data/app/views/spree/shared/_mailer_line_item.html.erb +0 -16
  234. data/app/views/spree/shared/_paths.html.erb +0 -8
  235. data/app/views/spree/shared/_purchased_items_table.html.erb +0 -69
  236. data/app/views/spree/shared/purchased_items_table/_adjustment.html.erb +0 -13
  237. data/app/views/spree/shared/purchased_items_table/_line_item.html.erb +0 -27
  238. data/app/views/spree/shared/purchased_items_table/_subtotal.html.erb +0 -13
  239. data/app/views/spree/shared/purchased_items_table/_total.html.erb +0 -13
  240. data/app/views/spree/shipment_mailer/shipped_email.html.erb +0 -36
  241. data/app/views/spree/shipment_mailer/shipped_email.text.erb +0 -17
  242. data/app/views/spree/test_mailer/test_email.html.erb +0 -40
  243. data/app/views/spree/test_mailer/test_email.text.erb +0 -4
  244. data/config/initializers/assets.rb +0 -2
  245. data/config/initializers/premailer_assets.rb +0 -1
  246. data/config/initializers/premailer_rails.rb +0 -3
  247. data/db/migrate/20140805171219_make_existing_credit_cards_default.rb +0 -10
  248. data/lib/generators/spree/dummy/templates/initializers/bullet.rb +0 -5
  249. data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -15
  250. data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -16
  251. data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -16
  252. data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -16
  253. data/lib/generators/spree/mailers_preview/mailers_preview_generator.rb +0 -23
  254. data/lib/generators/spree/mailers_preview/templates/mailers/previews/order_preview.rb +0 -13
  255. data/lib/generators/spree/mailers_preview/templates/mailers/previews/reimbursement_preview.rb +0 -5
  256. data/lib/generators/spree/mailers_preview/templates/mailers/previews/shipment_preview.rb +0 -5
  257. data/lib/generators/spree/mailers_preview/templates/mailers/previews/user_preview.rb +0 -11
  258. data/lib/tasks/email.rake +0 -10
  259. data/vendor/assets/javascripts/cleave.js +0 -1669
  260. data/vendor/assets/javascripts/fetch.umd.js +0 -531
  261. data/vendor/assets/javascripts/jquery.payment.js +0 -652
  262. data/vendor/assets/javascripts/jsuri.js +0 -458
  263. data/vendor/assets/javascripts/polyfill.min.js +0 -1
@@ -0,0 +1,9 @@
1
+ class FixPromotionCodeAndPathUniqueIndexes < ActiveRecord::Migration[5.2]
2
+ def change
3
+ # removing unique indexes
4
+ remove_index :spree_promotions, :code
5
+ # applying standard indexes
6
+ add_index :spree_promotions, :code
7
+ add_index :spree_promotions, :path unless index_exists?(:spree_promotions, :path)
8
+ end
9
+ end
@@ -4,6 +4,8 @@ require 'spree/core/version'
4
4
 
5
5
  module Spree
6
6
  class DummyGenerator < Rails::Generators::Base
7
+ SPREE_GEMS = %w(spree_backend spree_frontend spree_api spree_emails).freeze
8
+
7
9
  desc 'Creates blank Rails application, installs Spree and all sample data'
8
10
 
9
11
  class_option :lib_name, default: ''
@@ -56,15 +58,18 @@ module Spree
56
58
  template 'rails/test.rb', "#{dummy_path}/config/environments/test.rb", force: true
57
59
  template 'rails/script/rails', "#{dummy_path}/spec/dummy/script/rails", force: true
58
60
  template 'initializers/devise.rb', "#{dummy_path}/config/initializers/devise.rb", force: true
59
- template 'initializers/bullet.rb', "#{dummy_path}/config/initializers/bullet.rb", force: true
60
61
  end
61
62
 
62
63
  def test_dummy_inject_extension_requirements
63
64
  if DummyGeneratorHelper.inject_extension_requirements
64
- inside dummy_path do
65
- inject_require_for('spree_frontend')
66
- inject_require_for('spree_backend')
67
- inject_require_for('spree_api')
65
+ SPREE_GEMS.each do |gem|
66
+ begin
67
+ require "#{gem}"
68
+ inside dummy_path do
69
+ inject_require_for(gem)
70
+ end
71
+ rescue StandardError, LoadError
72
+ end
68
73
  end
69
74
  end
70
75
  end
@@ -137,7 +142,7 @@ end
137
142
  end
138
143
 
139
144
  def gemfile_path
140
- core_gems = ['spree/core', 'spree/api', 'spree/backend', 'spree/frontend', 'spree/sample']
145
+ core_gems = ['spree/core', 'spree/api']
141
146
 
142
147
  if core_gems.include?(lib_name)
143
148
  '../../../../../Gemfile'
@@ -35,4 +35,6 @@ Dummy::Application.configure do
35
35
  config.active_support.deprecation = :stderr
36
36
 
37
37
  config.active_job.queue_adapter = :test
38
+
39
+ config.cache_store = :redis_cache_store
38
40
  end
@@ -1,5 +1,5 @@
1
1
  module Spree
2
- class Spree::DummyModel < ApplicationRecord
2
+ class DummyModel < Spree::Base
3
3
  acts_as_list
4
4
  validates :name, presence: true
5
5
  end
@@ -9,8 +9,9 @@ module Spree
9
9
  class InstallGenerator < Rails::Generators::Base
10
10
  class_option :migrate, type: :boolean, default: true, banner: 'Run Spree migrations'
11
11
  class_option :seed, type: :boolean, default: true, banner: 'load seed data (migrations must be run)'
12
- class_option :sample, type: :boolean, default: true, banner: 'load sample data (migrations must be run)'
13
- class_option :install_storefront, type: :boolean, default: true, banner: 'installs storefront configuration files'
12
+ class_option :sample, type: :boolean, default: false, banner: 'load sample data (migrations must be run)'
13
+ class_option :install_storefront, type: :boolean, default: false, banner: 'installs default rails storefront'
14
+ class_option :install_admin, type: :boolean, default: false, banner: 'installs default rails admin'
14
15
  class_option :copy_storefront, type: :boolean, default: false, banner: 'copy all storefront views and stylesheets'
15
16
  class_option :auto_accept, type: :boolean
16
17
  class_option :user_class, type: :string
@@ -32,6 +33,7 @@ module Spree
32
33
  @load_seed_data = options[:seed]
33
34
  @load_sample_data = options[:sample]
34
35
  @install_storefront = options[:install_storefront]
36
+ @install_admin = options[:install_admin]
35
37
  @copy_storefront = options[:copy_storefront]
36
38
 
37
39
  unless @run_migrations
@@ -62,28 +64,6 @@ module Spree
62
64
  ROBOTS
63
65
  end
64
66
 
65
- def setup_assets
66
- @lib_name = 'spree'
67
- %w{javascripts stylesheets images}.each do |path|
68
- if Spree::Core::Engine.frontend_available? || Rails.env.test?
69
- empty_directory "vendor/assets/#{path}/spree/frontend"
70
- end
71
- if Spree::Core::Engine.backend_available? || Rails.env.test?
72
- empty_directory "vendor/assets/#{path}/spree/backend"
73
- end
74
- end
75
-
76
- if Spree::Core::Engine.frontend_available? || Rails.env.test?
77
- template 'vendor/assets/javascripts/spree/frontend/all.js'
78
- template 'vendor/assets/stylesheets/spree/frontend/all.css'
79
- end
80
-
81
- if Spree::Core::Engine.backend_available? || Rails.env.test?
82
- template 'vendor/assets/javascripts/spree/backend/all.js'
83
- template 'vendor/assets/stylesheets/spree/backend/all.css'
84
- end
85
- end
86
-
87
67
  def create_overrides_directory
88
68
  empty_directory 'app/overrides'
89
69
  end
@@ -94,6 +74,12 @@ module Spree
94
74
  end
95
75
  end
96
76
 
77
+ def install_admin
78
+ if @install_admin && Spree::Core::Engine.backend_available?
79
+ generate 'spree:backend:install'
80
+ end
81
+ end
82
+
97
83
  def copy_storefront
98
84
  if @copy_storefront && Spree::Core::Engine.frontend_available?
99
85
  generate 'spree:frontend:copy_storefront'
@@ -185,6 +171,8 @@ module Spree
185
171
  end
186
172
 
187
173
  def load_sample_data
174
+ return unless Spree::Core::Engine.sample_available?
175
+
188
176
  if @load_sample_data
189
177
  say_status :loading, 'sample data'
190
178
  silence_stream(STDOUT) do
@@ -12,6 +12,14 @@ module Spree
12
12
  def self.frontend_available?
13
13
  @@frontend_available ||= ::Rails::Engine.subclasses.map(&:instance).map { |e| e.class.to_s }.include?('Spree::Frontend::Engine')
14
14
  end
15
+
16
+ def self.emails_available?
17
+ @@emails_available ||= ::Rails::Engine.subclasses.map(&:instance).map { |e| e.class.to_s }.include?('Spree::Emails::Engine')
18
+ end
19
+
20
+ def self.sample_available?
21
+ @@sample_available ||= ::Rails::Engine.subclasses.map(&:instance).map { |e| e.class.to_s }.include?('SpreeSample::Engine')
22
+ end
15
23
  end
16
24
  end
17
25
  end
@@ -34,10 +34,12 @@ module Spree
34
34
  end
35
35
 
36
36
  def current_oauth_token
37
+ get_last_access_token = ->(user) { Doorkeeper::AccessToken.active_for(user).where(expires_in: nil).last }
38
+ create_access_token = ->(user) { Doorkeeper::AccessToken.create!(resource_owner_id: user.id) }
37
39
  user = try_spree_current_user
38
40
  return unless user
39
41
 
40
- @current_oauth_token ||= Doorkeeper::AccessToken.active_for(user).last || Doorkeeper::AccessToken.create!(resource_owner_id: user.id)
42
+ @current_oauth_token ||= get_last_access_token.call(user) || create_access_token.call(user)
41
43
  end
42
44
 
43
45
  def store_location
@@ -71,6 +73,10 @@ module Spree
71
73
  # Override this method in your controllers if you want to have special behavior in case the user is not authorized
72
74
  # to access the requested action. For example, a popup window might simply close itself.
73
75
  def redirect_unauthorized_access
76
+ ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
77
+ Core::ControllerHelpers#redirect_unauthorized_access is deprecated and will be removed in Spree 5.0.
78
+ This method is implemented differently for Storefront and Admin
79
+ DEPRECATION
74
80
  if try_spree_current_user
75
81
  flash[:error] = Spree.t(:authorization_failure)
76
82
  redirect_to spree.forbidden_path
@@ -19,7 +19,7 @@ module Spree
19
19
  def title
20
20
  title_string = @title.present? ? @title : accurate_title
21
21
  if title_string.present?
22
- if Spree::Config[:always_put_site_name_in_title]
22
+ if Spree::Config[:always_put_site_name_in_title] && !title_string.include?(default_title)
23
23
  [title_string, default_title].join(" #{Spree::Config[:title_site_name_separator]} ")
24
24
  else
25
25
  title_string
@@ -19,7 +19,7 @@ module Spree
19
19
  @simple_current_order.last_ip_address = ip_address
20
20
  return @simple_current_order
21
21
  else
22
- @simple_current_order = Spree::Order.new
22
+ @simple_current_order = current_store.orders.new
23
23
  end
24
24
  end
25
25
 
@@ -36,7 +36,7 @@ module Spree
36
36
  @current_order = find_order_by_token_or_user(options, true)
37
37
 
38
38
  if options[:create_order_if_necessary] && (@current_order.nil? || @current_order.completed?)
39
- @current_order = Spree::Order.create!(current_order_params)
39
+ @current_order = current_store.orders.create!(current_order_params)
40
40
  @current_order.associate_user! try_spree_current_user if try_spree_current_user
41
41
  @current_order.last_ip_address = ip_address
42
42
  end
@@ -75,7 +75,7 @@ module Spree
75
75
  end
76
76
 
77
77
  def current_order_params
78
- { currency: current_currency, token: cookies.signed[:token], store_id: current_store.id, user_id: try_spree_current_user.try(:id) }
78
+ { currency: current_currency, token: cookies.signed[:token], user_id: try_spree_current_user.try(:id) }
79
79
  end
80
80
 
81
81
  def find_order_by_token_or_user(options = {}, with_adjustments = false)
@@ -88,7 +88,7 @@ module Spree
88
88
  end
89
89
 
90
90
  # Find any incomplete orders for the token
91
- incomplete_orders = Spree::Order.incomplete.includes(includes)
91
+ incomplete_orders = current_store.orders.incomplete.includes(includes)
92
92
 
93
93
  token_order_params = current_order_params.except(:user_id)
94
94
  order = if with_adjustments
@@ -6,6 +6,7 @@ module Spree
6
6
  Spree::Config.searcher_class.new(params).tap do |searcher|
7
7
  searcher.current_user = try_spree_current_user
8
8
  searcher.current_currency = current_currency&.upcase
9
+ searcher.current_store = current_store
9
10
  end
10
11
  end
11
12
  end
@@ -7,16 +7,35 @@ module Spree
7
7
  included do
8
8
  helper_method :current_store
9
9
  helper_method :current_price_options
10
+ helper_method :available_menus
10
11
  end
11
12
 
12
13
  def current_store
13
- @current_store ||= Spree::Store.current(request.env['SERVER_NAME'])
14
+ @current_store ||= current_store_finder.new(url: request.env['SERVER_NAME']).execute
15
+ end
16
+
17
+ def available_menus
18
+ @available_menus ||= current_store.menus
14
19
  end
15
20
 
16
21
  def store_locale
17
22
  current_store.default_locale
18
23
  end
19
24
 
25
+ def ensure_current_store(object)
26
+ return if object.nil?
27
+
28
+ if object.has_attribute?(:store_id)
29
+ if object.store.present? && object.store != current_store
30
+ raise Spree.t('errors.messages.store_is_already_set')
31
+ else
32
+ object.store = current_store
33
+ end
34
+ elsif object.class.method_defined?(:stores) && object.stores.exclude?(current_store)
35
+ object.stores << current_store
36
+ end
37
+ end
38
+
20
39
  # Return a Hash of things that influence the prices displayed in your shop.
21
40
  #
22
41
  # By default, the only thing that influences prices that is the current order's +tax_zone+
@@ -44,6 +63,10 @@ module Spree
44
63
  def current_tax_zone
45
64
  @current_tax_zone ||= @current_order&.tax_zone || Spree::Zone.default_tax
46
65
  end
66
+
67
+ def current_store_finder
68
+ Spree::Dependencies.current_store_finder.constantize
69
+ end
47
70
  end
48
71
  end
49
72
  end
@@ -129,6 +129,12 @@ module Spree
129
129
  Migrations.new(config, engine_name).check
130
130
  end
131
131
 
132
+ initializer 'spree.core.checking_deprecated_preferences' do
133
+ Spree::Config.deprecated_preferences.each do |pref|
134
+ warn "[DEPRECATION] Spree::Config[:#{pref[:name]}] is deprecated. #{pref[:message]}"
135
+ end
136
+ end
137
+
132
138
  config.to_prepare do
133
139
  # Ensure spree locale paths are present before decorators
134
140
  I18n.load_path.unshift(*(Dir.glob(
@@ -2,10 +2,12 @@ module Spree
2
2
  module Core
3
3
  module Importer
4
4
  class Product
5
- attr_reader :product, :product_attrs, :variants_attrs, :options_attrs
5
+ attr_reader :product, :product_attrs, :variants_attrs, :options_attrs, :store
6
6
 
7
7
  def initialize(product, product_params, options = {})
8
+ @store = options[:store] || Spree::Store.default
8
9
  @product = product || Spree::Product.new(product_params)
10
+ @product.stores << @store if @product.stores.exclude?(@store)
9
11
 
10
12
  @product_attrs = product_params.to_h
11
13
  @variants_attrs = (options[:variants_attrs] || []).map(&:to_h)
@@ -28,6 +28,7 @@ module Spree
28
28
  product.dup.tap do |new_product|
29
29
  new_product.name = "COPY OF #{product.name}"
30
30
  new_product.taxons = product.taxons
31
+ new_product.stores = product.stores
31
32
  new_product.created_at = nil
32
33
  new_product.deleted_at = nil
33
34
  new_product.updated_at = nil
@@ -2,25 +2,19 @@ module Spree
2
2
  module Core
3
3
  module Search
4
4
  class Base
5
- attr_accessor :properties
6
- attr_accessor :current_user
7
- attr_accessor :current_currency
5
+ attr_accessor :properties, :current_user, :current_currency, :current_store, :taxon
8
6
 
9
7
  def initialize(params)
10
- self.current_currency = Spree::Config[:currency]
11
8
  @properties = {}
9
+ @current_store = params[:current_store] || Spree::Store.default
10
+ @current_currency = @current_store.default_currency
11
+ @taxon = params[:taxon]
12
+
12
13
  prepare(params)
13
14
  end
14
15
 
15
16
  def retrieve_products
16
- @products = extended_base_scope&.available
17
- curr_page = page || 1
18
-
19
- unless Spree::Config.show_products_without_price
20
- @products = @products.where('spree_prices.amount IS NOT NULL').
21
- where('spree_prices.currency' => current_currency)
22
- end
23
- @products = @products.page(curr_page).per(per_page)
17
+ @products = extended_base_scope.page(page || 1).per(per_page)
24
18
  end
25
19
 
26
20
  def method_missing(name)
@@ -34,27 +28,28 @@ module Spree
34
28
  protected
35
29
 
36
30
  def extended_base_scope
37
- base_scope = Spree::Product.spree_base_scopes.active
31
+ base_scope = current_store.products.spree_base_scopes
38
32
  base_scope = get_products_conditions_for(base_scope, keywords)
39
33
  base_scope = Spree::Dependencies.products_finder.constantize.new(
40
34
  scope: base_scope,
41
35
  params: {
36
+ store: current_store,
42
37
  filter: {
43
38
  price: price,
44
39
  option_value_ids: option_value_ids,
45
- taxons: taxon&.id
40
+ properties: product_properties,
41
+ taxons: taxon&.id,
42
+ currency: current_currency
46
43
  },
47
44
  sort_by: sort_by
48
- },
49
- current_currency: current_currency
45
+ }
50
46
  ).execute
51
47
  base_scope = add_search_scopes(base_scope)
52
- base_scope = add_eagerload_scopes(base_scope)
53
- base_scope
48
+ add_eagerload_scopes(base_scope)
54
49
  end
55
50
 
56
51
  def add_eagerload_scopes(scope)
57
- scope = scope.includes(
52
+ scope.includes(
58
53
  :tax_category,
59
54
  variants: [
60
55
  { images: { attachment_attachment: :blob } }
@@ -64,7 +59,6 @@ module Spree
64
59
  { images: { attachment_attachment: :blob } }
65
60
  ]
66
61
  )
67
- scope
68
62
  end
69
63
 
70
64
  def add_search_scopes(base_scope)
@@ -107,13 +101,14 @@ module Spree
107
101
  high_price = Monetize.parse(price_param.remove("#{less_than_string} ")).to_i
108
102
  else
109
103
  low_price, high_price = Monetize.parse_collection(price_param).map(&:to_i)
104
+ high_price = Float::INFINITY if high_price&.zero?
110
105
  end
111
106
 
112
107
  "#{low_price},#{high_price}"
113
108
  end
114
109
 
115
110
  def build_option_value_ids(params)
116
- filter_params = Spree::OptionType.all.map(&:filter_param)
111
+ filter_params = Spree::OptionType.filterable.map(&:filter_param)
117
112
 
118
113
  filter_params.reduce([]) do |acc, filter_param|
119
114
  acc + params[filter_param].to_s.split(',')
@@ -121,7 +116,6 @@ module Spree
121
116
  end
122
117
 
123
118
  def prepare(params)
124
- @properties[:taxon] = params[:taxon].blank? ? nil : Spree::Taxon.find(params[:taxon])
125
119
  @properties[:keywords] = params[:keywords]
126
120
  @properties[:option_value_ids] = build_option_value_ids(params)
127
121
  @properties[:price] = get_price_range(params[:price])
@@ -136,6 +130,7 @@ module Spree
136
130
  else
137
131
  1
138
132
  end
133
+ @properties[:product_properties] = params[:properties]
139
134
  end
140
135
  end
141
136
  end
@@ -1,5 +1,5 @@
1
1
  module Spree
2
- VERSION = '4.2.5'.freeze
2
+ VERSION = '4.3.0'.freeze
3
3
 
4
4
  def self.version
5
5
  VERSION
data/lib/spree/core.rb CHANGED
@@ -1,17 +1,21 @@
1
- require 'rails/all'
1
+ require 'action_controller/railtie'
2
+ require 'action_view/railtie'
3
+ require 'active_job/railtie'
4
+ require 'active_model/railtie'
5
+ require 'active_record/railtie'
6
+ require 'active_storage/engine'
7
+
2
8
  require 'active_merchant'
3
9
  require 'acts_as_list'
10
+ require 'auto_strip_attributes'
4
11
  require 'awesome_nested_set'
5
12
  require 'cancan'
6
13
  require 'friendly_id'
7
14
  require 'kaminari'
8
- require 'mail'
9
15
  require 'monetize'
10
16
  require 'paranoia'
11
17
  require 'mini_magick'
12
- require 'premailer/rails'
13
18
  require 'ransack'
14
- require 'responders'
15
19
  require 'state_machines-activerecord'
16
20
  require 'active_storage_validations'
17
21