From 7e15b97cb4565da9fa561c41303f0ac57ef28b66 Mon Sep 17 00:00:00 2001 From: Sami Samhuri Date: Wed, 9 Jul 2025 18:11:05 -0700 Subject: [PATCH] Handle symbol param keys during filtering In testing these keys can be symbols, so when we're working with encodings make sure we have strings before trying to force any encodings on keys. --- lib/grape_logging/loggers/filter_parameters.rb | 8 +++++--- .../grape_logging/loggers/filter_parameters_spec.rb | 10 ++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/grape_logging/loggers/filter_parameters.rb b/lib/grape_logging/loggers/filter_parameters.rb index e3f0dd9..3a7534a 100644 --- a/lib/grape_logging/loggers/filter_parameters.rb +++ b/lib/grape_logging/loggers/filter_parameters.rb @@ -37,14 +37,16 @@ module GrapeLogging def build_encoding_map(parameters) parameters.each_with_object({}) do |(k, v), h| - h[k.dup.force_encoding(Encoding::ASCII_8BIT)] = [k.encoding, v.is_a?(Hash) ? build_encoding_map(v) : nil] + key_str = k.to_s + h[key_str.dup.force_encoding(Encoding::ASCII_8BIT)] = [key_str.encoding, v.is_a?(Hash) ? build_encoding_map(v) : nil] end end def transform_key_encoding(parameters, encoding_map) parameters.each_with_object({}) do |(k, v), h| - encoding, children_encoding_map = encoding_map[k] - h[k.dup.force_encoding(encoding)] = v.is_a?(Hash) ? transform_key_encoding(v, children_encoding_map) : v + key_str = k.to_s + encoding, children_encoding_map = encoding_map[key_str] + h[key_str.dup.force_encoding(encoding)] = v.is_a?(Hash) ? transform_key_encoding(v, children_encoding_map) : v end end end diff --git a/spec/lib/grape_logging/loggers/filter_parameters_spec.rb b/spec/lib/grape_logging/loggers/filter_parameters_spec.rb index 8b0a031..fb7ad45 100644 --- a/spec/lib/grape_logging/loggers/filter_parameters_spec.rb +++ b/spec/lib/grape_logging/loggers/filter_parameters_spec.rb @@ -78,4 +78,14 @@ describe GrapeLogging::Loggers::FilterParameters do let(:replacement) { 'CUSTOM_REPLACEMENT' } it_behaves_like 'filtering' end + + context 'with symbol keys, which occur during automated testing' do + let(:mock_request) { OpenStruct.new(params: { sneaky_symbol: 'hey!' }) } + + it 'converts keys to strings' do + expect(subject.parameters(mock_request, nil)).to eq(params: { + 'sneaky_symbol' => 'hey!', + }) + end + end end