prefab-cloud-ruby 0.7.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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