prefab-cloud-ruby 0 → 0.0.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 (101) hide show
  1. checksums.yaml +5 -5
  2. data/.ruby-version +1 -0
  3. data/Gemfile +9 -22
  4. data/Gemfile.lock +88 -160
  5. data/LICENSE.txt +1 -1
  6. data/Rakefile +14 -14
  7. data/VERSION +1 -1
  8. data/lib/prefab/auth_interceptor.rb +25 -0
  9. data/lib/prefab/client.rb +34 -139
  10. data/lib/prefab/config_client.rb +23 -275
  11. data/lib/prefab/config_loader.rb +27 -60
  12. data/lib/prefab/config_resolver.rb +40 -53
  13. data/lib/prefab/noop_cache.rb +13 -0
  14. data/lib/prefab/noop_stats.rb +8 -0
  15. data/lib/prefab/prefab_pb.rb +39 -0
  16. data/lib/prefab/prefab_services_pb.rb +37 -0
  17. data/lib/prefab/ratelimit_client.rb +58 -0
  18. data/lib/prefab/ratelimit_pb.rb +125 -0
  19. data/lib/prefab/store.rb +29 -0
  20. data/lib/prefab_client.rb +35 -0
  21. metadata +36 -198
  22. data/.envrc.sample +0 -3
  23. data/.github/workflows/ruby.yml +0 -46
  24. data/.gitmodules +0 -3
  25. data/.rubocop.yml +0 -13
  26. data/.tool-versions +0 -1
  27. data/CHANGELOG.md +0 -169
  28. data/CODEOWNERS +0 -1
  29. data/README.md +0 -94
  30. data/bin/console +0 -21
  31. data/compile_protos.sh +0 -18
  32. data/lib/prefab/config_client_presenter.rb +0 -18
  33. data/lib/prefab/config_value_unwrapper.rb +0 -115
  34. data/lib/prefab/config_value_wrapper.rb +0 -18
  35. data/lib/prefab/context.rb +0 -179
  36. data/lib/prefab/context_shape.rb +0 -20
  37. data/lib/prefab/context_shape_aggregator.rb +0 -65
  38. data/lib/prefab/criteria_evaluator.rb +0 -136
  39. data/lib/prefab/encryption.rb +0 -65
  40. data/lib/prefab/error.rb +0 -6
  41. data/lib/prefab/errors/env_var_parse_error.rb +0 -11
  42. data/lib/prefab/errors/initialization_timeout_error.rb +0 -13
  43. data/lib/prefab/errors/invalid_api_key_error.rb +0 -19
  44. data/lib/prefab/errors/missing_default_error.rb +0 -13
  45. data/lib/prefab/errors/missing_env_var_error.rb +0 -11
  46. data/lib/prefab/errors/uninitialized_error.rb +0 -13
  47. data/lib/prefab/evaluation.rb +0 -52
  48. data/lib/prefab/evaluation_summary_aggregator.rb +0 -87
  49. data/lib/prefab/example_contexts_aggregator.rb +0 -78
  50. data/lib/prefab/exponential_backoff.rb +0 -21
  51. data/lib/prefab/feature_flag_client.rb +0 -42
  52. data/lib/prefab/http_connection.rb +0 -41
  53. data/lib/prefab/internal_logger.rb +0 -16
  54. data/lib/prefab/local_config_parser.rb +0 -151
  55. data/lib/prefab/log_path_aggregator.rb +0 -69
  56. data/lib/prefab/logger_client.rb +0 -264
  57. data/lib/prefab/murmer3.rb +0 -50
  58. data/lib/prefab/options.rb +0 -208
  59. data/lib/prefab/periodic_sync.rb +0 -69
  60. data/lib/prefab/prefab.rb +0 -56
  61. data/lib/prefab/rate_limit_cache.rb +0 -41
  62. data/lib/prefab/resolved_config_presenter.rb +0 -86
  63. data/lib/prefab/time_helpers.rb +0 -7
  64. data/lib/prefab/weighted_value_resolver.rb +0 -42
  65. data/lib/prefab/yaml_config_parser.rb +0 -34
  66. data/lib/prefab-cloud-ruby.rb +0 -57
  67. data/lib/prefab_pb.rb +0 -93
  68. data/prefab-cloud-ruby.gemspec +0 -155
  69. data/test/.prefab.default.config.yaml +0 -2
  70. data/test/.prefab.unit_tests.config.yaml +0 -28
  71. data/test/integration_test.rb +0 -150
  72. data/test/integration_test_helpers.rb +0 -151
  73. data/test/support/common_helpers.rb +0 -180
  74. data/test/support/mock_base_client.rb +0 -42
  75. data/test/support/mock_config_client.rb +0 -19
  76. data/test/support/mock_config_loader.rb +0 -1
  77. data/test/test_client.rb +0 -444
  78. data/test/test_config_client.rb +0 -109
  79. data/test/test_config_loader.rb +0 -117
  80. data/test/test_config_resolver.rb +0 -430
  81. data/test/test_config_value_unwrapper.rb +0 -224
  82. data/test/test_config_value_wrapper.rb +0 -42
  83. data/test/test_context.rb +0 -203
  84. data/test/test_context_shape.rb +0 -50
  85. data/test/test_context_shape_aggregator.rb +0 -147
  86. data/test/test_criteria_evaluator.rb +0 -726
  87. data/test/test_encryption.rb +0 -16
  88. data/test/test_evaluation_summary_aggregator.rb +0 -162
  89. data/test/test_example_contexts_aggregator.rb +0 -238
  90. data/test/test_exponential_backoff.rb +0 -18
  91. data/test/test_feature_flag_client.rb +0 -48
  92. data/test/test_helper.rb +0 -17
  93. data/test/test_integration.rb +0 -58
  94. data/test/test_local_config_parser.rb +0 -147
  95. data/test/test_log_path_aggregator.rb +0 -62
  96. data/test/test_logger.rb +0 -621
  97. data/test/test_logger_initialization.rb +0 -12
  98. data/test/test_options.rb +0 -75
  99. data/test/test_prefab.rb +0 -12
  100. data/test/test_rate_limit_cache.rb +0 -44
  101. data/test/test_weighted_value_resolver.rb +0 -71
data/test/test_options.rb DELETED
@@ -1,75 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class TestOptions < Minitest::Test
6
- API_KEY = 'abcdefg'
7
-
8
- def test_prefab_api_url
9
- assert_equal 'https://api.prefab.cloud', Prefab::Options.new.prefab_api_url
10
-
11
- with_env 'PREFAB_API_URL', 'https://api.prefab.cloud' do
12
- assert_equal 'https://api.prefab.cloud', Prefab::Options.new.prefab_api_url
13
- end
14
-
15
- with_env 'PREFAB_API_URL', 'https://api.prefab.cloud/' do
16
- assert_equal 'https://api.prefab.cloud', Prefab::Options.new.prefab_api_url
17
- end
18
- end
19
-
20
- def test_works_with_named_arguments
21
- assert_equal API_KEY, Prefab::Options.new(api_key: API_KEY).api_key
22
- end
23
-
24
- def test_works_with_hash
25
- assert_equal API_KEY, Prefab::Options.new({ api_key: API_KEY }).api_key
26
- end
27
-
28
- def test_collect_max_paths
29
- assert_equal 1000, Prefab::Options.new.collect_max_paths
30
- assert_equal 100, Prefab::Options.new(collect_max_paths: 100).collect_max_paths
31
- end
32
-
33
- def test_collect_max_paths_with_local_only
34
- options = Prefab::Options.new(collect_max_paths: 100,
35
- prefab_datasources: Prefab::Options::DATASOURCES::LOCAL_ONLY)
36
- assert_equal 0, options.collect_max_paths
37
- end
38
-
39
- def test_collect_max_paths_with_collect_logger_counts_false
40
- options = Prefab::Options.new(collect_max_paths: 100,
41
- collect_logger_counts: false)
42
- assert_equal 0, options.collect_max_paths
43
- end
44
-
45
- def test_collect_max_evaluation_summaries
46
- assert_equal 100_000, Prefab::Options.new.collect_max_evaluation_summaries
47
- assert_equal 0, Prefab::Options.new(collect_evaluation_summaries: false).collect_max_evaluation_summaries
48
- assert_equal 3,
49
- Prefab::Options.new(collect_max_evaluation_summaries: 3).collect_max_evaluation_summaries
50
- end
51
-
52
- def test_context_upload_mode_periodic
53
- options = Prefab::Options.new(context_upload_mode: :periodic_example, context_max_size: 100)
54
- assert_equal 100, options.collect_max_example_contexts
55
-
56
- options = Prefab::Options.new(context_upload_mode: :none)
57
- assert_equal 0, options.collect_max_example_contexts
58
- end
59
-
60
- def test_context_upload_mode_shape_only
61
- options = Prefab::Options.new(context_upload_mode: :shape_only, context_max_size: 100)
62
- assert_equal 100, options.collect_max_shapes
63
-
64
- options = Prefab::Options.new(context_upload_mode: :none)
65
- assert_equal 0, options.collect_max_shapes
66
- end
67
-
68
- def test_context_upload_mode_none
69
- options = Prefab::Options.new(context_upload_mode: :none)
70
- assert_equal 0, options.collect_max_example_contexts
71
-
72
- options = Prefab::Options.new(context_upload_mode: :none)
73
- assert_equal 0, options.collect_max_shapes
74
- end
75
- end
data/test/test_prefab.rb DELETED
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class TestPrefab < Minitest::Test
6
- def test_get
7
- Prefab.init(prefab_options)
8
- assert_equal 'default', Prefab.get('does.not.exist', 'default')
9
- assert_equal 'test sample value', Prefab.get('sample')
10
- assert_equal 123, Prefab.get('sample_int')
11
- end
12
- end
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
- require 'timecop'
5
-
6
- class RateLimitCacheTest < Minitest::Test
7
- def test_set_and_fresh
8
- cache = Prefab::RateLimitCache.new(5)
9
- cache.set('key')
10
- assert cache.fresh?('key')
11
- end
12
-
13
- def test_fresh_with_no_set
14
- cache = Prefab::RateLimitCache.new(5)
15
- refute cache.fresh?('key')
16
- end
17
-
18
- def test_get_after_expiration
19
- cache = Prefab::RateLimitCache.new(5)
20
-
21
- Timecop.freeze(Time.now - 6) do
22
- cache.set('key')
23
- assert cache.fresh?('key')
24
- end
25
-
26
- refute cache.fresh?('key')
27
-
28
- # but the data is still there
29
- assert cache.data.get('key')
30
- end
31
-
32
- def test_prune
33
- cache = Prefab::RateLimitCache.new(5)
34
-
35
- Timecop.freeze(Time.now - 6) do
36
- cache.set('key')
37
- assert cache.fresh?('key')
38
- end
39
-
40
- cache.prune
41
-
42
- refute cache.fresh?('key')
43
- end
44
- end
@@ -1,71 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class TestWeightedValueResolver < Minitest::Test
6
- KEY = 'config_key'
7
-
8
- def test_resolving_single_value
9
- values = weighted_values([['abc', 1]])
10
- resolver = Prefab::WeightedValueResolver.new(values, KEY, nil)
11
- assert_equal 'abc', resolver.resolve[0].value.string
12
- assert_equal 0, resolver.resolve[1]
13
- end
14
-
15
- def test_resolving_multiple_values_evenly_distributed
16
- values = weighted_values([['abc', 1], ['def', 1]])
17
-
18
- resolver = Prefab::WeightedValueResolver.new(values, KEY, 'user:001')
19
- assert_equal 'abc', resolver.resolve[0].value.string
20
- assert_equal 0, resolver.resolve[1]
21
-
22
- resolver = Prefab::WeightedValueResolver.new(values, KEY, 'user:456')
23
- assert_equal 'def', resolver.resolve[0].value.string
24
- assert_equal 1, resolver.resolve[1]
25
- end
26
-
27
- def test_resolving_multiple_values_unevenly_distributed
28
- values = weighted_values([['abc', 1], ['def', 98], ['ghi', 1]])
29
-
30
- resolver = Prefab::WeightedValueResolver.new(values, KEY, 'user:456')
31
- assert_equal 'def', resolver.resolve[0].value.string
32
- assert_equal 1, resolver.resolve[1]
33
-
34
- resolver = Prefab::WeightedValueResolver.new(values, KEY, 'user:103')
35
- assert_equal 'ghi', resolver.resolve[0].value.string
36
- assert_equal 2, resolver.resolve[1]
37
-
38
- resolver = Prefab::WeightedValueResolver.new(values, KEY, 'user:119')
39
- assert_equal 'abc', resolver.resolve[0].value.string
40
- assert_equal 0, resolver.resolve[1]
41
- end
42
-
43
- def test_resolving_multiple_values_with_simulation
44
- values = weighted_values([['abc', 1], ['def', 98], ['ghi', 1]])
45
- results = {}
46
-
47
- 10_000.times do |i|
48
- result = Prefab::WeightedValueResolver.new(values, KEY, "user:#{i}").resolve[0].value.string
49
- results[result] ||= 0
50
- results[result] += 1
51
- end
52
-
53
- assert_in_delta 100, results['abc'], 20
54
- assert_in_delta 9800, results['def'], 50
55
- assert_in_delta 100, results['ghi'], 20
56
- end
57
-
58
- private
59
-
60
- def weighted_values(values_and_weights)
61
- values_and_weights.map do |value, weight|
62
- weighted_value(value, weight)
63
- end
64
- end
65
-
66
- def weighted_value(string, weight)
67
- PrefabProto::WeightedValue.new(
68
- value: PrefabProto::ConfigValue.new(string: string), weight: weight
69
- )
70
- end
71
- end