quonfig 0.0.9 → 0.0.11
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +43 -0
- data/README.md +4 -4
- data/lib/quonfig/evaluation_details.rb +60 -0
- data/lib/quonfig/options.rb +37 -16
- data/lib/quonfig/sse_config_client.rb +1 -1
- data/lib/quonfig/version.rb +5 -0
- data/lib/quonfig.rb +2 -1
- data/quonfig.gemspec +30 -163
- metadata +29 -182
- data/.claude/rules/constitution.md +0 -81
- data/.claude/rules/git-safety.md +0 -11
- data/.claude/rules/issue-tracking.md +0 -13
- data/.claude/rules/testing-workflow.md +0 -28
- data/.envrc.sample +0 -3
- data/.github/CODEOWNERS +0 -2
- data/.github/pull_request_template.md +0 -8
- data/.github/workflows/release.yml +0 -49
- data/.github/workflows/ruby.yml +0 -60
- data/.github/workflows/test.yaml +0 -40
- data/.rubocop.yml +0 -13
- data/.tool-versions +0 -1
- data/CLAUDE.md +0 -29
- data/CODEOWNERS +0 -1
- data/Gemfile +0 -26
- data/Gemfile.lock +0 -177
- data/Rakefile +0 -64
- data/VERSION +0 -1
- data/dev/allocation_stats +0 -60
- data/dev/benchmark +0 -40
- data/dev/console +0 -12
- data/dev/script_setup.rb +0 -18
- data/test/fixtures/datafile.json +0 -87
- data/test/integration/test_context_precedence.rb +0 -112
- data/test/integration/test_datadir_environment.rb +0 -54
- data/test/integration/test_dev_overrides.rb +0 -40
- data/test/integration/test_enabled.rb +0 -478
- data/test/integration/test_enabled_with_contexts.rb +0 -64
- data/test/integration/test_get.rb +0 -136
- data/test/integration/test_get_feature_flag.rb +0 -28
- data/test/integration/test_get_or_raise.rb +0 -60
- data/test/integration/test_get_weighted_values.rb +0 -34
- data/test/integration/test_helpers.rb +0 -667
- data/test/integration/test_helpers_test.rb +0 -73
- data/test/integration/test_post.rb +0 -44
- data/test/integration/test_telemetry.rb +0 -170
- data/test/support/common_helpers.rb +0 -106
- data/test/support/mock_base_client.rb +0 -27
- data/test/support/mock_config_loader.rb +0 -1
- data/test/test_bound_client.rb +0 -109
- data/test/test_caching_http_connection.rb +0 -218
- data/test/test_client.rb +0 -255
- data/test/test_client_network_mode.rb +0 -136
- data/test/test_client_telemetry.rb +0 -175
- data/test/test_config_loader.rb +0 -70
- data/test/test_context.rb +0 -139
- data/test/test_context_shape.rb +0 -37
- data/test/test_context_shape_aggregator.rb +0 -126
- data/test/test_datadir.rb +0 -203
- data/test/test_dev_context.rb +0 -163
- data/test/test_duration.rb +0 -37
- data/test/test_encryption.rb +0 -16
- data/test/test_evaluation_summaries_aggregator.rb +0 -180
- data/test/test_evaluator.rb +0 -285
- data/test/test_example_contexts_aggregator.rb +0 -119
- data/test/test_exponential_backoff.rb +0 -44
- data/test/test_fixed_size_hash.rb +0 -119
- data/test/test_helper.rb +0 -17
- data/test/test_http_connection.rb +0 -79
- data/test/test_internal_logger.rb +0 -34
- data/test/test_options.rb +0 -167
- data/test/test_rate_limit_cache.rb +0 -44
- data/test/test_reason.rb +0 -79
- data/test/test_rename.rb +0 -65
- data/test/test_resolver.rb +0 -291
- data/test/test_semantic_logger_filter.rb +0 -144
- data/test/test_semver.rb +0 -108
- data/test/test_should_log.rb +0 -186
- data/test/test_sse_config_client.rb +0 -297
- data/test/test_stdlib_formatter.rb +0 -195
- data/test/test_telemetry_reporter.rb +0 -209
- data/test/test_typed_getters.rb +0 -131
- data/test/test_types.rb +0 -141
- data/test/test_weighted_value_resolver.rb +0 -84
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 57f0f18dd1441f5471db495f868e1f14444dc9836038dd181260ec5adeb48bd5
|
|
4
|
+
data.tar.gz: f4cab0b5a07924424163ea4c8148cc1f93752caea78d827bdc426e6463477a40
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6695efb0125ed9092bca70cbb3fb0edd1a6b115174c7d50e8aeb7f0148628e21883fba714caf0945b8fa22b6b22346d7cd09d5884cf30d61ce6de67caa097272
|
|
7
|
+
data.tar.gz: 9985c30b27ec8fba439e107ca7d4175809358c2e8e0d2fbd9c22db53b9dfa2bd4af6c1c35b413130ab4e53b0fe7a0a62f1c1584ddfd710ab2c526e71939480a5
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,48 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.0.11 - 2026-05-02
|
|
4
|
+
|
|
5
|
+
- **Fix (telemetry): SSE clientName attribution.** The SSE client was sending
|
|
6
|
+
`X-Quonfig-SDK-Version: sdk-ruby-<version>`, which the api-telemetry parser
|
|
7
|
+
splits on the first dash, so it landed as `clientName="sdk"`,
|
|
8
|
+
`clientVersion="ruby-<version>"`. Now sends `ruby-<version>` to match
|
|
9
|
+
`http_connection.rb`, so both transports attribute consistently as
|
|
10
|
+
`clientName="ruby"`.
|
|
11
|
+
- **Release plumbing: drop juwelier, tag-triggered publish.** The gem is now
|
|
12
|
+
built from a hand-written `quonfig.gemspec` that reads the version from
|
|
13
|
+
`Quonfig::VERSION` (in `lib/quonfig/version.rb`) and lists shipped files
|
|
14
|
+
explicitly. The `release.yml` workflow now fires on `v*` tag pushes, not
|
|
15
|
+
every successful main build, and refuses to publish unless the tag matches
|
|
16
|
+
`Quonfig::VERSION`. Together these eliminate the gemspec-vs-VERSION drift
|
|
17
|
+
that prevented the original 0.0.11 publish (gem built as 0.0.10 internally
|
|
18
|
+
while filename said 0.0.11) and the manifest-drift bug from qfg-e588.
|
|
19
|
+
|
|
20
|
+
## 0.0.10 - 2026-05-01
|
|
21
|
+
|
|
22
|
+
- **BREAKING (env): `QUONFIG_TELEMETRY_URL` and `QUONFIG_API_URLS` env vars
|
|
23
|
+
removed.** Replaced by a single `QUONFIG_DOMAIN` env var (default
|
|
24
|
+
`quonfig.com`) that derives api, sse, and telemetry URLs uniformly. e.g.
|
|
25
|
+
`QUONFIG_DOMAIN=quonfig-staging.com` → `https://primary.quonfig-staging.com`,
|
|
26
|
+
`https://stream.primary.quonfig-staging.com`,
|
|
27
|
+
`https://telemetry.quonfig-staging.com`. Mirrors the CLI's
|
|
28
|
+
`domain-urls.ts` convention and matches sdk-go / sdk-node. Resolution order
|
|
29
|
+
(highest wins): explicit `api_urls:` / `telemetry_url:` kwargs >
|
|
30
|
+
`QUONFIG_DOMAIN` > hardcoded default. Fixes qfg-w6gg, where the prior
|
|
31
|
+
primary-prefix regex silently fell through to prod telemetry on staging
|
|
32
|
+
hosts. The new `Quonfig::Options#init` also accepts an explicit
|
|
33
|
+
`telemetry_url:` kwarg (was previously documented but not wired up).
|
|
34
|
+
- **Default `api_urls` now includes secondary.** Was `[primary]`, now
|
|
35
|
+
`[primary, secondary]` to match every other SDK and provide failover.
|
|
36
|
+
- **Release plumbing: pre-publish smoke check (qfg-e588).** The Rakefile
|
|
37
|
+
`:release` task and the `release.yml` workflow now run
|
|
38
|
+
`scripts/smoke_check.sh` after `gem build` and before `gem push`. The
|
|
39
|
+
script installs the freshly built `.gem` into a sandbox `GEM_HOME` and
|
|
40
|
+
shells out to `ruby -rquonfig -e 'puts Quonfig::VERSION'`. If the
|
|
41
|
+
require fails or the version mismatches, the publish aborts. This is
|
|
42
|
+
the prevention measure for qfg-e588, where 0.0.9 was published with a
|
|
43
|
+
stale gemspec manifest missing `lib/quonfig/evaluation_details.rb` and
|
|
44
|
+
every consumer hit `LoadError` at install time.
|
|
45
|
+
|
|
3
46
|
## 0.0.8 - 2026-04-26
|
|
4
47
|
|
|
5
48
|
- **Fix (gemspec): drop deleted `scripts/` entry from manifest** — regenerated
|
data/README.md
CHANGED
|
@@ -114,14 +114,14 @@ client = Quonfig::Client.new # reads QUONFIG_DIR + QUONFIG_ENVIRONMENT
|
|
|
114
114
|
| `QUONFIG_BACKEND_SDK_KEY` | SDK key used to authenticate against the Quonfig API. Used when `sdk_key:` is omitted. |
|
|
115
115
|
| `QUONFIG_DIR` | Path to a workspace directory. When set, the SDK runs in datadir/offline mode. |
|
|
116
116
|
| `QUONFIG_ENVIRONMENT` | Environment name (`production`, `staging`, `development`) evaluated in datadir mode. |
|
|
117
|
-
| `
|
|
117
|
+
| `QUONFIG_DOMAIN` | Base domain used to derive api, sse, and telemetry URLs. Defaults to `quonfig.com`. Set to `quonfig-staging.com` to point at staging. Explicit `api_urls:` / `telemetry_url:` kwargs override this. |
|
|
118
118
|
|
|
119
119
|
## Constructor options
|
|
120
120
|
|
|
121
121
|
```ruby
|
|
122
122
|
Quonfig::Client.new(
|
|
123
123
|
sdk_key: '...', # required unless QUONFIG_BACKEND_SDK_KEY is set
|
|
124
|
-
api_urls: ['https://primary.quonfig.com'],
|
|
124
|
+
api_urls: ['https://primary.quonfig.com', 'https://secondary.quonfig.com'],
|
|
125
125
|
telemetry_url: 'https://telemetry.quonfig.com',
|
|
126
126
|
enable_sse: true,
|
|
127
127
|
enable_polling: false,
|
|
@@ -137,8 +137,8 @@ Quonfig::Client.new(
|
|
|
137
137
|
| Option | Type | Default | Description |
|
|
138
138
|
|-------------------|----------------------------|---------------------------------------------------------------------|---------------------------------------------------------------------------------------------------|
|
|
139
139
|
| `sdk_key` | `String` | `ENV['QUONFIG_BACKEND_SDK_KEY']` | SDK key for API authentication. |
|
|
140
|
-
| `api_urls` | `Array<String>` | `[
|
|
141
|
-
| `telemetry_url` | `String` | `https://telemetry
|
|
140
|
+
| `api_urls` | `Array<String>` | `["https://primary.${QUONFIG_DOMAIN}", "https://secondary.${QUONFIG_DOMAIN}"]` | Ordered list of API base URLs to try. SSE stream URLs are derived by prepending `stream.` to each hostname. Defaults derive from `QUONFIG_DOMAIN` (default `quonfig.com`). |
|
|
141
|
+
| `telemetry_url` | `String` | `https://telemetry.${QUONFIG_DOMAIN}` | Base URL for the telemetry service. Default derives from `QUONFIG_DOMAIN`. |
|
|
142
142
|
| `enable_sse` | `Boolean` | `true` | Receive real-time updates over Server-Sent Events. |
|
|
143
143
|
| `enable_polling` | `Boolean` | `false` | Poll the API on an interval as a fallback. |
|
|
144
144
|
| `poll_interval` | `Integer` (seconds) | `60` | Polling interval when `enable_polling` is `true`. |
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Quonfig
|
|
4
|
+
# Public details record returned by Quonfig::Client#get_*_details. Surfaces
|
|
5
|
+
# the resolution reason and (on error) an error_code/error_message alongside
|
|
6
|
+
# the resolved value, so downstream layers — most importantly the
|
|
7
|
+
# OpenFeature provider — can map the result without losing fidelity.
|
|
8
|
+
#
|
|
9
|
+
# +reason+ is one of the strings:
|
|
10
|
+
# "STATIC" — config has no targeting rules; matched value is the static default
|
|
11
|
+
# "TARGETING_MATCH" — a targeting rule matched (any non-ALWAYS_TRUE criterion)
|
|
12
|
+
# "SPLIT" — matched value came from a weighted variant
|
|
13
|
+
# "DEFAULT" — no rule matched (eval fell through)
|
|
14
|
+
# "ERROR" — evaluation failed
|
|
15
|
+
#
|
|
16
|
+
# +error_code+ (only when reason == "ERROR") is one of:
|
|
17
|
+
# "FLAG_NOT_FOUND" — the key was unknown to the store
|
|
18
|
+
# "TYPE_MISMATCH" — the resolved value didn't satisfy the requested type
|
|
19
|
+
# "GENERAL" — any other failure
|
|
20
|
+
class EvaluationDetails
|
|
21
|
+
REASON_STATIC = 'STATIC'
|
|
22
|
+
REASON_TARGETING_MATCH = 'TARGETING_MATCH'
|
|
23
|
+
REASON_SPLIT = 'SPLIT'
|
|
24
|
+
REASON_DEFAULT = 'DEFAULT'
|
|
25
|
+
REASON_ERROR = 'ERROR'
|
|
26
|
+
|
|
27
|
+
ERROR_FLAG_NOT_FOUND = 'FLAG_NOT_FOUND'
|
|
28
|
+
ERROR_TYPE_MISMATCH = 'TYPE_MISMATCH'
|
|
29
|
+
ERROR_GENERAL = 'GENERAL'
|
|
30
|
+
|
|
31
|
+
attr_reader :value, :reason, :error_code, :error_message
|
|
32
|
+
|
|
33
|
+
def initialize(value:, reason:, error_code: nil, error_message: nil)
|
|
34
|
+
@value = value
|
|
35
|
+
@reason = reason
|
|
36
|
+
@error_code = error_code
|
|
37
|
+
@error_message = error_message
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def ==(other)
|
|
41
|
+
other.is_a?(EvaluationDetails) &&
|
|
42
|
+
other.value == @value &&
|
|
43
|
+
other.reason == @reason &&
|
|
44
|
+
other.error_code == @error_code &&
|
|
45
|
+
other.error_message == @error_message
|
|
46
|
+
end
|
|
47
|
+
alias eql? ==
|
|
48
|
+
|
|
49
|
+
def hash
|
|
50
|
+
[@value, @reason, @error_code, @error_message].hash
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def inspect
|
|
54
|
+
parts = ["value=#{@value.inspect}", "reason=#{@reason.inspect}"]
|
|
55
|
+
parts << "error_code=#{@error_code.inspect}" if @error_code
|
|
56
|
+
parts << "error_message=#{@error_message.inspect}" if @error_message
|
|
57
|
+
"#<Quonfig::EvaluationDetails #{parts.join(' ')}>"
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
data/lib/quonfig/options.rb
CHANGED
|
@@ -39,10 +39,38 @@ module Quonfig
|
|
|
39
39
|
DEFAULT_MAX_EXAMPLE_CONTEXTS = 100_000
|
|
40
40
|
DEFAULT_MAX_EVAL_SUMMARIES = 100_000
|
|
41
41
|
|
|
42
|
+
# Hardcoded fallback domain. Overridden by ENV['QUONFIG_DOMAIN'].
|
|
43
|
+
DEFAULT_DOMAIN = 'quonfig.com'
|
|
44
|
+
|
|
45
|
+
# Hardcoded fallback API URLs (used only when no QUONFIG_DOMAIN is set
|
|
46
|
+
# and no explicit api_urls are provided). Mirrors derive_api_urls(DEFAULT_DOMAIN).
|
|
42
47
|
DEFAULT_API_URLS = [
|
|
43
48
|
'https://primary.quonfig.com',
|
|
49
|
+
'https://secondary.quonfig.com',
|
|
44
50
|
].freeze
|
|
45
51
|
|
|
52
|
+
# Resolve the active domain. Reads QUONFIG_DOMAIN; falls back to
|
|
53
|
+
# DEFAULT_DOMAIN. Mirrors `cli/src/util/domain-urls.ts#getDomain`.
|
|
54
|
+
def self.domain
|
|
55
|
+
env = ENV['QUONFIG_DOMAIN']
|
|
56
|
+
env && !env.empty? ? env : DEFAULT_DOMAIN
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Derive default api_urls for a given domain. e.g. for domain
|
|
60
|
+
# `quonfig-staging.com` returns
|
|
61
|
+
# `["https://primary.quonfig-staging.com", "https://secondary.quonfig-staging.com"]`.
|
|
62
|
+
def self.derive_api_urls(domain)
|
|
63
|
+
[
|
|
64
|
+
"https://primary.#{domain}",
|
|
65
|
+
"https://secondary.#{domain}",
|
|
66
|
+
]
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Derive the telemetry URL for a given domain.
|
|
70
|
+
def self.derive_telemetry_url(domain)
|
|
71
|
+
"https://telemetry.#{domain}"
|
|
72
|
+
end
|
|
73
|
+
|
|
46
74
|
# Derive the SSE stream URL for a given API URL by prepending `stream.` to
|
|
47
75
|
# the hostname. Preserves scheme, port, and path.
|
|
48
76
|
#
|
|
@@ -58,6 +86,7 @@ module Quonfig
|
|
|
58
86
|
|
|
59
87
|
private def init(
|
|
60
88
|
api_urls: nil,
|
|
89
|
+
telemetry_url: nil,
|
|
61
90
|
sdk_key: ENV['QUONFIG_BACKEND_SDK_KEY'],
|
|
62
91
|
environment: ENV['QUONFIG_ENVIRONMENT'],
|
|
63
92
|
datadir: ENV['QUONFIG_DIR'],
|
|
@@ -104,16 +133,19 @@ module Quonfig
|
|
|
104
133
|
@collect_example_contexts = false
|
|
105
134
|
@collect_max_example_contexts = 0
|
|
106
135
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
136
|
+
# URL resolution order (highest wins):
|
|
137
|
+
# 1. Explicit kwargs (api_urls:, telemetry_url:)
|
|
138
|
+
# 2. ENV['QUONFIG_DOMAIN'] -> derives all three
|
|
139
|
+
# 3. Hardcoded DEFAULT_DOMAIN ('quonfig.com')
|
|
140
|
+
domain = Quonfig::Options.domain
|
|
110
141
|
|
|
111
|
-
@api_urls = Array(api_urls ||
|
|
142
|
+
@api_urls = Array(api_urls || Quonfig::Options.derive_api_urls(domain))
|
|
143
|
+
.map { |url| remove_trailing_slash(url) }
|
|
112
144
|
|
|
113
145
|
@sse_api_urls = @api_urls.map { |url| Quonfig::Options.derive_stream_url(url) }
|
|
114
146
|
@config_api_urls = @api_urls
|
|
115
147
|
|
|
116
|
-
@telemetry_destination =
|
|
148
|
+
@telemetry_destination = telemetry_url || Quonfig::Options.derive_telemetry_url(domain)
|
|
117
149
|
|
|
118
150
|
case context_upload_mode
|
|
119
151
|
when :none
|
|
@@ -188,16 +220,5 @@ module Quonfig
|
|
|
188
220
|
def remove_trailing_slash(url)
|
|
189
221
|
url.end_with?('/') ? url[0..-2] : url
|
|
190
222
|
end
|
|
191
|
-
|
|
192
|
-
# Derive a telemetry URL from the configured api_urls by swapping the
|
|
193
|
-
# primary/secondary host prefix for `telemetry` on a *.quonfig.com host.
|
|
194
|
-
# Falls back to https://telemetry.quonfig.com if no URL matches.
|
|
195
|
-
def derive_telemetry_destination(api_urls)
|
|
196
|
-
api_urls.each do |api_url|
|
|
197
|
-
match = api_url.match(%r{\Ahttps?://(?:primary|secondary)\.([^/]*quonfig\.com)}i)
|
|
198
|
-
return "https://telemetry.#{match[1]}" if match
|
|
199
|
-
end
|
|
200
|
-
'https://telemetry.quonfig.com'
|
|
201
|
-
end
|
|
202
223
|
end
|
|
203
224
|
end
|
data/lib/quonfig.rb
CHANGED
data/quonfig.gemspec
CHANGED
|
@@ -1,169 +1,36 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
# -*- encoding: utf-8 -*-
|
|
5
|
-
# stub: quonfig 0.0.9 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
|
|
9
|
-
s.version
|
|
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.
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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/evaluator.rb",
|
|
73
|
-
"lib/quonfig/exponential_backoff.rb",
|
|
74
|
-
"lib/quonfig/fixed_size_hash.rb",
|
|
75
|
-
"lib/quonfig/http_connection.rb",
|
|
76
|
-
"lib/quonfig/internal_logger.rb",
|
|
77
|
-
"lib/quonfig/murmer3.rb",
|
|
78
|
-
"lib/quonfig/options.rb",
|
|
79
|
-
"lib/quonfig/periodic_sync.rb",
|
|
80
|
-
"lib/quonfig/quonfig.rb",
|
|
81
|
-
"lib/quonfig/rate_limit_cache.rb",
|
|
82
|
-
"lib/quonfig/reason.rb",
|
|
83
|
-
"lib/quonfig/resolver.rb",
|
|
84
|
-
"lib/quonfig/semantic_logger_filter.rb",
|
|
85
|
-
"lib/quonfig/semver.rb",
|
|
86
|
-
"lib/quonfig/sse_config_client.rb",
|
|
87
|
-
"lib/quonfig/stdlib_formatter.rb",
|
|
88
|
-
"lib/quonfig/telemetry/context_shape.rb",
|
|
89
|
-
"lib/quonfig/telemetry/context_shape_aggregator.rb",
|
|
90
|
-
"lib/quonfig/telemetry/evaluation_summaries_aggregator.rb",
|
|
91
|
-
"lib/quonfig/telemetry/example_contexts_aggregator.rb",
|
|
92
|
-
"lib/quonfig/telemetry/telemetry_reporter.rb",
|
|
93
|
-
"lib/quonfig/time_helpers.rb",
|
|
94
|
-
"lib/quonfig/types.rb",
|
|
95
|
-
"lib/quonfig/weighted_value_resolver.rb",
|
|
96
|
-
"quonfig.gemspec",
|
|
97
|
-
"test/fixtures/datafile.json",
|
|
98
|
-
"test/integration/test_context_precedence.rb",
|
|
99
|
-
"test/integration/test_datadir_environment.rb",
|
|
100
|
-
"test/integration/test_dev_overrides.rb",
|
|
101
|
-
"test/integration/test_enabled.rb",
|
|
102
|
-
"test/integration/test_enabled_with_contexts.rb",
|
|
103
|
-
"test/integration/test_get.rb",
|
|
104
|
-
"test/integration/test_get_feature_flag.rb",
|
|
105
|
-
"test/integration/test_get_or_raise.rb",
|
|
106
|
-
"test/integration/test_get_weighted_values.rb",
|
|
107
|
-
"test/integration/test_helpers.rb",
|
|
108
|
-
"test/integration/test_helpers_test.rb",
|
|
109
|
-
"test/integration/test_post.rb",
|
|
110
|
-
"test/integration/test_telemetry.rb",
|
|
111
|
-
"test/support/common_helpers.rb",
|
|
112
|
-
"test/support/mock_base_client.rb",
|
|
113
|
-
"test/support/mock_config_loader.rb",
|
|
114
|
-
"test/test_bound_client.rb",
|
|
115
|
-
"test/test_caching_http_connection.rb",
|
|
116
|
-
"test/test_client.rb",
|
|
117
|
-
"test/test_client_network_mode.rb",
|
|
118
|
-
"test/test_client_telemetry.rb",
|
|
119
|
-
"test/test_config_loader.rb",
|
|
120
|
-
"test/test_context.rb",
|
|
121
|
-
"test/test_context_shape.rb",
|
|
122
|
-
"test/test_context_shape_aggregator.rb",
|
|
123
|
-
"test/test_datadir.rb",
|
|
124
|
-
"test/test_dev_context.rb",
|
|
125
|
-
"test/test_duration.rb",
|
|
126
|
-
"test/test_encryption.rb",
|
|
127
|
-
"test/test_evaluation_summaries_aggregator.rb",
|
|
128
|
-
"test/test_evaluator.rb",
|
|
129
|
-
"test/test_example_contexts_aggregator.rb",
|
|
130
|
-
"test/test_exponential_backoff.rb",
|
|
131
|
-
"test/test_fixed_size_hash.rb",
|
|
132
|
-
"test/test_helper.rb",
|
|
133
|
-
"test/test_http_connection.rb",
|
|
134
|
-
"test/test_internal_logger.rb",
|
|
135
|
-
"test/test_options.rb",
|
|
136
|
-
"test/test_rate_limit_cache.rb",
|
|
137
|
-
"test/test_reason.rb",
|
|
138
|
-
"test/test_rename.rb",
|
|
139
|
-
"test/test_resolver.rb",
|
|
140
|
-
"test/test_semantic_logger_filter.rb",
|
|
141
|
-
"test/test_semver.rb",
|
|
142
|
-
"test/test_should_log.rb",
|
|
143
|
-
"test/test_sse_config_client.rb",
|
|
144
|
-
"test/test_stdlib_formatter.rb",
|
|
145
|
-
"test/test_telemetry_reporter.rb",
|
|
146
|
-
"test/test_typed_getters.rb",
|
|
147
|
-
"test/test_types.rb",
|
|
148
|
-
"test/test_weighted_value_resolver.rb"
|
|
149
|
-
]
|
|
150
|
-
s.homepage = "https://github.com/quonfig/sdk-ruby".freeze
|
|
151
|
-
s.licenses = ["MIT".freeze]
|
|
152
|
-
s.rubygems_version = "3.5.22".freeze
|
|
153
|
-
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
|
+
}
|
|
154
21
|
|
|
155
|
-
s.
|
|
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]
|
|
156
30
|
|
|
157
|
-
s.add_runtime_dependency
|
|
158
|
-
s.add_runtime_dependency
|
|
159
|
-
s.add_runtime_dependency
|
|
160
|
-
s.add_runtime_dependency
|
|
161
|
-
s.add_runtime_dependency
|
|
162
|
-
s.add_development_dependency(%q<allocation_stats>.freeze, [">= 0".freeze])
|
|
163
|
-
s.add_development_dependency(%q<benchmark-ips>.freeze, [">= 0".freeze])
|
|
164
|
-
s.add_development_dependency(%q<bundler>.freeze, [">= 0".freeze])
|
|
165
|
-
s.add_development_dependency(%q<juwelier>.freeze, ["~> 2.4.9".freeze])
|
|
166
|
-
s.add_development_dependency(%q<rdoc>.freeze, [">= 0".freeze])
|
|
167
|
-
s.add_development_dependency(%q<simplecov>.freeze, [">= 0".freeze])
|
|
31
|
+
s.add_runtime_dependency 'activesupport', '>= 4'
|
|
32
|
+
s.add_runtime_dependency 'concurrent-ruby', '~> 1.0', '>= 1.0.5'
|
|
33
|
+
s.add_runtime_dependency 'faraday', '>= 1.0'
|
|
34
|
+
s.add_runtime_dependency 'ld-eventsource', '>= 2.0'
|
|
35
|
+
s.add_runtime_dependency 'uuid', '>= 2.0'
|
|
168
36
|
end
|
|
169
|
-
|