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.
Files changed (161) hide show
  1. checksums.yaml +4 -4
  2. data/app/finders/spree/products/find.rb +2 -42
  3. data/app/helpers/spree/base_helper.rb +1 -54
  4. data/app/mailers/spree/base_mailer.rb +4 -3
  5. data/app/models/concerns/spree/adjustment_source.rb +0 -8
  6. data/app/models/concerns/spree/admin_user_methods.rb +0 -2
  7. data/app/models/concerns/spree/image_methods.rb +4 -0
  8. data/app/models/concerns/spree/metadata.rb +10 -0
  9. data/app/models/concerns/spree/product_scopes.rb +21 -49
  10. data/app/models/concerns/spree/stores/markets.rb +7 -7
  11. data/app/models/concerns/spree/vat_price_calculation.rb +2 -2
  12. data/app/models/spree/ability.rb +5 -5
  13. data/app/models/spree/address.rb +3 -2
  14. data/app/models/spree/adjustable/promotion_accumulator.rb +1 -1
  15. data/app/models/spree/adjustment.rb +1 -20
  16. data/app/models/spree/api_key.rb +60 -2
  17. data/app/models/spree/country.rb +7 -3
  18. data/app/models/spree/credit_card.rb +0 -27
  19. data/app/models/spree/current.rb +38 -2
  20. data/app/models/spree/exports/products.rb +0 -6
  21. data/app/models/spree/gateway/bogus.rb +9 -9
  22. data/app/models/spree/gateway.rb +0 -3
  23. data/app/models/spree/gift_card_batch.rb +4 -0
  24. data/app/models/spree/image/configuration/active_storage.rb +0 -2
  25. data/app/models/spree/image.rb +7 -31
  26. data/app/models/spree/log_entry.rb +8 -5
  27. data/app/models/spree/market.rb +1 -2
  28. data/app/models/spree/market_country.rb +17 -0
  29. data/app/models/spree/newsletter_subscriber.rb +0 -3
  30. data/app/models/spree/order/checkout.rb +0 -18
  31. data/app/models/spree/order.rb +22 -16
  32. data/app/models/spree/payment/gateway_options.rb +2 -2
  33. data/app/models/spree/payment/processing.rb +5 -5
  34. data/app/models/spree/payment.rb +1 -1
  35. data/app/models/spree/payment_connection_error.rb +3 -0
  36. data/app/models/spree/payment_method/check.rb +1 -1
  37. data/app/models/spree/payment_method/store_credit.rb +5 -5
  38. data/app/models/spree/payment_response.rb +70 -0
  39. data/app/models/spree/permission_sets/default_customer.rb +0 -5
  40. data/app/models/spree/permission_sets/product_display.rb +0 -2
  41. data/app/models/spree/permission_sets/product_management.rb +0 -2
  42. data/app/models/spree/product.rb +5 -85
  43. data/app/models/spree/promotion.rb +2 -14
  44. data/app/models/spree/promotion_handler/coupon.rb +3 -3
  45. data/app/models/spree/prototype.rb +0 -3
  46. data/app/models/spree/refund.rb +6 -2
  47. data/app/models/spree/reimbursement.rb +0 -2
  48. data/app/models/spree/shipment.rb +0 -1
  49. data/app/models/spree/shipment_handler.rb +0 -2
  50. data/app/models/spree/shipping_category.rb +3 -3
  51. data/app/models/spree/store.rb +10 -49
  52. data/app/models/spree/store_credit.rb +4 -0
  53. data/app/models/spree/tax_category.rb +1 -11
  54. data/app/models/spree/taxon.rb +0 -16
  55. data/app/models/spree/variant.rb +2 -40
  56. data/app/models/spree/zone.rb +1 -4
  57. data/app/services/spree/cart/add_item.rb +8 -4
  58. data/app/services/spree/cart/create.rb +13 -2
  59. data/app/services/spree/newsletter/subscribe.rb +2 -2
  60. data/app/services/spree/products/duplicator.rb +0 -12
  61. data/app/services/spree/products/prepare_nested_attributes.rb +0 -12
  62. data/app/subscribers/spree/invitation_email_subscriber.rb +1 -1
  63. data/config/locales/en.yml +4 -20
  64. data/db/migrate/20210914000000_spree_four_three.rb +0 -38
  65. data/db/migrate/20210915064329_add_metadata_to_spree_multiple_tables.rb +0 -1
  66. data/db/migrate/20260226000000_add_locale_to_spree_orders.rb +5 -0
  67. data/db/migrate/20260226100000_add_token_digest_to_spree_api_keys.rb +21 -0
  68. data/lib/spree/core/configuration.rb +0 -3
  69. data/lib/spree/core/controller_helpers/strong_parameters.rb +1 -2
  70. data/lib/spree/core/dependencies.rb +2 -10
  71. data/lib/spree/core/engine.rb +0 -13
  72. data/lib/spree/core/pricing/resolver.rb +1 -9
  73. data/lib/spree/core/version.rb +1 -1
  74. data/lib/spree/core.rb +10 -26
  75. data/lib/spree/permitted_attributes.rb +2 -14
  76. data/lib/spree/testing_support/factories/order_factory.rb +1 -0
  77. data/lib/spree/testing_support/factories/payment_method_factory.rb +1 -6
  78. data/lib/spree/testing_support/factories/product_factory.rb +0 -7
  79. data/lib/spree/testing_support/factories/prototype_factory.rb +0 -2
  80. data/lib/tasks/cli.rake +50 -0
  81. data/lib/tasks/core.rake +0 -265
  82. metadata +9 -111
  83. data/app/finders/spree/posts/find.rb +0 -137
  84. data/app/finders/spree/product_properties/find_available.rb +0 -20
  85. data/app/helpers/spree/mail_helper.rb +0 -27
  86. data/app/jobs/spree/api_key_touch_job.rb +0 -9
  87. data/app/mailers/spree/test_mailer.rb +0 -8
  88. data/app/models/action_text/video_embed.rb +0 -13
  89. data/app/models/concerns/spree/filter_param.rb +0 -21
  90. data/app/models/concerns/spree/has_one_link.rb +0 -42
  91. data/app/models/concerns/spree/linkable.rb +0 -9
  92. data/app/models/concerns/spree/previewable.rb +0 -17
  93. data/app/models/spree/data_feed/google.rb +0 -15
  94. data/app/models/spree/data_feed.rb +0 -42
  95. data/app/models/spree/gateway/bogus_simple.rb +0 -24
  96. data/app/models/spree/newsletter_subscriber/emails.rb +0 -12
  97. data/app/models/spree/order/emails.rb +0 -24
  98. data/app/models/spree/post.rb +0 -108
  99. data/app/models/spree/post_category.rb +0 -46
  100. data/app/models/spree/product_property.rb +0 -51
  101. data/app/models/spree/property.rb +0 -86
  102. data/app/models/spree/property_prototype.rb +0 -9
  103. data/app/models/spree/reimbursement/emails.rb +0 -11
  104. data/app/models/spree/shipment/emails.rb +0 -11
  105. data/app/models/spree/store_favicon_image.rb +0 -20
  106. data/app/models/spree/store_logo.rb +0 -4
  107. data/app/models/spree/store_mailer_logo.rb +0 -7
  108. data/app/models/spree/taxon_image/configuration/active_storage.rb +0 -26
  109. data/app/models/spree/taxon_image.rb +0 -28
  110. data/app/presenters/spree/filters/properties_presenter.rb +0 -23
  111. data/app/presenters/spree/filters/property_presenter.rb +0 -42
  112. data/app/services/spree/data_feeds/google/optional_attributes.rb +0 -23
  113. data/app/services/spree/data_feeds/google/optional_sub_attributes.rb +0 -21
  114. data/app/services/spree/data_feeds/google/products_list.rb +0 -14
  115. data/app/services/spree/data_feeds/google/required_attributes.rb +0 -68
  116. data/app/services/spree/data_feeds/google/rss.rb +0 -109
  117. data/app/sorters/spree/posts/sort.rb +0 -40
  118. data/app/views/action_text/video_embeds/_thumbnail.html.erb +0 -1
  119. data/app/views/action_text/video_embeds/_video_embed.html.erb +0 -3
  120. data/app/views/layouts/action_text/contents/_content.html.erb +0 -3
  121. data/app/views/spree/test_mailer/test_email.html.erb +0 -40
  122. data/app/views/spree/test_mailer/test_email.text.erb +0 -4
  123. data/config/initializers/oembed.rb +0 -1
  124. data/db/migrate/20221229132350_create_spree_data_feed_settings.rb +0 -14
  125. data/db/migrate/20230109084253_create_product_property_translations.rb +0 -24
  126. data/db/migrate/20230109105943_create_property_translations.rb +0 -24
  127. data/db/migrate/20230415155958_rename_data_feed_settings_table.rb +0 -5
  128. data/db/migrate/20230415160828_rename_data_feed_table_columns.rb +0 -7
  129. data/db/migrate/20230415161226_add_indexes_to_data_feeds_table.rb +0 -5
  130. data/db/migrate/20230512094803_rename_data_feeds_column_provider_to_type.rb +0 -5
  131. data/db/migrate/20240914153106_add_display_on_to_spree_properties.rb +0 -5
  132. data/db/migrate/20240915144935_add_position_to_spree_properties.rb +0 -6
  133. data/db/migrate/20250121160028_create_spree_posts_and_spree_post_categories.rb +0 -33
  134. data/db/migrate/20250127083740_add_kind_to_spree_properties.rb +0 -5
  135. data/db/migrate/20250217171018_create_action_text_video_embeds.rb +0 -11
  136. data/db/migrate/20250305121657_remove_spree_posts_indices.rb +0 -7
  137. data/db/migrate/20250730154601_add_unique_index_on_spree_properties_name.rb +0 -24
  138. data/db/sample_data/posts.rb +0 -7
  139. data/lib/generators/spree/cursor_rules/cursor_rules_generator.rb +0 -19
  140. data/lib/generators/spree/cursor_rules/templates/spree_rules.mdc +0 -387
  141. data/lib/spree/core/controller_helpers/search.rb +0 -17
  142. data/lib/spree/core/importer/order.rb +0 -244
  143. data/lib/spree/core/importer/product.rb +0 -67
  144. data/lib/spree/core/importer.rb +0 -9
  145. data/lib/spree/core/product_filters.rb +0 -218
  146. data/lib/spree/core/query_filters/comparable.rb +0 -50
  147. data/lib/spree/core/query_filters/date.rb +0 -8
  148. data/lib/spree/core/query_filters/number.rb +0 -8
  149. data/lib/spree/core/query_filters/text.rb +0 -36
  150. data/lib/spree/core/query_filters.rb +0 -11
  151. data/lib/spree/core/search/base.rb +0 -144
  152. data/lib/spree/testing_support/factories/favicon_image_factory.rb +0 -9
  153. data/lib/spree/testing_support/factories/google_data_feed_factory.rb +0 -7
  154. data/lib/spree/testing_support/factories/post_category_factory.rb +0 -7
  155. data/lib/spree/testing_support/factories/post_factory.rb +0 -22
  156. data/lib/spree/testing_support/factories/product_property_factory.rb +0 -7
  157. data/lib/spree/testing_support/factories/property_factory.rb +0 -28
  158. data/lib/spree/testing_support/factories/taxon_image_factory.rb +0 -9
  159. data/lib/spree/testing_support/flash.rb +0 -25
  160. data/lib/spree/testing_support/flatpickr_capybara.rb +0 -124
  161. data/lib/tasks/exchanges.rake +0 -66
@@ -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 ||= if association(:stock_items).loaded? && association(:stock_locations).loaded?
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 ||= Rails.cache.fetch(['variant-backorderable', cache_key_with_version]) do
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
@@ -27,9 +27,7 @@ module Spree
27
27
  self.whitelisted_ransackable_attributes = ['description']
28
28
 
29
29
  def self.default_tax
30
- Rails.cache.fetch('default_tax') do
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
- line_item.public_metadata = public_metadata.to_h if public_metadata
38
- line_item.private_metadata = private_metadata.to_h if private_metadata
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
- def call(user:, store:, currency:, public_metadata: {}, private_metadata: {}, order_params: {})
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: private_metadata.to_h
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
- # deliver confirmation email after the transaction is completed
23
- subscriber.deliver_newsletter_email_verification unless subscriber.verified?
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
 
@@ -34,7 +34,7 @@ module Spree
34
34
 
35
35
  def find_invitation(event)
36
36
  invitation_id = event.payload['id']
37
- Spree::Invitation.find_by(id: invitation_id)
37
+ Spree::Invitation.find_by_prefix_id(invitation_id)
38
38
  end
39
39
  end
40
40
  end
@@ -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"
@@ -4,7 +4,6 @@ class AddMetadataToSpreeMultipleTables < ActiveRecord::Migration[5.2]
4
4
  spree_assets
5
5
  spree_option_types
6
6
  spree_option_values
7
- spree_properties
8
7
  spree_promotions
9
8
  spree_payment_methods
10
9
  spree_shipping_methods
@@ -0,0 +1,5 @@
1
+ class AddLocaleToSpreeOrders < ActiveRecord::Migration[7.2]
2
+ def change
3
+ add_column :spree_orders, :locale, :string
4
+ end
5
+ end
@@ -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'
@@ -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
- Rails.cache.fetch(cache_key, expires_in: 15.minutes) do
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
@@ -1,5 +1,5 @@
1
1
  module Spree
2
- VERSION = '5.4.0.beta'.freeze
2
+ VERSION = '5.4.0.beta3'.freeze
3
3
 
4
4
  def self.version
5
5
  VERSION
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
- require 'active_merchant'
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
- require 'oembed'
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, :screenshot_api_token
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
- def self.searcher_class(constantize: true)
117
- @@searcher_class ||= 'Spree::Core::Search::Base'
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
- if @@searcher_class.is_a?(Class)
120
- raise 'Spree.searcher_class MUST be a String or Symbol object, not a Class object.'
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'