spree_core 4.6.0 → 4.6.1

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: 619f5416fb099c1cccaeb2432fd6002b53aa605aff90c9b4078f2a51ba73e89b
4
- data.tar.gz: e53a5c780f9c4e79c50cc38d2fdd055dc20b04bef93c89e33e88b7a4fd9facce
3
+ metadata.gz: 4e5c1992fb7f20f237e3d088cc7c0c79692efb72eaec1e654069ee5b8aeeb846
4
+ data.tar.gz: 7dd674422290e6570f1b8bb116bd541cac61cbb403402a5996d829b304dac604
5
5
  SHA512:
6
- metadata.gz: 7e8cc84789a7c8564b45576c2aa9f8974f62da3b2c752869a9950497b01382b073b50a4d7746d9f2142bee4248115b58a527637b104f3750504499f2a6608459
7
- data.tar.gz: fab84d0b2eb02221f96209f11c118feb77928d69269b009abb4c9a773089f1a011a96bbb3b731abce9cd8af45208eaabdef464c27244b7fd954554de1203c15b
6
+ metadata.gz: 586c58de60df801c9f4e54983a929f8c507cb8b05c8161ff3f82bc0780a3a64ee33cc42d1ffa01dbea9ed7dce9dda4ced801ba0298b326e255d38314d1286539
7
+ data.tar.gz: 1aeebb1b70bd971a5589f265903a00cd9d6d3c38843968668000d7bf5277832280a2f3b6d7774d73845f2d45f72166873bfc01c493171f0bce973c4cc374c458
@@ -4,12 +4,10 @@ module Spree
4
4
 
5
5
  included do
6
6
  def localized_slugs_for_store(store)
7
- localized_slugs = Hash[translations.pluck(:locale, :slug)]
8
- default_locale = store.default_locale
9
7
  supported_locales = store.supported_locales_list
10
8
 
11
9
  supported_locales.each_with_object({}) do |locale, hash|
12
- hash[locale] = localized_slugs[locale] || localized_slugs[default_locale]
10
+ hash[locale] = I18n.with_locale(locale) { slug }
13
11
  end
14
12
  end
15
13
  end
@@ -13,6 +13,7 @@ module Spree
13
13
  extend FriendlyId
14
14
  friendly_id :permalink, slug_column: :permalink, use: :history
15
15
  before_validation :set_permalink, on: :create, if: :name
16
+ alias_attribute :slug, :permalink
16
17
 
17
18
  acts_as_nested_set dependent: :destroy
18
19
 
@@ -66,10 +67,12 @@ module Spree
66
67
 
67
68
  def set_permalink
68
69
  parent = translated_model.parent
70
+ name_with_fallback = name || translated_model.name
71
+
69
72
  if parent.present?
70
- self.permalink = [parent.permalink, (permalink.blank? ? name.to_url : permalink.split('/').last)].join('/')
73
+ self.permalink = [parent.permalink, (permalink.blank? ? name_with_fallback.to_url : permalink.split('/').last)].join('/')
71
74
  else
72
- self.permalink = name.to_url if permalink.blank?
75
+ self.permalink = name_with_fallback.to_url if permalink.blank?
73
76
  end
74
77
  end
75
78
  end
@@ -0,0 +1,16 @@
1
+ module Spree
2
+ module Locales
3
+ class SetFallbackLocaleForStore
4
+ def call(store:)
5
+ store_default_locale = store.default_locale
6
+ fallbacks = store.supported_locales_list.each_with_object({}) do |locale, object|
7
+ object[locale] = [store_default_locale]
8
+ end
9
+
10
+ fallbacks_instance = I18n::Locale::Fallbacks.new(fallbacks)
11
+
12
+ Mobility.store_based_fallbacks = fallbacks_instance
13
+ end
14
+ end
15
+ end
16
+ end
@@ -8,11 +8,9 @@ Mobility.configure do |config|
8
8
  backend_reader
9
9
  query
10
10
  cache
11
- fallbacks
11
+ store_based_fallbacks
12
12
  locale_accessors
13
13
  presence
14
14
  dirty
15
15
  end
16
-
17
- config.defaults[:fallbacks] = true
18
16
  end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'concurrent'
4
+ require 'mobility'
5
+
6
+ # The default implementation in the Mobility gem requires fallbacks to be defined when booting the application.
7
+ # This patch allows to dynamically reconfigure translations fallbacks, by setting Mobility.store_based_fallbacks attribute.
8
+ # The implementation is based on the default fallbacks plugin, with some changes around fetching the list of fallbacks to be used.
9
+ # https://github.com/shioyama/mobility/blob/master/lib/mobility/plugins/fallbacks.rb
10
+ module Mobility
11
+ @store_based_fallbacks = Concurrent::ThreadLocalVar.new(I18n::Locale::Fallbacks.new)
12
+
13
+ class << self
14
+ def store_based_fallbacks
15
+ @store_based_fallbacks.value
16
+ end
17
+
18
+ def store_based_fallbacks=(value)
19
+ @store_based_fallbacks.value = value
20
+ end
21
+ end
22
+
23
+ module Plugins
24
+ module StoreBasedFallbacks
25
+ extend ::Mobility::Plugin
26
+
27
+ default true
28
+ requires :backend, include: :before
29
+
30
+ # Applies fallbacks plugin to attributes. Completely disables fallbacks
31
+ # on model if option is +false+.
32
+ included_hook do |_, backend_class|
33
+ unless options[:fallbacks] == false
34
+ backend_class.include(BackendInstanceMethods)
35
+ end
36
+ end
37
+
38
+ module BackendInstanceMethods
39
+ def read(locale, fallback: true, **kwargs)
40
+ return super(locale, **kwargs) if !fallback || kwargs[:locale]
41
+
42
+ locales = Mobility.store_based_fallbacks[locale]
43
+ locales.each do |fallback_locale|
44
+ value = super(fallback_locale, **kwargs)
45
+ return value if Util.present?(value)
46
+ end
47
+
48
+ super(locale, **kwargs)
49
+ end
50
+ end
51
+ end
52
+
53
+ register_plugin(:store_based_fallbacks, StoreBasedFallbacks)
54
+ end
55
+ end
@@ -6,6 +6,7 @@ module Spree
6
6
 
7
7
  included do
8
8
  before_action :set_locale
9
+ before_action :set_fallback_locale
9
10
 
10
11
  if defined?(helper_method)
11
12
  helper_method :supported_locales
@@ -21,6 +22,12 @@ module Spree
21
22
  I18n.locale = current_locale
22
23
  end
23
24
 
25
+ def set_fallback_locale
26
+ return unless respond_to?(:current_store) && current_store.present?
27
+
28
+ Spree::Locales::SetFallbackLocaleForStore.new.call(store: current_store)
29
+ end
30
+
24
31
  def current_locale
25
32
  @current_locale ||= if user_locale?
26
33
  try_spree_current_user.selected_locale
@@ -1,5 +1,5 @@
1
1
  module Spree
2
- VERSION = '4.6.0'.freeze
2
+ VERSION = '4.6.1'.freeze
3
3
 
4
4
  def self.version
5
5
  VERSION
data/lib/spree_core.rb CHANGED
@@ -1,3 +1,4 @@
1
1
  require 'friendly_id/paranoia'
2
+ require 'mobility/plugins/store_based_fallbacks'
2
3
 
3
4
  require 'spree/core'
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: 4.6.0
4
+ version: 4.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Schofield
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-05-31 00:00:00.000000000 Z
12
+ date: 2023-07-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
@@ -801,6 +801,7 @@ files:
801
801
  - app/services/spree/line_items/destroy.rb
802
802
  - app/services/spree/line_items/helper.rb
803
803
  - app/services/spree/line_items/update.rb
804
+ - app/services/spree/locales/set_fallback_locale_for_store.rb
804
805
  - app/services/spree/orders/approve.rb
805
806
  - app/services/spree/orders/cancel.rb
806
807
  - app/services/spree/payments/create.rb
@@ -923,6 +924,7 @@ files:
923
924
  - lib/generators/spree/dummy_model/templates/model.rb.tt
924
925
  - lib/generators/spree/install/install_generator.rb
925
926
  - lib/generators/spree/install/templates/config/initializers/spree.rb
927
+ - lib/mobility/plugins/store_based_fallbacks.rb
926
928
  - lib/spree/core.rb
927
929
  - lib/spree/core/components.rb
928
930
  - lib/spree/core/configuration.rb
@@ -1077,9 +1079,9 @@ licenses:
1077
1079
  - BSD-3-Clause
1078
1080
  metadata:
1079
1081
  bug_tracker_uri: https://github.com/spree/spree/issues
1080
- changelog_uri: https://github.com/spree/spree/releases/tag/v4.6.0
1082
+ changelog_uri: https://github.com/spree/spree/releases/tag/v4.6.1
1081
1083
  documentation_uri: https://dev-docs.spreecommerce.org/
1082
- source_code_uri: https://github.com/spree/spree/tree/v4.6.0
1084
+ source_code_uri: https://github.com/spree/spree/tree/v4.6.1
1083
1085
  post_install_message:
1084
1086
  rdoc_options: []
1085
1087
  require_paths: