singleton-client-test 0.7.7.7 → 0.7.7.9

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: 71f20276ef709f5a183ab1e6572f171bfe9e5cdb0d0f09decea0fdb2e3aa2e88
4
- data.tar.gz: 1eeebcc0cc3a964c90a00523fdda8aae09d3dc69ddc51af658c6218eb8e97c05
3
+ metadata.gz: 33c66285f53fb194a41ee8769b58e11b78411eb9c9b017847bf78bfe98db8a4a
4
+ data.tar.gz: 32980165aa18854ec621c96be34164311c61027d7ea2036afe42ecdccdb92355
5
5
  SHA512:
6
- metadata.gz: cd7cd9a1b977ddfd9110758b997c26bda3d8f2507f95036c87db24e130b7249f9c57871ce7f46c45827c810f0c7dd991b36dde656d3ce8a809e9ef4792554a65
7
- data.tar.gz: 1d8c12a9f7dc6c65ebddcdf1eef50907cd8838a38a0c1a4c98c7001b4b9c77c55c5486d109fc7d9aca01c2c85c99e658ab381e8f2994e7818c73eb3d2a220295
6
+ metadata.gz: 37a00c18462c4b65aa3b9694e42dc9626e50c2109d6a1be27e6a7a1cac0c9ef57d76e5079cf6fee69960d830046cbc42d1fa98664a024d998966970679fd7adb
7
+ data.tar.gz: 905b50f8d67d556e883cacdac89984a77e816adb18f1c7713b1c9ddc2d5152f74ef8db0e4be4611434857e6b04af8dd747d8b5cdb6ba774082487577dc560565
@@ -39,10 +39,6 @@ module SgtnClient
39
39
  get_translations(component, locale)
40
40
  end
41
41
 
42
- def get_translation!(key, component, locale)
43
- [get_bundle!(component, locale)[key], locale]
44
- end
45
-
46
42
  def translate(key, component, locale = nil, **kwargs, &block)
47
43
  translate!(key, component, locale, **kwargs, &block)
48
44
  rescue StandardError => e
@@ -56,8 +52,8 @@ module SgtnClient
56
52
  SgtnClient.logger.debug { "[#{method(__callee__).owner}.#{__callee__}] key: #{key}, component: #{component}, locale: #{locale}, args: #{kwargs}" }
57
53
 
58
54
  begin
59
- best_match_locale = LocaleUtil.get_best_locale(locale || SgtnClient.locale, component)
60
- result, actual_locale = get_translation!(key, component, best_match_locale)
55
+ picked_locale = pickup_locale(locale || SgtnClient.locale, component)
56
+ result, actual_locale = get_string!(key, component, picked_locale)
61
57
  rescue StandardError => e
62
58
  raise e if block.nil?
63
59
  end
@@ -68,7 +64,7 @@ module SgtnClient
68
64
  return if result.nil?
69
65
  end
70
66
 
71
- kwargs.empty? ? result : result.localize(actual_locale) % kwargs
67
+ kwargs.empty? ? result : interpolate(result, actual_locale, **kwargs)
72
68
  end
73
69
  alias t! translate!
74
70
 
@@ -82,13 +78,19 @@ module SgtnClient
82
78
  def get_translations!(component, locale = nil)
83
79
  SgtnClient.logger.debug { "[#{method(__callee__).owner}.#{__callee__}] component: #{component}, locale: #{locale}" }
84
80
 
85
- best_match_locale = LocaleUtil.get_best_locale(locale || SgtnClient.locale, component)
86
- messages = get_bundle!(component, best_match_locale)
81
+ picked_locale = pickup_locale(locale || SgtnClient.locale, component)
82
+ get_bundle!(component, picked_locale)
83
+ end
87
84
 
88
- { 'component' => component, 'locale' => best_match_locale, 'messages' => messages } if messages
85
+ protected
86
+
87
+ def pickup_locale(locale, component)
88
+ LocaleUtil.get_best_locale(locale, component)
89
89
  end
90
90
 
91
- private
91
+ def interpolate(translation, locale, **kwargs)
92
+ translation.localize(locale) % kwargs
93
+ end
92
94
 
93
95
  def get_bundle!(component, locale)
94
96
  SgtnClient.config.loader.get_bundle(component, locale)
@@ -100,6 +102,13 @@ module SgtnClient
100
102
  SgtnClient.config.notify_observers(:available_locales, component)
101
103
  raise
102
104
  end
105
+
106
+ private
107
+
108
+ def get_string!(key, component, locale)
109
+ bundle = get_bundle!(component, locale)
110
+ [bundle.fetch(key), bundle.locale]
111
+ end
103
112
  end
104
113
 
105
114
  extend Implementation
@@ -50,13 +50,19 @@ module SgtnClient
50
50
  class BundleData < Hash # :nodoc:
51
51
  include DataInfo
52
52
 
53
- def initialize(*args)
53
+ attr_reader :origin, :locale, :component
54
+
55
+ def initialize(*args, origin: nil, locale: nil, component: nil)
54
56
  if !args.empty? && args[0].is_a?(Hash)
55
57
  update(args[0])
56
58
  super()
57
59
  else
58
60
  super
59
61
  end
62
+
63
+ @origin = origin
64
+ @locale = locale
65
+ @component = component
60
66
  end
61
67
  end
62
68
 
@@ -11,9 +11,13 @@ module SgtnClient
11
11
  include Observable
12
12
  include Singleton
13
13
 
14
- attr_accessor :product_name, :version, :vip_server, :translation_bundle, :source_bundle, :cache_expiry_period, :log_file, :log_level
14
+ attr_accessor :product_name, :version, :vip_server, :translation_bundle, :source_bundle, :cache_expiry_period,
15
+ :log_file, :log_level
16
+ attr_writer :logger, :pseudo_tag
15
17
 
16
- attr_writer :logger
18
+ def pseudo_tag
19
+ @pseudo_tag ||= '@@'
20
+ end
17
21
 
18
22
  def logger
19
23
  @logger ||= if log_file
@@ -1,25 +1,18 @@
1
- # Copyright 2022 VMware, Inc.
1
+ # Copyright 2022-2023 VMware, Inc.
2
2
  # SPDX-License-Identifier: EPL-2.0
3
3
 
4
4
  module SgtnClient
5
5
  module Fallbacks # :nodoc:
6
- def get_translation!(key, component, locale)
7
- error = nil
8
- localechain(locale) do |l|
9
- return super(key, component, l)
10
- rescue StandardError => e
11
- error = e
12
- end
13
- raise error if error
14
- end
6
+ protected
15
7
 
16
- def get_translations!(component, locale = nil)
8
+ def get_bundle!(component, locale)
17
9
  error = nil
18
10
  localechain(locale) do |l|
19
- result = super(component, l)
20
- return result if result
21
- rescue StandardError => e
22
- error = e
11
+ begin
12
+ return super(component, l)
13
+ rescue StandardError => e
14
+ error = e
15
+ end
23
16
  end
24
17
  raise error if error
25
18
  end
@@ -35,7 +35,7 @@ module SgtnClient
35
35
  def load_bundle(component, locale)
36
36
  SgtnClient.logger.debug { "[#{__FILE__}][#{__callee__}] CacheFiller, component=#{component}, locale=#{locale}" }
37
37
 
38
- @cache_hash[Common::BundleID.new(component, locale)] = Common::BundleData.new(super)
38
+ @cache_hash[Common::BundleID.new(component, locale)] = super
39
39
  end
40
40
 
41
41
  def available_bundles
@@ -6,16 +6,16 @@ require 'set'
6
6
  module SgtnClient
7
7
  module TranslationLoader
8
8
  class Chain
9
- attr_accessor :loaders
9
+ attr_reader :loaders
10
10
 
11
11
  def initialize(*loaders)
12
- self.loaders = loaders
12
+ @loaders = loaders
13
13
  end
14
14
 
15
15
  def load_bundle(component, locale)
16
16
  exception = nil
17
17
 
18
- loaders.each do |loader|
18
+ @loaders.each do |loader|
19
19
  begin
20
20
  bundle = loader.load_bundle(component, locale)
21
21
  return bundle if bundle
@@ -32,7 +32,7 @@ module SgtnClient
32
32
  exception = nil
33
33
  total_data = Set.new
34
34
 
35
- loaders.each do |loader|
35
+ @loaders.each do |loader|
36
36
  begin
37
37
  item = loader.available_bundles
38
38
  total_data += item
@@ -6,7 +6,6 @@
6
6
  module SgtnClient
7
7
  module TranslationLoader
8
8
  module CONSTS
9
- OLD_SOURCE_LOCALE = 'old_source'
10
9
  REAL_SOURCE_LOCALE = 'latest'
11
10
 
12
11
  AVAILABLE_BUNDLES_KEY = 'available_bundles'
@@ -15,6 +15,7 @@ module SgtnClient
15
15
 
16
16
  chain_loader = Class.new(Chain)
17
17
  chain_loader.include SourceComparer
18
+ chain_loader.include Pseudo
18
19
  chain_loader.include CacheFiller
19
20
  chain_loader.include SingleLoader
20
21
  chain_loader.include Cache
@@ -26,17 +26,16 @@ module SgtnClient
26
26
 
27
27
  raise SingletonError, "no messages in local bundle file: #{file_path}." unless messages
28
28
 
29
- messages
29
+ Common::BundleData.new(messages, origin: self, component: component,
30
+ locale: locale == CONSTS::REAL_SOURCE_LOCALE ? LocaleUtil.get_source_locale : locale)
30
31
  end
31
32
 
32
33
  def available_bundles
33
34
  SgtnClient.logger.debug { "[#{method(__callee__).owner}.#{__callee__}]" }
34
35
 
35
- @available_bundles ||= begin
36
- @base_path.glob('*/*.json').reduce(Set.new) do |bundles, f|
37
- locale = f.basename.to_s.sub(/\A#{BUNDLE_PREFIX}/i, '').sub(/#{BUNDLE_SUFFIX}\z/i, '')
38
- bundles.add Common::BundleID.new(f.parent.basename.to_s, locale)
39
- end
36
+ @available_bundles = @base_path.glob('*/*.json').reduce(Set.new) do |bundles, f|
37
+ locale = f.basename.to_s.sub(/\A#{BUNDLE_PREFIX}/i, '').sub(/#{BUNDLE_SUFFIX}\z/i, '')
38
+ bundles.add Common::BundleID.new(f.parent.basename.to_s, locale)
40
39
  end
41
40
  end
42
41
  end
@@ -0,0 +1,21 @@
1
+ # Copyright 2022 VMware, Inc.
2
+ # SPDX-License-Identifier: EPL-2.0
3
+
4
+ module SgtnClient
5
+ module TranslationLoader
6
+ module Pseudo # :nodoc:
7
+ def initialize(*)
8
+ super
9
+ @pseudo_tag = Sgtn.pseudo_tag
10
+ end
11
+
12
+ def load_bundle(component, locale)
13
+ return super unless locale == Sgtn::PSEUDO_LOCALE
14
+
15
+ SgtnClient.logger.debug { "[#{__FILE__}][#{__callee__}] component=#{component}, locale=#{locale}" }
16
+
17
+ super(component, LocaleUtil.get_source_locale).transform_values! { |v| "#{@pseudo_tag}#{v}#{@pseudo_tag}" }
18
+ end
19
+ end
20
+ end
21
+ end
@@ -27,16 +27,18 @@ module SgtnClient
27
27
 
28
28
  @conn = Faraday.new(config.vip_server, request: REQUEST_ARGUMENTS) do |f|
29
29
  f.response :json # decode response bodies as JSON
30
- f.use :gzip
31
30
  f.response :raise_error
32
31
  f.response :logger, config.logger, { log_level: :debug, headers: false, bodies: true }
32
+ f.use :gzip
33
33
  end
34
34
  end
35
35
 
36
36
  def load_bundle(component, locale)
37
37
  SgtnClient.logger.debug { "[#{method(__callee__).owner}.#{__callee__}] component=#{component}, locale=#{locale}" }
38
38
 
39
- query_server(format(@bundle_url, locale, component), ['messages'])
39
+ data = query_server(format(@bundle_url, locale, component), ['messages'])
40
+ Common::BundleData.new(data, origin: self, component: component,
41
+ locale: locale == CONSTS::REAL_SOURCE_LOCALE ? LocaleUtil.get_source_locale : locale)
40
42
  end
41
43
 
42
44
  def available_bundles
@@ -7,7 +7,7 @@ require 'yaml'
7
7
 
8
8
  module SgtnClient
9
9
  module TranslationLoader
10
- class Source
10
+ class Source # :nodoc:
11
11
  def initialize(config)
12
12
  @source_bundle_path = Pathname.new(config.source_bundle)
13
13
  end
@@ -31,7 +31,7 @@ module SgtnClient
31
31
 
32
32
  raise SingletonError, "no local source messages for component #{component}" if total_messages.empty?
33
33
 
34
- total_messages
34
+ Common::BundleData.new(total_messages, origin: self, component: component, locale: LocaleUtil.get_source_locale)
35
35
  end
36
36
 
37
37
  def available_bundles
@@ -11,41 +11,45 @@ module SgtnClient
11
11
  real_locale = cache_to_real_map[locale]
12
12
  return super(component, real_locale) if real_locale
13
13
 
14
- old_source_bundle_thread = Thread.new { load_bundle(component, CONSTS::OLD_SOURCE_LOCALE) }
15
14
  source_bundle_thread = Thread.new { load_bundle(component, LocaleUtil.get_source_locale) }
16
- translation_bundle = super(component, locale)
15
+ translation_bundle = super
16
+
17
+ begin
18
+ old_source_bundle = translation_bundle.origin.load_bundle(component, old_source_locale(locale))
19
+ rescue StandardError => e
20
+ SgtnClient.logger.error "[#{__FILE__}][#{__callee__}] failed to load old source bundle. component:#{component}. error: #{e}"
21
+ end
17
22
 
18
23
  begin
19
- old_source_bundle = old_source_bundle_thread.value
20
24
  source_bundle = source_bundle_thread.value
21
25
  rescue StandardError => e
22
- SgtnClient.logger.error "[#{__FILE__}][#{__callee__}] failed to load soruce(or old source) bundle. component:#{component}. error: #{e}"
26
+ SgtnClient.logger.error "[#{__FILE__}][#{__callee__}] failed to load source bundle. component:#{component}. error: #{e}"
23
27
  return translation_bundle
24
28
  end
25
29
 
26
30
  compare_source(translation_bundle, old_source_bundle, source_bundle)
27
31
  end
28
32
 
29
- private
33
+ protected
30
34
 
31
- def compare_source(translation_bundle, old_source_bundle, source_bundle)
32
- if !translation_bundle.is_a?(Hash) || !source_bundle.is_a?(Hash) || !old_source_bundle.is_a?(Hash)
33
- SgtnClient.logger.warn "can't do source comparison because some bundle data are wrong."
34
- return translation_bundle
35
- end
35
+ def old_source_locale(_locale)
36
+ LocaleUtil.get_source_locale
37
+ end
36
38
 
37
- source_bundle.each do |key, value|
38
- if old_source_bundle[key] != value || translation_bundle[key].nil?
39
- translation_bundle[key] = StringUtil.new(value, LocaleUtil.get_source_locale)
39
+ def compare_source(translation_bundle, old_source_bundle, source_bundle)
40
+ source_bundle.each do |k, v|
41
+ if translation_bundle[k].nil? || (!old_source_bundle.nil? && old_source_bundle[k] != v)
42
+ translation_bundle[k] = LocalizedString.new(v, LocaleUtil.get_source_locale) if v
40
43
  end
41
44
  end
42
45
  translation_bundle
43
46
  end
44
47
 
48
+ private
49
+
45
50
  def cache_to_real_map
46
51
  @cache_to_real_map ||= {
47
- LocaleUtil.get_source_locale => CONSTS::REAL_SOURCE_LOCALE,
48
- CONSTS::OLD_SOURCE_LOCALE => LocaleUtil.get_source_locale
52
+ LocaleUtil.get_source_locale => CONSTS::REAL_SOURCE_LOCALE
49
53
  }.freeze
50
54
  end
51
55
  end
@@ -11,6 +11,7 @@ module SgtnClient
11
11
  autoload :CONSTS, 'sgtn-client/loader/consts'
12
12
  autoload :LoaderFactory, 'sgtn-client/loader/loader_factory'
13
13
  autoload :LocalTranslation, 'sgtn-client/loader/local_translation'
14
+ autoload :Pseudo, 'sgtn-client/loader/pseudo'
14
15
  autoload :SgtnServer, 'sgtn-client/loader/server'
15
16
  autoload :SingleLoader, 'sgtn-client/loader/single_loader'
16
17
  autoload :SourceComparer, 'sgtn-client/loader/source_comparer'
@@ -16,9 +16,8 @@ module SgtnClient # :nodoc:
16
16
  autoload :Exceptions, 'sgtn-client/core/exceptions'
17
17
  autoload :ValidateUtil, 'sgtn-client/util/validate-util'
18
18
  autoload :LocaleUtil, 'sgtn-client/util/locale-util'
19
- autoload :StringUtil, 'sgtn-client/util/string-util'
19
+ autoload :LocalizedString, 'sgtn-client/util/localized_string'
20
20
  autoload :SingletonError, 'sgtn-client/exceptions'
21
- autoload :I18nBackend, 'sgtn-client/i18n_backend'
22
21
 
23
22
  module Formatters # :nodoc:
24
23
  autoload :PluralFormatter, 'sgtn-client/formatters/plurals/plural_formatter'
@@ -15,40 +15,38 @@ module SgtnClient
15
15
  }.freeze
16
16
  LOCALE_SEPARATOR = '-'
17
17
  EN_LOCALE = 'en'
18
- @locale_match_results = Concurrent::Map.new
18
+
19
+ @locale_match_results = Concurrent::Map.new do |hash, component|
20
+ components = SgtnClient.config.available_components
21
+ unless components.empty? || components.include?(component)
22
+ raise SingletonError, "component '#{component}' doesn't exist!"
23
+ end
24
+
25
+ hash[component] = Concurrent::Map.new
26
+ end
19
27
  @lowercase_locales_map = Concurrent::Map.new
20
28
 
21
29
  def self.get_best_locale(locale, component)
22
- component_result = @locale_match_results[component] ||= begin
23
- components = SgtnClient.config.available_components
24
- unless components.empty? || components.include?(component)
25
- raise SingletonError, "component '#{component}' doesn't exist!"
30
+ return locale if SgtnClient.config.available_locales(component).include?(locale)
31
+
32
+ component_result = @locale_match_results[component]
33
+ component_result[locale] ||= begin
34
+ if component_result.size >= 50
35
+ component_result.delete(component_result.keys[Random.rand(component_result.size)])
26
36
  end
27
37
 
28
- Concurrent::Map.new
38
+ locale = locale.to_s
39
+ if locale.empty?
40
+ get_fallback_locale
41
+ else
42
+ candidates = lowercase_locales_map(component)
43
+ if candidates.empty?
44
+ locale
45
+ else
46
+ get_best_match(locale.gsub('_', LOCALE_SEPARATOR).downcase, candidates)
47
+ end
48
+ end
29
49
  end
30
-
31
- component_result[locale] ||= begin
32
- component_result.delete(component_result.keys[Random.rand(component_result.size)]) if component_result.size >= 50
33
-
34
- if SgtnClient.config.available_locales(component).include?(locale)
35
- locale
36
- elsif locale.nil?
37
- get_fallback_locale
38
- else
39
- locale = locale.to_s
40
- if locale.empty?
41
- get_fallback_locale
42
- else
43
- candidates = lowercase_locales_map(component)
44
- if candidates.empty?
45
- locale
46
- else
47
- get_best_match(locale.gsub('_', LOCALE_SEPARATOR).downcase, candidates)
48
- end
49
- end
50
- end
51
- end
52
50
  end
53
51
 
54
52
  def self.get_best_match(locale, candidates)
@@ -2,9 +2,9 @@
2
2
  # SPDX-License-Identifier: EPL-2.0
3
3
 
4
4
  module SgtnClient
5
- class StringUtil < String
6
- def initialize(str, locale)
7
- super(str)
5
+ class LocalizedString < String
6
+ def initialize(value, locale)
7
+ super(value)
8
8
  @locale = locale
9
9
  end
10
10
 
@@ -3,7 +3,7 @@
3
3
 
4
4
  require 'i18n'
5
5
 
6
- module SgtnClient # :nodoc:
6
+ module Sgtn # :nodoc:
7
7
  # When integrating Singleton in a client application that is already using [I18n::Backend (https://www.rubydoc.info/github/svenfuchs/i18n/master/I18n/Backend/), it would be useful to have Singleton override the said module in order to minimize necessary changes. Here is a common usage:
8
8
  #
9
9
  # I18n::Backend::Simple.include(I18n::Backend::Fallbacks) # add fallbacks behavior to current backend
@@ -13,6 +13,10 @@ module SgtnClient # :nodoc:
13
13
  class I18nBackend
14
14
  def initialize(component)
15
15
  @component = component
16
+ @translation = Class.new do
17
+ include SgtnClient::Translation::Implementation
18
+ include Sgtn::Pseudo
19
+ end.new
16
20
  end
17
21
 
18
22
  def initialized?
@@ -34,13 +38,13 @@ module SgtnClient # :nodoc:
34
38
  def translations; end
35
39
 
36
40
  def exists?(locale, key, options)
37
- !!(translate(locale, key, options) { nil })
41
+ !!translate(locale, key, options)
38
42
  end
39
43
 
40
44
  def translate(locale, key, options)
41
45
  flat_key = I18n::Backend::Flatten.normalize_flat_keys(locale, key, options[:scope], '.')
42
46
  values = options.except(*I18n::RESERVED_KEYS)
43
- Translation.translate(flat_key, @component, locale, **values) { nil }
47
+ @translation.translate(flat_key, @component, locale, **values) { nil }
44
48
  end
45
49
 
46
50
  def localize(locale, object, format, options) end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2022 VMware, Inc.
4
+ # SPDX-License-Identifier: EPL-2.0
5
+
6
+ module Sgtn
7
+ module Pseudo # :nodoc:
8
+ protected
9
+
10
+ def pickup_locale(locale, _component)
11
+ locale == PSEUDO_LOCALE ? PSEUDO_LOCALE : super
12
+ end
13
+ end
14
+ end
@@ -5,6 +5,15 @@ require 'forwardable'
5
5
  require_relative 'singleton-ruby'
6
6
 
7
7
  module Sgtn # :nodoc:
8
+ autoload :Pseudo, 'singleton-client/pseudo'
9
+ autoload :I18nBackend, 'singleton-client/i18n_backend'
10
+
11
+ extend SgtnClient::Translation::Implementation
12
+ extend SgtnClient::Fallbacks
13
+ extend Sgtn::Pseudo
14
+
15
+ PSEUDO_LOCALE = 'pseudo'.freeze
16
+
8
17
  class << self
9
18
  extend Forwardable
10
19
 
@@ -13,14 +22,6 @@ module Sgtn # :nodoc:
13
22
  SgtnClient.load(config_file, env)
14
23
  end
15
24
 
16
- def_delegator SgtnClient::Config, :instance, :config
17
- delegate %i[translate! t! translate t get_translations! get_translations] => SgtnClient::Translation,
18
- %i[locale locale=] => SgtnClient,
19
- %i[logger product_name version vip_server translation_bundle
20
- source_bundle cache_expiry_period log_file log_level].flat_map { |m|
21
- [m, "#{m}=".to_sym]
22
- } => :config
23
-
24
25
  def with_locale(tmp_locale = nil)
25
26
  if tmp_locale.nil?
26
27
  yield
@@ -34,7 +35,11 @@ module Sgtn # :nodoc:
34
35
  end
35
36
  end
36
37
  end
37
- end
38
38
 
39
- I18nBackend = SgtnClient::I18nBackend
39
+ def_delegator SgtnClient::Config, :instance, :config
40
+ delegate %i[locale locale=] => SgtnClient,
41
+ %i[logger product_name version vip_server translation_bundle
42
+ source_bundle cache_expiry_period log_file log_level
43
+ pseudo_tag ].flat_map { |m| [m, "#{m}=".to_sym] } => :config
44
+ end
40
45
  end
metadata CHANGED
@@ -1,57 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: singleton-client-test
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.7.7
4
+ version: 0.7.7.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - VMware G11n Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-18 00:00:00.000000000 Z
11
+ date: 2023-01-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 1.1.10
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 1.1.10
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: faraday
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.10'
33
+ version: 1.0.1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.10'
40
+ version: 1.0.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: faraday_middleware
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.2'
47
+ version: 1.2.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1.2'
54
+ version: 1.2.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: i18n
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -84,44 +84,44 @@ dependencies:
84
84
  name: multi_json
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: '1.0'
89
+ version: '0'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - "~>"
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: '1.0'
96
+ version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: request_store
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - "~>"
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: '1.0'
103
+ version: '0'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - "~>"
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
- version: '1.0'
110
+ version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: twitter_cldr
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - "~>"
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
- version: '6.6'
117
+ version: '0'
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - "~>"
122
+ - - ">="
123
123
  - !ruby/object:Gem::Version
124
- version: '6.6'
124
+ version: '0'
125
125
  description: Singleton Ruby client
126
126
  email: g11n-vip-project@vmware.com
127
127
  executables: []
@@ -146,28 +146,31 @@ files:
146
146
  - lib/sgtn-client/exceptions.rb
147
147
  - lib/sgtn-client/fallbacks.rb
148
148
  - lib/sgtn-client/formatters/plurals/plural_formatter.rb
149
- - lib/sgtn-client/i18n_backend.rb
150
149
  - lib/sgtn-client/loader.rb
151
150
  - lib/sgtn-client/loader/cache.rb
152
151
  - lib/sgtn-client/loader/chain_loader.rb
153
152
  - lib/sgtn-client/loader/consts.rb
154
153
  - lib/sgtn-client/loader/loader_factory.rb
155
154
  - lib/sgtn-client/loader/local_translation.rb
155
+ - lib/sgtn-client/loader/pseudo.rb
156
156
  - lib/sgtn-client/loader/server.rb
157
157
  - lib/sgtn-client/loader/single_loader.rb
158
158
  - lib/sgtn-client/loader/source.rb
159
159
  - lib/sgtn-client/loader/source_comparer.rb
160
160
  - lib/sgtn-client/sgtn-client.rb
161
161
  - lib/sgtn-client/util/locale-util.rb
162
- - lib/sgtn-client/util/string-util.rb
162
+ - lib/sgtn-client/util/localized_string.rb
163
163
  - lib/sgtn-client/util/validate-util.rb
164
164
  - lib/singleton-client.rb
165
+ - lib/singleton-client/i18n_backend.rb
166
+ - lib/singleton-client/pseudo.rb
165
167
  - lib/singleton-ruby.rb
166
168
  - lib/version.rb
167
169
  homepage: https://github.com/vmware/singleton
168
170
  licenses:
169
171
  - EPL 2.0
170
- metadata: {}
172
+ metadata:
173
+ rubygems_mfa_required: 'true'
171
174
  post_install_message:
172
175
  rdoc_options: []
173
176
  require_paths:
@@ -176,14 +179,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
176
179
  requirements:
177
180
  - - ">="
178
181
  - !ruby/object:Gem::Version
179
- version: 2.0.0
182
+ version: 2.3.0
180
183
  required_rubygems_version: !ruby/object:Gem::Requirement
181
184
  requirements:
182
185
  - - ">="
183
186
  - !ruby/object:Gem::Version
184
187
  version: '0'
185
188
  requirements: []
186
- rubygems_version: 3.2.22
189
+ rubygems_version: 3.3.26
187
190
  signing_key:
188
191
  specification_version: 4
189
192
  summary: Singleton Ruby client