From bbee1e98d1a3b73a49b4d27718f73eedaef61f48 Mon Sep 17 00:00:00 2001 From: Kali Donovan Date: Mon, 23 Feb 2026 12:13:00 -0800 Subject: [PATCH] 0.2.1 - fix issue with semantic logger --- CHANGELOG.md | 5 +++++ lib/declarative_initialization/internal.rb | 5 ++++- lib/declarative_initialization/version.rb | 2 +- spec/reader_spec.rb | 13 +++++++++++++ 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a10318..8377a2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ * N/A +## [0.2.1] - 2026-02-23 + +### Fixed +- Avoid `ArgumentError: comparison of Symbol with 0 failed` when `Rails.logger` is wrapped by SemanticLogger (or any logger whose `level` is not an integer). Override warnings now only compare level when it is an integer. + ## [0.2.0] - 2026-02-19 ### Changed diff --git a/lib/declarative_initialization/internal.rb b/lib/declarative_initialization/internal.rb index adcb82e..68187ee 100644 --- a/lib/declarative_initialization/internal.rb +++ b/lib/declarative_initialization/internal.rb @@ -57,7 +57,10 @@ def warn_override(klass, key, block_reader:) def warn_override? return true if defined?(Rails) && Rails.respond_to?(:env) && (Rails.env.development? || Rails.env.test?) - logger.level <= Logger::DEBUG + level = logger.level + return false unless level.is_a?(Integer) + + level <= Logger::DEBUG end def override_location(klass, key) diff --git a/lib/declarative_initialization/version.rb b/lib/declarative_initialization/version.rb index 097f610..42ec0fd 100644 --- a/lib/declarative_initialization/version.rb +++ b/lib/declarative_initialization/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module DeclarativeInitialization - VERSION = "0.2.0" + VERSION = "0.2.1" end diff --git a/spec/reader_spec.rb b/spec/reader_spec.rb index 49d54ad..80a5572 100644 --- a/spec/reader_spec.rb +++ b/spec/reader_spec.rb @@ -96,6 +96,19 @@ def foo = @foo * 100 allow(DeclarativeInitialization::Internal).to receive(:warn_override?).and_return(true) end + describe "warn_override? with non-standard loggers (e.g. SemanticLogger)" do + it "does not compare symbol level with Integer (avoids ArgumentError)" do + semantic_logger = instance_double(Logger, level: :info) + allow(DeclarativeInitialization::Internal).to receive(:logger).and_return(semantic_logger) + allow(DeclarativeInitialization::Internal).to receive(:warn_override?).and_call_original + # Ensure we hit the level check (not the Rails dev/test early return) + rails_env = Struct.new(:development?, :test?).new(false, false) + stub_const("Rails", Class.new { define_singleton_method(:env) { rails_env } }) + + expect(DeclarativeInitialization::Internal.warn_override?).to eq(false) + end + end + def attr_override_warning(key, location: "on this class") "[Anonymous Class] Method ##{key} already exists #{location} -- overriding with init-arg reader" end