singleton-client-test 0.7.0.37 → 0.7.7.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: 365e6be5a17d3f95f2529789f8632092e859c793c96d67b4f8ddd6492f3e3687
4
- data.tar.gz: a2df815daeda06f52484e61ef7c64e2c5bc6ce5d46332a10b60187bbc2440a59
3
+ metadata.gz: 66531dc1471879c17d807694ff65b64e60bfd35a093d7eb739b728d7e0ae3321
4
+ data.tar.gz: 200e2f4b3ab09a0cfeefe1131ed61494fbec0a1f63974d36a9ce9379d117d066
5
5
  SHA512:
6
- metadata.gz: 64ef532c3de19ee72c7b0c28661c1192856eb9ebdef0a335d7d702d98b0d7bf56411691cd3ce2c8ceeae829d0d8d8eaad53981cde88721b49e606c657f053028
7
- data.tar.gz: 27d63abbf9b7df87e20997664eebc97853ae1837f5f3c3853c1f77ce1ace43000d25482ae6f261a3d18788fbba9f026ca75374e1a14c078aa068dbdfec8a532a
6
+ metadata.gz: d85cd8e706659abb1ec1a6e1364b5fcddf2b2c14bca9d616e49d0d28a7657984e26752e48b310763e51f536cbaefb56d99585fe09d46a68cc8cc75f1504e784b
7
+ data.tar.gz: 924846467b0707fb90b95f77a604546822e2e1ae3dbbc79cb3541fdbd1dcc99fd17df0b00762dd5ee2073a08a8f2044cbb260f986ded95e6ca42ce089cf35046
@@ -4,12 +4,10 @@
4
4
  require 'sgtn-client/loader/source'
5
5
 
6
6
  module SgtnClient
7
- autoload :CacheUtil, 'sgtn-client/util/cache-util'
8
-
9
7
  class Source
10
8
  def self.loadBundles(locale)
11
9
  SgtnClient.logger.debug "[Source][loadBundles]locale=#{locale}"
12
- SgtnClient::Config.configurations.default = locale
10
+ Config.configurations.default = locale
13
11
  end
14
12
  end
15
13
  end
@@ -1,6 +1,8 @@
1
1
  # Copyright 2022 VMware, Inc.
2
2
  # SPDX-License-Identifier: EPL-2.0
3
3
 
4
+ require 'request_store'
5
+
4
6
  module SgtnClient
5
7
  class T
6
8
  def self.s(key)
@@ -43,7 +43,7 @@ module SgtnClient
43
43
  def translate(key, component, locale = nil, **kwargs)
44
44
  SgtnClient.logger.debug "[#{method(__callee__).owner}.#{__callee__}] key: #{key}, component: #{component}, locale: #{locale}, args: #{kwargs}"
45
45
 
46
- locale = locale.nil? ? self.locale : SgtnClient::LocaleUtil.get_best_locale(locale)
46
+ locale = locale.nil? ? self.locale : LocaleUtil.get_best_locale(locale)
47
47
 
48
48
  result = get_bundle(component, locale)&.fetch(key, nil)
49
49
  if result.nil? && !LocaleUtil.is_source_locale(locale)
@@ -61,7 +61,7 @@ module SgtnClient
61
61
  if kwargs.empty?
62
62
  result
63
63
  else
64
- locale = result.locale if result.is_a?(SgtnClient::StringUtil)
64
+ locale = result.locale if result.is_a?(StringUtil)
65
65
  result.localize(locale) % kwargs
66
66
  end
67
67
  end
@@ -70,7 +70,7 @@ module SgtnClient
70
70
  def get_translations(component, locale = nil)
71
71
  SgtnClient.logger.debug "[#{method(__callee__).owner}.#{__callee__}] component: #{component}, locale: #{locale}"
72
72
 
73
- locale = locale.nil? ? self.locale : SgtnClient::LocaleUtil.get_best_locale(locale)
73
+ locale = locale.nil? ? self.locale : LocaleUtil.get_best_locale(locale)
74
74
  items = get_bundle(component, locale)
75
75
  if items.nil? && !LocaleUtil.is_source_locale(locale)
76
76
  items = get_bundle(component, LocaleUtil.get_source_locale)
@@ -81,11 +81,11 @@ module SgtnClient
81
81
  end
82
82
 
83
83
  def locale
84
- RequestStore.store[:locale] ||= SgtnClient::LocaleUtil.get_fallback_locale
84
+ RequestStore.store[:locale] ||= LocaleUtil.get_fallback_locale
85
85
  end
86
86
 
87
87
  def locale=(value)
88
- RequestStore.store[:locale] = SgtnClient::LocaleUtil.get_best_locale(value)
88
+ RequestStore.store[:locale] = LocaleUtil.get_best_locale(value)
89
89
  end
90
90
 
91
91
  private
@@ -99,13 +99,13 @@ module SgtnClient
99
99
  end
100
100
 
101
101
  def get_bundle!(component, locale)
102
- id = SgtnClient::Common::BundleID.new(component, locale)
103
- bundles = SgtnClient::Config.available_bundles
102
+ id = Common::BundleID.new(component, locale)
103
+ bundles = Config.available_bundles
104
104
  unless bundles.nil? || bundles.empty? || bundles.include?(id)
105
- raise SgtnClient::SingletonError, 'bundle is unavailable.'
105
+ raise SingletonError, 'bundle is unavailable.'
106
106
  end
107
107
 
108
- SgtnClient::Config.loader.get_bundle(component, locale)
108
+ Config.loader.get_bundle(component, locale)
109
109
  end
110
110
  end
111
111
  extend Implementation
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2022 VMware, Inc.
4
+ # SPDX-License-Identifier: EPL-2.0
5
+
6
+ module SgtnClient
7
+ module Common # :nodoc:
8
+ autoload :BundleID, 'sgtn-client/common/data'
9
+ end
10
+ end
@@ -1,7 +1,7 @@
1
1
  # Copyright 2022 VMware, Inc.
2
2
  # SPDX-License-Identifier: EPL-2.0
3
3
 
4
- require 'date'
4
+ require 'time'
5
5
 
6
6
  module SgtnClient::Core
7
7
  class Cache
@@ -31,4 +31,4 @@ module SgtnClient::Core
31
31
  end
32
32
  end
33
33
 
34
- end
34
+ end
@@ -3,15 +3,10 @@
3
3
 
4
4
  require 'erb'
5
5
  require 'yaml'
6
+ require 'set'
6
7
  require 'observer'
7
8
 
8
9
  module SgtnClient
9
- #include Exceptions
10
-
11
- module TranslationLoader
12
- autoload :LoaderFactory, 'sgtn-client/loader/loader_factory'
13
- end
14
-
15
10
  module Configuration
16
11
 
17
12
  def config
@@ -130,7 +125,7 @@ module SgtnClient
130
125
  if configurations[env]
131
126
  @@config_cache[env] ||= new(configurations[env])
132
127
  else
133
- raise SgtnClient::Exceptions::MissingConfig.new("Configuration[#{env}] NotFound")
128
+ raise Exceptions::MissingConfig.new("Configuration[#{env}] NotFound")
134
129
  end
135
130
  end
136
131
 
@@ -162,8 +157,8 @@ module SgtnClient
162
157
 
163
158
  def loader
164
159
  @loader ||= begin
165
- config = SgtnClient::Config.configurations[SgtnClient::Config.default_environment]
166
- SgtnClient::TranslationLoader::LoaderFactory.create(config)
160
+ config = Config.configurations[Config.default_environment]
161
+ TranslationLoader::LoaderFactory.create(config)
167
162
  end
168
163
  end
169
164
 
@@ -2,6 +2,7 @@
2
2
  # SPDX-License-Identifier: EPL-2.0
3
3
 
4
4
  require 'logger'
5
+ require 'time'
5
6
 
6
7
  module SgtnClient
7
8
 
@@ -0,0 +1,46 @@
1
+ # Copyright 2022 VMware, Inc.
2
+ # SPDX-License-Identifier: EPL-2.0
3
+
4
+ require 'i18n'
5
+
6
+ module SgtnClient # :nodoc:
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
+ #
9
+ # I18n::Backend::Simple.include(I18n::Backend::Fallbacks) # add fallbacks behavior to current backend
10
+ # I18n.backend = I18n::Backend::Chain.new(Sgtn::I18nBackend.new(component_name), I18n.backend)
11
+ # I18n.enforce_available_locales=false # disable available locales check
12
+ # I18n.default_locale = :en
13
+ class I18nBackend
14
+ def initialize(component)
15
+ @component = component
16
+ end
17
+
18
+ def initialized?
19
+ @initialized = true
20
+ end
21
+
22
+ def load_translations(*) end
23
+
24
+ def store_translations(*) end
25
+
26
+ def available_locales
27
+ SgtnClient::Config.available_locales.to_a
28
+ end
29
+
30
+ def reload!; end
31
+
32
+ def eager_load!; end
33
+
34
+ def translations; end
35
+
36
+ def exists?(locale, key)
37
+ !!(translate(locale, key) { nil })
38
+ end
39
+
40
+ def translate(locale, key, options)
41
+ flat_key = I18n::Backend::Flatten.normalize_flat_keys(locale, key, options[:scope], '.')
42
+ values = options.except(*I18n::RESERVED_KEYS)
43
+ SgtnClient::Translation.translate(flat_key, @component, locale, **values) { nil }
44
+ end
45
+ end
46
+ end
@@ -4,20 +4,16 @@
4
4
  # SPDX-License-Identifier: EPL-2.0
5
5
 
6
6
  module SgtnClient
7
- autoload :CacheUtil, 'sgtn-client/util/cache-util'
8
-
9
7
  module TranslationLoader
10
- autoload :CONSTS, 'sgtn-client/loader/consts'
11
-
12
8
  module Cache # :nodoc:
13
9
  # get from cache, return expired data immediately
14
10
  def get_bundle(component, locale)
15
11
  SgtnClient.logger.debug "[#{__FILE__}][#{__callee__}] component=#{component}, locale=#{locale}"
16
12
 
17
- key = SgtnClient::CacheUtil.get_cachekey(component, locale)
18
- cache_item = SgtnClient::CacheUtil.get_cache(key)
13
+ key = CacheUtil.get_cachekey(component, locale)
14
+ cache_item = CacheUtil.get_cache(key)
19
15
  if cache_item
20
- if SgtnClient::CacheUtil.is_expired(cache_item)
16
+ if CacheUtil.is_expired(cache_item)
21
17
  Thread.new do # TODO: Use one thread # refresh in background
22
18
  begin
23
19
  load_bundle(component, locale)
@@ -37,22 +33,22 @@ module SgtnClient
37
33
  def load_bundle(component, locale)
38
34
  SgtnClient.logger.debug "[#{__FILE__}][#{__callee__}] component=#{component}, locale=#{locale}"
39
35
 
40
- key = SgtnClient::CacheUtil.get_cachekey(component, locale)
36
+ key = CacheUtil.get_cachekey(component, locale)
41
37
  item = super
42
- SgtnClient::CacheUtil.write_cache(key, item) if item
38
+ CacheUtil.write_cache(key, item) if item
43
39
  item
44
40
  end
45
41
 
46
42
  def available_bundles
47
43
  SgtnClient.logger.debug "[#{__FILE__}][#{__callee__}]"
48
44
 
49
- cache_item = SgtnClient::CacheUtil.get_cache(CONSTS::AVAILABLE_BUNDLES_KEY)
45
+ cache_item = CacheUtil.get_cache(CONSTS::AVAILABLE_BUNDLES_KEY)
50
46
  if cache_item
51
- if SgtnClient::CacheUtil.is_expired(cache_item)
47
+ if CacheUtil.is_expired(cache_item)
52
48
  Thread.new do # TODO: Use one thread
53
49
  begin
54
50
  item = super
55
- SgtnClient::CacheUtil.write_cache(CONSTS::AVAILABLE_BUNDLES_KEY, item) if item
51
+ CacheUtil.write_cache(CONSTS::AVAILABLE_BUNDLES_KEY, item) if item
56
52
  rescue StandardError => e
57
53
  SgtnClient.logger.error 'an error occured while loading available bundles.'
58
54
  SgtnClient.logger.error e
@@ -63,7 +59,7 @@ module SgtnClient
63
59
  end
64
60
 
65
61
  item = super
66
- SgtnClient::CacheUtil.write_cache(CONSTS::AVAILABLE_BUNDLES_KEY, item) if item
62
+ CacheUtil.write_cache(CONSTS::AVAILABLE_BUNDLES_KEY, item) if item
67
63
  item
68
64
  end
69
65
  end
@@ -1,6 +1,8 @@
1
1
  # Copyright 2022 VMware, Inc.
2
2
  # SPDX-License-Identifier: EPL-2.0
3
3
 
4
+ require 'set'
5
+
4
6
  module SgtnClient
5
7
  module TranslationLoader
6
8
  class Chain
@@ -23,7 +25,7 @@ module SgtnClient
23
25
  end
24
26
  end
25
27
 
26
- raise exception || SgtnClient::SingletonError.new("can't load component: #{component}, locale: #{locale}")
28
+ raise exception || SingletonError.new("can't load component: #{component}, locale: #{locale}")
27
29
  end
28
30
 
29
31
  def available_bundles
@@ -3,14 +3,6 @@
3
3
 
4
4
  module SgtnClient
5
5
  module TranslationLoader
6
- autoload :Source, 'sgtn-client/loader/source'
7
- autoload :SgtnServer, 'sgtn-client/loader/server'
8
- autoload :LocalTranslation, 'sgtn-client/loader/local_translation'
9
- autoload :Chain, 'sgtn-client/loader/chain_loader'
10
- autoload :SourceComparer, 'sgtn-client/loader/source_comparer'
11
- autoload :SingleLoader, 'sgtn-client/loader/single_loader'
12
- autoload :Cache, 'sgtn-client/loader/cache'
13
-
14
6
  module LoaderFactory
15
7
  def self.create(config)
16
8
  SgtnClient.logger.info "[#{method(__callee__).owner}.#{__callee__}] config=#{config}"
@@ -19,10 +11,10 @@ module SgtnClient
19
11
  loaders << Source.new(config) if config['source_bundle']
20
12
  loaders << SgtnServer.new(config) if config['vip_server']
21
13
  loaders << LocalTranslation.new(config) if config['translation_bundle']
22
- raise SgtnClient::SingletonError, 'no translation is available!' if loaders.empty?
14
+ raise SingletonError, 'no translation is available!' if loaders.empty?
23
15
 
24
16
  chain_loader = Class.new(Chain)
25
- chain_loader.include SourceComparer if config['source_bundle'] || config['vip_server']
17
+ chain_loader.include SourceComparer
26
18
  chain_loader.include SingleLoader
27
19
  chain_loader.include Cache
28
20
 
@@ -3,15 +3,10 @@
3
3
 
4
4
  require 'json'
5
5
  require 'pathname'
6
+ require 'set'
6
7
 
7
8
  module SgtnClient
8
- module Common
9
- autoload :BundleID, 'sgtn-client/common/data'
10
- end
11
-
12
9
  module TranslationLoader
13
- autoload :CONSTS, 'sgtn-client/loader/consts'
14
-
15
10
  class LocalTranslation
16
11
  BUNDLE_PREFIX = 'messages_'.freeze
17
12
  BUNDLE_SUFFIX = '.json'.freeze
@@ -21,8 +16,6 @@ module SgtnClient
21
16
  end
22
17
 
23
18
  def load_bundle(component, locale)
24
- return if locale == CONSTS::REAL_SOURCE_LOCALE # return when querying source
25
-
26
19
  SgtnClient.logger.debug "[#{method(__callee__).owner}.#{__callee__}] component=#{component}, locale=#{locale}"
27
20
 
28
21
  file_name = BUNDLE_PREFIX + locale + BUNDLE_SUFFIX
@@ -31,7 +24,7 @@ module SgtnClient
31
24
  bundle_data = JSON.parse(File.read(file_path))
32
25
  messages = bundle_data['messages']
33
26
 
34
- raise SgtnClient::SingletonError, "no messages in local bundle file: #{file_path}." unless messages
27
+ raise SingletonError, "no messages in local bundle file: #{file_path}." unless messages
35
28
 
36
29
  messages
37
30
  end
@@ -5,15 +5,10 @@
5
5
 
6
6
  require 'faraday'
7
7
  require 'faraday_middleware'
8
+ require 'set'
8
9
 
9
10
  module SgtnClient
10
- module Common
11
- autoload :BundleID, 'sgtn-client/common/data'
12
- end
13
-
14
11
  module TranslationLoader
15
- autoload :CONSTS, 'sgtn-client/loader/consts'
16
-
17
12
  class SgtnServer
18
13
  ERROR_ILLEGAL_DATA = 'server returned illegal data.'
19
14
  ERROR_BUSINESS_ERROR = 'server returned business error.'
@@ -23,7 +18,7 @@ module SgtnClient
23
18
  def initialize(config)
24
19
  @server_url = config['vip_server']
25
20
 
26
- product_root = format('/i18n/api/v2/translation/products/%s/versions/%s', config['product_name'], config['version'])
21
+ product_root = format('i18n/api/v2/translation/products/%s/versions/%s', config['product_name'], config['version'])
27
22
 
28
23
  @bundle_url = "#{product_root}/locales/%s/components/%s"
29
24
  @locales_url = "#{product_root}/localelist"
@@ -73,7 +68,7 @@ module SgtnClient
73
68
 
74
69
  def extract_data(parsedbody, path_to_data)
75
70
  data = parsedbody.dig('data', *path_to_data)
76
- raise SgtnClient::SingletonError, "no expected data in response. Body is: #{parsedbody}" unless data
71
+ raise SingletonError, "no expected data in response. Body is: #{parsedbody}" unless data
77
72
 
78
73
  data
79
74
  end
@@ -81,13 +76,13 @@ module SgtnClient
81
76
  def process_business_error(parsedbody)
82
77
  b_code = parsedbody.dig('response', 'code')
83
78
  unless b_code >= 200 && b_code < 300 || b_code >= 600 && b_code < 700
84
- raise SgtnClient::SingletonError, "#{ERROR_BUSINESS_ERROR} #{parsedbody['response']}"
79
+ raise SingletonError, "#{ERROR_BUSINESS_ERROR} #{parsedbody['response']}"
85
80
  end
86
81
 
87
82
  # 600 means a successful response, 6xx means partial successful.
88
83
  SgtnClient.logger.warn "#{ERROR_BUSINESS_ERROR} #{parsedbody['response']}" if b_code > 600
89
84
  rescue TypeError, ArgumentError, NoMethodError => e
90
- raise SgtnClient::SingletonError, "#{ERROR_ILLEGAL_DATA} #{e}. Body is: #{parsedbody}"
85
+ raise SingletonError, "#{ERROR_ILLEGAL_DATA} #{e}. Body is: #{parsedbody}"
91
86
  end
92
87
  end
93
88
  end
@@ -2,12 +2,7 @@
2
2
  # SPDX-License-Identifier: EPL-2.0
3
3
 
4
4
  module SgtnClient
5
- autoload :SingleOperation, 'sgtn-client/common/single_operation'
6
- autoload :CacheUtil, 'sgtn-client/util/cache-util'
7
-
8
5
  module TranslationLoader
9
- autoload :CONSTS, 'sgtn-client/loader/consts'
10
-
11
6
  module SingleLoader
12
7
  def load_bundle(component, locale)
13
8
  SgtnClient.logger.debug "[#{__FILE__}][#{__callee__}] component=#{component}, locale=#{locale}"
@@ -41,7 +36,7 @@ module SgtnClient
41
36
  end
42
37
  end
43
38
 
44
- loader = SgtnClient::SingleOperation.new(none_alive, &creator)
39
+ loader = SingleOperation.new(none_alive, &creator)
45
40
  end
46
41
  end
47
42
  end
@@ -2,16 +2,11 @@
2
2
  # SPDX-License-Identifier: EPL-2.0
3
3
 
4
4
  require 'pathname'
5
- require 'psych/simple'
5
+ require 'set'
6
+ require 'yaml'
6
7
 
7
8
  module SgtnClient
8
- module Common
9
- autoload :BundleID, 'sgtn-client/common/data'
10
- end
11
-
12
9
  module TranslationLoader
13
- autoload :CONSTS, 'sgtn-client/loader/consts'
14
-
15
10
  class Source
16
11
  def initialize(config)
17
12
  @source_bundle_path = Pathname.new(config['source_bundle'])
@@ -25,7 +20,7 @@ module SgtnClient
25
20
  total_messages = {}
26
21
 
27
22
  (@source_bundle_path + component).glob('**/*.{yml, yaml}') do |f|
28
- bundle = Psych.simple_load(File.read(f))
23
+ bundle = YAML.load(File.read(f))
29
24
  messages = bundle&.first&.last # TODO: Warn about inconsistent source locale
30
25
  if messages.is_a?(Hash)
31
26
  total_messages.merge!(messages)
@@ -34,7 +29,7 @@ module SgtnClient
34
29
  end
35
30
  end
36
31
 
37
- raise SgtnClient::SingletonError, "no local source messages for component #{component}" if total_messages.empty?
32
+ raise SingletonError, "no local source messages for component #{component}" if total_messages.empty?
38
33
 
39
34
  total_messages
40
35
  end
@@ -45,7 +40,7 @@ module SgtnClient
45
40
  @available_bundles ||= begin
46
41
  @source_bundle_path.children.select(&:directory?).reduce(Set.new) do |bundles, component|
47
42
  component.glob('**/*.{yml, yaml}') do |_|
48
- bundles << Common::BundleID.new(component.basename.to_s, SgtnClient::LocaleUtil.get_source_locale)
43
+ bundles << Common::BundleID.new(component.basename.to_s, LocaleUtil.get_source_locale)
49
44
  break bundles
50
45
  end || bundles
51
46
  end
@@ -2,12 +2,7 @@
2
2
  # SPDX-License-Identifier: EPL-2.0
3
3
 
4
4
  module SgtnClient
5
- autoload :StringUtil, 'sgtn-client/util/string-util'
6
- autoload :LocaleUtil, 'sgtn-client/util/locale-util'
7
-
8
5
  module TranslationLoader
9
- autoload :CONSTS, 'sgtn-client/loader/consts'
10
-
11
6
  module SourceComparer
12
7
  def load_bundle(component, locale)
13
8
  SgtnClient.logger.debug "[#{__FILE__}][#{__callee__}] component=#{component}, locale=#{locale}"
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2022 VMware, Inc.
4
+ # SPDX-License-Identifier: EPL-2.0
5
+
6
+ module SgtnClient
7
+ module TranslationLoader # :nodoc:
8
+ autoload :Cache, 'sgtn-client/loader/cache'
9
+ autoload :Chain, 'sgtn-client/loader/chain_loader'
10
+ autoload :CONSTS, 'sgtn-client/loader/consts'
11
+ autoload :LoaderFactory, 'sgtn-client/loader/loader_factory'
12
+ autoload :LocalTranslation, 'sgtn-client/loader/local_translation'
13
+ autoload :SgtnServer, 'sgtn-client/loader/server'
14
+ autoload :SingleLoader, 'sgtn-client/loader/single_loader'
15
+ autoload :SourceComparer, 'sgtn-client/loader/source_comparer'
16
+ autoload :Source, 'sgtn-client/loader/source'
17
+ end
18
+ end
@@ -4,6 +4,10 @@
4
4
  module SgtnClient
5
5
  LOGFILE_SHIFT_AGE = 4
6
6
 
7
+ autoload :Common, 'sgtn-client/common'
8
+ autoload :TranslationLoader, 'sgtn-client/loader'
9
+ autoload :SingleOperation, 'sgtn-client/common/single_operation'
10
+
7
11
  module Core
8
12
  autoload :Cache, "sgtn-client/core/cache"
9
13
  end
@@ -16,8 +20,10 @@ module SgtnClient
16
20
  autoload :Exceptions, "sgtn-client/core/exceptions"
17
21
  autoload :ValidateUtil, "sgtn-client/util/validate-util"
18
22
  autoload :LocaleUtil, "sgtn-client/util/locale-util"
19
- autoload :FileUtil, "sgtn-client/util/file-util"
20
23
  autoload :CacheUtil, "sgtn-client/util/cache-util"
24
+ autoload :StringUtil, "sgtn-client/util/string-util"
25
+ autoload :SingletonError, 'sgtn-client/exceptions'
26
+ autoload :I18nBackend, "sgtn-client/i18n_backend"
21
27
 
22
28
  module Formatters
23
29
  autoload :PluralFormatter, "sgtn-client/formatters/plurals/plural_formatter"
@@ -26,15 +32,15 @@ module SgtnClient
26
32
 
27
33
  class << self
28
34
  def configure(options = {}, &block)
29
- SgtnClient::Config.configure(options, &block)
35
+ Config.configure(options, &block)
30
36
  end
31
37
 
32
38
  include Logging
33
39
  def load(*args)
34
40
  # load configuration file
35
41
  begin
36
- SgtnClient::Config.load(args[0], args[1])
37
- SgtnClient::ValidateUtil.validate_config()
42
+ Config.load(args[0], args[1])
43
+ ValidateUtil.validate_config()
38
44
  rescue => exception
39
45
  file = File.open('./error.log', 'a')
40
46
  file.sync = true
@@ -44,40 +50,40 @@ module SgtnClient
44
50
 
45
51
  # create log file
46
52
  file = './sgtnclient_d.log'
47
- SgtnClient.logger.debug "[Client][load]create log file=#{file}"
53
+ logger.debug "[Client][load]create log file=#{file}"
48
54
  if args[2] != nil
49
55
  file = args[2]
50
56
  end
51
57
  file = File.open(file, 'a')
52
58
  file.sync = true
53
- SgtnClient.logger = Logger.new(file, LOGFILE_SHIFT_AGE)
59
+ logger = Logger.new(file, LOGFILE_SHIFT_AGE)
54
60
 
55
61
  # Set log level for sandbox mode
56
- env = SgtnClient::Config.default_environment
57
- mode = SgtnClient::Config.configurations[env]["mode"]
58
- SgtnClient.logger.debug "[Client][load]set log level, mode=#{mode}"
62
+ env = Config.default_environment
63
+ mode = Config.configurations[env]["mode"]
64
+ logger.debug "[Client][load]set log level, mode=#{mode}"
59
65
  if mode == 'sandbox'
60
- SgtnClient.logger.level = Logger::DEBUG
66
+ logger.level = Logger::DEBUG
61
67
  else
62
- SgtnClient.logger.level = Logger::INFO
68
+ logger.level = Logger::INFO
63
69
  end
64
70
 
65
71
  # initialize cache
66
- disable_cache = SgtnClient::Config.configurations[env]["disable_cache"]
67
- SgtnClient.logger.debug "[Client][load]cache initialize, disable_cache=#{disable_cache}"
72
+ disable_cache = Config.configurations[env]["disable_cache"]
73
+ logger.debug "[Client][load]cache initialize, disable_cache=#{disable_cache}"
68
74
  if disable_cache != nil
69
- SgtnClient::Core::Cache.initialize(disable_cache)
75
+ Core::Cache.initialize(disable_cache)
70
76
  else
71
- SgtnClient::Core::Cache.initialize()
77
+ Core::Cache.initialize()
72
78
  end
73
79
  end
74
80
 
75
81
  def logger
76
- SgtnClient::Config.logger
82
+ Config.logger
77
83
  end
78
84
 
79
85
  def logger=(log)
80
- SgtnClient::Config.logger = log
86
+ Config.logger = log
81
87
  end
82
88
  end
83
89
 
@@ -1,34 +1,32 @@
1
1
  # Copyright 2022 VMware, Inc.
2
2
  # SPDX-License-Identifier: EPL-2.0
3
3
 
4
- module SgtnClient
5
- module Core
6
- autoload :Cache, 'sgtn-client/core/cache'
7
- end
4
+ require 'time'
8
5
 
6
+ module SgtnClient
9
7
  class CacheUtil
10
8
  def self.get_cache(cache_key)
11
- SgtnClient::Core::Cache.get(cache_key)
9
+ Core::Cache.get(cache_key)
12
10
  end
13
11
 
14
12
  def self.clear_cache
15
- SgtnClient::Core::Cache.clear
13
+ Core::Cache.clear
16
14
  end
17
15
 
18
16
  def self.write_cache(cache_key, items)
19
17
  return nil if items.nil? || items.empty?
20
18
 
21
- env = SgtnClient::Config.default_environment
22
- cache_expiry_period = SgtnClient::Config.configurations[env]['cache_expiry_period']
19
+ env = Config.default_environment
20
+ cache_expiry_period = Config.configurations[env]['cache_expiry_period']
23
21
  # expired after 24 hours
24
22
  cache_expiry_period = 24 * 60 if cache_expiry_period.nil?
25
- SgtnClient::Core::Cache.put(cache_key, items, cache_expiry_period)
23
+ Core::Cache.put(cache_key, items, cache_expiry_period)
26
24
  end
27
25
 
28
26
  def self.get_cachekey(component, locale)
29
- env = SgtnClient::Config.default_environment
30
- product_name = SgtnClient::Config.configurations[env]['product_name']
31
- version = SgtnClient::Config.configurations[env]['version'].to_s
27
+ env = Config.default_environment
28
+ product_name = Config.configurations[env]['product_name']
29
+ version = Config.configurations[env]['version'].to_s
32
30
  product_name + '_' + version + '_' + component + '_' + locale
33
31
  end
34
32
 
@@ -3,8 +3,6 @@
3
3
  # Copyright 2022 VMware, Inc.
4
4
  # SPDX-License-Identifier: EPL-2.0
5
5
 
6
- require 'set'
7
-
8
6
  module SgtnClient
9
7
  class LocaleUtil
10
8
  MAP_LOCALES = {
@@ -45,8 +43,8 @@ module SgtnClient
45
43
  end
46
44
 
47
45
  def self.get_default_locale
48
- env = SgtnClient::Config.default_environment
49
- SgtnClient::Config.configurations[env]['default_language']
46
+ env = Config.default_environment
47
+ Config.configurations[env]['default_language']
50
48
  end
51
49
 
52
50
  def self.get_fallback_locale
@@ -63,7 +61,7 @@ module SgtnClient
63
61
  @lowercase_locales_map = nil if type == :available_locales
64
62
  end
65
63
 
66
- SgtnClient::Config.add_observer(self, :reset_available_locales)
64
+ Config.add_observer(self, :reset_available_locales)
67
65
 
68
66
  private_class_method :get_best_match, :lowercase_locales_map, :reset_available_locales
69
67
  end
@@ -6,32 +6,32 @@ module SgtnClient
6
6
  class ValidateUtil
7
7
 
8
8
  def self.validate_config()
9
- env = SgtnClient::Config.default_environment
9
+ env = Config.default_environment
10
10
  SgtnClient.logger.debug "[ValidateUtil][validate_config] env = #{env}"
11
11
  messages = "\n"
12
12
 
13
- mode = SgtnClient::Config.configurations[env]["mode"]
13
+ mode = Config.configurations[env]["mode"]
14
14
  if mode != 'sandbox' && mode != 'live'
15
15
  messages = messages + "Configuration[mode] has to be 'sandbox' or 'live'!\n"
16
16
  end
17
17
 
18
- #version = SgtnClient::Config.configurations[env]["version"]
18
+ #version = Config.configurations[env]["version"]
19
19
  #if version.is_a? Integer
20
20
  #messages = messages + "Configuration[version] has to be standard as '#.#.#, e.g '1.0.0'!\n"
21
21
  #end
22
22
 
23
- cache_expiry_period = SgtnClient::Config.configurations[env]["cache_expiry_period"]
23
+ cache_expiry_period = Config.configurations[env]["cache_expiry_period"]
24
24
  if cache_expiry_period != nil && (cache_expiry_period.is_a? Integer) == false
25
25
  messages = messages + "Configuration[cache_expiry_period] has to be a number!\n"
26
26
  end
27
27
 
28
- disable_cache = SgtnClient::Config.configurations[env]["disable_cache"]
28
+ disable_cache = Config.configurations[env]["disable_cache"]
29
29
  if disable_cache != nil && disable_cache != false && disable_cache != true
30
30
  messages = messages + "Configuration[disable_cache] has to be a 'true' or 'false'!\n"
31
31
  end
32
32
 
33
33
  if messages != "\n"
34
- raise SgtnClient::Exceptions::MissingConfig.new(messages)
34
+ raise Exceptions::MissingConfig.new(messages)
35
35
  end
36
36
  end
37
37
 
@@ -1,15 +1,15 @@
1
1
  # Copyright 2022 VMware, Inc.
2
2
  # SPDX-License-Identifier: EPL-2.0
3
3
 
4
+ require 'forwardable'
4
5
  require_relative 'singleton-ruby'
5
6
 
6
7
  module Sgtn # :nodoc:
7
- # load configuration from a file
8
- def self.load_config(*args)
9
- SgtnClient.load(*args)
8
+ class << self
9
+ extend Forwardable
10
+ def_delegator SgtnClient, :load, :load_config
11
+ def_delegators SgtnClient::Translation, :translate, :t, :get_translations, :locale, :locale=
10
12
  end
11
13
 
12
- extend SgtnClient::Translation::Implementation
13
-
14
- private_class_method :getString, :getString_p, :getString_f, :getStrings
14
+ I18nBackend = SgtnClient::I18nBackend
15
15
  end
@@ -1,8 +1,7 @@
1
1
  # Copyright 2022 VMware, Inc.
2
2
  # SPDX-License-Identifier: EPL-2.0
3
3
 
4
- require "sgtn-client/sgtn-client"
5
- require 'sgtn-client/cldr/core_ext'
6
4
  require 'twitter_cldr'
5
+ require 'sgtn-client/cldr/core_ext'
7
6
 
8
- require 'sgtn-client/exceptions.rb'
7
+ require 'sgtn-client/sgtn-client'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: singleton-client-test
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0.37
4
+ version: 0.7.7.1
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-05-20 00:00:00.000000000 Z
11
+ date: 2022-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rdoc
@@ -48,16 +48,16 @@ dependencies:
48
48
  name: rubocop
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - "~>"
51
+ - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: '0.49'
53
+ version: '0'
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - "~>"
58
+ - - ">="
59
59
  - !ruby/object:Gem::Version
60
- version: '0.49'
60
+ version: '0'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: webmock
63
63
  requirement: !ruby/object:Gem::Requirement
@@ -143,19 +143,19 @@ dependencies:
143
143
  - !ruby/object:Gem::Version
144
144
  version: '6.6'
145
145
  - !ruby/object:Gem::Dependency
146
- name: psych-simple
146
+ name: i18n
147
147
  requirement: !ruby/object:Gem::Requirement
148
148
  requirements:
149
- - - "~>"
149
+ - - ">="
150
150
  - !ruby/object:Gem::Version
151
- version: '2.0'
151
+ version: '0'
152
152
  type: :runtime
153
153
  prerelease: false
154
154
  version_requirements: !ruby/object:Gem::Requirement
155
155
  requirements:
156
- - - "~>"
156
+ - - ">="
157
157
  - !ruby/object:Gem::Version
158
- version: '2.0'
158
+ version: '0'
159
159
  description: Singleton Ruby client
160
160
  email: g11n-vip-project@vmware.com
161
161
  executables: []
@@ -172,6 +172,7 @@ files:
172
172
  - lib/sgtn-client/cldr/localized_datetime.rb
173
173
  - lib/sgtn-client/cldr/localized_str.rb
174
174
  - lib/sgtn-client/cldr/localized_time.rb
175
+ - lib/sgtn-client/common.rb
175
176
  - lib/sgtn-client/common/data.rb
176
177
  - lib/sgtn-client/common/single_operation.rb
177
178
  - lib/sgtn-client/core/cache.rb
@@ -180,6 +181,8 @@ files:
180
181
  - lib/sgtn-client/core/logging.rb
181
182
  - lib/sgtn-client/exceptions.rb
182
183
  - lib/sgtn-client/formatters/plurals/plural_formatter.rb
184
+ - lib/sgtn-client/i18n_backend.rb
185
+ - lib/sgtn-client/loader.rb
183
186
  - lib/sgtn-client/loader/cache.rb
184
187
  - lib/sgtn-client/loader/chain_loader.rb
185
188
  - lib/sgtn-client/loader/consts.rb