configcat 5.0.2 → 6.0.0

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.
data/lib/configcat.rb CHANGED
@@ -6,12 +6,25 @@ require 'configcat/user'
6
6
  require 'logger'
7
7
 
8
8
  module ConfigCat
9
-
10
9
  @logger = Logger.new(STDOUT, level: Logger::WARN)
11
10
  class << self
12
11
  attr_accessor :logger
13
12
  end
14
13
 
14
+ # Creates a new or gets an already existing `ConfigCatClient` for the given `sdk_key`.
15
+ #
16
+ # :param sdk_key [String] ConfigCat SDK Key to access your configuration.
17
+ # :param options [ConfigCatOptions] Configuration `ConfigCatOptions` for `ConfigCatClient`.
18
+ # :return [ConfigCatClient] the `ConfigCatClient` instance.
19
+ def ConfigCat.get(sdk_key, options = nil)
20
+ return ConfigCatClient.get(sdk_key, options)
21
+ end
22
+
23
+ # Closes all ConfigCatClient instances.
24
+ def ConfigCat.close_all
25
+ ConfigCatClient.close_all
26
+ end
27
+
15
28
  def ConfigCat.create_client(sdk_key, data_governance: DataGovernance::GLOBAL)
16
29
  #
17
30
  # Create an instance of ConfigCatClient and setup Auto Poll mode with default options
@@ -25,171 +38,150 @@ module ConfigCat
25
38
  return create_client_with_auto_poll(sdk_key, data_governance: data_governance)
26
39
  end
27
40
 
41
+ # Create an instance of ConfigCatClient and setup Auto Poll mode with custom options
42
+ #
43
+ # :param sdk_key: ConfigCat SDK Key to access your configuration.
44
+ # :param poll_interval_seconds: The client's poll interval in seconds. Default: 60 seconds.
45
+ # :param on_configuration_changed_callback: You can subscribe to configuration changes with this callback
46
+ # :param max_init_wait_time_seconds: maximum waiting time for first configuration fetch in polling mode.
47
+ # :param config_cache: If you want to use custom caching instead of the client's default,
48
+ # You can provide an implementation of ConfigCache.
49
+ # :param base_url: You can set a base_url if you want to use a proxy server between your application and ConfigCat
50
+ # :param proxy_address: Proxy address
51
+ # :param proxy_port: Proxy port
52
+ # :param proxy_user: username for proxy authentication
53
+ # :param proxy_pass: password for proxy authentication
54
+ # :param open_timeout_seconds: The number of seconds to wait for the server to make the initial connection. Default: 10 seconds.
55
+ # :param read_timeout_seconds: The number of seconds to wait for the server to respond before giving up. Default: 30 seconds.
56
+ # :param flag_overrides: A FlagOverrides implementation used to override feature flags & settings.
57
+ # :param data_governance:
58
+ # Default: Global. Set this parameter to be in sync with the Data Governance preference on the Dashboard:
59
+ # https://app.configcat.com/organization/data-governance
60
+ # (Only Organization Admins have access)
28
61
  def ConfigCat.create_client_with_auto_poll(sdk_key,
29
62
  poll_interval_seconds: 60,
30
63
  max_init_wait_time_seconds: 5,
31
64
  on_configuration_changed_callback: nil,
32
- config_cache_class: nil,
65
+ config_cache: nil,
33
66
  base_url: nil,
34
67
  proxy_address: nil,
35
68
  proxy_port: nil,
36
69
  proxy_user: nil,
37
70
  proxy_pass: nil,
38
- open_timeout: 10,
39
- read_timeout: 30,
71
+ open_timeout_seconds: 10,
72
+ read_timeout_seconds: 30,
40
73
  flag_overrides: nil,
41
74
  data_governance: DataGovernance::GLOBAL)
42
- #
43
- # Create an instance of ConfigCatClient and setup Auto Poll mode with custom options
44
- #
45
- # :param sdk_key: ConfigCat SDK Key to access your configuration.
46
- # :param poll_interval_seconds: The client's poll interval in seconds. Default: 60 seconds.
47
- # :param on_configuration_changed_callback: You can subscribe to configuration changes with this callback
48
- # :param max_init_wait_time_seconds: maximum waiting time for first configuration fetch in polling mode.
49
- # :param config_cache_class: If you want to use custom caching instead of the client's default InMemoryConfigCache,
50
- # You can provide an implementation of ConfigCache.
51
- # :param base_url: You can set a base_url if you want to use a proxy server between your application and ConfigCat
52
- # :param proxy_address: Proxy address
53
- # :param proxy_port: Proxy port
54
- # :param proxy_user: username for proxy authentication
55
- # :param proxy_pass: password for proxy authentication
56
- # :param open_timeout: The number of seconds to wait for the server to make the initial connection. Default: 10 seconds.
57
- # :param read_timeout: The number of seconds to wait for the server to respond before giving up. Default: 30 seconds.
58
- # :param flag_overrides: An OverrideDataSource implementation used to override feature flags & settings.
59
- # :param data_governance:
60
- # Default: Global. Set this parameter to be in sync with the Data Governance preference on the Dashboard:
61
- # https://app.configcat.com/organization/data-governance
62
- # (Only Organization Admins have access)
63
- #
64
- if sdk_key === nil
65
- raise ConfigCatClientException, "SDK Key is required."
66
- end
67
- if poll_interval_seconds < 1
68
- poll_interval_seconds = 1
69
- end
70
- if max_init_wait_time_seconds < 0
71
- max_init_wait_time_seconds = 0
72
- end
73
- return ConfigCatClient.new(sdk_key,
74
- poll_interval_seconds: poll_interval_seconds,
75
- max_init_wait_time_seconds: max_init_wait_time_seconds,
76
- on_configuration_changed_callback: on_configuration_changed_callback,
77
- cache_time_to_live_seconds: 0,
78
- config_cache_class: config_cache_class,
79
- base_url: base_url,
80
- proxy_address: proxy_address,
81
- proxy_port: proxy_port,
82
- proxy_user: proxy_user,
83
- proxy_pass: proxy_pass,
84
- open_timeout: open_timeout,
85
- read_timeout: read_timeout,
86
- flag_overrides: flag_overrides,
87
- data_governance: data_governance)
75
+ options = ConfigCatOptions.new(
76
+ base_url: base_url,
77
+ polling_mode: PollingMode.auto_poll(poll_interval_seconds: poll_interval_seconds, max_init_wait_time_seconds: max_init_wait_time_seconds),
78
+ config_cache: config_cache,
79
+ proxy_address: proxy_address,
80
+ proxy_port: proxy_port,
81
+ proxy_user: proxy_user,
82
+ proxy_pass: proxy_pass,
83
+ open_timeout_seconds: open_timeout_seconds,
84
+ read_timeout_seconds: read_timeout_seconds,
85
+ flag_overrides: flag_overrides,
86
+ data_governance: data_governance
87
+ )
88
+ client = ConfigCatClient.get(sdk_key, options)
89
+ client.hooks.add_on_config_changed(on_configuration_changed_callback) if on_configuration_changed_callback
90
+ client.log.warn('create_client_with_auto_poll is deprecated. Create the ConfigCat Client as a Singleton object with `configcatclient.get()` instead')
91
+ return client
88
92
  end
89
93
 
94
+ # Create an instance of ConfigCatClient and setup Lazy Load mode with custom options
95
+ #
96
+ # :param sdk_key: ConfigCat SDK Key to access your configuration.
97
+ # :param cache_time_to_live_seconds: The cache TTL.
98
+ # :param config_cache: If you want to use custom caching instead of the client's default,
99
+ # You can provide an implementation of ConfigCache.
100
+ # :param base_url: You can set a base_url if you want to use a proxy server between your application and ConfigCat
101
+ # :param proxy_address: Proxy address
102
+ # :param proxy_port: Proxy port
103
+ # :param proxy_user: username for proxy authentication
104
+ # :param proxy_pass: password for proxy authentication
105
+ # :param open_timeout_seconds: The number of seconds to wait for the server to make the initial connection. Default: 10 seconds.
106
+ # :param read_timeout_seconds: The number of seconds to wait for the server to respond before giving up. Default: 30 seconds.
107
+ # :param flag_overrides: A FlagOverrides implementation used to override feature flags & settings.
108
+ # :param data_governance:
109
+ # Default: Global. Set this parameter to be in sync with the Data Governance preference on the Dashboard:
110
+ # https://app.configcat.com/organization/data-governance
111
+ # (Only Organization Admins have access)
90
112
  def ConfigCat.create_client_with_lazy_load(sdk_key,
91
113
  cache_time_to_live_seconds: 60,
92
- config_cache_class: nil,
114
+ config_cache: nil,
93
115
  base_url: nil,
94
116
  proxy_address: nil,
95
117
  proxy_port: nil,
96
118
  proxy_user: nil,
97
119
  proxy_pass: nil,
98
- open_timeout: 10,
99
- read_timeout: 30,
120
+ open_timeout_seconds: 10,
121
+ read_timeout_seconds: 30,
100
122
  flag_overrides: nil,
101
123
  data_governance: DataGovernance::GLOBAL)
102
- #
103
- # Create an instance of ConfigCatClient and setup Lazy Load mode with custom options
104
- #
105
- # :param sdk_key: ConfigCat SDK Key to access your configuration.
106
- # :param cache_time_to_live_seconds: The cache TTL.
107
- # :param config_cache_class: If you want to use custom caching instead of the client's default InMemoryConfigCache,
108
- # You can provide an implementation of ConfigCache.
109
- # :param base_url: You can set a base_url if you want to use a proxy server between your application and ConfigCat
110
- # :param proxy_address: Proxy address
111
- # :param proxy_port: Proxy port
112
- # :param proxy_user: username for proxy authentication
113
- # :param proxy_pass: password for proxy authentication
114
- # :param open_timeout: The number of seconds to wait for the server to make the initial connection. Default: 10 seconds.
115
- # :param read_timeout: The number of seconds to wait for the server to respond before giving up. Default: 30 seconds.
116
- # :param flag_overrides: An OverrideDataSource implementation used to override feature flags & settings.
117
- # :param data_governance:
118
- # Default: Global. Set this parameter to be in sync with the Data Governance preference on the Dashboard:
119
- # https://app.configcat.com/organization/data-governance
120
- # (Only Organization Admins have access)
121
- #
122
- if sdk_key === nil
123
- raise ConfigCatClientException, "SDK Key is required."
124
- end
125
- if cache_time_to_live_seconds < 1
126
- cache_time_to_live_seconds = 1
127
- end
128
- return ConfigCatClient.new(sdk_key,
129
- poll_interval_seconds: 0,
130
- max_init_wait_time_seconds: 0,
131
- on_configuration_changed_callback: nil,
132
- cache_time_to_live_seconds: cache_time_to_live_seconds,
133
- config_cache_class: config_cache_class,
134
- base_url: base_url,
135
- proxy_address: proxy_address,
136
- proxy_port: proxy_port,
137
- proxy_user: proxy_user,
138
- proxy_pass: proxy_pass,
139
- open_timeout: open_timeout,
140
- read_timeout: read_timeout,
141
- flag_overrides: flag_overrides,
142
- data_governance: data_governance)
124
+ options = ConfigCatOptions.new(
125
+ base_url: base_url,
126
+ polling_mode: PollingMode.lazy_load(cache_refresh_interval_seconds: cache_time_to_live_seconds),
127
+ config_cache: config_cache,
128
+ proxy_address: proxy_address,
129
+ proxy_port: proxy_port,
130
+ proxy_user: proxy_user,
131
+ proxy_pass: proxy_pass,
132
+ open_timeout_seconds: open_timeout_seconds,
133
+ read_timeout_seconds: read_timeout_seconds,
134
+ flag_overrides: flag_overrides,
135
+ data_governance: data_governance
136
+ )
137
+ client = ConfigCatClient.get(sdk_key, options)
138
+ client.log.warn('create_client_with_lazy_load is deprecated. Create the ConfigCat Client as a Singleton object with `configcatclient.get()` instead')
139
+ return client
143
140
  end
144
141
 
142
+ # Create an instance of ConfigCatClient and setup Manual Poll mode with custom options
143
+ #
144
+ # :param sdk_key: ConfigCat SDK Key to access your configuration.
145
+ # :param config_cache: If you want to use custom caching instead of the client's default,
146
+ # You can provide an implementation of ConfigCache.
147
+ # :param base_url: You can set a base_url if you want to use a proxy server between your application and ConfigCat
148
+ # :param proxy_address: Proxy address
149
+ # :param proxy_port: Proxy port
150
+ # :param proxy_user: username for proxy authentication
151
+ # :param proxy_pass: password for proxy authentication
152
+ # :param open_timeout_seconds: The number of seconds to wait for the server to make the initial connection. Default: 10 seconds.
153
+ # :param read_timeout_seconds: The number of seconds to wait for the server to respond before giving up. Default: 30 seconds.
154
+ # :param flag_overrides: A FlagOverrides implementation used to override feature flags & settings.
155
+ # :param data_governance:
156
+ # Default: Global. Set this parameter to be in sync with the Data Governance preference on the Dashboard:
157
+ # https://app.configcat.com/organization/data-governance
158
+ # (Only Organization Admins have access)
145
159
  def ConfigCat.create_client_with_manual_poll(sdk_key,
146
- config_cache_class: nil,
160
+ config_cache: nil,
147
161
  base_url: nil,
148
162
  proxy_address: nil,
149
163
  proxy_port: nil,
150
164
  proxy_user: nil,
151
165
  proxy_pass: nil,
152
- open_timeout: 10,
153
- read_timeout: 30,
166
+ open_timeout_seconds: 10,
167
+ read_timeout_seconds: 30,
154
168
  flag_overrides: nil,
155
169
  data_governance: DataGovernance::GLOBAL)
156
- #
157
- # Create an instance of ConfigCatClient and setup Manual Poll mode with custom options
158
- #
159
- # :param sdk_key: ConfigCat SDK Key to access your configuration.
160
- # :param config_cache_class: If you want to use custom caching instead of the client's default InMemoryConfigCache,
161
- # You can provide an implementation of ConfigCache.
162
- # :param base_url: You can set a base_url if you want to use a proxy server between your application and ConfigCat
163
- # :param proxy_address: Proxy address
164
- # :param proxy_port: Proxy port
165
- # :param proxy_user: username for proxy authentication
166
- # :param proxy_pass: password for proxy authentication
167
- # :param open_timeout: The number of seconds to wait for the server to make the initial connection. Default: 10 seconds.
168
- # :param read_timeout: The number of seconds to wait for the server to respond before giving up. Default: 30 seconds.
169
- # :param flag_overrides: An OverrideDataSource implementation used to override feature flags & settings.
170
- # :param data_governance:
171
- # Default: Global. Set this parameter to be in sync with the Data Governance preference on the Dashboard:
172
- # https://app.configcat.com/organization/data-governance
173
- # (Only Organization Admins have access)
174
- #
175
- if sdk_key === nil
176
- raise ConfigCatClientException, "SDK Key is required."
177
- end
178
- return ConfigCatClient.new(sdk_key,
179
- poll_interval_seconds: 0,
180
- max_init_wait_time_seconds: 0,
181
- on_configuration_changed_callback: nil,
182
- cache_time_to_live_seconds: 0,
183
- config_cache_class: config_cache_class,
184
- base_url: base_url,
185
- proxy_address: proxy_address,
186
- proxy_port: proxy_port,
187
- proxy_user: proxy_user,
188
- proxy_pass: proxy_pass,
189
- open_timeout: open_timeout,
190
- read_timeout: read_timeout,
191
- flag_overrides: flag_overrides,
192
- data_governance: data_governance)
170
+ options = ConfigCatOptions.new(
171
+ base_url: base_url,
172
+ polling_mode: PollingMode.manual_poll(),
173
+ config_cache: config_cache,
174
+ proxy_address: proxy_address,
175
+ proxy_port: proxy_port,
176
+ proxy_user: proxy_user,
177
+ proxy_pass: proxy_pass,
178
+ open_timeout_seconds: open_timeout_seconds,
179
+ read_timeout_seconds: read_timeout_seconds,
180
+ flag_overrides: flag_overrides,
181
+ data_governance: data_governance
182
+ )
183
+ client = ConfigCatClient.get(sdk_key, options)
184
+ client.log.warn('create_client_with_manual_poll is deprecated. Create the ConfigCat Client as a Singleton object with `configcatclient.get()` instead')
185
+ return client
193
186
  end
194
-
195
- end
187
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: configcat
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.2
4
+ version: 6.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ConfigCat
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-27 00:00:00.000000000 Z
11
+ date: 2023-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '3.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
97
111
  description: Feature Flags created by developers for developers with ❤️. ConfigCat
98
112
  lets you manage feature flags across frontend, backend, mobile, and desktop apps
99
113
  without (re)deploying code. % rollouts, user targeting, segmentation. Feature toggle
@@ -106,20 +120,25 @@ extensions: []
106
120
  extra_rdoc_files: []
107
121
  files:
108
122
  - lib/configcat.rb
109
- - lib/configcat/autopollingcachepolicy.rb
110
123
  - lib/configcat/configcache.rb
111
124
  - lib/configcat/configcatclient.rb
125
+ - lib/configcat/configcatlogger.rb
126
+ - lib/configcat/configcatoptions.rb
127
+ - lib/configcat/configentry.rb
112
128
  - lib/configcat/configfetcher.rb
129
+ - lib/configcat/configservice.rb
113
130
  - lib/configcat/constants.rb
114
131
  - lib/configcat/datagovernance.rb
132
+ - lib/configcat/evaluationdetails.rb
115
133
  - lib/configcat/interfaces.rb
116
- - lib/configcat/lazyloadingcachepolicy.rb
117
134
  - lib/configcat/localdictionarydatasource.rb
118
135
  - lib/configcat/localfiledatasource.rb
119
- - lib/configcat/manualpollingcachepolicy.rb
120
136
  - lib/configcat/overridedatasource.rb
137
+ - lib/configcat/pollingmode.rb
138
+ - lib/configcat/refreshresult.rb
121
139
  - lib/configcat/rolloutevaluator.rb
122
140
  - lib/configcat/user.rb
141
+ - lib/configcat/utils.rb
123
142
  - lib/configcat/version.rb
124
143
  homepage: https://configcat.com
125
144
  licenses:
@@ -1,99 +0,0 @@
1
- require 'configcat/interfaces'
2
- require 'configcat/constants'
3
- require 'concurrent'
4
-
5
- module ConfigCat
6
- class AutoPollingCachePolicy < CachePolicy
7
- def initialize(config_fetcher, config_cache, cache_key, poll_interval_seconds=60, max_init_wait_time_seconds=5, on_configuration_changed_callback=nil)
8
- if poll_interval_seconds < 1
9
- poll_interval_seconds = 1
10
- end
11
- if max_init_wait_time_seconds < 0
12
- max_init_wait_time_seconds = 0
13
- end
14
- @_config_fetcher = config_fetcher
15
- @_config_cache = config_cache
16
- @_cache_key = cache_key
17
- @_poll_interval_seconds = poll_interval_seconds
18
- @_max_init_wait_time_seconds = max_init_wait_time_seconds
19
- @_on_configuration_changed_callback = on_configuration_changed_callback
20
- @_initialized = false
21
- @_is_running = false
22
- @_start_time = Time.now.utc
23
- @_lock = Concurrent::ReadWriteLock.new()
24
- @_is_started = Concurrent::Event.new()
25
- @thread = Thread.new{_run()}
26
- @_is_started.wait()
27
- end
28
-
29
- def _run()
30
- @_is_running = true
31
- @_is_started.set()
32
- loop do
33
- force_refresh()
34
- sleep(@_poll_interval_seconds)
35
- break if !@_is_running
36
- end
37
- end
38
-
39
- def get()
40
- while !@_initialized && (Time.now.utc < @_start_time + @_max_init_wait_time_seconds)
41
- sleep(0.5)
42
- end
43
- begin
44
- @_lock.acquire_read_lock()
45
- return @_config_cache.get(@_cache_key)
46
- ensure
47
- @_lock.release_read_lock()
48
- end
49
- end
50
-
51
- def force_refresh()
52
- begin
53
- configuration_response = @_config_fetcher.get_configuration_json()
54
-
55
- begin
56
- @_lock.acquire_read_lock()
57
- old_configuration = @_config_cache.get(@_cache_key)
58
- ensure
59
- @_lock.release_read_lock()
60
- end
61
-
62
- if configuration_response.is_fetched()
63
- configuration = configuration_response.json()
64
- if configuration != old_configuration
65
- begin
66
- @_lock.acquire_write_lock()
67
- @_config_cache.set(@_cache_key, configuration)
68
- @_initialized = true
69
- ensure
70
- @_lock.release_write_lock()
71
- end
72
- begin
73
- if !@_on_configuration_changed_callback.equal?(nil)
74
- @_on_configuration_changed_callback.()
75
- end
76
- rescue Exception => e
77
- ConfigCat.logger.error("Exception in on_configuration_changed_callback: #{e.class}:'#{e}'")
78
- end
79
- end
80
- end
81
-
82
- if !@_initialized && !old_configuration.equal?(nil)
83
- @_initialized = true
84
- end
85
- rescue Timeout::Error => e
86
- ConfigCat.logger.error("Request timed out. Timeout values: [open: %ss, read: %ss]" %
87
- [@_config_fetcher.get_open_timeout(), @_config_fetcher.get_read_timeout()])
88
- rescue Exception => e
89
- ConfigCat.logger.error("Double-check your SDK Key at https://app.configcat.com/sdkkey.")
90
- ConfigCat.logger.error "threw exception #{e.class}:'#{e}'"
91
- ConfigCat.logger.error "stacktrace: #{e.backtrace}"
92
- end
93
- end
94
-
95
- def stop()
96
- @_is_running = false
97
- end
98
- end
99
- end
@@ -1,69 +0,0 @@
1
- require 'configcat/interfaces'
2
- require 'configcat/constants'
3
- require 'concurrent'
4
-
5
-
6
- module ConfigCat
7
- class LazyLoadingCachePolicy < CachePolicy
8
-
9
- def initialize(config_fetcher, config_cache, cache_key, cache_time_to_live_seconds=60)
10
- if cache_time_to_live_seconds < 1
11
- cache_time_to_live_seconds = 1
12
- end
13
- @_config_fetcher = config_fetcher
14
- @_config_cache = config_cache
15
- @_cache_key = cache_key
16
- @_cache_time_to_live = cache_time_to_live_seconds
17
- @_lock = Concurrent::ReadWriteLock.new()
18
- @_last_updated = nil
19
- end
20
-
21
- def get()
22
- begin
23
- @_lock.acquire_read_lock()
24
- utc_now = Time.now.utc
25
- if !@_last_updated.equal?(nil) && (@_last_updated + @_cache_time_to_live > utc_now)
26
- config = @_config_cache.get(@_cache_key)
27
- if !config.equal?(nil)
28
- return config
29
- end
30
- end
31
- ensure
32
- @_lock.release_read_lock()
33
- end
34
- force_refresh()
35
- begin
36
- @_lock.acquire_read_lock()
37
- config = @_config_cache.get(@_cache_key)
38
- return config
39
- ensure
40
- @_lock.release_read_lock()
41
- end
42
- end
43
-
44
- def force_refresh()
45
- begin
46
- configuration_response = @_config_fetcher.get_configuration_json()
47
- if configuration_response.is_fetched()
48
- configuration = configuration_response.json()
49
- begin
50
- @_lock.acquire_write_lock()
51
- @_config_cache.set(@_cache_key, configuration)
52
- @_last_updated = Time.now.utc
53
- ensure
54
- @_lock.release_write_lock()
55
- end
56
- end
57
- rescue StandardError => e
58
- ConfigCat.logger.error("Double-check your SDK Key at https://app.configcat.com/sdkkey.")
59
- ConfigCat.logger.error "threw exception #{e.class}:'#{e}'"
60
- ConfigCat.logger.error "stacktrace: #{e.backtrace}"
61
- end
62
- end
63
-
64
- def stop()
65
- end
66
- end
67
-
68
- end
69
-
@@ -1,47 +0,0 @@
1
- require 'configcat/interfaces'
2
- require 'configcat/constants'
3
- require 'concurrent'
4
-
5
- module ConfigCat
6
- class ManualPollingCachePolicy < CachePolicy
7
- def initialize(config_fetcher, config_cache, cache_key)
8
- @_config_fetcher = config_fetcher
9
- @_config_cache = config_cache
10
- @_cache_key = cache_key
11
- @_lock = Concurrent::ReadWriteLock.new()
12
- end
13
-
14
- def get()
15
- begin
16
- @_lock.acquire_read_lock()
17
- config = @_config_cache.get(@_cache_key)
18
- return config
19
- ensure
20
- @_lock.release_read_lock()
21
- end
22
- end
23
-
24
- def force_refresh()
25
- begin
26
- configuration_response = @_config_fetcher.get_configuration_json()
27
- if configuration_response.is_fetched()
28
- configuration = configuration_response.json()
29
- begin
30
- @_lock.acquire_write_lock()
31
- @_config_cache.set(@_cache_key, configuration)
32
- ensure
33
- @_lock.release_write_lock()
34
- end
35
- end
36
- rescue StandardError => e
37
- ConfigCat.logger.error("Double-check your SDK Key at https://app.configcat.com/sdkkey.")
38
- ConfigCat.logger.error "threw exception #{e.class}:'#{e}'"
39
- ConfigCat.logger.error "stacktrace: #{e.backtrace}"
40
- end
41
- end
42
-
43
- def stop()
44
- # pass
45
- end
46
- end
47
- end