prefab-cloud-ruby 0.13.0 → 0.13.1

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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -0
  3. data/Gemfile +4 -11
  4. data/Gemfile.lock +32 -52
  5. data/README.md +1 -19
  6. data/Rakefile +0 -1
  7. data/VERSION +1 -1
  8. data/compile_protos.sh +0 -3
  9. data/lib/prefab/auth_interceptor.rb +0 -1
  10. data/lib/prefab/cancellable_interceptor.rb +0 -1
  11. data/lib/prefab/client.rb +36 -49
  12. data/lib/prefab/config_client.rb +73 -145
  13. data/lib/prefab/config_loader.rb +13 -98
  14. data/lib/prefab/config_resolver.rb +49 -56
  15. data/lib/prefab/feature_flag_client.rb +11 -129
  16. data/lib/prefab/logger_client.rb +8 -10
  17. data/lib/prefab/murmer3.rb +0 -1
  18. data/lib/prefab/noop_cache.rb +0 -1
  19. data/lib/prefab/noop_stats.rb +0 -1
  20. data/lib/prefab/ratelimit_client.rb +0 -1
  21. data/lib/prefab-cloud-ruby.rb +0 -10
  22. data/lib/prefab_pb.rb +132 -214
  23. data/lib/prefab_services_pb.rb +6 -35
  24. data/prefab-cloud-ruby.gemspec +11 -30
  25. data/test/.prefab.test.config.yaml +1 -27
  26. data/test/test_config_loader.rb +25 -39
  27. data/test/test_config_resolver.rb +38 -134
  28. data/test/test_feature_flag_client.rb +35 -277
  29. data/test/test_helper.rb +4 -70
  30. data/test/test_logger.rb +29 -23
  31. metadata +15 -70
  32. data/.github/workflows/ruby.yml +0 -39
  33. data/.tool-versions +0 -1
  34. data/CODEOWNERS +0 -1
  35. data/lib/prefab/config_helper.rb +0 -29
  36. data/lib/prefab/error.rb +0 -6
  37. data/lib/prefab/errors/initialization_timeout_error.rb +0 -13
  38. data/lib/prefab/errors/invalid_api_key_error.rb +0 -19
  39. data/lib/prefab/errors/missing_default_error.rb +0 -13
  40. data/lib/prefab/internal_logger.rb +0 -29
  41. data/lib/prefab/options.rb +0 -82
  42. data/run_test_harness_server.sh +0 -8
  43. data/test/harness_server.rb +0 -64
  44. data/test/test_client.rb +0 -91
  45. data/test/test_config_client.rb +0 -56
@@ -1,306 +1,64 @@
1
- # frozen_string_literal: true
2
1
  require 'test_helper'
3
2
 
4
3
  class TestFeatureFlagClient < Minitest::Test
5
4
 
6
- def setup
7
- super
8
- @mock_base_client = MockBaseClient.new
9
- @client = Prefab::FeatureFlagClient.new(@mock_base_client)
10
- Prefab::FeatureFlagClient.send(:public, :is_on?) #publicize for testing
11
- Prefab::FeatureFlagClient.send(:public, :segment_match?) #publicize for testing
12
- Prefab::FeatureFlagClient.send(:public, :get_variant) #publicize for testing
13
- end
14
-
15
5
  def test_pct
6
+ client = Prefab::FeatureFlagClient.new(MockBaseClient.new)
7
+ Prefab::FeatureFlagClient.send(:public, :is_on?)
16
8
  feature = "FlagName"
9
+ flag = Prefab::FeatureFlag.new( pct: 0.5)
17
10
 
18
- variants = [
19
- Prefab::FeatureFlagVariant.new(bool: false),
20
- Prefab::FeatureFlagVariant.new(bool: true)
21
- ]
22
- flag = Prefab::FeatureFlag.new(
23
- active: true,
24
- inactive_variant_idx: 1,
25
- rules: [
26
- Prefab::Rule.new(
27
- criteria: Prefab::Criteria.new(operator: Prefab::Criteria::CriteriaOperator::ALWAYS_TRUE),
28
- variant_weights: [
29
- Prefab::VariantWeight.new(weight: 86,
30
- variant_idx: 2), #true
31
- Prefab::VariantWeight.new(weight: 14,
32
- variant_idx: 1), #false
33
- ]
34
- )
35
- ]
36
- )
37
- # weights above chosen to be 86% in variant_idx 2. and 14% in variant_idx 1.
38
- # since hashes high is 86.32 > 86 it just falls outside the 86% range and gets false
39
-
40
- # "1FlagNamehashes high" hashes to 86.322% through dist
41
11
  assert_equal false,
42
- evaluate(feature, "hashes high", [], flag, variants)
43
- # "1FlagNamehashes low" hashes to 44.547% through dist
44
- assert_equal true,
45
- evaluate(feature, "hashes low", [], flag, variants)
12
+ client.is_on?(feature, "hashes high", [], flag)
46
13
 
47
- end
48
-
49
- def test_basic_active_inactive
50
- feature = "FlagName"
51
- variants = [
52
- Prefab::FeatureFlagVariant.new(bool: false),
53
- Prefab::FeatureFlagVariant.new(bool: true)
54
- ]
55
- flag = Prefab::FeatureFlag.new(
56
- active: true,
57
- inactive_variant_idx: 1,
58
- rules: default_ff_rule(2)
59
- )
60
14
  assert_equal true,
61
- evaluate(feature, "hashes high", [], flag, variants)
62
- assert_equal true,
63
- evaluate(feature, "hashes low", [], flag, variants)
64
-
65
- variants = [
66
- Prefab::FeatureFlagVariant.new(bool: false),
67
- Prefab::FeatureFlagVariant.new(bool: true)
68
- ]
69
- flag = Prefab::FeatureFlag.new(
70
- active: false,
71
- inactive_variant_idx: 1,
72
- rules: default_ff_rule(2)
73
- )
74
- assert_equal false,
75
- evaluate(feature, "hashes high", [], flag, variants)
76
- assert_equal false,
77
- evaluate(feature, "hashes low", [], flag, variants)
15
+ client.is_on?(feature, "hashes low", [], flag)
78
16
  end
79
17
 
80
- def test_inclusion_rule
81
- feature = "FlagName"
82
- variants = [
83
- Prefab::FeatureFlagVariant.new(string: "inactive"),
84
- Prefab::FeatureFlagVariant.new(string: "rule target"),
85
- Prefab::FeatureFlagVariant.new(string: "default"),
86
- ]
87
- flag = Prefab::FeatureFlag.new(
88
- active: true,
89
- inactive_variant_idx: 1,
90
- rules: [
91
- Prefab::Rule.new(
92
- variant_weights: [
93
- Prefab::VariantWeight.new(weight: 1000,
94
- variant_idx: 2)
95
- ],
96
- criteria: Prefab::Criteria.new(
97
- operator: "LOOKUP_KEY_IN",
98
- values: ["user:1"]
99
- )
100
- ),
101
- Prefab::Rule.new(
102
- criteria: Prefab::Criteria.new(operator: Prefab::Criteria::CriteriaOperator::ALWAYS_TRUE),
103
- variant_weights: [
104
- Prefab::VariantWeight.new(weight: 1000,
105
- variant_idx: 3)
106
- ]
107
- )
108
-
109
- ],
110
- )
111
18
 
112
- assert_equal "rule target",
113
- evaluate(feature, "user:1", [], flag, variants)
114
- assert_equal "default",
115
- evaluate(feature, "user:2", [], flag, variants)
116
-
117
- end
118
-
119
- def test_property_is_one_of
19
+ def test_off
20
+ client = Prefab::FeatureFlagClient.new(MockBaseClient.new)
21
+ Prefab::FeatureFlagClient.send(:public, :is_on?)
120
22
  feature = "FlagName"
121
- variants = [
122
- Prefab::FeatureFlagVariant.new(string: "inactive"),
123
- Prefab::FeatureFlagVariant.new(string: "rule target"),
124
- Prefab::FeatureFlagVariant.new(string: "default"),
125
- ]
126
- flag = Prefab::FeatureFlag.new(
127
- active: true,
128
- inactive_variant_idx: 1,
129
- rules: [
130
- Prefab::Rule.new(
131
- variant_weights: [
132
- Prefab::VariantWeight.new(weight: 1000,
133
- variant_idx: 2)
134
- ],
135
- criteria: Prefab::Criteria.new(
136
- operator: "PROP_IS_ONE_OF",
137
- values: ["a@example.com", "b@example.com"],
138
- property: "email"
139
- )
140
- ),
141
- Prefab::Rule.new(
142
- criteria: Prefab::Criteria.new(operator: Prefab::Criteria::CriteriaOperator::ALWAYS_TRUE),
143
- variant_weights: [
144
- Prefab::VariantWeight.new(weight: 1000,
145
- variant_idx: 3)
146
- ]
147
- )
148
-
149
- ],
150
- )
23
+ flag = Prefab::FeatureFlag.new(pct: 0)
151
24
 
152
- assert_equal "default",
153
- evaluate(feature, "user:1", { email: "not@example.com" }, flag, variants)
154
- assert_equal "default",
155
- evaluate(feature, "user:2", {}, flag, variants)
156
- assert_equal "rule target",
157
- evaluate(feature, "user:2", { email: "b@example.com" }, flag, variants)
158
- assert_equal "rule target",
159
- evaluate(feature, "user:2", { "email" => "b@example.com" }, flag, variants)
160
-
161
- end
25
+ assert_equal false,
26
+ client.is_on?(feature, "hashes high", [], flag)
162
27
 
163
- def test_segment_match?
164
- segment = Prefab::Segment.new(
165
- criterion: [
166
- Prefab::Criteria.new(
167
- operator: "PROP_IS_ONE_OF",
168
- values: ["a@example.com", "b@example.com"],
169
- property: "email"
170
- ),
171
- Prefab::Criteria.new(
172
- operator: "LOOKUP_KEY_IN",
173
- values: ["user:2"]
174
- )
175
- ]
176
- )
177
- assert_equal false, @client.segment_match?(segment, "user:0", {})
178
- assert_equal true, @client.segment_match?(segment, "user:2", {})
179
- assert_equal false, @client.segment_match?(segment, "user:1", { email: "no@example.com" })
180
- assert_equal true, @client.segment_match?(segment, "user:1", { email: "a@example.com" })
28
+ assert_equal false,
29
+ client.is_on?(feature, "hashes low", [], flag)
181
30
  end
182
31
 
183
- def test_segments
184
- segment_key = "prefab-segment-beta-group"
185
- @mock_base_client.config_client.mock_this_config(segment_key,
186
- Prefab::Segment.new(
187
- criterion: [
188
- Prefab::Criteria.new(
189
- operator: Prefab::Criteria::CriteriaOperator::LOOKUP_KEY_IN,
190
- values: ["user:1"]
191
- )
192
- ]
193
- )
194
- )
195
32
 
33
+ def test_on
34
+ client = Prefab::FeatureFlagClient.new(MockBaseClient.new)
35
+ Prefab::FeatureFlagClient.send(:public, :is_on?)
196
36
  feature = "FlagName"
197
- variants = [
198
- Prefab::FeatureFlagVariant.new(string: "inactive"),
199
- Prefab::FeatureFlagVariant.new(string: "rule target"),
200
- Prefab::FeatureFlagVariant.new(string: "default"),
201
- ]
202
- flag = Prefab::FeatureFlag.new(
203
- active: true,
204
- inactive_variant_idx: 1,
205
- rules: [
206
- Prefab::Rule.new(
207
- variant_weights: [
208
- Prefab::VariantWeight.new(weight: 1000,
209
- variant_idx: 2)
210
- ],
211
- criteria: Prefab::Criteria.new(
212
- operator: "IN_SEG",
213
- values: [segment_key]
214
- )
215
- ),
216
- Prefab::Rule.new(
217
- criteria: Prefab::Criteria.new(operator: Prefab::Criteria::CriteriaOperator::ALWAYS_TRUE),
218
- variant_weights: [
219
- Prefab::VariantWeight.new(weight: 1000,
220
- variant_idx: 3)
221
- ]
222
- )
37
+ flag = Prefab::FeatureFlag.new(pct: 1)
223
38
 
224
- ],
225
- )
226
-
227
- assert_equal "rule target",
228
- evaluate(feature, "user:1", [], flag, variants)
229
- assert_equal "default",
230
- evaluate(feature, "user:2", [], flag, variants)
39
+ assert_equal true,
40
+ client.is_on?(feature, "hashes high", [], flag)
231
41
 
42
+ assert_equal true,
43
+ client.is_on?(feature, "hashes low", [], flag)
232
44
  end
233
45
 
234
- def test_in_multiple_segments_has_or_behavior
235
- segment_key_one = "prefab-segment-segment-1"
236
- @mock_base_client.config_client.mock_this_config(segment_key_one,
237
- Prefab::Segment.new(
238
- criterion: [
239
- Prefab::Criteria.new(
240
- operator: Prefab::Criteria::CriteriaOperator::LOOKUP_KEY_IN,
241
- values: ["user:1", "user:2"]
242
- )
243
- ]
244
- )
245
- )
246
- segment_key_two = "prefab-segment-segment-2"
247
- @mock_base_client.config_client.mock_this_config(segment_key_two,
248
- Prefab::Segment.new(
249
- criterion: [
250
- Prefab::Criteria.new(
251
- operator: Prefab::Criteria::CriteriaOperator::LOOKUP_KEY_IN,
252
- values: ["user:3", "user:4"]
253
- )
254
- ]
255
- )
256
- )
257
-
46
+ def test_whitelist
47
+ client = Prefab::FeatureFlagClient.new(MockBaseClient.new)
48
+ Prefab::FeatureFlagClient.send(:public, :is_on?)
258
49
  feature = "FlagName"
259
- variants = [
260
- Prefab::FeatureFlagVariant.new(string: "inactive"),
261
- Prefab::FeatureFlagVariant.new(string: "rule target"),
262
- Prefab::FeatureFlagVariant.new(string: "default"),
263
- ]
264
- flag = Prefab::FeatureFlag.new(
265
- active: true,
266
- inactive_variant_idx: 1,
267
- rules: [
268
- Prefab::Rule.new(
269
- variant_weights: [
270
- Prefab::VariantWeight.new(weight: 1000,
271
- variant_idx: 2)
272
- ],
273
- criteria: Prefab::Criteria.new(
274
- operator: "IN_SEG",
275
- values: [segment_key_one, segment_key_two]
276
- )
277
- ),
278
- Prefab::Rule.new(
279
- criteria: Prefab::Criteria.new(operator: Prefab::Criteria::CriteriaOperator::ALWAYS_TRUE),
280
- variant_weights: [
281
- Prefab::VariantWeight.new(weight: 1000,
282
- variant_idx: 3)
283
- ]
284
- )
50
+ flag = Prefab::FeatureFlag.new(pct: 0, whitelisted: ["beta", "user:1", "user:3"])
285
51
 
286
- ],
287
- )
288
-
289
- assert_equal "rule target",
290
- evaluate(feature, "user:1", [], flag, variants)
291
- assert_equal "rule target",
292
- evaluate(feature, "user:2", [], flag, variants), "matches segment 1"
293
- assert_equal "rule target",
294
- evaluate(feature, "user:3", [], flag, variants)
295
- assert_equal "rule target",
296
- evaluate(feature, "user:4", [], flag, variants)
297
- assert_equal "default",
298
- evaluate(feature, "user:5", [], flag, variants)
299
-
300
- end
52
+ assert_equal false,
53
+ client.is_on?(feature, "anything", [], flag)
54
+ assert_equal true,
55
+ client.is_on?(feature, "anything", ["beta"], flag)
56
+ assert_equal true,
57
+ client.is_on?(feature, "anything", ["alpha", "beta"], flag)
58
+ assert_equal true,
59
+ client.is_on?(feature, "anything", ["alpha", "user:1"], flag)
60
+ assert_equal false,
61
+ client.is_on?(feature, "anything", ["alpha", "user:2"], flag)
301
62
 
302
- def evaluate(feature_name, lookup_key, attributes, flag, variants)
303
- variant = @client.get_variant(feature_name, lookup_key, attributes, flag, variants)
304
- @client.value_of_variant(variant)
305
63
  end
306
64
  end
data/test/test_helper.rb CHANGED
@@ -1,89 +1,23 @@
1
- # frozen_string_literal: true
2
1
  require 'minitest/autorun'
3
2
  require 'prefab-cloud-ruby'
4
3
 
5
4
  class MockBaseClient
6
- STAGING_ENV_ID = 1
7
- PRODUCTION_ENV_ID = 2
8
- TEST_ENV_ID = 3
9
- attr_reader :namespace, :logger, :config_client, :options
5
+ attr_reader :namespace, :logger
10
6
 
11
- def initialize(options = Prefab::Options.new)
12
- @options = options
7
+ def initialize(namespace: "")
13
8
  @namespace = namespace
14
- @logger = Prefab::LoggerClient.new($stdout)
15
- @config_client = MockConfigClient.new
9
+ @logger = Logger.new($stdout)
16
10
  end
17
11
 
18
- def project_id
12
+ def account_id
19
13
  1
20
14
  end
21
15
 
22
- def log
23
- @logger
24
- end
25
-
26
16
  def log_internal level, message
27
17
  end
28
-
29
- def config_value key
30
- @config_values[key]
31
- end
32
-
33
- end
34
-
35
- class MockConfigClient
36
- def initialize(config_values = {})
37
- @config_values = config_values
38
- end
39
- def get(key, default=nil)
40
- @config_values.fetch(key, default)
41
- end
42
-
43
- def get_config(key)
44
- Prefab::Config.new(value: @config_values[key], key: key)
45
- end
46
-
47
- def mock_this_config key, config_value
48
- @config_values[key] = config_value
49
- end
50
18
  end
51
19
 
52
20
  class MockConfigLoader
53
21
  def calc_config
54
22
  end
55
23
  end
56
-
57
-
58
- private
59
-
60
- def default_ff_rule(variant_idx)
61
- [
62
- Prefab::Rule.new(
63
- criteria: Prefab::Criteria.new(operator: Prefab::Criteria::CriteriaOperator::ALWAYS_TRUE),
64
- variant_weights: [
65
- Prefab::VariantWeight.new(weight: 1000,
66
- variant_idx: variant_idx)
67
- ]
68
- )
69
- ]
70
- end
71
-
72
- def with_env(key, value)
73
- old_value = ENV[key]
74
-
75
- ENV[key] = value
76
- ensure
77
- ENV[key] = old_value
78
- end
79
-
80
- def new_client(overrides = {})
81
- options = Prefab::Options.new(**{
82
- prefab_config_override_dir: "none",
83
- prefab_config_classpath_dir: "test",
84
- defaults_env: "unit_tests",
85
- prefab_datasources: Prefab::Options::DATASOURCES::LOCAL_ONLY
86
- }.merge(overrides))
87
-
88
- Prefab::Client.new(options)
89
- end
data/test/test_logger.rb CHANGED
@@ -1,4 +1,3 @@
1
- # frozen_string_literal: true
2
1
  require 'test_helper'
3
2
 
4
3
  class TestCLogger < Minitest::Test
@@ -19,27 +18,34 @@ class TestCLogger < Minitest::Test
19
18
  end
20
19
 
21
20
  def test_level_of
22
- with_env("PREFAB_LOG_CLIENT_BOOTSTRAP_LOG_LEVEL", "info") do
23
- # env var overrides the default level
24
- assert_equal Logger::INFO,
25
- @logger.level_of("app.models.user"), "PREFAB_LOG_CLIENT_BOOTSTRAP_LOG_LEVEL is info"
26
-
27
- @logger.set_config_client(MockConfigClient.new({}))
28
- assert_equal Logger::WARN,
29
- @logger.level_of("app.models.user"), "default is warn"
30
-
31
- @logger.set_config_client(MockConfigClient.new("log_level.app" => "info"))
32
- assert_equal Logger::INFO,
33
- @logger.level_of("app.models.user")
34
-
35
- @logger.set_config_client(MockConfigClient.new("log_level.app" => "debug"))
36
- assert_equal Logger::DEBUG,
37
- @logger.level_of("app.models.user")
38
-
39
- @logger.set_config_client(MockConfigClient.new("log_level.app" => "debug",
40
- "log_level.app.models" => "warn"))
41
- assert_equal Logger::WARN,
42
- @logger.level_of("app.models.user")
43
- end
21
+ assert_equal Logger::INFO,
22
+ @logger.level_of("app.models.user"), "PREFAB_LOG_CLIENT_BOOTSTRAP_LOG_LEVEL is info"
23
+
24
+ @logger.set_config_client(MockConfigClient.new({}))
25
+ assert_equal Logger::WARN,
26
+ @logger.level_of("app.models.user"), "default is warn"
27
+
28
+ @logger.set_config_client(MockConfigClient.new("log_level.app" => "info"))
29
+ assert_equal Logger::INFO,
30
+ @logger.level_of("app.models.user")
31
+
32
+ @logger.set_config_client(MockConfigClient.new("log_level.app" => "debug"))
33
+ assert_equal Logger::DEBUG,
34
+ @logger.level_of("app.models.user")
35
+
36
+ @logger.set_config_client(MockConfigClient.new("log_level.app" => "debug",
37
+ "log_level.app.models" => "warn"))
38
+ assert_equal Logger::WARN,
39
+ @logger.level_of("app.models.user")
40
+ end
41
+ end
42
+
43
+ class MockConfigClient
44
+ def initialize(hash)
45
+ @hash = hash
46
+ end
47
+
48
+ def get(key)
49
+ @hash[key]
44
50
  end
45
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.13.0
4
+ version: 0.13.1
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-08-10 00:00:00.000000000 Z
11
+ date: 2022-08-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -44,20 +44,6 @@ 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'
61
47
  - !ruby/object:Gem::Dependency
62
48
  name: grpc
63
49
  requirement: !ruby/object:Gem::Requirement
@@ -73,35 +59,21 @@ dependencies:
73
59
  - !ruby/object:Gem::Version
74
60
  version: '0'
75
61
  - !ruby/object:Gem::Dependency
76
- name: google-protobuf
77
- requirement: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - ">="
80
- - !ruby/object:Gem::Version
81
- version: '0'
82
- type: :runtime
83
- prerelease: false
84
- version_requirements: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - ">="
87
- - !ruby/object:Gem::Version
88
- version: '0'
89
- - !ruby/object:Gem::Dependency
90
- name: googleapis-common-protos-types
62
+ name: grpc-tools
91
63
  requirement: !ruby/object:Gem::Requirement
92
64
  requirements:
93
- - - ">="
65
+ - - "~>"
94
66
  - !ruby/object:Gem::Version
95
- version: '0'
96
- type: :runtime
67
+ version: 1.17.1
68
+ type: :development
97
69
  prerelease: false
98
70
  version_requirements: !ruby/object:Gem::Requirement
99
71
  requirements:
100
- - - ">="
72
+ - - "~>"
101
73
  - !ruby/object:Gem::Version
102
- version: '0'
74
+ version: 1.17.1
103
75
  - !ruby/object:Gem::Dependency
104
- name: grpc-tools
76
+ name: shoulda
105
77
  requirement: !ruby/object:Gem::Requirement
106
78
  requirements:
107
79
  - - ">="
@@ -132,16 +104,16 @@ dependencies:
132
104
  name: bundler
133
105
  requirement: !ruby/object:Gem::Requirement
134
106
  requirements:
135
- - - ">="
107
+ - - "~>"
136
108
  - !ruby/object:Gem::Version
137
- version: '0'
109
+ version: '1.0'
138
110
  type: :development
139
111
  prerelease: false
140
112
  version_requirements: !ruby/object:Gem::Requirement
141
113
  requirements:
142
- - - ">="
114
+ - - "~>"
143
115
  - !ruby/object:Gem::Version
144
- version: '0'
116
+ version: '1.0'
145
117
  - !ruby/object:Gem::Dependency
146
118
  name: juwelier
147
119
  requirement: !ruby/object:Gem::Requirement
@@ -170,20 +142,6 @@ dependencies:
170
142
  - - ">="
171
143
  - !ruby/object:Gem::Version
172
144
  version: '0'
173
- - !ruby/object:Gem::Dependency
174
- name: thin
175
- requirement: !ruby/object:Gem::Requirement
176
- requirements:
177
- - - ">="
178
- - !ruby/object:Gem::Version
179
- version: '0'
180
- type: :development
181
- prerelease: false
182
- version_requirements: !ruby/object:Gem::Requirement
183
- requirements:
184
- - - ">="
185
- - !ruby/object:Gem::Version
186
- version: '0'
187
145
  description: RateLimits & Config as a service
188
146
  email: jdwyer@prefab.cloud
189
147
  executables: []
@@ -193,9 +151,7 @@ extra_rdoc_files:
193
151
  - README.md
194
152
  files:
195
153
  - ".envrc"
196
- - ".github/workflows/ruby.yml"
197
- - ".tool-versions"
198
- - CODEOWNERS
154
+ - ".ruby-version"
199
155
  - Gemfile
200
156
  - Gemfile.lock
201
157
  - LICENSE.txt
@@ -208,29 +164,18 @@ files:
208
164
  - lib/prefab/cancellable_interceptor.rb
209
165
  - lib/prefab/client.rb
210
166
  - lib/prefab/config_client.rb
211
- - lib/prefab/config_helper.rb
212
167
  - lib/prefab/config_loader.rb
213
168
  - lib/prefab/config_resolver.rb
214
- - lib/prefab/error.rb
215
- - lib/prefab/errors/initialization_timeout_error.rb
216
- - lib/prefab/errors/invalid_api_key_error.rb
217
- - lib/prefab/errors/missing_default_error.rb
218
169
  - lib/prefab/feature_flag_client.rb
219
- - lib/prefab/internal_logger.rb
220
170
  - lib/prefab/logger_client.rb
221
171
  - lib/prefab/murmer3.rb
222
172
  - lib/prefab/noop_cache.rb
223
173
  - lib/prefab/noop_stats.rb
224
- - lib/prefab/options.rb
225
174
  - lib/prefab/ratelimit_client.rb
226
175
  - lib/prefab_pb.rb
227
176
  - lib/prefab_services_pb.rb
228
177
  - prefab-cloud-ruby.gemspec
229
- - run_test_harness_server.sh
230
178
  - test/.prefab.test.config.yaml
231
- - test/harness_server.rb
232
- - test/test_client.rb
233
- - test/test_config_client.rb
234
179
  - test/test_config_loader.rb
235
180
  - test/test_config_resolver.rb
236
181
  - test/test_feature_flag_client.rb
@@ -255,7 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
255
200
  - !ruby/object:Gem::Version
256
201
  version: '0'
257
202
  requirements: []
258
- rubygems_version: 3.2.32
203
+ rubygems_version: 3.1.6
259
204
  signing_key:
260
205
  specification_version: 4
261
206
  summary: Prefab Ruby Infrastructure