eppo-server-sdk 0.0.0 → 0.1.0

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: ce6db52c824656217a079b75231b2749b10bbbd656bda249e2f103666b173acb
4
- data.tar.gz: 4629ce299c56cbcbfe342e7572803c935266172b376ef1c8aa1eac8f0bb8074b
3
+ metadata.gz: 0d2f2b75ea023c388c50b7db7ad56e017b217c21811310116938f35409153520
4
+ data.tar.gz: 1fb5b4873b50f1197fcec8ea91ab071d8a5a75c7790e8cd956f011c621a88425
5
5
  SHA512:
6
- metadata.gz: 29de3064e5d780257e0e883295a6101b86e321ba6203dcbcc21e46192cc853156faab52031782b323be2cf37fe6e045345a5099acdb3ead7f6383fbcf5396f2c
7
- data.tar.gz: c3a669f35584ecac1b4f12e4796b61de972bb2f117cfd95e5cd3c693fb9f53af3bf232d9800a3a519245408576978037371394ff4b9931655850f38b80e8f0bb
6
+ metadata.gz: debd90881651fa4d3f85d6af2ce71673c59378b3238f7443a2b851f16a762f667198e61f8494d28957da2ecb28dc896c5a99564a54e6fb5ec14ddde0c1a4c06a
7
+ data.tar.gz: 2559d1d149a37e6dd8f6779511e72532a7a4046feda48e9657939de1db34ba30d2c5d52b5df6d413279f67ff4d9cfcd03a5b905bc723e0d13c236be5295e3a66
data/lib/client.rb CHANGED
@@ -3,11 +3,11 @@
3
3
  require 'singleton'
4
4
  require 'time'
5
5
 
6
- require 'validation'
6
+ require 'constants'
7
+ require 'custom_errors'
7
8
  require 'rules'
8
9
  require 'shard'
9
- require 'sdk_logger'
10
- require 'custom_errors'
10
+ require 'validation'
11
11
 
12
12
  module EppoClient
13
13
  # The main client singleton
@@ -20,7 +20,14 @@ module EppoClient
20
20
  end
21
21
 
22
22
  # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
23
- def get_assignment(subject_key, flag_or_experiment_key, subject_attributes = {})
23
+ def get_assignment(
24
+ subject_key,
25
+ flag_or_experiment_key,
26
+ subject_attributes = {},
27
+ log_level = EppoClient::DEFAULT_LOGGER_LEVEL
28
+ )
29
+ logger = Logger.new($stdout)
30
+ logger.level = log_level
24
31
  EppoClient.validate_not_blank('subject_key', subject_key)
25
32
  EppoClient.validate_not_blank('flag_or_experiment_key', flag_or_experiment_key)
26
33
  experiment_config = @config_requestor.get_configuration(flag_or_experiment_key)
@@ -28,7 +35,7 @@ module EppoClient
28
35
  return override unless override.nil?
29
36
 
30
37
  if experiment_config.nil? || experiment_config.enabled == false
31
- EppoClient.logger('out').info(
38
+ logger.debug(
32
39
  "[Eppo SDK] No assigned variation. No active experiment or flag for key: #{flag_or_experiment_key}"
33
40
  )
34
41
  return nil
@@ -36,7 +43,7 @@ module EppoClient
36
43
 
37
44
  matched_rule = EppoClient.find_matching_rule(subject_attributes, experiment_config.rules)
38
45
  if matched_rule.nil?
39
- EppoClient.logger('out').info(
46
+ logger.debug(
40
47
  "[Eppo SDK] No assigned variation. Subject attributes do not match targeting rules: #{subject_attributes}"
41
48
  )
42
49
  return nil
@@ -49,7 +56,7 @@ module EppoClient
49
56
  experiment_config.subject_shards,
50
57
  allocation.percent_exposure
51
58
  )
52
- EppoClient.logger('out').info(
59
+ logger.debug(
53
60
  '[Eppo SDK] No assigned variation. Subject is not part of experiment sample population'
54
61
  )
55
62
  return nil
@@ -71,7 +78,7 @@ module EppoClient
71
78
  rescue EppoClient::AssignmentLoggerError => e
72
79
  # This error means that log_assignment was not set up. This is okay to ignore.
73
80
  rescue StandardError => e
74
- EppoClient.logger('err').info("[Eppo SDK] Error logging assignment event: #{e}")
81
+ logger.error("[Eppo SDK] Error logging assignment event: #{e}")
75
82
  end
76
83
 
77
84
  assigned_variation
data/lib/config.rb CHANGED
@@ -8,7 +8,7 @@ module EppoClient
8
8
  class Config
9
9
  attr_reader :api_key, :assignment_logger, :base_url
10
10
 
11
- def initialize(api_key, assignment_logger: AssignmentLogger.new, base_url: 'https://eppo.cloud/api')
11
+ def initialize(api_key, assignment_logger: AssignmentLogger.new, base_url: 'https://fscdn.eppo.cloud/api')
12
12
  @api_key = api_key
13
13
  @assignment_logger = assignment_logger
14
14
  @base_url = base_url
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'sdk_logger'
4
3
  require 'custom_errors'
5
4
  require 'constants'
6
5
 
@@ -89,7 +88,7 @@ module EppoClient
89
88
  end
90
89
  @config_store.assign_configurations(configs)
91
90
  rescue EppoClient::HttpRequestError => e
92
- EppoClient.logger('err').error("Error retrieving assignment configurations: #{e}")
91
+ Logger.new($stdout).error("Error retrieving assignment configurations: #{e}")
93
92
  end
94
93
  configs
95
94
  end
data/lib/constants.rb CHANGED
@@ -1,6 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'logger'
4
+
3
5
  module EppoClient
6
+ # default level for logging
7
+ DEFAULT_LOGGER_LEVEL = Logger::INFO
8
+
4
9
  # configuration cache constants
5
10
  MAX_CACHE_ENTRIES = 1000 # arbitrary; the caching library requires a max limit
6
11
 
@@ -11,5 +16,5 @@ module EppoClient
11
16
  POLL_INTERVAL_MILLIS = 5 * MINUTE_MILLIS
12
17
 
13
18
  # the configs endpoint
14
- RAC_ENDPOINT = 'randomized_assignment/v2/config'
19
+ RAC_ENDPOINT = 'randomized_assignment/v3/config'
15
20
  end
data/lib/eppo_client.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'parse_gemspec'
4
+
3
5
  require 'assignment_logger'
4
6
  require 'http_client'
5
7
  require 'poller'
@@ -11,8 +13,6 @@ require 'configuration_store'
11
13
 
12
14
  # This module scopes all the client SDK's classes and functions
13
15
  module EppoClient
14
- @sdk_version = '1.1.1'
15
-
16
16
  # rubocop:disable Metrics/MethodLength
17
17
  def initialize_client(config_requestor, assignment_logger)
18
18
  client = EppoClient::Client.instance
@@ -29,9 +29,11 @@ module EppoClient
29
29
  end
30
30
  # rubocop:enable Metrics/MethodLength
31
31
 
32
+ # rubocop:disable Metrics/MethodLength
32
33
  def init(config)
33
34
  config.validate
34
- sdk_params = EppoClient::SdkParams.new(config.api_key, 'ruby', @sdk_version)
35
+ sdk_version = ParseGemspec::Specification.load('eppo-server-sdk.gemspec').to_hash_object[:version]
36
+ sdk_params = EppoClient::SdkParams.new(config.api_key, 'ruby', sdk_version)
35
37
  http_client = EppoClient::HttpClient.new(config.base_url, sdk_params.formatted)
36
38
  config_store = EppoClient::ConfigurationStore.new(EppoClient::MAX_CACHE_ENTRIES)
37
39
  config_store.lock.with_write_lock do
@@ -41,6 +43,7 @@ module EppoClient
41
43
  )
42
44
  end
43
45
  end
46
+ # rubocop:enable Metrics/MethodLength
44
47
 
45
48
  module_function :init, :initialize_client
46
49
  end
data/lib/poller.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'concurrent/atom'
4
- require 'sdk_logger'
5
4
 
6
5
  # The poller
7
6
  module EppoClient
@@ -34,7 +33,7 @@ module EppoClient
34
33
  begin
35
34
  @callback.call
36
35
  rescue StandardError => e
37
- EppoClient.logger('err').error("Unexpected error running poll task: #{e}")
36
+ Logger.new($stdout).error("Unexpected error running poll task: #{e}")
38
37
  break
39
38
  end
40
39
  _wait_for_interval
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eppo-server-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eppo
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-23 00:00:00.000000000 Z
11
+ date: 2023-04-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -70,6 +70,26 @@ dependencies:
70
70
  - - ">="
71
71
  - !ruby/object:Gem::Version
72
72
  version: 2.0.0
73
+ - !ruby/object:Gem::Dependency
74
+ name: parse_gemspec
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '1.0'
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 1.0.0
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.0'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 1.0.0
73
93
  - !ruby/object:Gem::Dependency
74
94
  name: rake
75
95
  requirement: !ruby/object:Gem::Requirement
@@ -144,7 +164,7 @@ dependencies:
144
164
  - - ">="
145
165
  - !ruby/object:Gem::Version
146
166
  version: 3.18.1
147
- description:
167
+ description:
148
168
  email: eppo-team@geteppo.com
149
169
  executables: []
150
170
  extensions: []
@@ -162,14 +182,18 @@ files:
162
182
  - lib/lru_cache.rb
163
183
  - lib/poller.rb
164
184
  - lib/rules.rb
165
- - lib/sdk_logger.rb
166
185
  - lib/shard.rb
167
186
  - lib/validation.rb
168
187
  homepage: https://github.com/Eppo-exp/ruby-sdk
169
188
  licenses:
170
189
  - MIT
171
- metadata: {}
172
- post_install_message:
190
+ metadata:
191
+ bug_tracker_uri: https://github.com/Eppo-exp/ruby-sdk/issues
192
+ documentation_uri: https://docs.geteppo.com/feature-flags/sdks/server-sdks/ruby/
193
+ homepage_uri: https://geteppo.com/
194
+ source_code_uri: https://github.com/Eppo-exp/ruby-sdk
195
+ wiki_uri: https://github.com/Eppo-exp/ruby-sdk/wiki
196
+ post_install_message:
173
197
  rdoc_options: []
174
198
  require_paths:
175
199
  - lib
@@ -184,8 +208,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
184
208
  - !ruby/object:Gem::Version
185
209
  version: '0'
186
210
  requirements: []
187
- rubygems_version: 3.3.7
188
- signing_key:
211
+ rubygems_version: 3.3.26
212
+ signing_key:
189
213
  specification_version: 4
190
214
  summary: Eppo SDK for Ruby
191
215
  test_files: []
data/lib/sdk_logger.rb DELETED
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'logger'
4
-
5
- # The helper module for logging
6
- module EppoClient
7
- @stdout_logger = Logger.new($stdout)
8
- @stderr_logger = Logger.new($stderr)
9
-
10
- def self.logger(type)
11
- case type
12
- when 'out'
13
- @stdout_logger
14
- when 'err'
15
- @stderr_logger
16
- else
17
- @stderr_logger.error("[Eppo SDK] Invalid logger type: #{type}")
18
- end
19
- end
20
- end