quonfig 0.0.10 → 0.0.12

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 (115) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +30 -0
  3. data/README.md +94 -0
  4. data/lib/quonfig/caching_http_connection.rb +3 -3
  5. data/lib/quonfig/client.rb +22 -27
  6. data/lib/quonfig/config_loader.rb +5 -1
  7. data/lib/quonfig/config_store.rb +10 -6
  8. data/lib/quonfig/context.rb +5 -4
  9. data/lib/quonfig/datadir.rb +4 -10
  10. data/lib/quonfig/dev_context.rb +4 -2
  11. data/lib/quonfig/duration.rb +2 -2
  12. data/lib/quonfig/encryption.rb +12 -16
  13. data/lib/quonfig/errors/invalid_environment_error.rb +1 -3
  14. data/lib/quonfig/errors/invalid_sdk_key_error.rb +6 -7
  15. data/lib/quonfig/errors/missing_env_var_error.rb +0 -3
  16. data/lib/quonfig/errors/missing_environment_error.rb +1 -1
  17. data/lib/quonfig/errors/uninitialized_error.rb +1 -1
  18. data/lib/quonfig/evaluation.rb +11 -8
  19. data/lib/quonfig/evaluator.rb +34 -37
  20. data/lib/quonfig/fixed_size_hash.rb +1 -0
  21. data/lib/quonfig/http_connection.rb +2 -4
  22. data/lib/quonfig/internal_logger.rb +63 -27
  23. data/lib/quonfig/murmer3.rb +2 -2
  24. data/lib/quonfig/options.rb +62 -75
  25. data/lib/quonfig/periodic_sync.rb +1 -1
  26. data/lib/quonfig/quonfig.rb +3 -3
  27. data/lib/quonfig/reason.rb +2 -1
  28. data/lib/quonfig/resolver.rb +8 -9
  29. data/lib/quonfig/semantic_logger_filter.rb +4 -3
  30. data/lib/quonfig/semver.rb +6 -8
  31. data/lib/quonfig/sse_config_client.rb +14 -15
  32. data/lib/quonfig/stdlib_formatter.rb +3 -3
  33. data/lib/quonfig/telemetry/context_shape_aggregator.rb +2 -3
  34. data/lib/quonfig/telemetry/example_contexts_aggregator.rb +1 -1
  35. data/lib/quonfig/telemetry/telemetry_reporter.rb +1 -0
  36. data/lib/quonfig/time_helpers.rb +2 -0
  37. data/lib/quonfig/version.rb +5 -0
  38. data/lib/quonfig.rb +2 -1
  39. data/quonfig.gemspec +29 -165
  40. metadata +24 -193
  41. data/.claude/rules/constitution.md +0 -81
  42. data/.claude/rules/git-safety.md +0 -11
  43. data/.claude/rules/issue-tracking.md +0 -13
  44. data/.claude/rules/testing-workflow.md +0 -28
  45. data/.envrc.sample +0 -3
  46. data/.github/CODEOWNERS +0 -2
  47. data/.github/pull_request_template.md +0 -8
  48. data/.github/workflows/release.yml +0 -49
  49. data/.github/workflows/ruby.yml +0 -60
  50. data/.github/workflows/test.yaml +0 -40
  51. data/.rubocop.yml +0 -13
  52. data/.tool-versions +0 -1
  53. data/CLAUDE.md +0 -29
  54. data/CODEOWNERS +0 -1
  55. data/Gemfile +0 -26
  56. data/Gemfile.lock +0 -177
  57. data/Rakefile +0 -64
  58. data/VERSION +0 -1
  59. data/dev/allocation_stats +0 -60
  60. data/dev/benchmark +0 -40
  61. data/dev/console +0 -12
  62. data/dev/script_setup.rb +0 -18
  63. data/test/fixtures/datafile.json +0 -87
  64. data/test/integration/test_context_precedence.rb +0 -112
  65. data/test/integration/test_datadir_environment.rb +0 -54
  66. data/test/integration/test_dev_overrides.rb +0 -40
  67. data/test/integration/test_enabled.rb +0 -478
  68. data/test/integration/test_enabled_with_contexts.rb +0 -64
  69. data/test/integration/test_get.rb +0 -136
  70. data/test/integration/test_get_feature_flag.rb +0 -28
  71. data/test/integration/test_get_or_raise.rb +0 -60
  72. data/test/integration/test_get_weighted_values.rb +0 -34
  73. data/test/integration/test_helpers.rb +0 -667
  74. data/test/integration/test_helpers_test.rb +0 -73
  75. data/test/integration/test_post.rb +0 -44
  76. data/test/integration/test_telemetry.rb +0 -170
  77. data/test/support/common_helpers.rb +0 -106
  78. data/test/support/mock_base_client.rb +0 -27
  79. data/test/support/mock_config_loader.rb +0 -1
  80. data/test/test_bound_client.rb +0 -109
  81. data/test/test_caching_http_connection.rb +0 -218
  82. data/test/test_client.rb +0 -255
  83. data/test/test_client_network_mode.rb +0 -136
  84. data/test/test_client_telemetry.rb +0 -175
  85. data/test/test_config_loader.rb +0 -70
  86. data/test/test_context.rb +0 -139
  87. data/test/test_context_shape.rb +0 -37
  88. data/test/test_context_shape_aggregator.rb +0 -126
  89. data/test/test_datadir.rb +0 -203
  90. data/test/test_details_getters.rb +0 -242
  91. data/test/test_dev_context.rb +0 -163
  92. data/test/test_duration.rb +0 -37
  93. data/test/test_encryption.rb +0 -16
  94. data/test/test_evaluation_summaries_aggregator.rb +0 -180
  95. data/test/test_evaluator.rb +0 -285
  96. data/test/test_example_contexts_aggregator.rb +0 -119
  97. data/test/test_exponential_backoff.rb +0 -44
  98. data/test/test_fixed_size_hash.rb +0 -119
  99. data/test/test_helper.rb +0 -17
  100. data/test/test_http_connection.rb +0 -81
  101. data/test/test_internal_logger.rb +0 -34
  102. data/test/test_options.rb +0 -198
  103. data/test/test_rate_limit_cache.rb +0 -44
  104. data/test/test_reason.rb +0 -79
  105. data/test/test_rename.rb +0 -65
  106. data/test/test_resolver.rb +0 -291
  107. data/test/test_semantic_logger_filter.rb +0 -144
  108. data/test/test_semver.rb +0 -108
  109. data/test/test_should_log.rb +0 -186
  110. data/test/test_sse_config_client.rb +0 -297
  111. data/test/test_stdlib_formatter.rb +0 -195
  112. data/test/test_telemetry_reporter.rb +0 -209
  113. data/test/test_typed_getters.rb +0 -131
  114. data/test/test_types.rb +0 -141
  115. data/test/test_weighted_value_resolver.rb +0 -84
@@ -44,7 +44,7 @@ module Quonfig
44
44
  # raise into the test's expected default).
45
45
  def get(key, context = nil)
46
46
  config = raw(key)
47
- raise Quonfig::Errors::MissingDefaultError.new(key) if config.nil?
47
+ raise Quonfig::Errors::MissingDefaultError, key if config.nil?
48
48
 
49
49
  eval_result = @evaluator.evaluate_config(config, context, resolver: self)
50
50
  return nil if eval_result.nil?
@@ -72,17 +72,16 @@ module Quonfig
72
72
 
73
73
  type = vget(value, :type, 'type')
74
74
 
75
- if type == 'provided'
76
- return resolve_provided(value, config)
77
- end
75
+ return resolve_provided(value, config) if type == 'provided'
78
76
 
79
- if type == 'weighted_values'
80
- return resolve_weighted(value, config, context, &on_weighted_index)
81
- end
77
+ return resolve_weighted(value, config, context, &on_weighted_index) if type == 'weighted_values'
82
78
 
83
79
  confidential = vget(value, :confidential, 'confidential')
84
80
  decrypt_with = vget(value, :decryptWith, 'decryptWith', :decrypt_with, 'decrypt_with')
85
- return resolve_decryption(value, config, context, decrypt_with) if confidential && decrypt_with && !decrypt_with.to_s.empty?
81
+ if confidential && decrypt_with && !decrypt_with.to_s.empty?
82
+ return resolve_decryption(value, config, context,
83
+ decrypt_with)
84
+ end
86
85
 
87
86
  value
88
87
  end
@@ -144,7 +143,7 @@ module Quonfig
144
143
  lookup = vget(provided, :lookup, 'lookup')
145
144
  return value if source != 'ENV_VAR' || lookup.nil? || lookup.to_s.empty?
146
145
 
147
- env_value = ENV[lookup.to_s]
146
+ env_value = ENV.fetch(lookup.to_s, nil)
148
147
  if env_value.nil?
149
148
  raise Quonfig::Errors::MissingEnvVarError,
150
149
  %(Environment variable "#{lookup}" not set for config "#{config_key(config)}")
@@ -27,8 +27,8 @@ module Quonfig
27
27
  LEVELS = {
28
28
  trace: 0,
29
29
  debug: 1,
30
- info: 2,
31
- warn: 3,
30
+ info: 2,
31
+ warn: 3,
32
32
  error: 4,
33
33
  fatal: 5
34
34
  }.freeze
@@ -42,7 +42,8 @@ module Quonfig
42
42
 
43
43
  def initialize(client, config_key:)
44
44
  unless self.class.semantic_logger_loaded?
45
- raise LoadError, "semantic_logger gem is required for Quonfig::SemanticLoggerFilter. Add `gem 'semantic_logger'` to your Gemfile."
45
+ raise LoadError,
46
+ "semantic_logger gem is required for Quonfig::SemanticLoggerFilter. Add `gem 'semantic_logger'` to your Gemfile."
46
47
  end
47
48
 
48
49
  @client = client
@@ -21,8 +21,8 @@ class SemanticVersion
21
21
  attr_reader :major, :minor, :patch, :prerelease, :build_metadata
22
22
 
23
23
  def self.parse(version_string)
24
- raise ArgumentError, "version string cannot be nil" if version_string.nil?
25
- raise ArgumentError, "version string cannot be empty" if version_string.empty?
24
+ raise ArgumentError, 'version string cannot be nil' if version_string.nil?
25
+ raise ArgumentError, 'version string cannot be empty' if version_string.empty?
26
26
 
27
27
  match = SEMVER_PATTERN.match(version_string)
28
28
  raise ArgumentError, "invalid semantic version format: #{version_string}" unless match
@@ -87,12 +87,12 @@ class SemanticVersion
87
87
  result
88
88
  end
89
89
 
90
- private
91
-
92
90
  def self.numeric?(str)
93
91
  str.to_i.to_s == str
94
92
  end
95
93
 
94
+ private
95
+
96
96
  def compare_prerelease(pre1, pre2)
97
97
  # If both are empty, they're equal
98
98
  return 0 if pre1.nil? && pre2.nil?
@@ -118,9 +118,7 @@ class SemanticVersion
118
118
 
119
119
  def compare_prerelease_identifiers(id1, id2)
120
120
  # If both are numeric, compare numerically
121
- if self.class.numeric?(id1) && self.class.numeric?(id2)
122
- return id1.to_i <=> id2.to_i
123
- end
121
+ return id1.to_i <=> id2.to_i if self.class.numeric?(id1) && self.class.numeric?(id2)
124
122
 
125
123
  # If only one is numeric, numeric ones have lower precedence
126
124
  return -1 if self.class.numeric?(id1)
@@ -129,4 +127,4 @@ class SemanticVersion
129
127
  # Neither is numeric, compare as strings
130
128
  id1 <=> id2
131
129
  end
132
- end
130
+ end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'base64'
3
4
  require 'json'
4
5
 
@@ -51,15 +52,15 @@ module Quonfig
51
52
  loop do
52
53
  sleep @options.sleep_delay_for_new_connection_check
53
54
 
54
- if @client.closed?
55
- closed_count += @options.sleep_delay_for_new_connection_check
55
+ next unless @client.closed?
56
56
 
57
- if closed_count > @options.seconds_between_new_connection
58
- closed_count = 0
59
- @logger.debug 'Reconnecting SSE client'
60
- @client = connect(&load_configs)
61
- end
62
- end
57
+ closed_count += @options.sleep_delay_for_new_connection_check
58
+
59
+ next unless closed_count > @options.seconds_between_new_connection
60
+
61
+ closed_count = 0
62
+ @logger.debug 'Reconnecting SSE client'
63
+ @client = connect(&load_configs)
63
64
  end
64
65
  end
65
66
  end
@@ -79,7 +80,7 @@ module Quonfig
79
80
  if event.data.nil? || event.data.empty?
80
81
  @logger.error "SSE Streaming Error: Received empty data for url #{url}"
81
82
  client.close
82
- return
83
+ next
83
84
  end
84
85
 
85
86
  begin
@@ -87,7 +88,7 @@ module Quonfig
87
88
  rescue JSON::ParserError => e
88
89
  @logger.error "SSE Streaming Error: Failed to parse JSON for url #{url}: #{e.message}"
89
90
  client.close
90
- return
91
+ next
91
92
  end
92
93
 
93
94
  envelope = Quonfig::ConfigEnvelope.new(
@@ -116,19 +117,17 @@ module Quonfig
116
117
  def headers
117
118
  auth = "1:#{@prefab_options.sdk_key}"
118
119
  auth_string = Base64.strict_encode64(auth)
119
- return {
120
+ {
120
121
  'Authorization' => "Basic #{auth_string}",
121
122
  'Accept' => 'text/event-stream',
122
- 'X-Quonfig-SDK-Version' => "sdk-ruby-#{Quonfig::VERSION}"
123
+ 'X-Quonfig-SDK-Version' => "ruby-#{Quonfig::VERSION}"
123
124
  }
124
125
  end
125
126
 
126
127
  def source
127
128
  @source_index = @source_index.nil? ? 0 : @source_index + 1
128
129
 
129
- if @source_index >= @prefab_options.sse_api_urls.size
130
- @source_index = 0
131
- end
130
+ @source_index = 0 if @source_index >= @prefab_options.sse_api_urls.size
132
131
 
133
132
  @prefab_options.sse_api_urls[@source_index]
134
133
  end
@@ -45,11 +45,11 @@ module Quonfig
45
45
  # every label the stdlib actually emits.
46
46
  SEVERITY_TO_LEVEL = {
47
47
  'DEBUG' => :debug,
48
- 'INFO' => :info,
49
- 'WARN' => :warn,
48
+ 'INFO' => :info,
49
+ 'WARN' => :warn,
50
50
  'ERROR' => :error,
51
51
  'FATAL' => :fatal,
52
- 'ANY' => :fatal # Logger::UNKNOWN formats as "ANY"
52
+ 'ANY' => :fatal # Logger::UNKNOWN formats as "ANY"
53
53
  }.freeze
54
54
 
55
55
  # Build a formatter Proc. Exposed on +Quonfig::Client#stdlib_formatter+;
@@ -42,10 +42,9 @@ module Quonfig
42
42
  duped = @data.dup
43
43
  @data.clear
44
44
 
45
- duped.inject({}) do |acc, (name, key, type)|
45
+ duped.each_with_object({}) do |(name, key, type), acc|
46
46
  acc[name] ||= {}
47
47
  acc[name][key] = type
48
- acc
49
48
  end
50
49
  end
51
50
 
@@ -53,7 +52,7 @@ module Quonfig
53
52
  # matching api-telemetry's ContextShapesSchema. Returns +nil+ when
54
53
  # there is nothing to ship — the reporter should skip empty events.
55
54
  def drain_event
56
- return nil if @data.size.zero?
55
+ return nil if @data.empty?
57
56
 
58
57
  shapes = prepare_data.map do |name, field_types|
59
58
  { 'name' => name, 'fieldTypes' => field_types }
@@ -45,7 +45,7 @@ module Quonfig
45
45
  # Drain accumulated examples into a single telemetry event payload
46
46
  # matching api-telemetry's ExampleContextsSchema, or +nil+ if empty.
47
47
  def drain_event
48
- return nil if @data.size.zero?
48
+ return nil if @data.empty?
49
49
 
50
50
  to_ship = prepare_data
51
51
 
@@ -157,6 +157,7 @@ module Quonfig
157
157
  # giving up. Bounded so a thread blocked on a dead telemetry endpoint
158
158
  # can't hang process exit.
159
159
  AT_EXIT_THREAD_JOIN_TIMEOUT_SECONDS = 1.0
160
+ private_constant :AT_EXIT_THREAD_JOIN_TIMEOUT_SECONDS
160
161
 
161
162
  # Idempotent final drain. Safe to call after #stop has already
162
163
  # drained: aggregators return nil when empty and #sync becomes a
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Quonfig
2
4
  module TimeHelpers
3
5
  def self.now_in_ms
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Quonfig
4
+ VERSION = '0.0.12'
5
+ end
data/lib/quonfig.rb CHANGED
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'quonfig/version'
4
+
3
5
  module Quonfig
4
6
  NO_DEFAULT_PROVIDED = :no_default_provided
5
- VERSION = File.read(File.dirname(__FILE__) + '/../VERSION').strip
6
7
  end
7
8
 
8
9
  begin
data/quonfig.gemspec CHANGED
@@ -1,171 +1,35 @@
1
- # Generated by juwelier
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
- # -*- encoding: utf-8 -*-
5
- # stub: quonfig 0.0.10 ruby lib
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/quonfig/version'
6
4
 
7
5
  Gem::Specification.new do |s|
8
- s.name = "quonfig".freeze
9
- s.version = "0.0.10".freeze
6
+ s.name = 'quonfig'
7
+ s.version = Quonfig::VERSION
8
+ s.authors = ['Jeff Dwyer']
9
+ s.email = 'jeff@quonfig.com'
10
+ s.summary = 'Quonfig Ruby SDK'
11
+ s.description = 'Quonfig — feature flags and live config, stored as files in git.'
12
+ s.homepage = 'https://github.com/quonfig/sdk-ruby'
13
+ s.license = 'MIT'
14
+ s.required_ruby_version = '>= 3.0'
10
15
 
11
- s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
- s.require_paths = ["lib".freeze]
13
- s.authors = ["Jeff Dwyer".freeze]
14
- s.date = "2026-05-01"
15
- s.description = "Quonfig \u2014 feature flags and live config, stored as files in git.".freeze
16
- s.email = "jeff@quonfig.com".freeze
17
- s.extra_rdoc_files = [
18
- "CHANGELOG.md",
19
- "LICENSE.txt",
20
- "README.md"
21
- ]
22
- s.files = [
23
- ".claude/rules/constitution.md",
24
- ".claude/rules/git-safety.md",
25
- ".claude/rules/issue-tracking.md",
26
- ".claude/rules/testing-workflow.md",
27
- ".envrc.sample",
28
- ".github/CODEOWNERS",
29
- ".github/pull_request_template.md",
30
- ".github/workflows/release.yml",
31
- ".github/workflows/ruby.yml",
32
- ".github/workflows/test.yaml",
33
- ".rubocop.yml",
34
- ".tool-versions",
35
- "CHANGELOG.md",
36
- "CLAUDE.md",
37
- "CODEOWNERS",
38
- "Gemfile",
39
- "Gemfile.lock",
40
- "LICENSE.txt",
41
- "README.md",
42
- "Rakefile",
43
- "VERSION",
44
- "dev/allocation_stats",
45
- "dev/benchmark",
46
- "dev/console",
47
- "dev/script_setup.rb",
48
- "lib/quonfig.rb",
49
- "lib/quonfig/bound_client.rb",
50
- "lib/quonfig/caching_http_connection.rb",
51
- "lib/quonfig/client.rb",
52
- "lib/quonfig/config_envelope.rb",
53
- "lib/quonfig/config_loader.rb",
54
- "lib/quonfig/config_store.rb",
55
- "lib/quonfig/context.rb",
56
- "lib/quonfig/datadir.rb",
57
- "lib/quonfig/dev_context.rb",
58
- "lib/quonfig/duration.rb",
59
- "lib/quonfig/encryption.rb",
60
- "lib/quonfig/error.rb",
61
- "lib/quonfig/errors/decryption_error.rb",
62
- "lib/quonfig/errors/env_var_parse_error.rb",
63
- "lib/quonfig/errors/initialization_timeout_error.rb",
64
- "lib/quonfig/errors/invalid_environment_error.rb",
65
- "lib/quonfig/errors/invalid_sdk_key_error.rb",
66
- "lib/quonfig/errors/missing_default_error.rb",
67
- "lib/quonfig/errors/missing_env_var_error.rb",
68
- "lib/quonfig/errors/missing_environment_error.rb",
69
- "lib/quonfig/errors/type_mismatch_error.rb",
70
- "lib/quonfig/errors/uninitialized_error.rb",
71
- "lib/quonfig/evaluation.rb",
72
- "lib/quonfig/evaluation_details.rb",
73
- "lib/quonfig/evaluator.rb",
74
- "lib/quonfig/exponential_backoff.rb",
75
- "lib/quonfig/fixed_size_hash.rb",
76
- "lib/quonfig/http_connection.rb",
77
- "lib/quonfig/internal_logger.rb",
78
- "lib/quonfig/murmer3.rb",
79
- "lib/quonfig/options.rb",
80
- "lib/quonfig/periodic_sync.rb",
81
- "lib/quonfig/quonfig.rb",
82
- "lib/quonfig/rate_limit_cache.rb",
83
- "lib/quonfig/reason.rb",
84
- "lib/quonfig/resolver.rb",
85
- "lib/quonfig/semantic_logger_filter.rb",
86
- "lib/quonfig/semver.rb",
87
- "lib/quonfig/sse_config_client.rb",
88
- "lib/quonfig/stdlib_formatter.rb",
89
- "lib/quonfig/telemetry/context_shape.rb",
90
- "lib/quonfig/telemetry/context_shape_aggregator.rb",
91
- "lib/quonfig/telemetry/evaluation_summaries_aggregator.rb",
92
- "lib/quonfig/telemetry/example_contexts_aggregator.rb",
93
- "lib/quonfig/telemetry/telemetry_reporter.rb",
94
- "lib/quonfig/time_helpers.rb",
95
- "lib/quonfig/types.rb",
96
- "lib/quonfig/weighted_value_resolver.rb",
97
- "quonfig.gemspec",
98
- "test/fixtures/datafile.json",
99
- "test/integration/test_context_precedence.rb",
100
- "test/integration/test_datadir_environment.rb",
101
- "test/integration/test_dev_overrides.rb",
102
- "test/integration/test_enabled.rb",
103
- "test/integration/test_enabled_with_contexts.rb",
104
- "test/integration/test_get.rb",
105
- "test/integration/test_get_feature_flag.rb",
106
- "test/integration/test_get_or_raise.rb",
107
- "test/integration/test_get_weighted_values.rb",
108
- "test/integration/test_helpers.rb",
109
- "test/integration/test_helpers_test.rb",
110
- "test/integration/test_post.rb",
111
- "test/integration/test_telemetry.rb",
112
- "test/support/common_helpers.rb",
113
- "test/support/mock_base_client.rb",
114
- "test/support/mock_config_loader.rb",
115
- "test/test_bound_client.rb",
116
- "test/test_caching_http_connection.rb",
117
- "test/test_client.rb",
118
- "test/test_client_network_mode.rb",
119
- "test/test_client_telemetry.rb",
120
- "test/test_config_loader.rb",
121
- "test/test_context.rb",
122
- "test/test_context_shape.rb",
123
- "test/test_context_shape_aggregator.rb",
124
- "test/test_datadir.rb",
125
- "test/test_details_getters.rb",
126
- "test/test_dev_context.rb",
127
- "test/test_duration.rb",
128
- "test/test_encryption.rb",
129
- "test/test_evaluation_summaries_aggregator.rb",
130
- "test/test_evaluator.rb",
131
- "test/test_example_contexts_aggregator.rb",
132
- "test/test_exponential_backoff.rb",
133
- "test/test_fixed_size_hash.rb",
134
- "test/test_helper.rb",
135
- "test/test_http_connection.rb",
136
- "test/test_internal_logger.rb",
137
- "test/test_options.rb",
138
- "test/test_rate_limit_cache.rb",
139
- "test/test_reason.rb",
140
- "test/test_rename.rb",
141
- "test/test_resolver.rb",
142
- "test/test_semantic_logger_filter.rb",
143
- "test/test_semver.rb",
144
- "test/test_should_log.rb",
145
- "test/test_sse_config_client.rb",
146
- "test/test_stdlib_formatter.rb",
147
- "test/test_telemetry_reporter.rb",
148
- "test/test_typed_getters.rb",
149
- "test/test_types.rb",
150
- "test/test_weighted_value_resolver.rb"
151
- ]
152
- s.homepage = "https://github.com/quonfig/sdk-ruby".freeze
153
- s.licenses = ["MIT".freeze]
154
- s.rubygems_version = "3.5.22".freeze
155
- s.summary = "Quonfig Ruby SDK".freeze
16
+ s.metadata = {
17
+ 'source_code_uri' => 'https://github.com/quonfig/sdk-ruby',
18
+ 'changelog_uri' => 'https://github.com/quonfig/sdk-ruby/blob/main/CHANGELOG.md',
19
+ 'rubygems_mfa_required' => 'true'
20
+ }
156
21
 
157
- s.specification_version = 4
22
+ s.require_paths = ['lib']
23
+ s.files = Dir['lib/**/*.rb'] + %w[
24
+ CHANGELOG.md
25
+ LICENSE.txt
26
+ README.md
27
+ quonfig.gemspec
28
+ ]
29
+ s.extra_rdoc_files = %w[CHANGELOG.md LICENSE.txt README.md]
158
30
 
159
- s.add_runtime_dependency(%q<concurrent-ruby>.freeze, ["~> 1.0".freeze, ">= 1.0.5".freeze])
160
- s.add_runtime_dependency(%q<faraday>.freeze, [">= 0".freeze])
161
- s.add_runtime_dependency(%q<ld-eventsource>.freeze, [">= 0".freeze])
162
- s.add_runtime_dependency(%q<uuid>.freeze, [">= 0".freeze])
163
- s.add_runtime_dependency(%q<activesupport>.freeze, [">= 4".freeze])
164
- s.add_development_dependency(%q<allocation_stats>.freeze, [">= 0".freeze])
165
- s.add_development_dependency(%q<benchmark-ips>.freeze, [">= 0".freeze])
166
- s.add_development_dependency(%q<bundler>.freeze, [">= 0".freeze])
167
- s.add_development_dependency(%q<juwelier>.freeze, ["~> 2.4.9".freeze])
168
- s.add_development_dependency(%q<rdoc>.freeze, [">= 0".freeze])
169
- s.add_development_dependency(%q<simplecov>.freeze, [">= 0".freeze])
31
+ s.add_dependency 'activesupport', '>= 4'
32
+ s.add_dependency 'concurrent-ruby', '~> 1.0', '>= 1.0.5'
33
+ s.add_dependency 'faraday', '>= 1.0'
34
+ s.add_dependency 'ld-eventsource', '>= 2.0'
170
35
  end
171
-