eppo-server-sdk 3.1.0 → 3.1.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: 13377928dbb61c86f0f55c300cce4fd1bbd9298014c34d6e766e6807eec306bb
4
- data.tar.gz: cbaefafb70a5e1267092d7d01a816ffc2520e8cc5b9e21fb22ccd30fc26f6ea0
3
+ metadata.gz: d6fb69972c523dd9d2c7c683c751c012608c63bb36fd3a6fe9463fb27d77d3d6
4
+ data.tar.gz: dfb6b27af63f652094f2141791aaf31be01ce8277801ce6537b30f0cbfa64820
5
5
  SHA512:
6
- metadata.gz: d9edcdd5df7dd9abc465abc275ed46b3e16edc541a5f7eaf5108cc2d21e42a293fbee4d93ad7b0e5db9625397ceb1df0cbdda4558686ee5313cb7c2812b58ca8
7
- data.tar.gz: add2316372855812a3b54c024b171c85a0a87124ff8645ee4bf352897c46b26b2b47627d96726c9b93d4fd8407b3488cf6845de7fe9edae55e0efaf423a44d6f
6
+ metadata.gz: 1d191dfefc76fb61a1b873c61da265066e1d674e628864d326d3d51bb3a5c14933fb69aa48e72a1325bd2753a4acc2083bde48d1daf1a408c29b90cea4f858b5
7
+ data.tar.gz: b79006cc38615b15e44d12362fcc61520ae34f852272fe5a42d4761d7e36e5c407aa1a63df0226109c2198a4798fbb0ded3ce3c0b22fa27e004a69165a2a1696
data/Cargo.lock CHANGED
@@ -304,7 +304,7 @@ dependencies = [
304
304
 
305
305
  [[package]]
306
306
  name = "eppo_client"
307
- version = "3.1.0"
307
+ version = "3.1.1"
308
308
  dependencies = [
309
309
  "env_logger",
310
310
  "eppo_core",
@@ -317,9 +317,9 @@ dependencies = [
317
317
 
318
318
  [[package]]
319
319
  name = "eppo_core"
320
- version = "2.0.0"
320
+ version = "3.0.0"
321
321
  source = "registry+https://github.com/rust-lang/crates.io-index"
322
- checksum = "aff693ab3cd82f61d90249aa02c6f7e173202d92727d1036b8fc1468201f9848"
322
+ checksum = "34f3fc5a7f54cc47a5ebf063025176726db7eb5e51661185b5f4d20aaacea611"
323
323
  dependencies = [
324
324
  "chrono",
325
325
  "derive_more",
@@ -1,6 +1,7 @@
1
1
  [package]
2
2
  name = "eppo_client"
3
- version = "3.1.0"
3
+ # TODO: this version and lib/eppo_client/version.rb should be in sync
4
+ version = "3.1.1"
4
5
  edition = "2021"
5
6
  license = "MIT"
6
7
  publish = false
@@ -11,7 +12,7 @@ crate-type = ["cdylib"]
11
12
 
12
13
  [dependencies]
13
14
  env_logger = { version = "0.11.3", features = ["unstable-kv"] }
14
- eppo_core = { version = "2.0.0" }
15
+ eppo_core = { version = "3.0.0" }
15
16
  log = { version = "0.4.21", features = ["kv_serde"] }
16
17
  magnus = { version = "0.6.2" }
17
18
  serde = { version = "1.0.203", features = ["derive"] }
@@ -1,12 +1,12 @@
1
1
  use std::{cell::RefCell, sync::Arc};
2
2
 
3
3
  use eppo_core::{
4
- configuration_fetcher::ConfigurationFetcher,
4
+ configuration_fetcher::{ConfigurationFetcher, ConfigurationFetcherConfig},
5
5
  configuration_store::ConfigurationStore,
6
- eval::{get_assignment, get_assignment_details, get_bandit_action, get_bandit_action_details},
6
+ eval::{Evaluator, EvaluatorConfig},
7
7
  poller_thread::PollerThread,
8
8
  ufc::VariationType,
9
- Attributes, ContextAttributes,
9
+ Attributes, ContextAttributes, SdkMetadata,
10
10
  };
11
11
  use magnus::{error::Result, exception, prelude::*, Error, TryConvert, Value};
12
12
 
@@ -28,7 +28,7 @@ impl TryConvert for Config {
28
28
 
29
29
  #[magnus::wrap(class = "EppoClient::Core::Client")]
30
30
  pub struct Client {
31
- configuration_store: Arc<ConfigurationStore>,
31
+ evaluator: Evaluator,
32
32
  // Magnus only allows sharing aliased references (&T) through the API, so we need to use RefCell
33
33
  // to get interior mutability.
34
34
  //
@@ -41,21 +41,28 @@ impl Client {
41
41
  pub fn new(config: Config) -> Client {
42
42
  let configuration_store = Arc::new(ConfigurationStore::new());
43
43
 
44
+ let sdk_metadata = SdkMetadata {
45
+ name: "ruby",
46
+ version: env!("CARGO_PKG_VERSION"),
47
+ };
48
+
44
49
  let poller_thread = PollerThread::start(
45
- ConfigurationFetcher::new(
46
- eppo_core::configuration_fetcher::ConfigurationFetcherConfig {
47
- base_url: config.base_url,
48
- api_key: config.api_key,
49
- sdk_name: "ruby".to_owned(),
50
- sdk_version: env!("CARGO_PKG_VERSION").to_owned(),
51
- },
52
- ),
50
+ ConfigurationFetcher::new(ConfigurationFetcherConfig {
51
+ base_url: config.base_url,
52
+ api_key: config.api_key,
53
+ sdk_metadata: sdk_metadata.clone(),
54
+ }),
53
55
  configuration_store.clone(),
54
56
  )
55
57
  .expect("should be able to start poller thread");
56
58
 
57
- Client {
59
+ let evaluator = Evaluator::new(EvaluatorConfig {
58
60
  configuration_store,
61
+ sdk_metadata,
62
+ });
63
+
64
+ Client {
65
+ evaluator,
59
66
  poller_thread: RefCell::new(Some(poller_thread)),
60
67
  }
61
68
  }
@@ -70,16 +77,16 @@ impl Client {
70
77
  let expected_type: VariationType = serde_magnus::deserialize(expected_type)?;
71
78
  let subject_attributes: Attributes = serde_magnus::deserialize(subject_attributes)?;
72
79
 
73
- let config = self.configuration_store.get_configuration();
74
- let result = get_assignment(
75
- config.as_ref().map(AsRef::as_ref),
76
- &flag_key,
77
- &subject_key,
78
- &subject_attributes,
79
- Some(expected_type),
80
- )
81
- // TODO: maybe expose possible errors individually.
82
- .map_err(|err| Error::new(exception::runtime_error(), err.to_string()))?;
80
+ let result = self
81
+ .evaluator
82
+ .get_assignment(
83
+ &flag_key,
84
+ &subject_key,
85
+ &subject_attributes,
86
+ Some(expected_type),
87
+ )
88
+ // TODO: maybe expose possible errors individually.
89
+ .map_err(|err| Error::new(exception::runtime_error(), err.to_string()))?;
83
90
 
84
91
  Ok(serde_magnus::serialize(&result).expect("assignment value should be serializable"))
85
92
  }
@@ -94,9 +101,7 @@ impl Client {
94
101
  let expected_type: VariationType = serde_magnus::deserialize(expected_type)?;
95
102
  let subject_attributes: Attributes = serde_magnus::deserialize(subject_attributes)?;
96
103
 
97
- let config = self.configuration_store.get_configuration();
98
- let result = get_assignment_details(
99
- config.as_ref().map(AsRef::as_ref),
104
+ let result = self.evaluator.get_assignment_details(
100
105
  &flag_key,
101
106
  &subject_key,
102
107
  &subject_attributes,
@@ -125,9 +130,7 @@ impl Client {
125
130
  })?;
126
131
  let actions = serde_magnus::deserialize(actions)?;
127
132
 
128
- let config = self.configuration_store.get_configuration();
129
- let result = get_bandit_action(
130
- config.as_ref().map(AsRef::as_ref),
133
+ let result = self.evaluator.get_bandit_action(
131
134
  &flag_key,
132
135
  &subject_key,
133
136
  &subject_attributes,
@@ -157,9 +160,7 @@ impl Client {
157
160
  })?;
158
161
  let actions = serde_magnus::deserialize(actions)?;
159
162
 
160
- let config = self.configuration_store.get_configuration();
161
- let result = get_bandit_action_details(
162
- config.as_ref().map(AsRef::as_ref),
163
+ let result = self.evaluator.get_bandit_action_details(
163
164
  &flag_key,
164
165
  &subject_key,
165
166
  &subject_attributes,
@@ -144,7 +144,6 @@ module EppoClient
144
144
  # events for both flag assignment and bandit actions.
145
145
  event = event.to_h { |key, value| [key.to_sym, value]}
146
146
 
147
- enrich_event_metadata(event)
148
147
  begin
149
148
  @assignment_logger.log_assignment(event)
150
149
  rescue EppoClient::AssignmentLoggerError
@@ -158,7 +157,6 @@ module EppoClient
158
157
  def log_bandit_action(event)
159
158
  if not event then return end
160
159
 
161
- enrich_event_metadata(event)
162
160
  begin
163
161
  @assignment_logger.log_bandit_action(event)
164
162
  rescue EppoClient::AssignmentLoggerError
@@ -169,11 +167,6 @@ module EppoClient
169
167
  end
170
168
  end
171
169
 
172
- def enrich_event_metadata(event)
173
- event[:metaData]["sdkName"] = "ruby"
174
- event[:metaData]["sdkVersion"] = EppoClient::VERSION
175
- end
176
-
177
170
  def coerce_context_attributes(attributes)
178
171
  numeric_attributes = attributes[:numeric_attributes] || attributes["numericAttributes"]
179
172
  categorical_attributes = attributes[:categorical_attributes] || attributes["categoricalAttributes"]
@@ -2,5 +2,5 @@
2
2
 
3
3
  # TODO: this version and ext/eppo_rb/Cargo.toml should be in sync
4
4
  module EppoClient
5
- VERSION = "3.1.0"
5
+ VERSION = "3.1.1"
6
6
  end
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: 3.1.0
4
+ version: 3.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eppo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-08-16 00:00:00.000000000 Z
11
+ date: 2024-09-19 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -64,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
64
64
  - !ruby/object:Gem::Version
65
65
  version: 3.3.11
66
66
  requirements: []
67
- rubygems_version: 3.5.11
67
+ rubygems_version: 3.5.16
68
68
  signing_key:
69
69
  specification_version: 4
70
70
  summary: Eppo SDK for Ruby