spree_core 5.4.0.rc7 → 5.4.0.rc8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 07eb5e06c1dbe2e9d89b69a3768a376fcf5d23f0be28bb15bd4e9fac1ce0bcaf
4
- data.tar.gz: 99e243c978fb95cfd04e4b8ee42cc42b63f3580493939b4271be7992006c2bbb
3
+ metadata.gz: e7f093947be22917f630a9dba320707abe88feebd4b9c52ab6cda4bdd466dce3
4
+ data.tar.gz: a3506d0767031f85540001a3619ea350c0ee6099bb138c79e612f5a79369b0ed
5
5
  SHA512:
6
- metadata.gz: 2967ba8a3825d98180adb93f0a025370c6aa6aee76520cf5400be56bfb6328b63f121434065f2acf8b600099f53136b067becec17c0f1523078dedd95cc4ccd5
7
- data.tar.gz: ca2d9d12300bd8a765b3130cf86fd857d8c8b0ad7cc413f895956a806a642d5ef44c20983b08d227de1fff80b9bcfd68995173061fc60849ebe5dab185631ffb
6
+ metadata.gz: bde43c704ad11a1ce86595a27d692f71e23fb598d1086bf656c390aacc0754d579ea8d9d99f5b5f8f0a23c57b3ce2f3aa186600151bbe621a54cf8266ea3ef38
7
+ data.tar.gz: 401e1fb164e632bb37f60b1ab6491dad4aa4dc5eb01ca53dd3a3b03a2449807cc31a943edcb43095f04f52c0eee763f5cdea61699a530c7f0ee2121fb1d45ab4
@@ -4,6 +4,7 @@ module Spree
4
4
  belongs_to :zoneable, polymorphic: true
5
5
 
6
6
  validates :zone, :zoneable, presence: true
7
+ validates :zoneable_id, uniqueness: { scope: spree_base_uniqueness_scope + [:zone_id, :zoneable_type] }
7
8
 
8
9
  scope :defunct_without_kind, ->(kind) do
9
10
  where('zoneable_id IS NULL OR zoneable_type != ?', "Spree::#{kind.classify}")
@@ -25,7 +25,12 @@ module Spree
25
25
 
26
26
  def create_zone_members(zone, country_codes)
27
27
  countries_ids = Spree::Country.where(iso: country_codes).ids
28
- zone_members = countries_ids.map do |country_id|
28
+ existing_ids = zone.zone_members.where(zoneable_type: 'Spree::Country', zoneable_id: countries_ids).pluck(:zoneable_id)
29
+ new_ids = countries_ids - existing_ids
30
+
31
+ return if new_ids.empty?
32
+
33
+ zone_members = new_ids.map do |country_id|
29
34
  {
30
35
  zoneable_id: country_id,
31
36
  zoneable_type: 'Spree::Country',
@@ -0,0 +1,31 @@
1
+ class AddUniqueIndexToSpreeZoneMembers < ActiveRecord::Migration[7.2]
2
+ def up
3
+ # Remove duplicate zone members, keeping the oldest record
4
+ # Uses derived table for MySQL compatibility
5
+ execute <<~SQL
6
+ DELETE FROM spree_zone_members
7
+ WHERE id NOT IN (
8
+ SELECT min_id FROM (
9
+ SELECT MIN(id) AS min_id
10
+ FROM spree_zone_members
11
+ GROUP BY zone_id, zoneable_type, zoneable_id
12
+ ) AS keeper_ids
13
+ )
14
+ SQL
15
+
16
+ remove_index :spree_zone_members, [:zoneable_id, :zoneable_type],
17
+ name: 'index_spree_zone_members_on_zoneable_id_and_zoneable_type',
18
+ if_exists: true
19
+
20
+ add_index :spree_zone_members, [:zone_id, :zoneable_type, :zoneable_id],
21
+ unique: true,
22
+ name: 'index_spree_zone_members_uniqueness'
23
+ end
24
+
25
+ def down
26
+ remove_index :spree_zone_members, name: 'index_spree_zone_members_uniqueness', if_exists: true
27
+
28
+ add_index :spree_zone_members, [:zoneable_id, :zoneable_type],
29
+ name: 'index_spree_zone_members_on_zoneable_id_and_zoneable_type'
30
+ end
31
+ end
@@ -17,7 +17,7 @@ end
17
17
  eu_zone = Spree::Zone.find_by(name: 'EU_VAT')
18
18
 
19
19
  if eu_zone
20
- eu_countries = eu_zone.zone_members.where(zoneable_type: 'Spree::Country').map(&:zoneable)
20
+ eu_countries = eu_zone.zone_members.where(zoneable_type: 'Spree::Country').map(&:zoneable).uniq.compact
21
21
 
22
22
  if eu_countries.any?
23
23
  eu_market = store.markets.find_or_initialize_by(name: 'Europe')
@@ -1,5 +1,5 @@
1
1
  module Spree
2
- VERSION = '5.4.0.rc7'.freeze
2
+ VERSION = '5.4.0.rc8'.freeze
3
3
 
4
4
  def self.version
5
5
  VERSION
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.4.0.rc7
4
+ version: 5.4.0.rc8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Schofield
@@ -1502,6 +1502,7 @@ files:
1502
1502
  - db/migrate/20260402000001_add_kind_to_spree_option_types.rb
1503
1503
  - db/migrate/20260402000002_add_color_code_to_spree_option_values.rb
1504
1504
  - db/migrate/20260403000000_add_market_to_spree_orders.rb
1505
+ - db/migrate/20260408000001_add_unique_index_to_spree_zone_members.rb
1505
1506
  - db/sample_data/customers.csv
1506
1507
  - db/sample_data/markets.rb
1507
1508
  - db/sample_data/metafield_definitions.rb
@@ -1732,9 +1733,9 @@ licenses:
1732
1733
  - BSD-3-Clause
1733
1734
  metadata:
1734
1735
  bug_tracker_uri: https://github.com/spree/spree/issues
1735
- changelog_uri: https://github.com/spree/spree/releases/tag/v5.4.0.rc7
1736
+ changelog_uri: https://github.com/spree/spree/releases/tag/v5.4.0.rc8
1736
1737
  documentation_uri: https://docs.spreecommerce.org/
1737
- source_code_uri: https://github.com/spree/spree/tree/v5.4.0.rc7
1738
+ source_code_uri: https://github.com/spree/spree/tree/v5.4.0.rc8
1738
1739
  post_install_message:
1739
1740
  rdoc_options: []
1740
1741
  require_paths: