spree_core 4.6.0 → 4.6.1

Sign up to get free protection for your applications and to get access to all the features.
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: