Loading lib/labkit/tracing/auto_initialize.rb +4 −6 Original line number Diff line number Diff line # frozen_string_literal: true require "cgi" require "uri" require "active_support/core_ext/object/blank" module Labkit Loading @@ -9,11 +9,9 @@ module Labkit def self.detect_service_name(connection_string) return Labkit::Tracing::DEFAULT_SERVICE_NAME unless connection_string if connection_string =~ /[?&]service_name=([^&]+)/ CGI.unescape(Regexp.last_match(1)) else Labkit::Tracing::DEFAULT_SERVICE_NAME end parsed = URI.parse(connection_string) options = TracingUtils.parse_query_string(parsed.query) options[:service_name] || Labkit::Tracing::DEFAULT_SERVICE_NAME end def self.initialize! Loading lib/labkit/tracing/open_telemetry_factory.rb +1 −7 Original line number Diff line number Diff line Loading @@ -175,7 +175,7 @@ module Labkit parsed = URI.parse(connection_string) # Parse query parameters for additional options options = parse_query(parsed.query) options = TracingUtils.parse_query_string(parsed.query) # Handle console exporter (special case - no endpoint needed) if parsed.host == "console" Loading Loading @@ -206,12 +206,6 @@ module Labkit endpoint end def parse_query(query) return {} unless query CGI.parse(query).symbolize_keys.transform_values(&:first) end end end end Loading lib/labkit/tracing/open_tracing_factory.rb +1 −10 Original line number Diff line number Diff line # frozen_string_literal: true require "cgi" module Labkit module Tracing class OpenTracingFactory Loading @@ -26,17 +24,10 @@ module Labkit raise "Invalid tracing connection string" unless valid_uri?(parsed) { driver_name: parsed.host, options: parse_query(parsed.query) } { driver_name: parsed.host, options: TracingUtils.parse_query_string(parsed.query) } end private_class_method :parse_connection_string def self.parse_query(query) return {} unless query CGI.parse(query).symbolize_keys.transform_values(&:first) end private_class_method :parse_query def self.valid_uri?(uri) return false unless uri Loading lib/labkit/tracing/tracing_utils.rb +7 −0 Original line number Diff line number Diff line # frozen_string_literal: true require "cgi" require "active_support/core_ext/string/starts_ends_with" require "opentracing" Loading Loading @@ -80,6 +81,12 @@ module Labkit @include_stacktrace[operation_name] end def self.parse_query_string(query) return {} unless query CGI.parse(query).symbolize_keys.transform_values(&:first) end end end end spec/labkit/tracing/tracing_utils_spec.rb +56 −0 Original line number Diff line number Diff line Loading @@ -205,4 +205,60 @@ describe Labkit::Tracing::TracingUtils do end end end describe ".parse_query_string" do context "when query is nil" do it "returns an empty hash" do expect(described_class.parse_query_string(nil)).to eq({}) end end context "when query is an empty string" do it "returns an empty hash" do expect(described_class.parse_query_string("")).to eq({}) end end context "when query has single parameter" do it "returns a hash with symbolized key" do result = described_class.parse_query_string("foo=bar") expect(result).to eq({ foo: "bar" }) end end context "when query has multiple parameters" do it "returns a hash with symbolized keys" do result = described_class.parse_query_string("foo=bar&baz=qux") expect(result).to eq({ foo: "bar", baz: "qux" }) end end context "when parameter has multiple values" do it "returns only the first value" do result = described_class.parse_query_string("foo=bar&foo=baz") expect(result).to eq({ foo: "bar" }) end end context "when parameter has no value" do it "returns an empty string for the value" do result = described_class.parse_query_string("foo=") expect(result).to eq({ foo: "" }) end end context "when parameter has special characters" do it "decodes URL-encoded values" do result = described_class.parse_query_string("foo=hello%20world&bar=test%2Bvalue") expect(result).to eq({ foo: "hello world", bar: "test+value" }) end end context "when parameter key has special characters" do it "decodes URL-encoded keys" do result = described_class.parse_query_string("foo%5Bbar%5D=value") expect(result).to eq({ 'foo[bar]': "value" }) end end end end Loading
lib/labkit/tracing/auto_initialize.rb +4 −6 Original line number Diff line number Diff line # frozen_string_literal: true require "cgi" require "uri" require "active_support/core_ext/object/blank" module Labkit Loading @@ -9,11 +9,9 @@ module Labkit def self.detect_service_name(connection_string) return Labkit::Tracing::DEFAULT_SERVICE_NAME unless connection_string if connection_string =~ /[?&]service_name=([^&]+)/ CGI.unescape(Regexp.last_match(1)) else Labkit::Tracing::DEFAULT_SERVICE_NAME end parsed = URI.parse(connection_string) options = TracingUtils.parse_query_string(parsed.query) options[:service_name] || Labkit::Tracing::DEFAULT_SERVICE_NAME end def self.initialize! Loading
lib/labkit/tracing/open_telemetry_factory.rb +1 −7 Original line number Diff line number Diff line Loading @@ -175,7 +175,7 @@ module Labkit parsed = URI.parse(connection_string) # Parse query parameters for additional options options = parse_query(parsed.query) options = TracingUtils.parse_query_string(parsed.query) # Handle console exporter (special case - no endpoint needed) if parsed.host == "console" Loading Loading @@ -206,12 +206,6 @@ module Labkit endpoint end def parse_query(query) return {} unless query CGI.parse(query).symbolize_keys.transform_values(&:first) end end end end Loading
lib/labkit/tracing/open_tracing_factory.rb +1 −10 Original line number Diff line number Diff line # frozen_string_literal: true require "cgi" module Labkit module Tracing class OpenTracingFactory Loading @@ -26,17 +24,10 @@ module Labkit raise "Invalid tracing connection string" unless valid_uri?(parsed) { driver_name: parsed.host, options: parse_query(parsed.query) } { driver_name: parsed.host, options: TracingUtils.parse_query_string(parsed.query) } end private_class_method :parse_connection_string def self.parse_query(query) return {} unless query CGI.parse(query).symbolize_keys.transform_values(&:first) end private_class_method :parse_query def self.valid_uri?(uri) return false unless uri Loading
lib/labkit/tracing/tracing_utils.rb +7 −0 Original line number Diff line number Diff line # frozen_string_literal: true require "cgi" require "active_support/core_ext/string/starts_ends_with" require "opentracing" Loading Loading @@ -80,6 +81,12 @@ module Labkit @include_stacktrace[operation_name] end def self.parse_query_string(query) return {} unless query CGI.parse(query).symbolize_keys.transform_values(&:first) end end end end
spec/labkit/tracing/tracing_utils_spec.rb +56 −0 Original line number Diff line number Diff line Loading @@ -205,4 +205,60 @@ describe Labkit::Tracing::TracingUtils do end end end describe ".parse_query_string" do context "when query is nil" do it "returns an empty hash" do expect(described_class.parse_query_string(nil)).to eq({}) end end context "when query is an empty string" do it "returns an empty hash" do expect(described_class.parse_query_string("")).to eq({}) end end context "when query has single parameter" do it "returns a hash with symbolized key" do result = described_class.parse_query_string("foo=bar") expect(result).to eq({ foo: "bar" }) end end context "when query has multiple parameters" do it "returns a hash with symbolized keys" do result = described_class.parse_query_string("foo=bar&baz=qux") expect(result).to eq({ foo: "bar", baz: "qux" }) end end context "when parameter has multiple values" do it "returns only the first value" do result = described_class.parse_query_string("foo=bar&foo=baz") expect(result).to eq({ foo: "bar" }) end end context "when parameter has no value" do it "returns an empty string for the value" do result = described_class.parse_query_string("foo=") expect(result).to eq({ foo: "" }) end end context "when parameter has special characters" do it "decodes URL-encoded values" do result = described_class.parse_query_string("foo=hello%20world&bar=test%2Bvalue") expect(result).to eq({ foo: "hello world", bar: "test+value" }) end end context "when parameter key has special characters" do it "decodes URL-encoded keys" do result = described_class.parse_query_string("foo%5Bbar%5D=value") expect(result).to eq({ 'foo[bar]': "value" }) end end end end