txlemetry-ruby 4.0.0
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 +7 -0
- data/LICENSE +48 -0
- data/NOTICE +5 -0
- data/bin/txlemetry +110 -0
- data/lib/txlemetry/backoff_policy.rb +49 -0
- data/lib/txlemetry/client.rb +1266 -0
- data/lib/txlemetry/defaults.rb +50 -0
- data/lib/txlemetry/exception_capture.rb +246 -0
- data/lib/txlemetry/feature_flag.rb +85 -0
- data/lib/txlemetry/feature_flag_error.rb +37 -0
- data/lib/txlemetry/feature_flag_evaluations.rb +237 -0
- data/lib/txlemetry/feature_flag_result.rb +81 -0
- data/lib/txlemetry/feature_flags.rb +1516 -0
- data/lib/txlemetry/field_parser.rb +219 -0
- data/lib/txlemetry/flag_definition_cache.rb +88 -0
- data/lib/txlemetry/internal/context.rb +119 -0
- data/lib/txlemetry/logging.rb +77 -0
- data/lib/txlemetry/mcp/README.md +53 -0
- data/lib/txlemetry/mcp/analytics.rb +116 -0
- data/lib/txlemetry/mcp/client.rb +257 -0
- data/lib/txlemetry/mcp/constants.rb +111 -0
- data/lib/txlemetry/mcp/conversation_id.rb +89 -0
- data/lib/txlemetry/mcp/event_builder.rb +168 -0
- data/lib/txlemetry/mcp/exceptions.rb +112 -0
- data/lib/txlemetry/mcp/identity.rb +194 -0
- data/lib/txlemetry/mcp/ids.rb +56 -0
- data/lib/txlemetry/mcp/instrumentation.rb +736 -0
- data/lib/txlemetry/mcp/intent.rb +101 -0
- data/lib/txlemetry/mcp/log.rb +37 -0
- data/lib/txlemetry/mcp/options.rb +128 -0
- data/lib/txlemetry/mcp/rack_middleware.rb +112 -0
- data/lib/txlemetry/mcp/request_scope.rb +72 -0
- data/lib/txlemetry/mcp/sanitization.rb +504 -0
- data/lib/txlemetry/mcp/schema_mutation.rb +179 -0
- data/lib/txlemetry/mcp/server_extension.rb +54 -0
- data/lib/txlemetry/mcp/session.rb +71 -0
- data/lib/txlemetry/mcp/session_token.rb +106 -0
- data/lib/txlemetry/mcp/sink.rb +98 -0
- data/lib/txlemetry/mcp/tools.rb +91 -0
- data/lib/txlemetry/mcp/tracking_data.rb +89 -0
- data/lib/txlemetry/mcp/truncation.rb +326 -0
- data/lib/txlemetry/mcp.rb +224 -0
- data/lib/txlemetry/message_batch.rb +80 -0
- data/lib/txlemetry/noop_worker.rb +39 -0
- data/lib/txlemetry/response.rb +17 -0
- data/lib/txlemetry/send_feature_flags_options.rb +49 -0
- data/lib/txlemetry/send_worker.rb +218 -0
- data/lib/txlemetry/transport.rb +216 -0
- data/lib/txlemetry/utils.rb +183 -0
- data/lib/txlemetry/version.rb +5 -0
- data/lib/txlemetry.rb +16 -0
- metadata +105 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'json'
|
|
4
|
+
|
|
5
|
+
module Txlemetry
|
|
6
|
+
# Represents the result of a feature flag evaluation
|
|
7
|
+
# containing both the flag value and payload
|
|
8
|
+
class FeatureFlagResult
|
|
9
|
+
# @return [String, Symbol] The feature flag key.
|
|
10
|
+
attr_reader :key
|
|
11
|
+
|
|
12
|
+
# @return [String, nil] The variant key for multivariate flags.
|
|
13
|
+
attr_reader :variant
|
|
14
|
+
|
|
15
|
+
# @return [Object, nil] The parsed feature flag payload.
|
|
16
|
+
attr_reader :payload
|
|
17
|
+
|
|
18
|
+
# @param key [String, Symbol] The feature flag key.
|
|
19
|
+
# @param enabled [Boolean] Whether the feature flag is enabled.
|
|
20
|
+
# @param variant [String, nil] The variant key for multivariate flags.
|
|
21
|
+
# @param payload [Object, nil] The parsed feature flag payload.
|
|
22
|
+
def initialize(key:, enabled:, variant: nil, payload: nil)
|
|
23
|
+
@key = key
|
|
24
|
+
@enabled = enabled
|
|
25
|
+
@variant = variant
|
|
26
|
+
@payload = payload
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Returns the effective value of the feature flag: variant if present,
|
|
30
|
+
# otherwise enabled status.
|
|
31
|
+
#
|
|
32
|
+
# @return [String, Boolean]
|
|
33
|
+
def value
|
|
34
|
+
@variant || @enabled
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Returns whether or not the feature flag evaluated as enabled.
|
|
38
|
+
#
|
|
39
|
+
# @return [Boolean]
|
|
40
|
+
def enabled?
|
|
41
|
+
@enabled
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Factory method to create from flag value and payload.
|
|
45
|
+
#
|
|
46
|
+
# @param key [String, Symbol] The feature flag key.
|
|
47
|
+
# @param value [String, Boolean, nil] The raw feature flag value.
|
|
48
|
+
# @param payload [Object, String, nil] The raw or JSON-encoded feature flag payload.
|
|
49
|
+
# @return [Txlemetry::FeatureFlagResult, nil]
|
|
50
|
+
def self.from_value_and_payload(key, value, payload)
|
|
51
|
+
return nil if value.nil?
|
|
52
|
+
|
|
53
|
+
parsed_payload = parse_payload(payload)
|
|
54
|
+
|
|
55
|
+
if value.is_a?(String)
|
|
56
|
+
new(key: key, enabled: true, variant: value, payload: parsed_payload)
|
|
57
|
+
else
|
|
58
|
+
new(key: key, enabled: value, payload: parsed_payload)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Deserialize a flag payload. Strings are JSON-parsed (with the raw string
|
|
63
|
+
# returned when the body is not valid JSON); already-deserialized values
|
|
64
|
+
# pass through. Public so {FeatureFlagEvaluations} can normalize payloads
|
|
65
|
+
# the same way {FeatureFlagResult} does.
|
|
66
|
+
#
|
|
67
|
+
# @param payload [Object, String, nil] The raw payload value.
|
|
68
|
+
# @return [Object, nil] The parsed payload.
|
|
69
|
+
def self.parse_payload(payload)
|
|
70
|
+
return nil if payload.nil?
|
|
71
|
+
return payload unless payload.is_a?(String)
|
|
72
|
+
return nil if payload.empty?
|
|
73
|
+
|
|
74
|
+
begin
|
|
75
|
+
JSON.parse(payload)
|
|
76
|
+
rescue JSON::ParserError
|
|
77
|
+
payload
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|