eppo-server-sdk 0.0.0 → 0.1.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.
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