Remove OpenStruct

This commit is contained in:
Leo Arnold 2025-12-10 11:35:03 +01:00
parent d97750a318
commit a8290d3522
6 changed files with 37 additions and 41 deletions

View file

@ -2,6 +2,7 @@ inherit_from: .rubocop_todo.yml
AllCops: AllCops:
NewCops: enable NewCops: enable
TargetRubyVersion: 3.0
Metrics/BlockLength: Metrics/BlockLength:
CountAsOne: [array, hash, heredoc, method_call] CountAsOne: [array, hash, heredoc, method_call]

View file

@ -31,7 +31,7 @@ module GrapeLogging
def clean_parameters(parameters) def clean_parameters(parameters)
original_encoding_map = build_encoding_map(parameters) original_encoding_map = build_encoding_map(parameters)
params = transform_key_encoding(parameters, Hash.new { |h, _| [Encoding::ASCII_8BIT, h] }) params = transform_key_encoding(parameters, Hash.new { |h, _| [Encoding::ASCII_8BIT, h] })
cleaned_params = parameter_filter.filter(params).reject { |key, _value| @exceptions.include?(key) } cleaned_params = parameter_filter.filter(params).except(*@exceptions)
transform_key_encoding(cleaned_params, original_encoding_map) transform_key_encoding(cleaned_params, original_encoding_map)
end end

View file

@ -1,5 +1,4 @@
require 'spec_helper' require 'spec_helper'
require 'ostruct'
describe GrapeLogging::Loggers::ClientEnv do describe GrapeLogging::Loggers::ClientEnv do
let(:ip) { '10.0.0.1' } let(:ip) { '10.0.0.1' }
@ -9,9 +8,9 @@ describe GrapeLogging::Loggers::ClientEnv do
context 'forwarded for' do context 'forwarded for' do
let(:mock_request) do let(:mock_request) do
OpenStruct.new(env: { instance_double(Rack::Request, env: {
'HTTP_X_FORWARDED_FOR' => forwarded_for 'HTTP_X_FORWARDED_FOR' => forwarded_for
}) })
end end
it 'sets the ip key' do it 'sets the ip key' do
@ -26,9 +25,9 @@ describe GrapeLogging::Loggers::ClientEnv do
context 'remote address' do context 'remote address' do
let(:mock_request) do let(:mock_request) do
OpenStruct.new(env: { instance_double(Rack::Request, env: {
'REMOTE_ADDR' => remote_addr 'REMOTE_ADDR' => remote_addr
}) })
end end
it 'sets the ip key' do it 'sets the ip key' do
@ -38,9 +37,9 @@ describe GrapeLogging::Loggers::ClientEnv do
context 'user agent' do context 'user agent' do
let(:mock_request) do let(:mock_request) do
OpenStruct.new(env: { instance_double(Rack::Request, env: {
'HTTP_USER_AGENT' => user_agent 'HTTP_USER_AGENT' => user_agent
}) })
end end
it 'sets the ua key' do it 'sets the ua key' do

View file

@ -1,29 +1,27 @@
require 'spec_helper' require 'spec_helper'
require 'ostruct'
describe GrapeLogging::Loggers::FilterParameters do describe GrapeLogging::Loggers::FilterParameters do
let(:filtered_parameters) { %w[one four] } let(:filtered_parameters) { %w[one four] }
let(:mock_request) do let(:mock_request) do
OpenStruct.new(params: { instance_double(Rack::Request, params: {
'this_one' => 'this one', 'this_one' => 'this one',
'that_one' => 'one', 'that_one' => 'one',
'two' => 'two', 'two' => 'two',
'three' => 'three', 'three' => 'three',
'four' => 'four', 'four' => 'four',
"\xff" => 'invalid utf8' "\xff" => 'invalid utf8'
}) })
end end
let(:mock_request_with_deep_nesting) do let(:mock_request_with_deep_nesting) do
deep_clone = -> { Marshal.load Marshal.dump mock_request.params } deep_clone = -> { Marshal.load Marshal.dump mock_request.params }
OpenStruct.new( instance_double(Rack::Request,
params: deep_clone.call.merge( params: deep_clone.call.merge(
'five' => deep_clone.call.merge( 'five' => deep_clone.call.merge(
deep_clone.call.merge({ 'six' => { 'seven' => 'seven', 'eight' => 'eight', 'one' => 'another one' } }) deep_clone.call.merge({ 'six' => { 'seven' => 'seven', 'eight' => 'eight', 'one' => 'another one' } })
) )
) ))
)
end end
let(:subject) do let(:subject) do
@ -79,7 +77,7 @@ describe GrapeLogging::Loggers::FilterParameters do
end end
context 'with symbol keys, which occur during automated testing' do context 'with symbol keys, which occur during automated testing' do
let(:mock_request) { OpenStruct.new(params: { sneaky_symbol: 'hey!' }) } let(:mock_request) { instance_double(Rack::Request, params: { sneaky_symbol: 'hey!' }) }
it 'converts keys to strings' do it 'converts keys to strings' do
expect(subject.parameters(mock_request, nil)).to eq(params: { expect(subject.parameters(mock_request, nil)).to eq(params: {

View file

@ -1,23 +1,22 @@
require 'spec_helper' require 'spec_helper'
require 'ostruct'
describe GrapeLogging::Loggers::RequestHeaders do describe GrapeLogging::Loggers::RequestHeaders do
let(:mock_request) do let(:mock_request) do
OpenStruct.new(env: { HTTP_REFERER: 'http://example.com', HTTP_ACCEPT: 'text/plain' }) instance_double(Rack::Request, env: { HTTP_REFERER: 'http://example.com', HTTP_ACCEPT: 'text/plain' })
end end
let(:mock_request_with_unhandled_headers) do let(:mock_request_with_unhandled_headers) do
OpenStruct.new(env: { instance_double(Rack::Request, env: {
HTTP_REFERER: 'http://example.com', HTTP_REFERER: 'http://example.com',
'PATH_INFO' => '/api/v1/users' 'PATH_INFO' => '/api/v1/users'
}) })
end end
let(:mock_request_with_long_headers) do let(:mock_request_with_long_headers) do
OpenStruct.new(env: { instance_double(Rack::Request, env: {
HTTP_REFERER: 'http://example.com', HTTP_REFERER: 'http://example.com',
HTTP_USER_AGENT: 'Mozilla/5.0' HTTP_USER_AGENT: 'Mozilla/5.0'
}) })
end end
it 'strips HTTP_ from the parameter' do it 'strips HTTP_ from the parameter' do

View file

@ -1,10 +1,9 @@
require 'spec_helper' require 'spec_helper'
require 'ostruct'
describe GrapeLogging::Loggers::Response do describe GrapeLogging::Loggers::Response do
context 'with a parseable JSON body' do context 'with a parseable JSON body' do
let(:response) do let(:response) do
OpenStruct.new(body: [{ one: 'two', three: { four: 5 } }]) instance_double(Rack::Request, body: [{ one: 'two', three: { four: 5 } }])
end end
it 'returns an array of parsed JSON objects' do it 'returns an array of parsed JSON objects' do
@ -14,7 +13,7 @@ describe GrapeLogging::Loggers::Response do
context 'with a body that is not parseable JSON' do context 'with a body that is not parseable JSON' do
let(:response) do let(:response) do
OpenStruct.new(body: 'this is a body') instance_double(Rack::Request, body: 'this is a body')
end end
it 'just returns the body' do it 'just returns the body' do