prefab-cloud-ruby 0.7.0 → 0.10.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.
@@ -1,2 +1,2 @@
1
- PREFAB_LOG_CLIENT_BOOTSTRAP_LOG_LEVEL=debug PREFAB_CLOUD_HTTP=true PREFAB_API_KEY="1|local_development_api_key" PREFAB_API_URL="localhost:50051" ruby -Ilib test/harness_server.rb
1
+ PREFAB_LOG_CLIENT_BOOTSTRAP_LOG_LEVEL=debug PREFAB_CLOUD_HTTP=true PREFAB_GRPC_URL="localhost:50051" ruby -Ilib test/harness_server.rb
2
2
  #GRPC_TRACE=all GRPC_VERBOSITY=DEBUG PREFAB_LOG_CLIENT_BOOTSTRAP_LOG_LEVEL=debug PREFAB_CLOUD_HTTP=true PREFAB_API_KEY="1|local_development_api_key" PREFAB_API_URL="localhost:50051" ruby -Ilib test/harness_server.rb
@@ -15,31 +15,39 @@ class RackApp
15
15
 
16
16
  key = props["key"]
17
17
  namespace = props["namespace"]
18
- environment = props["environment"]
18
+ project_env_id = props["project_env_id"]
19
19
  user_key = props["user_key"]
20
20
  is_feature_flag = !props["feature_flag"].nil?
21
21
 
22
22
  client = Prefab::Client.new(
23
- api_key: "1-#{environment}-local_development_api_key", #sets environment
23
+ api_key: "1-#{project_env_id}-local_development_api_key-SDK", #sets environment
24
24
  namespace: namespace,
25
25
  )
26
26
 
27
27
  puts "Key #{key}"
28
28
  puts "User #{user_key}"
29
- puts "Environment #{environment}"
29
+ puts "project_env_id #{project_env_id}"
30
30
  puts "Namespace #{namespace}"
31
31
  puts "Props! #{props}"
32
32
  puts "is_feature_flag! #{is_feature_flag}"
33
33
 
34
+ puts client.config_client.to_s
35
+
34
36
  if is_feature_flag
35
37
  puts "EVALFF #{key} #{user_key}"
36
38
  rtn = client.feature_flag_client.get(key, user_key, []).to_s
37
39
  else
38
40
  rtn = client.config_client.get(key).to_s
39
41
  end
42
+
40
43
  puts "return #{rtn}"
41
44
 
42
45
  [200, { "Content-Type" => "text/plain" }, rtn]
46
+
47
+ rescue Exception => e
48
+ puts "ERROR #{e.message}"
49
+ puts e.backtrace
50
+ [500, { "Content-Type" => "text/plain" }, e.message]
43
51
  end
44
52
  end
45
53
 
@@ -16,26 +16,26 @@ class TestConfigLoader < Minitest::Test
16
16
 
17
17
  def test_highwater
18
18
  assert_equal 0, @loader.highwater_mark
19
- @loader.set(Prefab::ConfigDelta.new(id: 1, key: "sample_int", default: Prefab::ConfigValue.new(int: 456)))
19
+ @loader.set(Prefab::Config.new(id: 1, key: "sample_int", rows: [Prefab::ConfigRow.new(value: Prefab::ConfigValue.new(int: 456))]))
20
20
  assert_equal 1, @loader.highwater_mark
21
21
 
22
- @loader.set(Prefab::ConfigDelta.new(id: 5, key: "sample_int", default: Prefab::ConfigValue.new(int: 456)))
22
+ @loader.set(Prefab::Config.new(id: 5, key: "sample_int", rows: [Prefab::ConfigRow.new(value: Prefab::ConfigValue.new(int: 456))]))
23
23
  assert_equal 5, @loader.highwater_mark
24
- @loader.set(Prefab::ConfigDelta.new(id: 2, key: "sample_int", default: Prefab::ConfigValue.new(int: 456)))
24
+ @loader.set(Prefab::Config.new(id: 2, key: "sample_int", rows: [Prefab::ConfigRow.new(value: Prefab::ConfigValue.new(int: 456))]))
25
25
  assert_equal 5, @loader.highwater_mark
26
26
  end
27
27
 
28
28
  def test_keeps_most_recent
29
29
  assert_equal 0, @loader.highwater_mark
30
- @loader.set(Prefab::ConfigDelta.new(id: 1, key: "sample_int", default: Prefab::ConfigValue.new(int: 1)))
30
+ @loader.set(Prefab::Config.new(id: 1, key: "sample_int", rows: [Prefab::ConfigRow.new(value: Prefab::ConfigValue.new(int: 1))]))
31
31
  assert_equal 1, @loader.highwater_mark
32
32
  should_be :int, 1, "sample_int"
33
33
 
34
- @loader.set(Prefab::ConfigDelta.new(id: 4, key: "sample_int", default: Prefab::ConfigValue.new(int: 4)))
34
+ @loader.set(Prefab::Config.new(id: 4, key: "sample_int", rows: [Prefab::ConfigRow.new(value: Prefab::ConfigValue.new(int: 4))]))
35
35
  assert_equal 4, @loader.highwater_mark
36
36
  should_be :int, 4, "sample_int"
37
37
 
38
- @loader.set(Prefab::ConfigDelta.new(id: 2, key: "sample_int", default: Prefab::ConfigValue.new(int: 2)))
38
+ @loader.set(Prefab::Config.new(id: 2, key: "sample_int", rows: [Prefab::ConfigRow.new(value: Prefab::ConfigValue.new(int: 2))]))
39
39
  assert_equal 4, @loader.highwater_mark
40
40
  should_be :int, 4, "sample_int"
41
41
  end
@@ -43,37 +43,37 @@ class TestConfigLoader < Minitest::Test
43
43
  def test_api_precedence
44
44
  should_be :int, 123, "sample_int"
45
45
 
46
- @loader.set(Prefab::ConfigDelta.new(key: "sample_int", default: Prefab::ConfigValue.new(int: 456)))
46
+ @loader.set(Prefab::Config.new(key: "sample_int", rows: [Prefab::ConfigRow.new(value: Prefab::ConfigValue.new(int: 456))]))
47
47
  should_be :int, 456, "sample_int"
48
48
  end
49
49
 
50
50
  def test_api_deltas
51
51
  val = Prefab::ConfigValue.new(int: 456)
52
- delta = Prefab::ConfigDelta.new(key: "sample_int", default: val)
53
- @loader.set(delta)
52
+ config = Prefab::Config.new(key: "sample_int", rows: [Prefab::ConfigRow.new(value: val)])
53
+ @loader.set(config)
54
54
 
55
- deltas = Prefab::ConfigDeltas.new
56
- deltas.deltas << delta
57
- assert_equal deltas, @loader.get_api_deltas
55
+ configs = Prefab::Configs.new
56
+ configs.configs << config
57
+ assert_equal configs, @loader.get_api_deltas
58
58
  end
59
59
 
60
60
  def test_loading_tombstones_removes_entries
61
61
  val = Prefab::ConfigValue.new(int: 456)
62
- delta = Prefab::ConfigDelta.new(key: "sample_int", default: val)
63
- @loader.set(delta)
62
+ config = Prefab::Config.new(key: "sample_int", rows: [Prefab::ConfigRow.new(value: val)])
63
+ @loader.set(config)
64
64
 
65
- delta = Prefab::ConfigDelta.new(key: "sample_int", default: nil)
66
- @loader.set(delta)
65
+ config = Prefab::Config.new(key: "sample_int", rows: [])
66
+ @loader.set(config)
67
67
 
68
- deltas = Prefab::ConfigDeltas.new
69
- assert_equal deltas, @loader.get_api_deltas
68
+ configs = Prefab::Configs.new
69
+ assert_equal configs, @loader.get_api_deltas
70
70
  end
71
71
 
72
72
  private
73
73
 
74
74
  def should_be(type, value, key)
75
- assert_equal type, @loader.calc_config[key].default.type
76
- assert_equal value, @loader.calc_config[key].default.send(type)
75
+ assert_equal type, @loader.calc_config[key].rows[0].value.type
76
+ assert_equal value, @loader.calc_config[key].rows[0].value.send(type)
77
77
  end
78
78
 
79
79
  end
@@ -2,45 +2,58 @@ require 'test_helper'
2
2
 
3
3
  class TestConfigResolver < Minitest::Test
4
4
 
5
+ STAGING_ENV_ID = 1
6
+ PRODUCTION_ENV_ID = 2
7
+ TEST_ENV_ID = 3
8
+
5
9
  def test_resolution
6
10
  @loader = MockConfigLoader.new
7
11
 
8
12
  loaded_values = {
9
- "key" => Prefab::ConfigDelta.new(
13
+ "key" => Prefab::Config.new(
10
14
  key: "key",
11
- default: Prefab::ConfigValue.new(string: "value_no_env_default"),
12
- envs: [{
13
- environment: "test",
14
- default: Prefab::ConfigValue.new(string: "value_none"),
15
- namespace_values: [
16
- {
17
- namespace: "projectA",
18
- config_value: Prefab::ConfigValue.new(string: "valueA")
19
- },
20
- {
21
- namespace: "projectB",
22
- config_value: Prefab::ConfigValue.new(string: "valueB")
23
- },
24
- {
25
- namespace: "projectB.subprojectX",
26
- config_value: Prefab::ConfigValue.new(string: "projectB.subprojectX")
27
- },
28
- {
29
- namespace: "projectB.subprojectY",
30
- config_value: Prefab::ConfigValue.new(string: "projectB.subprojectY")
31
- },
32
- ]
33
- }]
15
+ rows: [
16
+ Prefab::ConfigRow.new(
17
+ value: Prefab::ConfigValue.new(string: "value_no_env_default"),
18
+ ),
19
+ Prefab::ConfigRow.new(
20
+ project_env_id: TEST_ENV_ID,
21
+ value: Prefab::ConfigValue.new(string: "value_none"),
22
+ ),
23
+ Prefab::ConfigRow.new(
24
+ project_env_id: TEST_ENV_ID,
25
+ namespace: "projectA",
26
+ value: Prefab::ConfigValue.new(string: "valueA"),
27
+ ),
28
+ Prefab::ConfigRow.new(
29
+ project_env_id: TEST_ENV_ID,
30
+ namespace: "projectB",
31
+ value: Prefab::ConfigValue.new(string: "valueB"),
32
+ ),
33
+ Prefab::ConfigRow.new(
34
+ project_env_id: TEST_ENV_ID,
35
+ namespace: "projectB.subprojectX",
36
+ value: Prefab::ConfigValue.new(string: "projectB.subprojectX"),
37
+ ),
38
+ Prefab::ConfigRow.new(
39
+ project_env_id: TEST_ENV_ID,
40
+ namespace: "projectB.subprojectY",
41
+ value: Prefab::ConfigValue.new(string: "projectB.subprojectY"),
42
+ ),
43
+
44
+ ]
34
45
  ),
35
- "key2" => Prefab::ConfigDelta.new(
46
+ "key2" => Prefab::Config.new(
36
47
  key: "key2",
37
- default: Prefab::ConfigValue.new(string: "valueB2"),
48
+ rows: [
49
+ value: Prefab::ConfigValue.new(string: "valueB2"),
50
+ ]
38
51
  )
39
52
  }
40
53
 
41
54
  @loader.stub :calc_config, loaded_values do
42
55
 
43
- @resolverA = resolver_for_namespace("", @loader, environment: "some_other_env")
56
+ @resolverA = resolver_for_namespace("", @loader, project_env_id: PRODUCTION_ENV_ID)
44
57
  assert_equal "value_no_env_default", @resolverA.get("key")
45
58
 
46
59
  ## below here in the test env
@@ -91,34 +104,34 @@ class TestConfigResolver < Minitest::Test
91
104
  end
92
105
 
93
106
  def test_special_ff_variant_copying
107
+
94
108
  @loader = MockConfigLoader.new
95
109
  loaded_values = {
96
- "ff" => Prefab::ConfigDelta.new(
110
+ "ff" => Prefab::Config.new(
97
111
  key: "ff",
98
- default: Prefab::ConfigValue.new(feature_flag: Prefab::FeatureFlag.new(
99
- variants: [
100
- Prefab::FeatureFlagVariant.new(string: "inactive"),
101
- Prefab::FeatureFlagVariant.new(string: "default"),
102
- Prefab::FeatureFlagVariant.new(string: "env"),
103
- ],
104
- inactive_variant_idx: 0,
105
- default: Prefab::VariantDistribution.new(variant_idx: 1)
106
- )),
107
- envs: [
108
- Prefab::EnvironmentValues.new(
109
- environment: "test",
110
- default: Prefab::ConfigValue.new(feature_flag: Prefab::FeatureFlag.new(
112
+ variants: [
113
+ Prefab::FeatureFlagVariant.new(string: "inactive"),
114
+ Prefab::FeatureFlagVariant.new(string: "default"),
115
+ Prefab::FeatureFlagVariant.new(string: "env"),
116
+ ],
117
+ rows: [
118
+ { value: Prefab::ConfigValue.new(feature_flag: Prefab::FeatureFlag.new(
119
+ inactive_variant_idx: 0,
120
+ default: Prefab::VariantDistribution.new(variant_idx: 1)
121
+ )) },
122
+ { project_env_id: TEST_ENV_ID,
123
+ value: Prefab::ConfigValue.new(feature_flag: Prefab::FeatureFlag.new(
111
124
  inactive_variant_idx: 0,
112
- default: Prefab::VariantDistribution.new(variant_idx: 2)))
113
- )
125
+ default: Prefab::VariantDistribution.new(variant_idx: 2)
126
+ )) }
114
127
  ]
115
128
  )
116
129
  }
117
130
  @loader.stub :calc_config, loaded_values do
118
131
  resolver = Prefab::ConfigResolver.new(MockBaseClient.new, @loader)
119
- ff = resolver.get("ff")
120
- assert_equal 3, ff.variants.size
121
- assert_equal %w(inactive default env), ff.variants.map(&:string)
132
+ config = resolver.get_config("ff")
133
+ assert_equal 3, config.variants.size
134
+ assert_equal %w(inactive default env), config.variants.map(&:string)
122
135
  end
123
136
  end
124
137
 
@@ -127,13 +140,17 @@ class TestConfigResolver < Minitest::Test
127
140
  @loader = MockConfigLoader.new
128
141
 
129
142
  loaded_values = {
130
- "Key:With:Colons" => Prefab::ConfigDelta.new(
143
+ "Key:With:Colons" => Prefab::Config.new(
131
144
  key: "Key:With:Colons",
132
- default: Prefab::ConfigValue.new(string: "value"),
145
+ rows: [Prefab::ConfigRow.new(
146
+ value: Prefab::ConfigValue.new(string: "value")
147
+ )]
133
148
  ),
134
- "proj:apikey" => Prefab::ConfigDelta.new(
149
+ "proj:apikey" => Prefab::Config.new(
135
150
  key: "proj:apikey",
136
- default: Prefab::ConfigValue.new(string: "v2"),
151
+ rows: [Prefab::ConfigRow.new(
152
+ value: Prefab::ConfigValue.new(string: "v2")
153
+ )]
137
154
  )
138
155
  }
139
156
 
@@ -171,8 +188,8 @@ class TestConfigResolver < Minitest::Test
171
188
  end
172
189
  end
173
190
 
174
- def resolver_for_namespace(namespace, loader, environment: "test")
175
- Prefab::ConfigResolver.new(MockBaseClient.new(namespace: namespace, environment: environment), loader)
191
+ def resolver_for_namespace(namespace, loader, project_env_id: TEST_ENV_ID)
192
+ Prefab::ConfigResolver.new(MockBaseClient.new(namespace: namespace, project_env_id: project_env_id), loader)
176
193
  end
177
194
 
178
195
  end
@@ -13,12 +13,12 @@ class TestFeatureFlagClient < Minitest::Test
13
13
  def test_pct
14
14
  feature = "FlagName"
15
15
 
16
+ variants = [
17
+ Prefab::FeatureFlagVariant.new(bool: false),
18
+ Prefab::FeatureFlagVariant.new(bool: true)
19
+ ]
16
20
  flag = Prefab::FeatureFlag.new(
17
21
  active: true,
18
- variants: [
19
- Prefab::FeatureFlagVariant.new(bool: false),
20
- Prefab::FeatureFlagVariant.new(bool: true)
21
- ],
22
22
  inactive_variant_idx: 0,
23
23
  default: Prefab::VariantDistribution.new(variant_weights:
24
24
  Prefab::VariantWeights.new(weights: [
@@ -32,52 +32,52 @@ class TestFeatureFlagClient < Minitest::Test
32
32
  )
33
33
 
34
34
  assert_equal false,
35
- @client.evaluate(feature, "hashes high", [], flag)
35
+ @client.evaluate(feature, "hashes high", [], flag, variants)
36
36
  assert_equal true,
37
- @client.evaluate(feature, "hashes low", [], flag)
37
+ @client.evaluate(feature, "hashes low", [], flag, variants)
38
38
  end
39
39
 
40
40
  def test_basic_active_inactive
41
41
  feature = "FlagName"
42
+ variants = [
43
+ Prefab::FeatureFlagVariant.new(bool: false),
44
+ Prefab::FeatureFlagVariant.new(bool: true)
45
+ ]
42
46
  flag = Prefab::FeatureFlag.new(
43
47
  active: true,
44
- variants: [
45
- Prefab::FeatureFlagVariant.new(bool: false),
46
- Prefab::FeatureFlagVariant.new(bool: true)
47
- ],
48
48
  inactive_variant_idx: 0,
49
49
  default: Prefab::VariantDistribution.new(variant_idx: 1)
50
50
  )
51
51
  assert_equal true,
52
- @client.evaluate(feature, "hashes high", [], flag)
52
+ @client.evaluate(feature, "hashes high", [], flag, variants)
53
53
  assert_equal true,
54
- @client.evaluate(feature, "hashes low", [], flag)
54
+ @client.evaluate(feature, "hashes low", [], flag, variants)
55
55
 
56
+ variants = [
57
+ Prefab::FeatureFlagVariant.new(bool: false),
58
+ Prefab::FeatureFlagVariant.new(bool: true)
59
+ ]
56
60
  flag = Prefab::FeatureFlag.new(
57
61
  active: false,
58
- variants: [
59
- Prefab::FeatureFlagVariant.new(bool: false),
60
- Prefab::FeatureFlagVariant.new(bool: true)
61
- ],
62
62
  inactive_variant_idx: 0,
63
63
  default: Prefab::VariantDistribution.new(variant_idx: 1)
64
64
  )
65
65
  assert_equal false,
66
- @client.evaluate(feature, "hashes high", [], flag)
66
+ @client.evaluate(feature, "hashes high", [], flag, variants)
67
67
  assert_equal false,
68
- @client.evaluate(feature, "hashes low", [], flag)
68
+ @client.evaluate(feature, "hashes low", [], flag, variants)
69
69
  end
70
70
 
71
71
  def test_user_targets
72
72
 
73
73
  feature = "FlagName"
74
+ variants = [
75
+ Prefab::FeatureFlagVariant.new(string: "inactive"),
76
+ Prefab::FeatureFlagVariant.new(string: "user target"),
77
+ Prefab::FeatureFlagVariant.new(string: "default"),
78
+ ]
74
79
  flag = Prefab::FeatureFlag.new(
75
80
  active: true,
76
- variants: [
77
- Prefab::FeatureFlagVariant.new(string: "inactive"),
78
- Prefab::FeatureFlagVariant.new(string: "user target"),
79
- Prefab::FeatureFlagVariant.new(string: "default"),
80
- ],
81
81
  inactive_variant_idx: 0,
82
82
  user_targets: [
83
83
  variant_idx: 1,
@@ -87,22 +87,22 @@ class TestFeatureFlagClient < Minitest::Test
87
87
  )
88
88
 
89
89
  assert_equal "user target",
90
- @client.evaluate(feature, "user:1", [], flag)
90
+ @client.evaluate(feature, "user:1", [], flag, variants)
91
91
  assert_equal "default",
92
- @client.evaluate(feature, "user:2", [], flag)
92
+ @client.evaluate(feature, "user:2", [], flag, variants)
93
93
  assert_equal "user target",
94
- @client.evaluate(feature, "user:3", [], flag)
94
+ @client.evaluate(feature, "user:3", [], flag, variants)
95
95
  end
96
96
 
97
97
  def test_inclusion_rule
98
98
  feature = "FlagName"
99
+ variants = [
100
+ Prefab::FeatureFlagVariant.new(string: "inactive"),
101
+ Prefab::FeatureFlagVariant.new(string: "rule target"),
102
+ Prefab::FeatureFlagVariant.new(string: "default"),
103
+ ]
99
104
  flag = Prefab::FeatureFlag.new(
100
105
  active: true,
101
- variants: [
102
- Prefab::FeatureFlagVariant.new(string: "inactive"),
103
- Prefab::FeatureFlagVariant.new(string: "rule target"),
104
- Prefab::FeatureFlagVariant.new(string: "default"),
105
- ],
106
106
  inactive_variant_idx: 0,
107
107
  rules: [Prefab::Rule.new(
108
108
  distribution: Prefab::VariantDistribution.new(variant_idx: 1),
@@ -115,9 +115,9 @@ class TestFeatureFlagClient < Minitest::Test
115
115
  )
116
116
 
117
117
  assert_equal "rule target",
118
- @client.evaluate(feature, "user:1", [], flag)
118
+ @client.evaluate(feature, "user:1", [], flag, variants)
119
119
  assert_equal "default",
120
- @client.evaluate(feature, "user:2", [], flag)
120
+ @client.evaluate(feature, "user:2", [], flag, variants)
121
121
 
122
122
  end
123
123
 
@@ -135,7 +135,7 @@ class TestFeatureFlagClient < Minitest::Test
135
135
 
136
136
  def test_segments
137
137
  segment_key = "prefab-segment-beta-group"
138
- @mock_base_client.mock_this_config(segment_key,
138
+ @mock_base_client.config_client.mock_this_config(segment_key,
139
139
  Prefab::Segment.new(
140
140
  name: "Beta Group",
141
141
  includes: ["user:1"]
@@ -143,13 +143,13 @@ class TestFeatureFlagClient < Minitest::Test
143
143
  )
144
144
 
145
145
  feature = "FlagName"
146
+ variants = [
147
+ Prefab::FeatureFlagVariant.new(string: "inactive"),
148
+ Prefab::FeatureFlagVariant.new(string: "rule target"),
149
+ Prefab::FeatureFlagVariant.new(string: "default"),
150
+ ]
146
151
  flag = Prefab::FeatureFlag.new(
147
152
  active: true,
148
- variants: [
149
- Prefab::FeatureFlagVariant.new(string: "inactive"),
150
- Prefab::FeatureFlagVariant.new(string: "rule target"),
151
- Prefab::FeatureFlagVariant.new(string: "default"),
152
- ],
153
153
  inactive_variant_idx: 0,
154
154
  rules: [Prefab::Rule.new(
155
155
  distribution: Prefab::VariantDistribution.new(variant_idx: 1),
@@ -162,15 +162,15 @@ class TestFeatureFlagClient < Minitest::Test
162
162
  )
163
163
 
164
164
  assert_equal "rule target",
165
- @client.evaluate(feature, "user:1", [], flag)
165
+ @client.evaluate(feature, "user:1", [], flag, variants)
166
166
  assert_equal "default",
167
- @client.evaluate(feature, "user:2", [], flag)
167
+ @client.evaluate(feature, "user:2", [], flag, variants)
168
168
 
169
169
  end
170
170
 
171
171
  def test_in_multiple_segments_has_or_behavior
172
172
  segment_key_one = "prefab-segment-segment-1"
173
- @mock_base_client.mock_this_config(segment_key_one,
173
+ @mock_base_client.config_client.mock_this_config(segment_key_one,
174
174
  Prefab::Segment.new(
175
175
  name: "Segment-1",
176
176
  includes: ["user:1", "user:2"],
@@ -178,7 +178,7 @@ class TestFeatureFlagClient < Minitest::Test
178
178
  )
179
179
  )
180
180
  segment_key_two = "prefab-segment-segment-2"
181
- @mock_base_client.mock_this_config(segment_key_two,
181
+ @mock_base_client.config_client.mock_this_config(segment_key_two,
182
182
  Prefab::Segment.new(
183
183
  name: "Segment-2",
184
184
  includes: ["user:3", "user:4"],
@@ -187,13 +187,13 @@ class TestFeatureFlagClient < Minitest::Test
187
187
  )
188
188
 
189
189
  feature = "FlagName"
190
+ variants = [
191
+ Prefab::FeatureFlagVariant.new(string: "inactive"),
192
+ Prefab::FeatureFlagVariant.new(string: "rule target"),
193
+ Prefab::FeatureFlagVariant.new(string: "default"),
194
+ ]
190
195
  flag = Prefab::FeatureFlag.new(
191
196
  active: true,
192
- variants: [
193
- Prefab::FeatureFlagVariant.new(string: "inactive"),
194
- Prefab::FeatureFlagVariant.new(string: "rule target"),
195
- Prefab::FeatureFlagVariant.new(string: "default"),
196
- ],
197
197
  inactive_variant_idx: 0,
198
198
  rules: [Prefab::Rule.new(
199
199
  distribution: Prefab::VariantDistribution.new(variant_idx: 1),
@@ -206,15 +206,15 @@ class TestFeatureFlagClient < Minitest::Test
206
206
  )
207
207
 
208
208
  assert_equal "rule target",
209
- @client.evaluate(feature, "user:1", [], flag)
209
+ @client.evaluate(feature, "user:1", [], flag, variants)
210
210
  assert_equal "rule target",
211
- @client.evaluate(feature, "user:2", [], flag), "matches segment 1"
211
+ @client.evaluate(feature, "user:2", [], flag, variants), "matches segment 1"
212
212
  assert_equal "rule target",
213
- @client.evaluate(feature, "user:3", [], flag)
213
+ @client.evaluate(feature, "user:3", [], flag, variants)
214
214
  assert_equal "rule target",
215
- @client.evaluate(feature, "user:4", [], flag)
215
+ @client.evaluate(feature, "user:4", [], flag, variants)
216
216
  assert_equal "default",
217
- @client.evaluate(feature, "user:5", [], flag)
217
+ @client.evaluate(feature, "user:5", [], flag, variants)
218
218
 
219
219
  end
220
220
  end
data/test/test_helper.rb CHANGED
@@ -2,29 +2,50 @@ require 'minitest/autorun'
2
2
  require 'prefab-cloud-ruby'
3
3
 
4
4
  class MockBaseClient
5
- attr_reader :namespace, :logger, :environment
5
+ STAGING_ENV_ID = 1
6
+ PRODUCTION_ENV_ID = 2
7
+ TEST_ENV_ID = 3
8
+ attr_reader :namespace, :logger, :project_env_id, :config_client
6
9
 
7
- def initialize(environment: "test", namespace: "")
8
- @environment = environment
10
+ def initialize(project_env_id: TEST_ENV_ID, namespace: "")
11
+ @project_env_id = project_env_id
9
12
  @namespace = namespace
10
13
  @logger = Logger.new($stdout)
11
- @config_values = {}
14
+ @config_client = MockConfigClient.new
12
15
  end
13
16
 
14
17
  def project_id
15
18
  1
16
19
  end
17
20
 
21
+ def project_env_id
22
+ @project_env_id
23
+ end
24
+
18
25
  def log_internal level, message
19
26
  end
20
27
 
21
- def mock_this_config key, config_value
22
- @config_values[key] = config_value
28
+ def config_value key
29
+ @config_values[key]
23
30
  end
24
31
 
32
+ end
33
+
34
+ class MockConfigClient
35
+ def initialize(config_values = {})
36
+ @config_values = config_values
37
+ end
25
38
  def get(key)
26
39
  @config_values[key]
27
40
  end
41
+
42
+ def get_config(key)
43
+ Prefab::Config.new(value: @config_values[key], key: key)
44
+ end
45
+
46
+ def mock_this_config key, config_value
47
+ @config_values[key] = config_value
48
+ end
28
49
  end
29
50
 
30
51
  class MockConfigLoader
data/test/test_logger.rb CHANGED
@@ -39,13 +39,3 @@ class TestCLogger < Minitest::Test
39
39
  @logger.level_of("app.models.user")
40
40
  end
41
41
  end
42
-
43
- class MockConfigClient
44
- def initialize(hash)
45
- @hash = hash
46
- end
47
-
48
- def get(key)
49
- @hash[key]
50
- end
51
- end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prefab-cloud-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Dwyer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-24 00:00:00.000000000 Z
11
+ date: 2022-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -44,6 +44,20 @@ dependencies:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
46
  version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: ld-eventsource
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
47
61
  - !ruby/object:Gem::Dependency
48
62
  name: grpc
49
63
  requirement: !ruby/object:Gem::Requirement