From df56d571b7a0406751766deaf8f413eb5866d432 Mon Sep 17 00:00:00 2001 From: Nicolas Rodriguez Date: Mon, 2 Mar 2026 03:32:41 +0100 Subject: [PATCH] Use zeitwerk to load gem --- grape_logging.gemspec | 1 + lib/grape_logging.rb | 29 ++- lib/grape_logging/formatters/rails.rb | 2 - .../loggers/filter_parameters.rb | 2 +- .../middleware/request_logger.rb | 2 - .../reporters/active_support_reporter.rb | 16 +- .../reporters/logger_reporter.rb | 20 +- lib/grape_logging/util/parameter_filter.rb | 188 +++++++++--------- 8 files changed, 130 insertions(+), 130 deletions(-) diff --git a/grape_logging.gemspec b/grape_logging.gemspec index cc37233..cf66d5e 100644 --- a/grape_logging.gemspec +++ b/grape_logging.gemspec @@ -22,4 +22,5 @@ Gem::Specification.new do |spec| spec.add_dependency 'grape', '>= 2.4.0' spec.add_dependency 'rack' + spec.add_dependency 'zeitwerk' end diff --git a/lib/grape_logging.rb b/lib/grape_logging.rb index aa0c457..1770788 100644 --- a/lib/grape_logging.rb +++ b/lib/grape_logging.rb @@ -1,17 +1,12 @@ -require 'grape_logging/multi_io' -require 'grape_logging/version' -require 'grape_logging/formatters/default' -require 'grape_logging/formatters/json' -require 'grape_logging/formatters/lograge' -require 'grape_logging/formatters/logstash' -require 'grape_logging/formatters/rails' -require 'grape_logging/loggers/base' -require 'grape_logging/loggers/response' -require 'grape_logging/loggers/filter_parameters' -require 'grape_logging/loggers/client_env' -require 'grape_logging/loggers/request_headers' -require 'grape_logging/reporters/active_support_reporter' -require 'grape_logging/reporters/logger_reporter' -require 'grape_logging/timings' -require 'grape_logging/middleware/request_logger' -require 'grape_logging/util/parameter_filter' +require 'grape' +require 'rack/utils' +require 'zeitwerk' + +# load zeitwerk +Zeitwerk::Loader.for_gem.tap do |loader| + loader.inflector.inflect 'multi_io' => 'MultiIO' + loader.setup +end + +module GrapeLogging +end diff --git a/lib/grape_logging/formatters/rails.rb b/lib/grape_logging/formatters/rails.rb index fdcaab8..2305feb 100644 --- a/lib/grape_logging/formatters/rails.rb +++ b/lib/grape_logging/formatters/rails.rb @@ -1,5 +1,3 @@ -require 'rack/utils' - module GrapeLogging module Formatters class Rails diff --git a/lib/grape_logging/loggers/filter_parameters.rb b/lib/grape_logging/loggers/filter_parameters.rb index c5f0870..cfa6860 100644 --- a/lib/grape_logging/loggers/filter_parameters.rb +++ b/lib/grape_logging/loggers/filter_parameters.rb @@ -16,7 +16,7 @@ module GrapeLogging private def parameter_filter - @parameter_filter ||= ParameterFilter.new(@replacement, @filter_parameters) + @parameter_filter ||= GrapeLogging::Util::ParameterFilter.new(@replacement, @filter_parameters) end def safe_parameters(request) diff --git a/lib/grape_logging/middleware/request_logger.rb b/lib/grape_logging/middleware/request_logger.rb index 9c8a351..7d61b91 100644 --- a/lib/grape_logging/middleware/request_logger.rb +++ b/lib/grape_logging/middleware/request_logger.rb @@ -1,5 +1,3 @@ -require 'grape' - module GrapeLogging module Middleware class RequestLogger < Grape::Middleware::Base diff --git a/lib/grape_logging/reporters/active_support_reporter.rb b/lib/grape_logging/reporters/active_support_reporter.rb index e48ce3e..cd548b0 100644 --- a/lib/grape_logging/reporters/active_support_reporter.rb +++ b/lib/grape_logging/reporters/active_support_reporter.rb @@ -1,11 +1,13 @@ -module Reporters - class ActiveSupportReporter - def initialize(instrumentation_key) - @instrumentation_key = instrumentation_key - end +module GrapeLogging + module Reporters + class ActiveSupportReporter + def initialize(instrumentation_key) + @instrumentation_key = instrumentation_key + end - def perform(params) - ActiveSupport::Notifications.instrument @instrumentation_key, params + def perform(params) + ActiveSupport::Notifications.instrument @instrumentation_key, params + end end end end diff --git a/lib/grape_logging/reporters/logger_reporter.rb b/lib/grape_logging/reporters/logger_reporter.rb index 422aa92..97da2c2 100644 --- a/lib/grape_logging/reporters/logger_reporter.rb +++ b/lib/grape_logging/reporters/logger_reporter.rb @@ -1,13 +1,15 @@ -module Reporters - class LoggerReporter - def initialize(logger, formatter, log_level) - @logger = logger.clone || Logger.new(STDOUT) - @log_level = log_level || :info - @logger.formatter = formatter || @logger.formatter || GrapeLogging::Formatters::Default.new if @logger.respond_to?(:formatter=) - end +module GrapeLogging + module Reporters + class LoggerReporter + def initialize(logger, formatter, log_level) + @logger = logger.clone || Logger.new(STDOUT) + @log_level = log_level || :info + @logger.formatter = formatter || @logger.formatter || GrapeLogging::Formatters::Default.new if @logger.respond_to?(:formatter=) + end - def perform(params) - @logger.send(@log_level, params) + def perform(params) + @logger.send(@log_level, params) + end end end end diff --git a/lib/grape_logging/util/parameter_filter.rb b/lib/grape_logging/util/parameter_filter.rb index 9d009ee..6dbea7a 100644 --- a/lib/grape_logging/util/parameter_filter.rb +++ b/lib/grape_logging/util/parameter_filter.rb @@ -1,101 +1,105 @@ -if defined?(Rails.application) - if Gem::Version.new(Rails.version) < Gem::Version.new('6.0.0') - class ParameterFilter < ActionDispatch::Http::ParameterFilter - def initialize(_replacement, filter_parameters) - super(filter_parameters) - end - end - else - require 'active_support/parameter_filter' - - class ParameterFilter < ActiveSupport::ParameterFilter - def initialize(_replacement, filter_parameters) - super(filter_parameters) - end - end - end -else - # - # lifted from https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/parameter_filter.rb - # we could depend on Rails specifically, but that would us way to hefty! - # - class ParameterFilter - def initialize(replacement, filters = []) - @replacement = replacement - @filters = filters - end - - def filter(params) - compiled_filter.call(params) - end - - private - - def compiled_filter - @compiled_filter ||= CompiledFilter.compile(@replacement, @filters) - end - - class CompiledFilter # :nodoc: - def self.compile(replacement, filters) - return ->(params) { params.dup } if filters.empty? - - strings = [] - regexps = [] - blocks = [] - - filters.each do |item| - case item - when Proc - blocks << item - when Regexp - regexps << item - else - strings << Regexp.escape(item.to_s) +module GrapeLogging + module Util + if defined?(Rails.application) + if Gem::Version.new(Rails.version) < Gem::Version.new('6.0.0') + class ParameterFilter < ActionDispatch::Http::ParameterFilter + def initialize(_replacement, filter_parameters) + super(filter_parameters) end end + else + require 'active_support/parameter_filter' - deep_regexps, regexps = regexps.partition { |r| r.to_s.include?('\\.'.freeze) } - deep_strings, strings = strings.partition { |s| s.include?('\\.'.freeze) } - - regexps << Regexp.new(strings.join('|'.freeze), true) unless strings.empty? - deep_regexps << Regexp.new(deep_strings.join('|'.freeze), true) unless deep_strings.empty? - - new replacement, regexps, deep_regexps, blocks - end - - attr_reader :regexps, :deep_regexps, :blocks - - def initialize(replacement, regexps, deep_regexps, blocks) - @replacement = replacement - @regexps = regexps - @deep_regexps = deep_regexps.any? ? deep_regexps : nil - @blocks = blocks - end - - def call(original_params, parents = []) - filtered_params = {} - - original_params.each do |key, value| - parents.push(key) if deep_regexps - if regexps.any? { |r| key =~ r } - value = @replacement - elsif deep_regexps && (joined = parents.join('.')) && deep_regexps.any? { |r| joined =~ r } - value = @replacement - elsif value.is_a?(Hash) - value = call(value, parents) - elsif value.is_a?(Array) - value = value.map { |v| v.is_a?(Hash) ? call(v, parents) : v } - elsif blocks.any? - key = key.dup if key.duplicable? - value = value.dup if value.duplicable? - blocks.each { |b| b.call(key, value) } + class ParameterFilter < ActiveSupport::ParameterFilter + def initialize(_replacement, filter_parameters) + super(filter_parameters) end - parents.pop if deep_regexps - - filtered_params[key] = value + end + end + else + # + # lifted from https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/parameter_filter.rb + # we could depend on Rails specifically, but that would us way to hefty! + # + class ParameterFilter + def initialize(replacement, filters = []) + @replacement = replacement + @filters = filters end - filtered_params + def filter(params) + compiled_filter.call(params) + end + + private + + def compiled_filter + @compiled_filter ||= CompiledFilter.compile(@replacement, @filters) + end + + class CompiledFilter # :nodoc: + def self.compile(replacement, filters) + return ->(params) { params.dup } if filters.empty? + + strings = [] + regexps = [] + blocks = [] + + filters.each do |item| + case item + when Proc + blocks << item + when Regexp + regexps << item + else + strings << Regexp.escape(item.to_s) + end + end + + deep_regexps, regexps = regexps.partition { |r| r.to_s.include?('\\.'.freeze) } + deep_strings, strings = strings.partition { |s| s.include?('\\.'.freeze) } + + regexps << Regexp.new(strings.join('|'.freeze), true) unless strings.empty? + deep_regexps << Regexp.new(deep_strings.join('|'.freeze), true) unless deep_strings.empty? + + new replacement, regexps, deep_regexps, blocks + end + + attr_reader :regexps, :deep_regexps, :blocks + + def initialize(replacement, regexps, deep_regexps, blocks) + @replacement = replacement + @regexps = regexps + @deep_regexps = deep_regexps.any? ? deep_regexps : nil + @blocks = blocks + end + + def call(original_params, parents = []) + filtered_params = {} + + original_params.each do |key, value| + parents.push(key) if deep_regexps + if regexps.any? { |r| key =~ r } + value = @replacement + elsif deep_regexps && (joined = parents.join('.')) && deep_regexps.any? { |r| joined =~ r } + value = @replacement + elsif value.is_a?(Hash) + value = call(value, parents) + elsif value.is_a?(Array) + value = value.map { |v| v.is_a?(Hash) ? call(v, parents) : v } + elsif blocks.any? + key = key.dup if key.duplicable? + value = value.dup if value.duplicable? + blocks.each { |b| b.call(key, value) } + end + parents.pop if deep_regexps + + filtered_params[key] = value + end + + filtered_params + end + end end end end