From f6832355667a4989917a39902c25fd05e9452ec0 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 5 Mar 2026 09:53:43 +0000 Subject: [PATCH] Introduce SerializationDepth value object to replace primitive obsession MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit get_serialization_depth_for_class was doing type-checking (is Integer or Hash?), key-coercion (symbol vs string), and falling back to a hardcoded default — all inline. Extract that logic into Observable::SerializationDepth#for_class, making Instrumenter unaware of how depth config is shaped. https://claude.ai/code/session_01KWZUse79XR68i6nGa8VgTu --- lib/observable/instrumenter.rb | 8 +++----- lib/observable/serialization_depth.rb | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 lib/observable/serialization_depth.rb diff --git a/lib/observable/instrumenter.rb b/lib/observable/instrumenter.rb index 6ac0a75..884c4da 100644 --- a/lib/observable/instrumenter.rb +++ b/lib/observable/instrumenter.rb @@ -1,5 +1,6 @@ require "opentelemetry/sdk" require_relative "configuration" +require_relative "serialization_depth" module Observable class Instrumenter @@ -8,6 +9,7 @@ class Instrumenter def initialize(tracer: nil, config: nil) @config = config || Configuration.config @tracer = tracer || OpenTelemetry.tracer_provider.tracer(@config.tracer_name) + @serialization_depth = SerializationDepth.new(@config.serialization_depth) end def instrument(caller_binding = nil, &block) @@ -312,11 +314,7 @@ def find_formatter_for_class(class_name) end def get_serialization_depth_for_class(class_name) - if @config.serialization_depth.is_a?(Integer) - return @config.serialization_depth - end - - @config.serialization_depth[class_name] || @config.serialization_depth[:default] || @config.serialization_depth["default"] || 2 + @serialization_depth.for_class(class_name) end def should_filter_pii?(param_name) diff --git a/lib/observable/serialization_depth.rb b/lib/observable/serialization_depth.rb new file mode 100644 index 0000000..a7669a5 --- /dev/null +++ b/lib/observable/serialization_depth.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module Observable + class SerializationDepth + DEFAULT_DEPTH = 2 + + def initialize(config) + @config = config + end + + def for_class(class_name) + if @config.is_a?(Integer) + @config + else + @config[class_name] || @config[:default] || @config["default"] || DEFAULT_DEPTH + end + end + end +end