spree_core 4.4.1 → 4.5.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 (158) 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/gateway/bogus.rb +1 -1
  28. data/app/models/spree/icon.rb +5 -1
  29. data/app/models/spree/image/configuration/active_storage.rb +5 -1
  30. data/app/models/spree/image.rb +3 -3
  31. data/app/models/spree/inventory_unit.rb +5 -2
  32. data/app/models/spree/legacy_user.rb +1 -2
  33. data/app/models/spree/line_item.rb +4 -1
  34. data/app/models/spree/linkable/homepage.rb +3 -0
  35. data/app/models/spree/linkable/uri.rb +3 -0
  36. data/app/models/spree/log_entry.rb +4 -0
  37. data/app/models/spree/menu.rb +3 -0
  38. data/app/models/spree/menu_item.rb +7 -11
  39. data/app/models/spree/option_type.rb +4 -0
  40. data/app/models/spree/option_value.rb +5 -0
  41. data/app/models/spree/order/address_book.rb +1 -0
  42. data/app/models/spree/order/store_credit.rb +0 -8
  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/lib/spree/core/search/base.rb +9 -5
  127. data/lib/spree/core/version.rb +1 -1
  128. data/lib/spree/core.rb +25 -5
  129. data/lib/spree/permitted_attributes.rb +9 -7
  130. data/lib/spree/testing_support/common_rake.rb +1 -0
  131. data/lib/spree/testing_support/factories/favicon_image_factory.rb +9 -0
  132. data/lib/spree/testing_support/factories/icon_factory.rb +3 -1
  133. data/lib/spree/testing_support/factories/image_factory.rb +3 -1
  134. data/lib/spree/testing_support/factories/menu_item_factory.rb +1 -1
  135. data/lib/spree/testing_support/factories/order_factory.rb +2 -1
  136. data/lib/spree/testing_support/factories/product_factory.rb +6 -1
  137. data/lib/spree/testing_support/factories/product_property_factory.rb +1 -0
  138. data/lib/spree/testing_support/factories/refund_factory.rb +1 -1
  139. data/lib/spree/testing_support/factories/return_authorization_factory.rb +1 -1
  140. data/lib/spree/testing_support/factories/role_factory.rb +1 -1
  141. data/lib/spree/testing_support/factories/shipping_category_factory.rb +1 -1
  142. data/lib/spree/testing_support/factories/stock_location_factory.rb +3 -2
  143. data/lib/spree/testing_support/factories/store_factory.rb +1 -1
  144. data/lib/spree/testing_support/factories/taxon_image_factory.rb +3 -1
  145. data/lib/spree/testing_support/factories/user_factory.rb +4 -0
  146. data/lib/spree/testing_support/factories/variant_factory.rb +4 -0
  147. data/lib/spree_core.rb +2 -1
  148. data/lib/tasks/core.rake +12 -0
  149. data/spree_core.gemspec +2 -3
  150. metadata +64 -53
  151. data/app/models/friendly_id/slug_decorator.rb +0 -9
  152. data/app/models/spree/app_configuration.rb +0 -86
  153. data/app/models/spree/order_contents.rb +0 -31
  154. data/lib/friendly_id/slug_rails5_patch.rb +0 -11
  155. data/lib/spree/core/app_dependencies.rb +0 -126
  156. /data/{app/models/spree → lib/spree/core}/preferences/preferable_class_methods.rb +0 -0
  157. /data/{app/models/spree → lib/spree/core}/preferences/scoped_store.rb +0 -0
  158. /data/{app/models/spree → lib/spree/core}/preferences/store.rb +0 -0
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