spree_core 5.4.0.beta → 5.4.0.beta3
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.
- checksums.yaml +4 -4
- data/app/finders/spree/products/find.rb +2 -42
- data/app/helpers/spree/base_helper.rb +1 -54
- data/app/mailers/spree/base_mailer.rb +4 -3
- data/app/models/concerns/spree/adjustment_source.rb +0 -8
- data/app/models/concerns/spree/admin_user_methods.rb +0 -2
- data/app/models/concerns/spree/image_methods.rb +4 -0
- data/app/models/concerns/spree/metadata.rb +10 -0
- data/app/models/concerns/spree/product_scopes.rb +21 -49
- data/app/models/concerns/spree/stores/markets.rb +7 -7
- data/app/models/concerns/spree/vat_price_calculation.rb +2 -2
- data/app/models/spree/ability.rb +5 -5
- data/app/models/spree/address.rb +3 -2
- data/app/models/spree/adjustable/promotion_accumulator.rb +1 -1
- data/app/models/spree/adjustment.rb +1 -20
- data/app/models/spree/api_key.rb +60 -2
- data/app/models/spree/country.rb +7 -3
- data/app/models/spree/credit_card.rb +0 -27
- data/app/models/spree/current.rb +38 -2
- data/app/models/spree/exports/products.rb +0 -6
- data/app/models/spree/gateway/bogus.rb +9 -9
- data/app/models/spree/gateway.rb +0 -3
- data/app/models/spree/gift_card_batch.rb +4 -0
- data/app/models/spree/image/configuration/active_storage.rb +0 -2
- data/app/models/spree/image.rb +7 -31
- data/app/models/spree/log_entry.rb +8 -5
- data/app/models/spree/market.rb +1 -2
- data/app/models/spree/market_country.rb +17 -0
- data/app/models/spree/newsletter_subscriber.rb +0 -3
- data/app/models/spree/order/checkout.rb +0 -18
- data/app/models/spree/order.rb +22 -16
- data/app/models/spree/payment/gateway_options.rb +2 -2
- data/app/models/spree/payment/processing.rb +5 -5
- data/app/models/spree/payment.rb +1 -1
- data/app/models/spree/payment_connection_error.rb +3 -0
- data/app/models/spree/payment_method/check.rb +1 -1
- data/app/models/spree/payment_method/store_credit.rb +5 -5
- data/app/models/spree/payment_response.rb +70 -0
- data/app/models/spree/permission_sets/default_customer.rb +0 -5
- data/app/models/spree/permission_sets/product_display.rb +0 -2
- data/app/models/spree/permission_sets/product_management.rb +0 -2
- data/app/models/spree/product.rb +5 -85
- data/app/models/spree/promotion.rb +2 -14
- data/app/models/spree/promotion_handler/coupon.rb +3 -3
- data/app/models/spree/prototype.rb +0 -3
- data/app/models/spree/refund.rb +6 -2
- data/app/models/spree/reimbursement.rb +0 -2
- data/app/models/spree/shipment.rb +0 -1
- data/app/models/spree/shipment_handler.rb +0 -2
- data/app/models/spree/shipping_category.rb +3 -3
- data/app/models/spree/store.rb +10 -49
- data/app/models/spree/store_credit.rb +4 -0
- data/app/models/spree/tax_category.rb +1 -11
- data/app/models/spree/taxon.rb +0 -16
- data/app/models/spree/variant.rb +2 -40
- data/app/models/spree/zone.rb +1 -4
- data/app/services/spree/cart/add_item.rb +8 -4
- data/app/services/spree/cart/create.rb +13 -2
- data/app/services/spree/newsletter/subscribe.rb +2 -2
- data/app/services/spree/products/duplicator.rb +0 -12
- data/app/services/spree/products/prepare_nested_attributes.rb +0 -12
- data/app/subscribers/spree/invitation_email_subscriber.rb +1 -1
- data/config/locales/en.yml +4 -20
- data/db/migrate/20210914000000_spree_four_three.rb +0 -38
- data/db/migrate/20210915064329_add_metadata_to_spree_multiple_tables.rb +0 -1
- data/db/migrate/20260226000000_add_locale_to_spree_orders.rb +5 -0
- data/db/migrate/20260226100000_add_token_digest_to_spree_api_keys.rb +21 -0
- data/lib/spree/core/configuration.rb +0 -3
- data/lib/spree/core/controller_helpers/strong_parameters.rb +1 -2
- data/lib/spree/core/dependencies.rb +2 -10
- data/lib/spree/core/engine.rb +0 -13
- data/lib/spree/core/pricing/resolver.rb +1 -9
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core.rb +10 -26
- data/lib/spree/permitted_attributes.rb +2 -14
- data/lib/spree/testing_support/factories/order_factory.rb +1 -0
- data/lib/spree/testing_support/factories/payment_method_factory.rb +1 -6
- data/lib/spree/testing_support/factories/product_factory.rb +0 -7
- data/lib/spree/testing_support/factories/prototype_factory.rb +0 -2
- data/lib/tasks/cli.rake +50 -0
- data/lib/tasks/core.rake +0 -265
- metadata +9 -111
- data/app/finders/spree/posts/find.rb +0 -137
- data/app/finders/spree/product_properties/find_available.rb +0 -20
- data/app/helpers/spree/mail_helper.rb +0 -27
- data/app/jobs/spree/api_key_touch_job.rb +0 -9
- data/app/mailers/spree/test_mailer.rb +0 -8
- data/app/models/action_text/video_embed.rb +0 -13
- data/app/models/concerns/spree/filter_param.rb +0 -21
- data/app/models/concerns/spree/has_one_link.rb +0 -42
- data/app/models/concerns/spree/linkable.rb +0 -9
- data/app/models/concerns/spree/previewable.rb +0 -17
- data/app/models/spree/data_feed/google.rb +0 -15
- data/app/models/spree/data_feed.rb +0 -42
- data/app/models/spree/gateway/bogus_simple.rb +0 -24
- data/app/models/spree/newsletter_subscriber/emails.rb +0 -12
- data/app/models/spree/order/emails.rb +0 -24
- data/app/models/spree/post.rb +0 -108
- data/app/models/spree/post_category.rb +0 -46
- data/app/models/spree/product_property.rb +0 -51
- data/app/models/spree/property.rb +0 -86
- data/app/models/spree/property_prototype.rb +0 -9
- data/app/models/spree/reimbursement/emails.rb +0 -11
- data/app/models/spree/shipment/emails.rb +0 -11
- data/app/models/spree/store_favicon_image.rb +0 -20
- data/app/models/spree/store_logo.rb +0 -4
- data/app/models/spree/store_mailer_logo.rb +0 -7
- data/app/models/spree/taxon_image/configuration/active_storage.rb +0 -26
- data/app/models/spree/taxon_image.rb +0 -28
- data/app/presenters/spree/filters/properties_presenter.rb +0 -23
- data/app/presenters/spree/filters/property_presenter.rb +0 -42
- data/app/services/spree/data_feeds/google/optional_attributes.rb +0 -23
- data/app/services/spree/data_feeds/google/optional_sub_attributes.rb +0 -21
- data/app/services/spree/data_feeds/google/products_list.rb +0 -14
- data/app/services/spree/data_feeds/google/required_attributes.rb +0 -68
- data/app/services/spree/data_feeds/google/rss.rb +0 -109
- data/app/sorters/spree/posts/sort.rb +0 -40
- data/app/views/action_text/video_embeds/_thumbnail.html.erb +0 -1
- data/app/views/action_text/video_embeds/_video_embed.html.erb +0 -3
- data/app/views/layouts/action_text/contents/_content.html.erb +0 -3
- data/app/views/spree/test_mailer/test_email.html.erb +0 -40
- data/app/views/spree/test_mailer/test_email.text.erb +0 -4
- data/config/initializers/oembed.rb +0 -1
- data/db/migrate/20221229132350_create_spree_data_feed_settings.rb +0 -14
- data/db/migrate/20230109084253_create_product_property_translations.rb +0 -24
- data/db/migrate/20230109105943_create_property_translations.rb +0 -24
- data/db/migrate/20230415155958_rename_data_feed_settings_table.rb +0 -5
- data/db/migrate/20230415160828_rename_data_feed_table_columns.rb +0 -7
- data/db/migrate/20230415161226_add_indexes_to_data_feeds_table.rb +0 -5
- data/db/migrate/20230512094803_rename_data_feeds_column_provider_to_type.rb +0 -5
- data/db/migrate/20240914153106_add_display_on_to_spree_properties.rb +0 -5
- data/db/migrate/20240915144935_add_position_to_spree_properties.rb +0 -6
- data/db/migrate/20250121160028_create_spree_posts_and_spree_post_categories.rb +0 -33
- data/db/migrate/20250127083740_add_kind_to_spree_properties.rb +0 -5
- data/db/migrate/20250217171018_create_action_text_video_embeds.rb +0 -11
- data/db/migrate/20250305121657_remove_spree_posts_indices.rb +0 -7
- data/db/migrate/20250730154601_add_unique_index_on_spree_properties_name.rb +0 -24
- data/db/sample_data/posts.rb +0 -7
- data/lib/generators/spree/cursor_rules/cursor_rules_generator.rb +0 -19
- data/lib/generators/spree/cursor_rules/templates/spree_rules.mdc +0 -387
- data/lib/spree/core/controller_helpers/search.rb +0 -17
- data/lib/spree/core/importer/order.rb +0 -244
- data/lib/spree/core/importer/product.rb +0 -67
- data/lib/spree/core/importer.rb +0 -9
- data/lib/spree/core/product_filters.rb +0 -218
- data/lib/spree/core/query_filters/comparable.rb +0 -50
- data/lib/spree/core/query_filters/date.rb +0 -8
- data/lib/spree/core/query_filters/number.rb +0 -8
- data/lib/spree/core/query_filters/text.rb +0 -36
- data/lib/spree/core/query_filters.rb +0 -11
- data/lib/spree/core/search/base.rb +0 -144
- data/lib/spree/testing_support/factories/favicon_image_factory.rb +0 -9
- data/lib/spree/testing_support/factories/google_data_feed_factory.rb +0 -7
- data/lib/spree/testing_support/factories/post_category_factory.rb +0 -7
- data/lib/spree/testing_support/factories/post_factory.rb +0 -22
- data/lib/spree/testing_support/factories/product_property_factory.rb +0 -7
- data/lib/spree/testing_support/factories/property_factory.rb +0 -28
- data/lib/spree/testing_support/factories/taxon_image_factory.rb +0 -9
- data/lib/spree/testing_support/flash.rb +0 -25
- data/lib/spree/testing_support/flatpickr_capybara.rb +0 -124
- data/lib/tasks/exchanges.rake +0 -66
data/app/models/spree/variant.rb
CHANGED
|
@@ -88,8 +88,6 @@ module Spree
|
|
|
88
88
|
after_create :increment_product_variant_count, unless: :is_master?
|
|
89
89
|
after_destroy :decrement_product_variant_count, unless: :is_master?
|
|
90
90
|
|
|
91
|
-
after_touch :clear_in_stock_cache
|
|
92
|
-
|
|
93
91
|
scope :in_stock, -> { left_joins(:stock_items).where("#{Spree::Variant.table_name}.track_inventory = ? OR #{Spree::StockItem.table_name}.count_on_hand > ?", false, 0) }
|
|
94
92
|
scope :backorderable, -> { left_joins(:stock_items).where(spree_stock_items: { backorderable: true }) }
|
|
95
93
|
scope :in_stock_or_backorderable, -> { in_stock.or(backorderable) }
|
|
@@ -281,14 +279,6 @@ module Spree
|
|
|
281
279
|
is_master? ? name + ' - Master' : name + ' - ' + options_text
|
|
282
280
|
end
|
|
283
281
|
|
|
284
|
-
# use deleted? rather than checking the attribute directly. this
|
|
285
|
-
# allows extensions to override deleted? if they want to provide
|
|
286
|
-
# their own definition.
|
|
287
|
-
# @return [Boolean] true if the variant is deleted.
|
|
288
|
-
def deleted?
|
|
289
|
-
!!deleted_at
|
|
290
|
-
end
|
|
291
|
-
|
|
292
282
|
# Returns true if the variant has images.
|
|
293
283
|
# Uses loaded association when available, otherwise falls back to counter cache.
|
|
294
284
|
# @return [Boolean]
|
|
@@ -532,36 +522,16 @@ module Spree
|
|
|
532
522
|
@compare_at_price ||= price_in(cost_currency).try(:compare_at_amount)
|
|
533
523
|
end
|
|
534
524
|
|
|
535
|
-
# Returns the name and sku of the variant.
|
|
536
|
-
# @return [String] the name and sku of the variant
|
|
537
|
-
def name_and_sku
|
|
538
|
-
"#{name} - #{sku}"
|
|
539
|
-
end
|
|
540
|
-
|
|
541
|
-
# Returns the sku and options text of the variant.
|
|
542
|
-
# @return [String] the sku and options text of the variant
|
|
543
|
-
def sku_and_options_text
|
|
544
|
-
"#{sku} #{options_text}".strip
|
|
545
|
-
end
|
|
546
|
-
|
|
547
525
|
# Returns true if the variant is in stock.
|
|
548
526
|
# @return [Boolean] true if the variant is in stock
|
|
549
527
|
def in_stock?
|
|
550
|
-
@in_stock ||=
|
|
551
|
-
total_on_hand.positive?
|
|
552
|
-
else
|
|
553
|
-
Rails.cache.fetch(in_stock_cache_key, version: cache_version) do
|
|
554
|
-
total_on_hand.positive?
|
|
555
|
-
end
|
|
556
|
-
end
|
|
528
|
+
@in_stock ||= total_on_hand.positive?
|
|
557
529
|
end
|
|
558
530
|
|
|
559
531
|
# Returns true if the variant is backorderable.
|
|
560
532
|
# @return [Boolean] true if the variant is backorderable
|
|
561
533
|
def backorderable?
|
|
562
|
-
@backorderable ||=
|
|
563
|
-
quantifier.backorderable?
|
|
564
|
-
end
|
|
534
|
+
@backorderable ||= quantifier.backorderable?
|
|
565
535
|
end
|
|
566
536
|
|
|
567
537
|
def on_sale?(currency)
|
|
@@ -619,10 +589,6 @@ module Spree
|
|
|
619
589
|
digitals.any?
|
|
620
590
|
end
|
|
621
591
|
|
|
622
|
-
def clear_in_stock_cache
|
|
623
|
-
Rails.cache.delete(in_stock_cache_key)
|
|
624
|
-
end
|
|
625
|
-
|
|
626
592
|
private
|
|
627
593
|
|
|
628
594
|
def ensure_not_in_complete_orders
|
|
@@ -674,10 +640,6 @@ module Spree
|
|
|
674
640
|
end
|
|
675
641
|
end
|
|
676
642
|
|
|
677
|
-
def in_stock_cache_key
|
|
678
|
-
"variant-#{id}-in_stock"
|
|
679
|
-
end
|
|
680
|
-
|
|
681
643
|
def disable_sku_validation?
|
|
682
644
|
Spree::Config[:disable_sku_validation]
|
|
683
645
|
end
|
data/app/models/spree/zone.rb
CHANGED
|
@@ -27,9 +27,7 @@ module Spree
|
|
|
27
27
|
self.whitelisted_ransackable_attributes = ['description']
|
|
28
28
|
|
|
29
29
|
def self.default_tax
|
|
30
|
-
|
|
31
|
-
find_by(default_tax: true)
|
|
32
|
-
end
|
|
30
|
+
Spree::Current.default_tax_zone
|
|
33
31
|
end
|
|
34
32
|
|
|
35
33
|
def self.potential_matching_zones(zone)
|
|
@@ -186,7 +184,6 @@ module Spree
|
|
|
186
184
|
|
|
187
185
|
def remove_previous_default
|
|
188
186
|
Spree::Zone.with_default_tax.where.not(id: id).update_all(default_tax: false)
|
|
189
|
-
Rails.cache.delete('default_zone')
|
|
190
187
|
end
|
|
191
188
|
|
|
192
189
|
def set_zone_members(ids, type)
|
|
@@ -3,7 +3,7 @@ module Spree
|
|
|
3
3
|
class AddItem
|
|
4
4
|
prepend Spree::ServiceModule::Base
|
|
5
5
|
|
|
6
|
-
def call(order:, variant:, quantity: nil, public_metadata: {}, private_metadata: {}, options: {})
|
|
6
|
+
def call(order:, variant:, quantity: nil, metadata: {}, public_metadata: {}, private_metadata: {}, options: {})
|
|
7
7
|
ApplicationRecord.transaction do
|
|
8
8
|
run :add_to_line_item
|
|
9
9
|
run Spree.cart_recalculate_service
|
|
@@ -12,7 +12,7 @@ module Spree
|
|
|
12
12
|
|
|
13
13
|
private
|
|
14
14
|
|
|
15
|
-
def add_to_line_item(order:, variant:, quantity: nil, public_metadata: {}, private_metadata: {}, options: {})
|
|
15
|
+
def add_to_line_item(order:, variant:, quantity: nil, metadata: {}, public_metadata: {}, private_metadata: {}, options: {})
|
|
16
16
|
options ||= {}
|
|
17
17
|
quantity ||= 1
|
|
18
18
|
|
|
@@ -34,8 +34,12 @@ module Spree
|
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
line_item.target_shipment = options[:shipment] if options.key? :shipment
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
|
|
38
|
+
# `metadata` is the primary API param (maps to private_metadata).
|
|
39
|
+
# Legacy `public_metadata`/`private_metadata` params kept for backward compatibility.
|
|
40
|
+
resolved_metadata = metadata.presence || private_metadata
|
|
41
|
+
line_item.metadata = resolved_metadata.to_h if resolved_metadata.present?
|
|
42
|
+
line_item.public_metadata = public_metadata.to_h if public_metadata.present?
|
|
39
43
|
|
|
40
44
|
return failure(line_item) unless line_item.save
|
|
41
45
|
|
|
@@ -3,18 +3,29 @@ module Spree
|
|
|
3
3
|
class Create
|
|
4
4
|
prepend Spree::ServiceModule::Base
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
# @param user [Spree.user_class, nil] the user to associate with the cart
|
|
7
|
+
# @param store [Spree::Store] the store for the cart
|
|
8
|
+
# @param currency [String, nil] ISO currency code, defaults to store's default currency
|
|
9
|
+
# @param locale [String, nil] locale for the cart (e.g. 'en', 'fr'), defaults to Spree::Current.locale
|
|
10
|
+
# @param public_metadata [Hash] public metadata for the order
|
|
11
|
+
# @param private_metadata [Hash] private metadata for the order
|
|
12
|
+
# @param order_params [Hash] additional order attributes
|
|
13
|
+
# @return [Spree::ServiceModule::Result]
|
|
14
|
+
def call(user:, store:, currency:, locale: nil, metadata: {}, public_metadata: {}, private_metadata: {}, order_params: {})
|
|
7
15
|
order_params ||= {}
|
|
8
16
|
|
|
9
17
|
# we cannot create an order without store
|
|
10
18
|
return failure(:store_is_required) if store.nil?
|
|
11
19
|
|
|
20
|
+
resolved_metadata = metadata.presence || private_metadata
|
|
21
|
+
|
|
12
22
|
default_params = {
|
|
13
23
|
user: user,
|
|
14
24
|
currency: currency || store.default_currency,
|
|
25
|
+
locale: locale || Spree::Current.locale,
|
|
15
26
|
token: Spree::GenerateToken.new.call(Spree::Order),
|
|
16
27
|
public_metadata: public_metadata.to_h,
|
|
17
|
-
private_metadata:
|
|
28
|
+
private_metadata: resolved_metadata.to_h
|
|
18
29
|
}
|
|
19
30
|
|
|
20
31
|
order = store.orders.create!(default_params.merge(order_params))
|
|
@@ -19,8 +19,8 @@ module Spree
|
|
|
19
19
|
end
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
-
#
|
|
23
|
-
subscriber.
|
|
22
|
+
# publish event to trigger email delivery via subscriber
|
|
23
|
+
subscriber.publish_event('newsletter_subscriber.subscribed') unless subscriber.verified?
|
|
24
24
|
subscriber
|
|
25
25
|
end
|
|
26
26
|
|
|
@@ -13,8 +13,6 @@ module Spree
|
|
|
13
13
|
new_product.send(:duplicate_extra, product) if new_product.respond_to?(:duplicate_extra)
|
|
14
14
|
new_product.save
|
|
15
15
|
|
|
16
|
-
new_product.product_properties = duplicate_properties(product.product_properties) if new_product.persisted?
|
|
17
|
-
|
|
18
16
|
new_product.persisted? ? success(new_product) : failure(new_product, duplicate_error_message(new_product))
|
|
19
17
|
end
|
|
20
18
|
|
|
@@ -89,16 +87,6 @@ module Spree
|
|
|
89
87
|
new_image
|
|
90
88
|
end
|
|
91
89
|
|
|
92
|
-
def duplicate_properties(product_properties)
|
|
93
|
-
product_properties.map do |prop|
|
|
94
|
-
new_prop = prop.dup
|
|
95
|
-
new_prop.product = nil
|
|
96
|
-
new_prop.created_at = nil
|
|
97
|
-
new_prop.updated_at = nil
|
|
98
|
-
new_prop
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
|
|
102
90
|
def sku_generator(sku)
|
|
103
91
|
return '' if sku.blank?
|
|
104
92
|
|
|
@@ -61,18 +61,6 @@ module Spree
|
|
|
61
61
|
end
|
|
62
62
|
end
|
|
63
63
|
|
|
64
|
-
# mark resource properties to be removed
|
|
65
|
-
# when value is left blank
|
|
66
|
-
if params[:product_properties_attributes].present?
|
|
67
|
-
params[:product_properties_attributes].each do |key, product_property_params|
|
|
68
|
-
next unless product_property_params[:id].present?
|
|
69
|
-
next if product_property_params[:value].present?
|
|
70
|
-
|
|
71
|
-
# https://api.rubyonrails.org/v7.1.3.4/classes/ActiveRecord/NestedAttributes/ClassMethods.html
|
|
72
|
-
params[:product_properties_attributes][key]['_destroy'] = '1'
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
|
|
76
64
|
# ensure there is at least one store
|
|
77
65
|
params[:store_ids] = [store.id] if params[:store_ids].blank?
|
|
78
66
|
|
data/config/locales/en.yml
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
---
|
|
2
2
|
en:
|
|
3
|
-
action_text:
|
|
4
|
-
video_embed:
|
|
5
|
-
not_found: Can't embed a video using the provided URL
|
|
6
3
|
activemodel:
|
|
7
4
|
errors:
|
|
8
5
|
messages:
|
|
@@ -295,6 +292,7 @@ en:
|
|
|
295
292
|
spree/market_country:
|
|
296
293
|
attributes:
|
|
297
294
|
country:
|
|
295
|
+
already_in_market: is already assigned to another market in this store
|
|
298
296
|
not_in_shipping_zone: is not covered by any shipping zone. Please set up a shipping zone first.
|
|
299
297
|
spree/payment:
|
|
300
298
|
attributes:
|
|
@@ -737,8 +735,6 @@ en:
|
|
|
737
735
|
all_adjustments_opened: All adjustments successfully opened!
|
|
738
736
|
all_departments: All departments
|
|
739
737
|
all_items_have_been_returned: All items have been returned
|
|
740
|
-
all_posts: All posts
|
|
741
|
-
all_posts_with_tag: All posts with tag
|
|
742
738
|
all_products: All products
|
|
743
739
|
all_rights_reserved: All rights reserved
|
|
744
740
|
all_time: All time
|
|
@@ -805,8 +801,6 @@ en:
|
|
|
805
801
|
bill_address: Bill Address
|
|
806
802
|
billing: Billing
|
|
807
803
|
billing_address: Billing Address
|
|
808
|
-
blog: Blog
|
|
809
|
-
blogs_posts: Blogs posts
|
|
810
804
|
body_tag_end: Body tag end
|
|
811
805
|
body_tag_start: Body tag start
|
|
812
806
|
both: Both
|
|
@@ -1000,10 +994,6 @@ en:
|
|
|
1000
994
|
default_country_help: Country that will be used for the default shipping and billing addresses on Checkout
|
|
1001
995
|
default_currency: Default currency
|
|
1002
996
|
default_locale: Default locale
|
|
1003
|
-
default_post_categories:
|
|
1004
|
-
articles: Articles
|
|
1005
|
-
news: News
|
|
1006
|
-
resources: Resources
|
|
1007
997
|
default_refund_amount: Default Refund Amount
|
|
1008
998
|
default_shipping_address: Default shipping address
|
|
1009
999
|
default_stock_location_name: Shop location
|
|
@@ -1334,7 +1324,9 @@ en:
|
|
|
1334
1324
|
list: List
|
|
1335
1325
|
live: Live
|
|
1336
1326
|
loading: Loading
|
|
1327
|
+
locale: Locale
|
|
1337
1328
|
locale_changed: Locale Changed
|
|
1329
|
+
locale_not_supported_by_store: is not supported by this store
|
|
1338
1330
|
location: Location
|
|
1339
1331
|
lock: Lock
|
|
1340
1332
|
log_entries: Log Entries
|
|
@@ -1438,8 +1430,6 @@ en:
|
|
|
1438
1430
|
new_payment: New Payment
|
|
1439
1431
|
new_payment_method: New Payment Method
|
|
1440
1432
|
new_policy: New Policy
|
|
1441
|
-
new_post: New Post
|
|
1442
|
-
new_post_category: New Post Category
|
|
1443
1433
|
new_price_list: New Price List
|
|
1444
1434
|
new_product: New Product
|
|
1445
1435
|
new_promotion: New Promotion
|
|
@@ -1742,8 +1732,6 @@ en:
|
|
|
1742
1732
|
please_enter_reasonable_quantity: Please enter a reasonable quantity.
|
|
1743
1733
|
policies: Policies
|
|
1744
1734
|
populate_get_error: Something went wrong. Please try adding the item again.
|
|
1745
|
-
post_categories: Post categories
|
|
1746
|
-
posts: Posts
|
|
1747
1735
|
powered_by: Powered by
|
|
1748
1736
|
pre_tax_amount: Pre-Tax Amount
|
|
1749
1737
|
pre_tax_refund_amount: Pre-Tax Refund Amount
|
|
@@ -2302,6 +2290,7 @@ en:
|
|
|
2302
2290
|
tax_category: Tax Category
|
|
2303
2291
|
tax_code: Tax Code
|
|
2304
2292
|
tax_included: Tax (incl.)
|
|
2293
|
+
tax_inclusive: Tax inclusive
|
|
2305
2294
|
tax_rate_amount_explanation: Tax rates are a decimal amount to aid in calculations, (i.e. if the tax rate is 5% then enter 0.05)
|
|
2306
2295
|
tax_rates: Tax Rates
|
|
2307
2296
|
taxes: Taxes
|
|
@@ -2325,11 +2314,6 @@ en:
|
|
|
2325
2314
|
taxons: Taxons
|
|
2326
2315
|
terms_of_service: Terms of Service
|
|
2327
2316
|
test: Test
|
|
2328
|
-
test_mailer:
|
|
2329
|
-
test_email:
|
|
2330
|
-
greeting: Congratulations!
|
|
2331
|
-
message: If you have received this email, then your email settings are correct.
|
|
2332
|
-
subject: Test Mail
|
|
2333
2317
|
test_mode: Test Mode
|
|
2334
2318
|
text_alignment: Text alignment
|
|
2335
2319
|
thank_you_for_your_order: Thank you for your business. Please print out a copy of this confirmation page for your records.
|
|
@@ -407,22 +407,6 @@ class SpreeFourThree < ActiveRecord::Migration[5.2]
|
|
|
407
407
|
t.index ["promotion_rule_id", "product_id"], name: "index_products_promotion_rules_on_promotion_rule_and_product"
|
|
408
408
|
end
|
|
409
409
|
|
|
410
|
-
create_table "spree_product_properties", force: :cascade do |t|
|
|
411
|
-
t.string "value"
|
|
412
|
-
t.bigint "product_id"
|
|
413
|
-
t.bigint "property_id"
|
|
414
|
-
t.datetime "created_at", precision: 6, null: false
|
|
415
|
-
t.datetime "updated_at", precision: 6, null: false
|
|
416
|
-
t.integer "position", default: 0
|
|
417
|
-
t.boolean "show_property", default: true
|
|
418
|
-
t.string "filter_param"
|
|
419
|
-
t.index ["filter_param"], name: "index_spree_product_properties_on_filter_param"
|
|
420
|
-
t.index ["position"], name: "index_spree_product_properties_on_position"
|
|
421
|
-
t.index ["product_id"], name: "index_product_properties_on_product_id"
|
|
422
|
-
t.index ["property_id", "product_id"], name: "index_spree_product_properties_on_property_id_and_product_id", unique: true
|
|
423
|
-
t.index ["property_id"], name: "index_spree_product_properties_on_property_id"
|
|
424
|
-
end
|
|
425
|
-
|
|
426
410
|
create_table "spree_products", force: :cascade do |t|
|
|
427
411
|
t.string "name", default: "", null: false
|
|
428
412
|
t.text "description"
|
|
@@ -563,28 +547,6 @@ class SpreeFourThree < ActiveRecord::Migration[5.2]
|
|
|
563
547
|
t.index ["store_id"], name: "index_spree_promotions_stores_on_store_id"
|
|
564
548
|
end
|
|
565
549
|
|
|
566
|
-
create_table "spree_properties", force: :cascade do |t|
|
|
567
|
-
t.string "name"
|
|
568
|
-
t.string "presentation", null: false
|
|
569
|
-
t.datetime "created_at", precision: 6, null: false
|
|
570
|
-
t.datetime "updated_at", precision: 6, null: false
|
|
571
|
-
t.boolean "filterable", default: false, null: false
|
|
572
|
-
t.string "filter_param"
|
|
573
|
-
t.index ["filter_param"], name: "index_spree_properties_on_filter_param"
|
|
574
|
-
t.index ["filterable"], name: "index_spree_properties_on_filterable"
|
|
575
|
-
t.index ["name"], name: "index_spree_properties_on_name"
|
|
576
|
-
end
|
|
577
|
-
|
|
578
|
-
create_table "spree_property_prototypes", force: :cascade do |t|
|
|
579
|
-
t.bigint "prototype_id"
|
|
580
|
-
t.bigint "property_id"
|
|
581
|
-
t.datetime "created_at"
|
|
582
|
-
t.datetime "updated_at"
|
|
583
|
-
t.index ["property_id"], name: "index_spree_property_prototypes_on_property_id"
|
|
584
|
-
t.index ["prototype_id", "property_id"], name: "index_property_prototypes_on_prototype_id_and_property_id", unique: true
|
|
585
|
-
t.index ["prototype_id"], name: "index_spree_property_prototypes_on_prototype_id"
|
|
586
|
-
end
|
|
587
|
-
|
|
588
550
|
create_table "spree_prototype_taxons", force: :cascade do |t|
|
|
589
551
|
t.bigint "taxon_id"
|
|
590
552
|
t.bigint "prototype_id"
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
class AddTokenDigestToSpreeApiKeys < ActiveRecord::Migration[7.2]
|
|
2
|
+
def change
|
|
3
|
+
add_column :spree_api_keys, :token_digest, :string
|
|
4
|
+
add_column :spree_api_keys, :token_prefix, :string
|
|
5
|
+
|
|
6
|
+
add_index :spree_api_keys, :token_digest, unique: true
|
|
7
|
+
|
|
8
|
+
# Replace the unconditional unique index on token with one that only covers
|
|
9
|
+
# non-NULL values (publishable keys). Secret keys store token as NULL
|
|
10
|
+
# and use token_digest for lookups instead.
|
|
11
|
+
change_column_null :spree_api_keys, :token, true
|
|
12
|
+
remove_index :spree_api_keys, :token
|
|
13
|
+
if ActiveRecord::Base.connection.adapter_name == 'Mysql2'
|
|
14
|
+
# MySQL doesn't support partial indexes, but treats NULL as distinct
|
|
15
|
+
# in unique indexes so multiple secret keys with NULL token are allowed
|
|
16
|
+
add_index :spree_api_keys, :token, unique: true
|
|
17
|
+
else
|
|
18
|
+
add_index :spree_api_keys, :token, unique: true, where: 'token IS NOT NULL'
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
# a.get :color
|
|
16
16
|
# a.preferred_color
|
|
17
17
|
#
|
|
18
|
-
require 'spree/core/search/base'
|
|
19
18
|
require 'spree/core/preferences/configuration' # for compatibility reasons
|
|
20
19
|
require 'spree/core/preferences/runtime_configuration'
|
|
21
20
|
require 'spree/core/preferences/preferable'
|
|
@@ -83,7 +82,6 @@ module Spree
|
|
|
83
82
|
preference :mailer_logo, :string, deprecated: true
|
|
84
83
|
preference :max_level_in_taxons_menu, :integer, deprecated: true
|
|
85
84
|
preference :non_expiring_credit_types, :array, default: []
|
|
86
|
-
preference :product_properties_enabled, :boolean, default: false # enable legacy product properties
|
|
87
85
|
preference :products_per_page, :integer, default: 12
|
|
88
86
|
preference :require_master_price, :boolean, default: false
|
|
89
87
|
preference :restock_inventory, :boolean, default: true # Determines if a return item is restocked automatically once it has been received
|
|
@@ -112,7 +110,6 @@ module Spree
|
|
|
112
110
|
preference :gift_card_batch_web_limit, :integer, default: 500 # number of gift card codes to be generated in the web process, more than this will be generated in a background job
|
|
113
111
|
preference :gift_card_batch_limit, :integer, default: 50_000
|
|
114
112
|
|
|
115
|
-
attr_writer :searcher_class
|
|
116
113
|
end
|
|
117
114
|
end
|
|
118
115
|
end
|
|
@@ -34,8 +34,7 @@ module Spree
|
|
|
34
34
|
def permitted_product_attributes
|
|
35
35
|
permitted_attributes.product_attributes + [
|
|
36
36
|
variants_attributes: permitted_variant_attributes + ['id', :_destroy],
|
|
37
|
-
master_attributes: permitted_variant_attributes + ['id']
|
|
38
|
-
product_properties_attributes: permitted_product_properties_attributes + ['id', :_destroy]
|
|
37
|
+
master_attributes: permitted_variant_attributes + ['id']
|
|
39
38
|
]
|
|
40
39
|
end
|
|
41
40
|
|
|
@@ -56,9 +56,8 @@ module Spree
|
|
|
56
56
|
# sorter
|
|
57
57
|
collection_sorter: 'Spree::BaseSorter',
|
|
58
58
|
order_sorter: 'Spree::BaseSorter',
|
|
59
|
+
posts_sorter: nil,
|
|
59
60
|
products_sorter: 'Spree::Products::Sort',
|
|
60
|
-
posts_sorter: 'Spree::Posts::Sort',
|
|
61
|
-
|
|
62
61
|
# paginator
|
|
63
62
|
collection_paginator: 'Spree::Shared::Paginate',
|
|
64
63
|
|
|
@@ -87,13 +86,6 @@ module Spree
|
|
|
87
86
|
|
|
88
87
|
payment_create_service: 'Spree::Payments::Create',
|
|
89
88
|
|
|
90
|
-
# data feeds
|
|
91
|
-
data_feeds_google_rss_service: 'Spree::DataFeeds::Google::Rss',
|
|
92
|
-
data_feeds_google_optional_attributes_service: 'Spree::DataFeeds::Google::OptionalAttributes',
|
|
93
|
-
data_feeds_google_required_attributes_service: 'Spree::DataFeeds::Google::RequiredAttributes',
|
|
94
|
-
data_feeds_google_optional_sub_attributes_service: 'Spree::DataFeeds::Google::OptionalSubAttributes',
|
|
95
|
-
data_feeds_google_products_list: 'Spree::DataFeeds::Google::ProductsList',
|
|
96
|
-
|
|
97
89
|
# finders
|
|
98
90
|
address_finder: 'Spree::Addresses::Find',
|
|
99
91
|
country_finder: 'Spree::Countries::Find',
|
|
@@ -103,8 +95,8 @@ module Spree
|
|
|
103
95
|
current_store_finder: 'Spree::Stores::FindDefault',
|
|
104
96
|
completed_order_finder: 'Spree::Orders::FindComplete',
|
|
105
97
|
credit_card_finder: 'Spree::CreditCards::Find',
|
|
98
|
+
posts_finder: nil,
|
|
106
99
|
products_finder: 'Spree::Products::Find',
|
|
107
|
-
posts_finder: 'Spree::Posts::Find',
|
|
108
100
|
taxon_finder: 'Spree::Taxons::Find',
|
|
109
101
|
line_item_by_variant_finder: 'Spree::LineItems::FindByVariant',
|
|
110
102
|
variant_finder: 'Spree::Variants::Find'
|
data/lib/spree/core/engine.rb
CHANGED
|
@@ -14,7 +14,6 @@ module Spree
|
|
|
14
14
|
:promotions,
|
|
15
15
|
:pricing,
|
|
16
16
|
:line_item_comparison_hooks,
|
|
17
|
-
:data_feed_types,
|
|
18
17
|
:export_types,
|
|
19
18
|
:import_types,
|
|
20
19
|
:taxon_rules,
|
|
@@ -43,10 +42,6 @@ module Spree
|
|
|
43
42
|
# Add app/subscribers to autoload paths
|
|
44
43
|
config.paths.add 'app/subscribers', eager_load: true
|
|
45
44
|
|
|
46
|
-
rake_tasks do
|
|
47
|
-
load File.join(root, 'lib', 'tasks', 'exchanges.rake')
|
|
48
|
-
end
|
|
49
|
-
|
|
50
45
|
initializer 'spree.environment', before: :load_config_initializers do |app|
|
|
51
46
|
app.config.spree = Environment.new(SpreeCalculators.new, SpreeValidators.new, Spree::Core::Configuration.new, Spree::Core::Dependencies.new)
|
|
52
47
|
|
|
@@ -127,7 +122,6 @@ module Spree
|
|
|
127
122
|
|
|
128
123
|
Rails.application.config.spree.payment_methods = [
|
|
129
124
|
Spree::Gateway::Bogus,
|
|
130
|
-
Spree::Gateway::BogusSimple,
|
|
131
125
|
Spree::Gateway::CustomPaymentSourceMethod,
|
|
132
126
|
Spree::PaymentMethod::Check,
|
|
133
127
|
Spree::PaymentMethod::StoreCredit
|
|
@@ -181,10 +175,6 @@ module Spree
|
|
|
181
175
|
Promotion::Actions::FreeShipping
|
|
182
176
|
]
|
|
183
177
|
|
|
184
|
-
Rails.application.config.spree.data_feed_types = [
|
|
185
|
-
Spree::DataFeed::Google
|
|
186
|
-
]
|
|
187
|
-
|
|
188
178
|
Rails.application.config.spree.export_types = [
|
|
189
179
|
Spree::Exports::Products,
|
|
190
180
|
Spree::Exports::Orders,
|
|
@@ -212,7 +202,6 @@ module Spree
|
|
|
212
202
|
Rails.application.config.spree.translatable_resources = [
|
|
213
203
|
Spree::OptionType,
|
|
214
204
|
Spree::Product,
|
|
215
|
-
Spree::Property,
|
|
216
205
|
Spree::Taxon,
|
|
217
206
|
Spree::Taxonomy,
|
|
218
207
|
Spree::Store,
|
|
@@ -243,8 +232,6 @@ module Spree
|
|
|
243
232
|
Spree::Payment,
|
|
244
233
|
Spree::PaymentMethod,
|
|
245
234
|
Spree::PaymentSource,
|
|
246
|
-
Spree::Post,
|
|
247
|
-
Spree::PostCategory,
|
|
248
235
|
Spree::Product,
|
|
249
236
|
Spree::Promotion,
|
|
250
237
|
Spree::Refund,
|
|
@@ -12,9 +12,7 @@ module Spree
|
|
|
12
12
|
# Returns the best price for the variant
|
|
13
13
|
# @return [Spree::Price]
|
|
14
14
|
def resolve
|
|
15
|
-
|
|
16
|
-
find_best_price
|
|
17
|
-
end
|
|
15
|
+
find_best_price
|
|
18
16
|
end
|
|
19
17
|
|
|
20
18
|
private
|
|
@@ -118,12 +116,6 @@ module Spree
|
|
|
118
116
|
price_list_id: nil
|
|
119
117
|
)
|
|
120
118
|
end
|
|
121
|
-
|
|
122
|
-
# Returns the cache key for the resolver
|
|
123
|
-
# @return [String]
|
|
124
|
-
def cache_key
|
|
125
|
-
"#{context.cache_key}/resolved_price"
|
|
126
|
-
end
|
|
127
119
|
end
|
|
128
120
|
end
|
|
129
121
|
end
|
data/lib/spree/core/version.rb
CHANGED
data/lib/spree/core.rb
CHANGED
|
@@ -11,7 +11,7 @@ require 'action_cable/engine'
|
|
|
11
11
|
require 'mail'
|
|
12
12
|
require 'action_mailer/railtie'
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
require 'acts_as_list'
|
|
16
16
|
require 'acts-as-taggable-on'
|
|
17
17
|
require 'awesome_nested_set'
|
|
@@ -28,7 +28,7 @@ require 'state_machines-activerecord'
|
|
|
28
28
|
require 'active_storage_validations'
|
|
29
29
|
require 'wannabe_bool'
|
|
30
30
|
require 'geocoder'
|
|
31
|
-
|
|
31
|
+
|
|
32
32
|
require 'safely_block'
|
|
33
33
|
require 'ar_lazy_preload'
|
|
34
34
|
require 'sqids'
|
|
@@ -41,7 +41,7 @@ module Spree
|
|
|
41
41
|
mattr_accessor :base_class, :user_class, :admin_user_class,
|
|
42
42
|
:private_storage_service_name, :public_storage_service_name,
|
|
43
43
|
:cdn_host, :root_domain, :searcher_class, :events_adapter_class, :queues,
|
|
44
|
-
:google_places_api_key
|
|
44
|
+
:google_places_api_key
|
|
45
45
|
|
|
46
46
|
def self.base_class(constantize: true)
|
|
47
47
|
@@base_class ||= 'Spree::Base'
|
|
@@ -113,14 +113,14 @@ module Spree
|
|
|
113
113
|
)
|
|
114
114
|
end
|
|
115
115
|
|
|
116
|
-
|
|
117
|
-
|
|
116
|
+
# @deprecated Spree.searcher_class is deprecated and will be removed in Spree 5.5.
|
|
117
|
+
def self.searcher_class=(value)
|
|
118
|
+
Spree::Deprecation.warn('Spree.searcher_class is deprecated and will be removed in Spree 5.5. Please remove it from your initializer.')
|
|
119
|
+
@@searcher_class = value
|
|
120
|
+
end
|
|
118
121
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
elsif @@searcher_class.is_a?(String) || @@searcher_class.is_a?(Symbol)
|
|
122
|
-
constantize ? @@searcher_class.to_s.constantize : @@searcher_class.to_s
|
|
123
|
-
end
|
|
122
|
+
def self.searcher_class(constantize: true)
|
|
123
|
+
@@searcher_class
|
|
124
124
|
end
|
|
125
125
|
|
|
126
126
|
# Returns the events adapter class used for publishing and subscribing to events.
|
|
@@ -144,10 +144,6 @@ module Spree
|
|
|
144
144
|
@@google_places_api_key
|
|
145
145
|
end
|
|
146
146
|
|
|
147
|
-
def self.screenshot_api_token
|
|
148
|
-
@@screenshot_api_token
|
|
149
|
-
end
|
|
150
|
-
|
|
151
147
|
def self.always_use_translations?
|
|
152
148
|
Spree::Config.always_use_translations
|
|
153
149
|
end
|
|
@@ -246,14 +242,6 @@ module Spree
|
|
|
246
242
|
Rails.application.config.spree.line_item_comparison_hooks = value
|
|
247
243
|
end
|
|
248
244
|
|
|
249
|
-
def self.data_feed_types
|
|
250
|
-
Rails.application.config.spree.data_feed_types
|
|
251
|
-
end
|
|
252
|
-
|
|
253
|
-
def self.data_feed_types=(value)
|
|
254
|
-
Rails.application.config.spree.data_feed_types = value
|
|
255
|
-
end
|
|
256
|
-
|
|
257
245
|
def self.export_types
|
|
258
246
|
Rails.application.config.spree.export_types
|
|
259
247
|
end
|
|
@@ -414,7 +402,6 @@ module Spree
|
|
|
414
402
|
end
|
|
415
403
|
|
|
416
404
|
module Core
|
|
417
|
-
autoload :ProductFilters, 'spree/core/product_filters'
|
|
418
405
|
autoload :TokenGenerator, 'spree/core/token_generator'
|
|
419
406
|
|
|
420
407
|
class GatewayError < RuntimeError; end
|
|
@@ -440,12 +427,9 @@ require 'spree/events'
|
|
|
440
427
|
require 'spree/webhooks'
|
|
441
428
|
|
|
442
429
|
require 'spree/core/partials'
|
|
443
|
-
require 'spree/core/importer'
|
|
444
|
-
require 'spree/core/query_filters'
|
|
445
430
|
require 'spree/core/controller_helpers/auth'
|
|
446
431
|
require 'spree/core/controller_helpers/common'
|
|
447
432
|
require 'spree/core/controller_helpers/order'
|
|
448
|
-
require 'spree/core/controller_helpers/search'
|
|
449
433
|
require 'spree/core/controller_helpers/store'
|
|
450
434
|
require 'spree/core/controller_helpers/strong_parameters'
|
|
451
435
|
require 'spree/core/controller_helpers/locale'
|