spree_core 4.4.0 → 4.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (157) hide show
  1. checksums.yaml +4 -4
  2. data/app/finders/spree/products/find.rb +1 -3
  3. data/app/finders/spree/taxons/find.rb +1 -1
  4. data/app/helpers/spree/base_helper.rb +12 -9
  5. data/app/helpers/spree/locale_helper.rb +6 -2
  6. data/app/helpers/spree/products_helper.rb +9 -4
  7. data/app/jobs/spree/variants/remove_from_incomplete_orders_job.rb +9 -0
  8. data/app/jobs/spree/variants/remove_line_item_job.rb +9 -0
  9. data/app/models/concerns/spree/calculated_adjustments.rb +1 -1
  10. data/app/models/concerns/spree/display_link.rb +17 -29
  11. data/app/models/concerns/spree/image_methods.rb +21 -9
  12. data/app/models/concerns/spree/metadata.rb +2 -2
  13. data/app/models/concerns/spree/product_scopes.rb +10 -8
  14. data/app/models/spree/address.rb +7 -1
  15. data/app/models/spree/asset/support/active_storage.rb +3 -2
  16. data/app/models/spree/asset.rb +3 -0
  17. data/app/models/spree/cms_page.rb +4 -0
  18. data/app/models/spree/cms_section.rb +12 -12
  19. data/app/models/spree/cms_section_image.rb +15 -0
  20. data/app/models/spree/cms_section_image_one.rb +4 -0
  21. data/app/models/spree/cms_section_image_three.rb +4 -0
  22. data/app/models/spree/cms_section_image_two.rb +4 -0
  23. data/app/models/spree/credit_card.rb +10 -4
  24. data/app/models/spree/customer_return.rb +3 -0
  25. data/app/models/spree/digital.rb +4 -0
  26. data/app/models/spree/digital_link.rb +7 -0
  27. data/app/models/spree/fulfilment_changer.rb +1 -1
  28. data/app/models/spree/gateway/bogus.rb +1 -1
  29. data/app/models/spree/icon.rb +5 -1
  30. data/app/models/spree/image/configuration/active_storage.rb +5 -1
  31. data/app/models/spree/image.rb +3 -3
  32. data/app/models/spree/inventory_unit.rb +5 -2
  33. data/app/models/spree/legacy_user.rb +1 -2
  34. data/app/models/spree/line_item.rb +4 -1
  35. data/app/models/spree/linkable/homepage.rb +3 -0
  36. data/app/models/spree/linkable/uri.rb +3 -0
  37. data/app/models/spree/log_entry.rb +4 -0
  38. data/app/models/spree/menu.rb +3 -0
  39. data/app/models/spree/menu_item.rb +7 -11
  40. data/app/models/spree/option_type.rb +4 -0
  41. data/app/models/spree/option_value.rb +5 -0
  42. data/app/models/spree/order/address_book.rb +1 -0
  43. data/app/models/spree/order.rb +11 -2
  44. data/app/models/spree/order_merger.rb +1 -1
  45. data/app/models/spree/payment/processing.rb +1 -1
  46. data/app/models/spree/payment.rb +7 -1
  47. data/app/models/spree/payment_capture_event.rb +4 -0
  48. data/app/models/spree/payment_method/store_credit.rb +1 -1
  49. data/app/models/spree/payment_method.rb +3 -0
  50. data/app/models/spree/payment_source.rb +10 -0
  51. data/app/models/spree/preference.rb +4 -0
  52. data/app/models/spree/price.rb +3 -0
  53. data/app/models/spree/product.rb +56 -14
  54. data/app/models/spree/product_property.rb +1 -0
  55. data/app/models/spree/promotion/rules/option_value.rb +2 -2
  56. data/app/models/spree/promotion.rb +6 -0
  57. data/app/models/spree/promotion_rule.rb +1 -1
  58. data/app/models/spree/promotion_rule_user.rb +1 -1
  59. data/app/models/spree/property.rb +3 -0
  60. data/app/models/spree/prototype.rb +3 -0
  61. data/app/models/spree/refund.rb +8 -0
  62. data/app/models/spree/reimbursement.rb +3 -0
  63. data/app/models/spree/return_authorization.rb +3 -0
  64. data/app/models/spree/return_item.rb +4 -0
  65. data/app/models/spree/role.rb +1 -1
  66. data/app/models/spree/role_user.rb +1 -1
  67. data/app/models/spree/shipment.rb +7 -0
  68. data/app/models/spree/shipping_category.rb +3 -0
  69. data/app/models/spree/shipping_method.rb +6 -0
  70. data/app/models/spree/state_change.rb +1 -1
  71. data/app/models/spree/stock/availability_validator.rb +9 -3
  72. data/app/models/spree/stock/content_item.rb +1 -1
  73. data/app/models/spree/stock/quantifier.rb +1 -1
  74. data/app/models/spree/stock_item.rb +5 -0
  75. data/app/models/spree/stock_location.rb +19 -5
  76. data/app/models/spree/stock_movement.rb +4 -0
  77. data/app/models/spree/stock_transfer.rb +3 -0
  78. data/app/models/spree/store.rb +19 -14
  79. data/app/models/spree/store_credit.rb +4 -1
  80. data/app/models/spree/store_favicon_image.rb +17 -0
  81. data/app/models/spree/store_logo.rb +9 -0
  82. data/app/models/spree/store_mailer_logo.rb +13 -0
  83. data/app/models/spree/tax_category.rb +6 -0
  84. data/app/models/spree/tax_rate.rb +6 -1
  85. data/app/models/spree/taxon.rb +4 -1
  86. data/app/models/spree/taxon_image/configuration/active_storage.rb +5 -1
  87. data/app/models/spree/taxon_image.rb +3 -2
  88. data/app/models/spree/taxonomy.rb +4 -1
  89. data/app/models/spree/variant.rb +43 -14
  90. data/app/models/spree/wished_item.rb +4 -0
  91. data/app/models/spree/wishlist.rb +4 -1
  92. data/app/models/spree/zone.rb +3 -0
  93. data/app/services/spree/addresses/create.rb +1 -1
  94. data/app/services/spree/addresses/update.rb +7 -2
  95. data/app/services/spree/cart/remove_line_item.rb +1 -0
  96. data/app/services/spree/variants/remove_line_items.rb +15 -0
  97. data/config/locales/en.yml +5 -2
  98. data/config/routes.rb +43 -0
  99. data/db/migrate/20211201202851_update_linkable_resource_types.rb +10 -0
  100. data/db/migrate/20211203082008_add_settings_to_payment_methods.rb +11 -0
  101. data/db/migrate/20211229162122_disable_propagate_all_variants_by_default.rb +5 -0
  102. data/db/migrate/20220103082046_add_status_and_make_active_at_to_spree_products.rb +7 -0
  103. data/db/migrate/20220106230929_add_internal_note_to_spree_orders.rb +5 -0
  104. data/db/migrate/20220113052823_create_payment_sources.rb +22 -0
  105. data/db/migrate/20220117100333_add_make_active_at_to_spree_products.rb +17 -0
  106. data/db/migrate/20220120092821_add_metadata_to_spree_tax_rates.rb +13 -0
  107. data/db/migrate/20220201103922_add_first_name_and_last_name_to_spree_users.rb +9 -0
  108. data/db/migrate/20220222083546_add_barcode_to_spree_variants.rb +6 -0
  109. data/db/migrate/20220329113557_fix_cms_pages_unique_indexes.rb +8 -0
  110. data/db/migrate/20220613133029_add_metadata_to_spree_stock_items.rb +13 -0
  111. data/lib/friendly_id/paranoia.rb +4 -0
  112. data/lib/generators/spree/dummy/dummy_generator.rb +13 -2
  113. data/lib/generators/spree/dummy/templates/package.json +12 -0
  114. data/lib/generators/spree/dummy/templates/rails/test.rb +2 -0
  115. data/lib/spree/core/configuration.rb +90 -0
  116. data/lib/spree/core/controller_helpers/auth.rb +3 -1
  117. data/lib/spree/core/controller_helpers/currency.rb +7 -5
  118. data/lib/spree/core/controller_helpers/locale.rb +8 -6
  119. data/lib/spree/core/controller_helpers/order.rb +4 -2
  120. data/lib/spree/core/controller_helpers/search.rb +1 -1
  121. data/lib/spree/core/controller_helpers/store.rb +5 -3
  122. data/lib/spree/core/dependencies.rb +130 -0
  123. data/lib/spree/core/engine.rb +47 -37
  124. data/{app/models/spree → lib/spree/core}/preferences/configuration.rb +3 -0
  125. data/{app/models/spree → lib/spree/core}/preferences/preferable.rb +3 -0
  126. data/{app/models/spree → lib/spree/core}/preferences/preferable_class_methods.rb +0 -0
  127. data/{app/models/spree → lib/spree/core}/preferences/scoped_store.rb +0 -0
  128. data/{app/models/spree → lib/spree/core}/preferences/store.rb +0 -0
  129. data/lib/spree/core/search/base.rb +9 -5
  130. data/lib/spree/core/version.rb +1 -1
  131. data/lib/spree/core.rb +25 -5
  132. data/lib/spree/permitted_attributes.rb +9 -7
  133. data/lib/spree/testing_support/common_rake.rb +1 -0
  134. data/lib/spree/testing_support/factories/favicon_image_factory.rb +9 -0
  135. data/lib/spree/testing_support/factories/icon_factory.rb +3 -1
  136. data/lib/spree/testing_support/factories/image_factory.rb +3 -1
  137. data/lib/spree/testing_support/factories/menu_item_factory.rb +1 -1
  138. data/lib/spree/testing_support/factories/order_factory.rb +2 -1
  139. data/lib/spree/testing_support/factories/product_factory.rb +6 -1
  140. data/lib/spree/testing_support/factories/product_property_factory.rb +1 -0
  141. data/lib/spree/testing_support/factories/refund_factory.rb +1 -1
  142. data/lib/spree/testing_support/factories/return_authorization_factory.rb +1 -1
  143. data/lib/spree/testing_support/factories/role_factory.rb +1 -1
  144. data/lib/spree/testing_support/factories/shipping_category_factory.rb +1 -1
  145. data/lib/spree/testing_support/factories/stock_location_factory.rb +3 -2
  146. data/lib/spree/testing_support/factories/store_factory.rb +1 -1
  147. data/lib/spree/testing_support/factories/taxon_image_factory.rb +3 -1
  148. data/lib/spree/testing_support/factories/user_factory.rb +4 -0
  149. data/lib/spree/testing_support/factories/variant_factory.rb +4 -0
  150. data/lib/spree_core.rb +2 -1
  151. data/lib/tasks/core.rake +12 -0
  152. data/spree_core.gemspec +2 -3
  153. metadata +63 -51
  154. data/app/models/friendly_id/slug_decorator.rb +0 -9
  155. data/app/models/spree/app_configuration.rb +0 -86
  156. data/lib/friendly_id/slug_rails5_patch.rb +0 -11
  157. data/lib/spree/core/app_dependencies.rb +0 -126
data/config/routes.rb CHANGED
@@ -1 +1,44 @@
1
+ # direct method cannot be used inside engine routes
2
+ # see: https://github.com/rails/rails/issues/34872
3
+ Rails.application.routes.draw do
4
+ direct :cdn_image do |model, options|
5
+ if model.blob.service_name == 'cloudinary' && defined?(Cloudinary)
6
+ if model.class.method_defined?(:has_mvariation)
7
+ Cloudinary::Utils.cloudinary_url(model.blob.key,
8
+ width: model.variation.transformations[:resize_to_limit].first,
9
+ height: model.variation.transformations[:resize_to_limit].last,
10
+ crop: :fill
11
+ )
12
+ else
13
+ Cloudinary::Utils.cloudinary_url(model.blob.key)
14
+ end
15
+ elsif model.respond_to?(:signed_id)
16
+ route_for(
17
+ :rails_service_blob_proxy,
18
+ model.signed_id,
19
+ model.filename,
20
+ options.merge(
21
+ host: Spree.cdn_host || Rails.application.routes.default_url_options[:host],
22
+ port: Rails.application.routes.default_url_options[:port]
23
+ )
24
+ )
25
+ else
26
+ signed_blob_id = model.blob.signed_id
27
+ variation_key = model.variation.key
28
+ filename = model.blob.filename
29
+
30
+ route_for(
31
+ :rails_blob_representation_proxy,
32
+ signed_blob_id,
33
+ variation_key,
34
+ filename,
35
+ options.merge(
36
+ host: Spree.cdn_host || Rails.application.routes.default_url_options[:host],
37
+ port: Rails.application.routes.default_url_options[:port]
38
+ )
39
+ )
40
+ end
41
+ end
42
+ end
43
+
1
44
  Spree::Core::Engine.draw_routes
@@ -0,0 +1,10 @@
1
+ class UpdateLinkableResourceTypes < ActiveRecord::Migration[5.2]
2
+ def change
3
+ change_column_default :spree_menu_items, :linked_resource_type, 'Spree::Linkable::Uri'
4
+
5
+ Spree::MenuItem.where(linked_resource_type: 'URL').update_all(linked_resource_type: 'Spree::Linkable::Uri')
6
+ Spree::CmsSection.where(linked_resource_type: 'URL').update_all(linked_resource_type: 'Spree::Linkable::Uri')
7
+ Spree::MenuItem.where(linked_resource_type: 'Home Page').update_all(linked_resource_type: 'Spree::Linkable::Homepage')
8
+ Spree::CmsSection.where(linked_resource_type: 'Home Page').update_all(linked_resource_type: 'Spree::Linkable::Homepage')
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ class AddSettingsToPaymentMethods < ActiveRecord::Migration[5.2]
2
+ def change
3
+ change_table :spree_payment_methods do |t|
4
+ if t.respond_to? :jsonb
5
+ add_column :spree_payment_methods, :settings, :jsonb
6
+ else
7
+ add_column :spree_payment_methods, :settings, :json
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ class DisablePropagateAllVariantsByDefault < ActiveRecord::Migration[5.2]
2
+ def change
3
+ change_column_default :spree_stock_locations, :propagate_all_variants, false
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ class AddStatusAndMakeActiveAtToSpreeProducts < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :spree_products, :status, :string, null: false, default: 'draft'
4
+ add_index :spree_products, :status
5
+ add_index :spree_products, %i[status deleted_at]
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ class AddInternalNoteToSpreeOrders < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :spree_orders, :internal_note, :text
4
+ end
5
+ end
@@ -0,0 +1,22 @@
1
+ class CreatePaymentSources < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table :spree_payment_sources do |t|
4
+ t.string :gateway_payment_profile_id
5
+ t.string :type, index: true
6
+
7
+ t.references :payment_method, index: true, foreign_key: { to_table: :spree_payment_methods }
8
+ t.references :user, index: true, foreign_key: { to_table: :spree_users }
9
+
10
+ if t.respond_to? :jsonb
11
+ t.jsonb :public_metadata
12
+ t.jsonb :private_metadata
13
+ else
14
+ t.json :public_metadata
15
+ t.json :private_metadata
16
+ end
17
+
18
+ t.index [:type, :gateway_payment_profile_id], unique: true, name: 'index_payment_sources_on_type_and_gateway_payment_profile_id'
19
+ t.timestamps
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,17 @@
1
+ class AddMakeActiveAtToSpreeProducts < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :spree_products, :make_active_at, :datetime
4
+ add_index :spree_products, :make_active_at
5
+
6
+ Spree::Product.
7
+ where('discontinue_on IS NULL or discontinue_on > ?', Time.current).
8
+ where('available_on <= ?', Time.current).
9
+ where(status: 'draft').
10
+ update_all(status: 'active', updated_at: Time.current)
11
+
12
+ Spree::Product.
13
+ where('discontinue_on <= ?', Time.current).
14
+ where.not(status: 'archived').
15
+ update_all(status: 'archived', updated_at: Time.current)
16
+ end
17
+ end
@@ -0,0 +1,13 @@
1
+ class AddMetadataToSpreeTaxRates < ActiveRecord::Migration[5.2]
2
+ def change
3
+ change_table :spree_tax_rates do |t|
4
+ if t.respond_to? :jsonb
5
+ add_column :spree_tax_rates, :public_metadata, :jsonb
6
+ add_column :spree_tax_rates, :private_metadata, :jsonb
7
+ else
8
+ add_column :spree_tax_rates, :public_metadata, :json
9
+ add_column :spree_tax_rates, :private_metadata, :json
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ class AddFirstNameAndLastNameToSpreeUsers < ActiveRecord::Migration[5.2]
2
+ def change
3
+ if Spree.user_class.present?
4
+ users_table_name = Spree.user_class.table_name
5
+ add_column users_table_name, :first_name, :string unless column_exists?(users_table_name, :first_name)
6
+ add_column users_table_name, :last_name, :string unless column_exists?(users_table_name, :last_name)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ class AddBarcodeToSpreeVariants < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :spree_variants, :barcode, :string
4
+ add_index :spree_variants, :barcode
5
+ end
6
+ end
@@ -0,0 +1,8 @@
1
+ class FixCmsPagesUniqueIndexes < ActiveRecord::Migration[5.2]
2
+ def change
3
+ remove_index :spree_cms_pages, [:slug, :store_id, :deleted_at]
4
+ remove_index :spree_cms_pages, [:slug, :store_id], unique: true
5
+
6
+ add_index :spree_cms_pages, [:slug, :store_id, :deleted_at], unique: true
7
+ end
8
+ end
@@ -0,0 +1,13 @@
1
+ class AddMetadataToSpreeStockItems < ActiveRecord::Migration[5.2]
2
+ def change
3
+ change_table :spree_stock_items do |t|
4
+ if t.respond_to? :jsonb
5
+ add_column :spree_stock_items, :public_metadata, :jsonb
6
+ add_column :spree_stock_items, :private_metadata, :jsonb
7
+ else
8
+ add_column :spree_stock_items, :public_metadata, :json
9
+ add_column :spree_stock_items, :private_metadata, :json
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,4 @@
1
+ require 'friendly_id'
2
+ require 'paranoia'
3
+
4
+ FriendlyId::Slug.acts_as_paranoid
@@ -38,13 +38,12 @@ module Spree
38
38
  opts[:skip_rc] = true
39
39
  opts[:skip_spring] = true
40
40
  opts[:skip_test] = true
41
- opts[:skip_yarn] = true
42
- opts[:skip_javascript] = true
43
41
  opts[:skip_bootsnap] = true
44
42
 
45
43
  puts 'Generating dummy Rails application...'
46
44
  invoke Rails::Generators::AppGenerator,
47
45
  [File.expand_path(dummy_path, destination_root)], opts
46
+ inject_yaml_permitted_classes
48
47
  end
49
48
 
50
49
  def test_dummy_config
@@ -58,6 +57,10 @@ module Spree
58
57
  template 'rails/test.rb', "#{dummy_path}/config/environments/test.rb", force: true
59
58
  template 'rails/script/rails', "#{dummy_path}/spec/dummy/script/rails", force: true
60
59
  template 'initializers/devise.rb', "#{dummy_path}/config/initializers/devise.rb", force: true
60
+
61
+ if lib_name == 'spree/backend'
62
+ template 'package.json', "#{dummy_path}/package.json", force: true
63
+ end
61
64
  end
62
65
 
63
66
  def test_dummy_inject_extension_requirements
@@ -114,6 +117,14 @@ end
114
117
  ], before: /require '#{@lib_name}'/, verbose: true
115
118
  end
116
119
 
120
+ def inject_yaml_permitted_classes
121
+ inside dummy_path do
122
+ inject_into_file 'config/application.rb', %Q[
123
+ config.active_record.yaml_column_permitted_classes = [Symbol, BigDecimal, ActiveSupport::HashWithIndifferentAccess]
124
+ ], after: /config\.load_defaults.*$/, verbose: true
125
+ end
126
+ end
127
+
117
128
  def dummy_path
118
129
  ENV['DUMMY_PATH'] || 'spec/dummy'
119
130
  end
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "app",
3
+ "private": "true",
4
+ "dependencies": {
5
+ "@hotwired/turbo-rails": "^7.2.0",
6
+ "@spree/dashboard": "^0.2.1",
7
+ "esbuild": "^0.15.10"
8
+ },
9
+ "scripts": {
10
+ "build": "esbuild app/javascript/*.* --bundle --sourcemap --outdir=app/assets/builds"
11
+ }
12
+ }
@@ -37,4 +37,6 @@ Dummy::Application.configure do
37
37
  config.active_job.queue_adapter = :test
38
38
 
39
39
  config.cache_store = :redis_cache_store
40
+
41
+ routes.default_url_options = { host: 'localhost', port: 3000 }
40
42
  end
@@ -0,0 +1,90 @@
1
+ # This is the primary location for defining spree preferences
2
+ #
3
+ # The expectation is that this is created once and stored in
4
+ # the spree environment
5
+ #
6
+ # setters:
7
+ # a.color = :blue
8
+ # a[:color] = :blue
9
+ # a.set :color = :blue
10
+ # a.preferred_color = :blue
11
+ #
12
+ # getters:
13
+ # a.color
14
+ # a[:color]
15
+ # a.get :color
16
+ # a.preferred_color
17
+ #
18
+ require 'spree/core/search/base'
19
+ require 'spree/core/preferences/configuration'
20
+
21
+ module Spree
22
+ module Core
23
+ class Configuration < Preferences::Configuration
24
+ # Alphabetized to more easily lookup particular preferences
25
+ preference :address_requires_state, :boolean, default: true # should state/state_name be required
26
+ preference :address_requires_phone, :boolean, default: true # Determines whether we require phone in address
27
+ preference :admin_path, :string, deprecated: true
28
+ preference :admin_products_per_page, :integer, deprecated: true
29
+ preference :admin_orders_per_page, :integer, deprecated: true
30
+ preference :admin_properties_per_page, :integer, deprecated: true
31
+ preference :admin_promotions_per_page, :integer, deprecated: true
32
+ preference :admin_customer_returns_per_page, :integer, deprecated: true
33
+ preference :admin_users_per_page, :integer, deprecated: true
34
+ preference :admin_show_version, :boolean, deprecated: true
35
+ preference :allow_checkout_on_gateway_error, :boolean, default: false
36
+ preference :allow_guest_checkout, :boolean, default: true
37
+ preference :alternative_shipping_phone, :boolean, default: false # Request extra phone for ship addr
38
+ 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.
39
+ preference :always_put_site_name_in_title, :boolean, deprecated: true
40
+ preference :title_site_name_separator, :string, deprecated: true
41
+ preference :auto_capture, :boolean, default: false # automatically capture the credit card (as opposed to just authorize and capture later)
42
+ 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.
43
+ preference :binary_inventory_cache, :boolean, default: false # only invalidate product cache when a stock item changes whether it is in_stock
44
+ preference :checkout_zone, :string, default: nil, deprecated: true # replace with the name of a zone if you would like to limit the countries
45
+ preference :company, :boolean, default: false # Request company field for billing and shipping addr
46
+ preference :currency, :string, default: 'USD', deprecated: true
47
+ preference :default_country_id, :integer, deprecated: true
48
+ preference :disable_sku_validation, :boolean, default: false # when turned off disables the built-in SKU uniqueness validation
49
+ preference :disable_store_presence_validation, :boolean, default: false # when turned off disables Store presence validation for Products and Payment Methods
50
+ 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.
51
+ 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
52
+ preference :layout, :string, deprecated: 'Please use Spree::Frontend::Config[:layout] instead'
53
+ preference :logo, :string, deprecated: true
54
+ preference :mailer_logo, :string, deprecated: true
55
+ preference :max_level_in_taxons_menu, :integer, deprecated: true
56
+ preference :products_per_page, :integer, default: 12
57
+ preference :require_master_price, :boolean, default: true
58
+ preference :restock_inventory, :boolean, default: true # Determines if a return item is restocked automatically once it has been received
59
+ preference :return_eligibility_number_of_days, :integer, default: 365
60
+ preference :send_core_emails, :boolean, default: true # Default mail headers settings
61
+ preference :shipping_instructions, :boolean, deprecated: true
62
+ preference :show_only_complete_orders_by_default, :boolean, deprecated: true
63
+ 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
+ preference :show_products_without_price, :boolean, default: false
65
+ preference :show_raw_product_description, :boolean, deprecated: true
66
+ preference :tax_using_ship_address, :boolean, default: true
67
+ preference :track_inventory_levels, :boolean, default: true # Determines whether to track on_hand values for variants / products.
68
+
69
+ # Store credits configurations
70
+ preference :non_expiring_credit_types, :array, default: []
71
+ preference :credit_to_new_allocation, :boolean, default: false
72
+
73
+ # Multi store configurations
74
+ preference :show_store_selector, :boolean, deprecated: true
75
+
76
+ # searcher_class allows spree extension writers to provide their own Search class
77
+ def searcher_class
78
+ ActiveSupport::Deprecation.warn('`Spree::Config.searcher_class` is deprecated and will be removed in Spree v5, please use `Spree.searcher_class` instead.')
79
+ @searcher_class ||= Spree.searcher_class
80
+ end
81
+
82
+ # Sets the path used for products, taxons and pages.
83
+ preference :storefront_products_path, :string, default: 'products'
84
+ preference :storefront_taxons_path, :string, default: 't'
85
+ preference :storefront_pages_path, :string, default: 'pages'
86
+
87
+ attr_writer :searcher_class
88
+ end
89
+ end
90
+ end
@@ -7,7 +7,9 @@ module Spree
7
7
 
8
8
  included do
9
9
  before_action :set_token
10
- helper_method :try_spree_current_user
10
+ if defined?(helper_method)
11
+ helper_method :try_spree_current_user
12
+ end
11
13
 
12
14
  rescue_from CanCan::AccessDenied do |_exception|
13
15
  redirect_unauthorized_access
@@ -5,11 +5,13 @@ module Spree
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  included do
8
- helper_method :supported_currencies
9
- helper_method :supported_currencies_for_all_stores
10
- helper_method :current_currency
11
- helper_method :supported_currency?
12
- helper_method :currency_param
8
+ if defined?(helper_method)
9
+ helper_method :supported_currencies
10
+ helper_method :supported_currencies_for_all_stores
11
+ helper_method :current_currency
12
+ helper_method :supported_currency?
13
+ helper_method :currency_param
14
+ end
13
15
  end
14
16
 
15
17
  def current_currency
@@ -7,12 +7,14 @@ module Spree
7
7
  included do
8
8
  before_action :set_locale
9
9
 
10
- helper_method :supported_locales
11
- helper_method :supported_locales_for_all_stores
12
- helper_method :current_locale
13
- helper_method :supported_locale?
14
- helper_method :available_locales
15
- helper_method :locale_param
10
+ if defined?(helper_method)
11
+ helper_method :supported_locales
12
+ helper_method :supported_locales_for_all_stores
13
+ helper_method :current_locale
14
+ helper_method :supported_locale?
15
+ helper_method :available_locales
16
+ helper_method :locale_param
17
+ end
16
18
  end
17
19
 
18
20
  def set_locale
@@ -5,8 +5,10 @@ module Spree
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  included do
8
- helper_method :current_order
9
- helper_method :simple_current_order
8
+ if defined?(helper_method)
9
+ helper_method :current_order
10
+ helper_method :simple_current_order
11
+ end
10
12
  end
11
13
 
12
14
  # Used in the link_to_cart helper.
@@ -3,7 +3,7 @@ module Spree
3
3
  module ControllerHelpers
4
4
  module Search
5
5
  def build_searcher(params)
6
- Spree::Config.searcher_class.new(params).tap do |searcher|
6
+ Spree.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
9
  searcher.current_store = current_store
@@ -5,9 +5,11 @@ module Spree
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  included do
8
- helper_method :current_store
9
- helper_method :current_price_options
10
- helper_method :available_menus
8
+ if defined?(helper_method)
9
+ helper_method :current_store
10
+ helper_method :current_price_options
11
+ helper_method :available_menus
12
+ end
11
13
  end
12
14
 
13
15
  def current_store
@@ -0,0 +1,130 @@
1
+ require_relative 'dependencies_helper'
2
+
3
+ module Spree
4
+ module Core
5
+ class Dependencies
6
+ include Spree::DependenciesHelper
7
+
8
+ INJECTION_POINTS = [
9
+ :ability_class,
10
+ :cart_create_service, :cart_add_item_service, :cart_remove_item_service,
11
+ :cart_remove_line_item_service, :cart_set_item_quantity_service, :cart_recalculate_service,
12
+ :cms_page_finder, :cart_update_service, :checkout_next_service, :checkout_advance_service, :checkout_update_service,
13
+ :checkout_complete_service, :checkout_add_store_credit_service, :checkout_remove_store_credit_service, :checkout_get_shipping_rates_service,
14
+ :coupon_handler, :menu_finder, :country_finder, :current_order_finder, :credit_card_finder,
15
+ :completed_order_finder, :order_sorter, :cart_compare_line_items_service, :collection_paginator, :products_sorter,
16
+ :products_finder, :taxon_finder, :line_item_by_variant_finder, :cart_estimate_shipping_rates_service,
17
+ :account_create_address_service, :account_update_address_service, :account_create_service, :account_update_service,
18
+ :address_finder, :collection_sorter, :error_handler, :current_store_finder, :cart_empty_service, :cart_destroy_service,
19
+ :classification_reposition_service, :credit_cards_destroy_service, :cart_associate_service, :cart_change_currency_service,
20
+ :line_item_create_service, :line_item_update_service, :line_item_destroy_service,
21
+ :order_approve_service, :order_cancel_service, :shipment_change_state_service, :shipment_update_service,
22
+ :shipment_create_service, :shipment_add_item_service, :shipment_remove_item_service,
23
+ :payment_create_service, :address_create_service, :address_update_service,
24
+ :checkout_select_shipping_method_service
25
+ ].freeze
26
+
27
+ attr_accessor *INJECTION_POINTS
28
+
29
+ def initialize
30
+ set_default_ability
31
+ set_default_services
32
+ set_default_finders
33
+ end
34
+
35
+ private
36
+
37
+ def set_default_ability
38
+ @ability_class = 'Spree::Ability'
39
+ end
40
+
41
+ def set_default_services
42
+ # cart
43
+ @cart_compare_line_items_service = 'Spree::CompareLineItems'
44
+ @cart_create_service = 'Spree::Cart::Create'
45
+ @cart_add_item_service = 'Spree::Cart::AddItem'
46
+ @cart_update_service = 'Spree::Cart::Update'
47
+ @cart_recalculate_service = 'Spree::Cart::Recalculate'
48
+ @cart_remove_item_service = 'Spree::Cart::RemoveItem'
49
+ @cart_remove_line_item_service = 'Spree::Cart::RemoveLineItem'
50
+ @cart_set_item_quantity_service = 'Spree::Cart::SetQuantity'
51
+ @cart_estimate_shipping_rates_service = 'Spree::Cart::EstimateShippingRates'
52
+ @cart_empty_service = 'Spree::Cart::Empty'
53
+ @cart_destroy_service = 'Spree::Cart::Destroy'
54
+ @cart_associate_service = 'Spree::Cart::Associate'
55
+ @cart_change_currency_service = 'Spree::Cart::ChangeCurrency'
56
+
57
+ # checkout
58
+ @checkout_next_service = 'Spree::Checkout::Next'
59
+ @checkout_advance_service = 'Spree::Checkout::Advance'
60
+ @checkout_update_service = 'Spree::Checkout::Update'
61
+ @checkout_complete_service = 'Spree::Checkout::Complete'
62
+ @checkout_add_store_credit_service = 'Spree::Checkout::AddStoreCredit'
63
+ @checkout_remove_store_credit_service = 'Spree::Checkout::RemoveStoreCredit'
64
+ @checkout_get_shipping_rates_service = 'Spree::Checkout::GetShippingRates'
65
+ @checkout_select_shipping_method_service = 'Spree::Checkout::SelectShippingMethod'
66
+
67
+ # order
68
+ @order_approve_service = 'Spree::Orders::Approve'
69
+ @order_cancel_service = 'Spree::Orders::Cancel'
70
+
71
+ # shipment
72
+ @shipment_change_state_service = 'Spree::Shipments::ChangeState'
73
+ @shipment_create_service = 'Spree::Shipments::Create'
74
+ @shipment_update_service = 'Spree::Shipments::Update'
75
+ @shipment_add_item_service = 'Spree::Shipments::AddItem'
76
+ @shipment_remove_item_service = 'Spree::Shipments::RemoveItem'
77
+
78
+ # sorter
79
+ @collection_sorter = 'Spree::BaseSorter'
80
+ @order_sorter = 'Spree::BaseSorter'
81
+ @products_sorter = 'Spree::Products::Sort'
82
+
83
+ # paginator
84
+ @collection_paginator = 'Spree::Shared::Paginate'
85
+
86
+ # coupons
87
+ # TODO: we should split this service into 2 separate - Add and Remove
88
+ @coupon_handler = 'Spree::PromotionHandler::Coupon'
89
+
90
+ # account
91
+ @account_create_service = 'Spree::Account::Create'
92
+ @account_update_service = 'Spree::Account::Update'
93
+
94
+ # addresses
95
+ @address_create_service = 'Spree::Addresses::Create'
96
+ @address_update_service = 'Spree::Addresses::Update'
97
+
98
+ # credit cards
99
+ @credit_cards_destroy_service = 'Spree::CreditCards::Destroy'
100
+
101
+ # classifications
102
+ @classification_reposition_service = 'Spree::Classifications::Reposition'
103
+
104
+ # line items
105
+ @line_item_create_service = 'Spree::LineItems::Create'
106
+ @line_item_update_service = 'Spree::LineItems::Update'
107
+ @line_item_destroy_service = 'Spree::LineItems::Destroy'
108
+
109
+ @payment_create_service = 'Spree::Payments::Create'
110
+
111
+ # errors
112
+ @error_handler = 'Spree::ErrorReporter'
113
+ end
114
+
115
+ def set_default_finders
116
+ @address_finder = 'Spree::Addresses::Find'
117
+ @country_finder = 'Spree::Countries::Find'
118
+ @cms_page_finder = 'Spree::CmsPages::Find'
119
+ @menu_finder = 'Spree::Menus::Find'
120
+ @current_order_finder = 'Spree::Orders::FindCurrent'
121
+ @current_store_finder = 'Spree::Stores::FindCurrent'
122
+ @completed_order_finder = 'Spree::Orders::FindComplete'
123
+ @credit_card_finder = 'Spree::CreditCards::Find'
124
+ @products_finder = 'Spree::Products::Find'
125
+ @taxon_finder = 'Spree::Taxons::Find'
126
+ @line_item_by_variant_finder = 'Spree::LineItems::FindByVariant'
127
+ end
128
+ end
129
+ end
130
+ end