grape_logging 3.0.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 06aaf18280f4233ee64c9ec952860f1db9e6119ea832efc5a29d93601b73f0ce
4
- data.tar.gz: bab90314228b6b136cb6b726328bcf06753ca808c6dd49d42b548356672f5e8f
3
+ metadata.gz: 812a02e3c1b1f55003d060c5d31887be91cd73115cdb366c36c4e29c8e5507a0
4
+ data.tar.gz: 929dec60825b2aa8ec50c349506f383cd58a01d987bc8eb8b02990c225279e34
5
5
  SHA512:
6
- metadata.gz: 81ad7895d92bfdbc1a581d2d618875419c5dc5eed78172d6b4785cf4ec62b466e634eab831a28f39b799c126d430643a5bf438d14ba31bba4e93bba368790e57
7
- data.tar.gz: d917cfb3390d1b205133ee84d16b86b5b9904e3a8a16fdc05d987057a7fefb06df005a6e5b65b708c15546b973bfa8ebf64472ac9d471cc1c42b4f3dfea0d445
6
+ metadata.gz: 3043a583d5b227f2fb474a1e036ad0f27589dafa1a11d428b0e93c3441e6cc6204001bfe26dbd6f925ea2fe2a6a681ff3e6c2853979e458f19c43ece1696e0ec
7
+ data.tar.gz: 9ea303723891185798f23494e53c542c73ceee318f4fa72c073277e263e72e1f1dac885729126eda13c3aee89893488d88b4173eff877b2ff30998d77c944435
@@ -9,26 +9,26 @@ jobs:
9
9
  runs-on: ubuntu-latest
10
10
  strategy:
11
11
  matrix:
12
- ruby-version: ["3.0", "3.1", "3.2", "3.3", "3.4"]
12
+ ruby-version: ["3.0", "3.1", "3.2", "3.3", "3.4", "4.0"]
13
13
  steps:
14
14
  - name: Checkout code
15
- uses: actions/checkout@v4
15
+ uses: actions/checkout@v6
16
16
  - uses: ruby/setup-ruby@v1
17
17
  with:
18
18
  ruby-version: ${{ matrix.ruby-version }}
19
19
  bundler-cache: true
20
20
  - name: Install dependencies
21
- run: bundle install
21
+ run: bundle install --jobs 4 --retry 3
22
22
  - name: Run tests
23
23
  run: bundle exec rake spec
24
24
  lint:
25
25
  runs-on: ubuntu-latest
26
26
  steps:
27
27
  - name: Checkout code
28
- uses: actions/checkout@v4
28
+ uses: actions/checkout@v6
29
29
  - uses: ruby/setup-ruby@v1
30
30
  with:
31
- ruby-version: "3.4"
31
+ ruby-version: "4.0"
32
32
  bundler-cache: true
33
33
  - name: Install dependencies
34
34
  run: bundle install
data/.rubocop.yml CHANGED
@@ -2,9 +2,12 @@ inherit_from: .rubocop_todo.yml
2
2
 
3
3
  AllCops:
4
4
  NewCops: enable
5
+ TargetRubyVersion: 3.0
5
6
 
6
7
  Metrics/BlockLength:
7
8
  CountAsOne: [array, hash, heredoc, method_call]
9
+ Exclude:
10
+ - 'spec/**/*'
8
11
 
9
12
  Metrics/ClassLength:
10
13
  CountAsOne: [array, hash, heredoc, method_call]
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## [3.0.1] - 2026-09-11
4
+
5
+ ### Added
6
+ - [#98](https://github.com/aserafin/grape_logging/pull/98) Adapt to new Grape::Exceptions::ErrorResponse throwable for Grape 3.3.0 support - [@leoarnold](https://github.com/leoarnold).
7
+
8
+ ### Changed
9
+ - [#96](https://github.com/aserafin/grape_logging/pull/96) Move dev dependencies to Gemfile and use zeitwerk to load files - [@n-rodriguez](https://github.com/n-rodriguez).
10
+
11
+ [3.0.1]: https://github.com/aserafin/grape_logging/compare/v3.0.0...v3.0.1
12
+
3
13
  ## [3.0.0] - 2025-08-07
4
14
 
5
15
  ### Changed
data/Gemfile CHANGED
@@ -2,3 +2,10 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in grape_logging.gemspec
4
4
  gemspec
5
+
6
+ gem 'rake', '~> 13.3'
7
+ gem 'rspec', '~> 3.5'
8
+
9
+ # This is pinned to an exact version otherwise we can't know which rules
10
+ # are in play at any given time in different environments.
11
+ gem 'rubocop', '1.77.0'
data/README.md CHANGED
@@ -209,8 +209,8 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
209
209
 
210
210
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
211
211
 
212
- For maintainers releasing a new version, please see [Releasing.md](Releasing.md).
212
+ For maintainers releasing a new version, please see [RELEASING.md](RELEASING.md).
213
213
 
214
214
  ## Contributing
215
215
 
216
- See [Contributing.md](Contributing.md).
216
+ See [CONTRIBUTING.md](CONTRIBUTING.md).
@@ -22,11 +22,5 @@ Gem::Specification.new do |spec|
22
22
 
23
23
  spec.add_dependency 'grape', '>= 2.4.0'
24
24
  spec.add_dependency 'rack'
25
-
26
- spec.add_development_dependency 'rake', '~> 13.3'
27
- spec.add_development_dependency 'rspec', '~> 3.5'
28
-
29
- # This is pinned to an exact version otherwise we can't know which rules
30
- # are in play at any given time in different environments.
31
- spec.add_development_dependency 'rubocop', '1.77.0'
25
+ spec.add_dependency 'zeitwerk'
32
26
  end
@@ -1,5 +1,3 @@
1
- require 'rack/utils'
2
-
3
1
  module GrapeLogging
4
2
  module Formatters
5
3
  class Rails
@@ -16,7 +16,7 @@ module GrapeLogging
16
16
  private
17
17
 
18
18
  def parameter_filter
19
- @parameter_filter ||= ParameterFilter.new(@replacement, @filter_parameters)
19
+ @parameter_filter ||= GrapeLogging::Util::ParameterFilter.new(@replacement, @filter_parameters)
20
20
  end
21
21
 
22
22
  def safe_parameters(request)
@@ -31,7 +31,7 @@ module GrapeLogging
31
31
  def clean_parameters(parameters)
32
32
  original_encoding_map = build_encoding_map(parameters)
33
33
  params = transform_key_encoding(parameters, Hash.new { |h, _| [Encoding::ASCII_8BIT, h] })
34
- cleaned_params = parameter_filter.filter(params).reject { |key, _value| @exceptions.include?(key) }
34
+ cleaned_params = parameter_filter.filter(params).except(*@exceptions)
35
35
  transform_key_encoding(cleaned_params, original_encoding_map)
36
36
  end
37
37
 
@@ -1,5 +1,3 @@
1
- require 'grape'
2
-
3
1
  module GrapeLogging
4
2
  module Middleware
5
3
  class RequestLogger < Grape::Middleware::Base
@@ -72,7 +70,9 @@ module GrapeLogging
72
70
  # when no error occurs.
73
71
  if error
74
72
  # Call with error & response
75
- after(error[:status], error[:message])
73
+ status, message = status_and_message(error)
74
+
75
+ after(status, message)
76
76
 
77
77
  # Throw again
78
78
  throw(:error, error)
@@ -150,6 +150,17 @@ module GrapeLogging
150
150
  logger.send(method_name) if logger.respond_to?(method_name)
151
151
  end
152
152
  end
153
+
154
+ def status_and_message(error)
155
+ case Gem::Version.new(Grape::VERSION)
156
+ when Gem::Requirement.new('>= 3.3.0')
157
+ # `error` is a `Grape::Exceptions::ErrorResponse`
158
+ [error.status, error.message]
159
+ else
160
+ # `error` is a `Hash`
161
+ [error[:status], error[:message]]
162
+ end
163
+ end
153
164
  end
154
165
  end
155
166
  end
@@ -1,11 +1,13 @@
1
- module Reporters
2
- class ActiveSupportReporter
3
- def initialize(instrumentation_key)
4
- @instrumentation_key = instrumentation_key
5
- end
1
+ module GrapeLogging
2
+ module Reporters
3
+ class ActiveSupportReporter
4
+ def initialize(instrumentation_key)
5
+ @instrumentation_key = instrumentation_key
6
+ end
6
7
 
7
- def perform(params)
8
- ActiveSupport::Notifications.instrument @instrumentation_key, params
8
+ def perform(params)
9
+ ActiveSupport::Notifications.instrument @instrumentation_key, params
10
+ end
9
11
  end
10
12
  end
11
13
  end
@@ -1,13 +1,15 @@
1
- module Reporters
2
- class LoggerReporter
3
- def initialize(logger, formatter, log_level)
4
- @logger = logger.clone || Logger.new(STDOUT)
5
- @log_level = log_level || :info
6
- @logger.formatter = formatter || @logger.formatter || GrapeLogging::Formatters::Default.new if @logger.respond_to?(:formatter=)
7
- end
1
+ module GrapeLogging
2
+ module Reporters
3
+ class LoggerReporter
4
+ def initialize(logger, formatter, log_level)
5
+ @logger = logger.clone || Logger.new(STDOUT)
6
+ @log_level = log_level || :info
7
+ @logger.formatter = formatter || @logger.formatter || GrapeLogging::Formatters::Default.new if @logger.respond_to?(:formatter=)
8
+ end
8
9
 
9
- def perform(params)
10
- @logger.send(@log_level, params)
10
+ def perform(params)
11
+ @logger.send(@log_level, params)
12
+ end
11
13
  end
12
14
  end
13
15
  end
@@ -1,101 +1,105 @@
1
- if defined?(Rails.application)
2
- if Gem::Version.new(Rails.version) < Gem::Version.new('6.0.0')
3
- class ParameterFilter < ActionDispatch::Http::ParameterFilter
4
- def initialize(_replacement, filter_parameters)
5
- super(filter_parameters)
6
- end
7
- end
8
- else
9
- require 'active_support/parameter_filter'
1
+ module GrapeLogging
2
+ module Util
3
+ if defined?(Rails.application)
4
+ if Gem::Version.new(Rails.version) < Gem::Version.new('6.0.0')
5
+ class ParameterFilter < ActionDispatch::Http::ParameterFilter
6
+ def initialize(_replacement, filter_parameters)
7
+ super(filter_parameters)
8
+ end
9
+ end
10
+ else
11
+ require 'active_support/parameter_filter'
10
12
 
11
- class ParameterFilter < ActiveSupport::ParameterFilter
12
- def initialize(_replacement, filter_parameters)
13
- super(filter_parameters)
13
+ class ParameterFilter < ActiveSupport::ParameterFilter
14
+ def initialize(_replacement, filter_parameters)
15
+ super(filter_parameters)
16
+ end
17
+ end
14
18
  end
15
- end
16
- end
17
- else
18
- #
19
- # lifted from https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/parameter_filter.rb
20
- # we could depend on Rails specifically, but that would us way to hefty!
21
- #
22
- class ParameterFilter
23
- def initialize(replacement, filters = [])
24
- @replacement = replacement
25
- @filters = filters
26
- end
27
-
28
- def filter(params)
29
- compiled_filter.call(params)
30
- end
19
+ else
20
+ #
21
+ # lifted from https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/parameter_filter.rb
22
+ # we could depend on Rails specifically, but that would us way to hefty!
23
+ #
24
+ class ParameterFilter
25
+ def initialize(replacement, filters = [])
26
+ @replacement = replacement
27
+ @filters = filters
28
+ end
31
29
 
32
- private
30
+ def filter(params)
31
+ compiled_filter.call(params)
32
+ end
33
33
 
34
- def compiled_filter
35
- @compiled_filter ||= CompiledFilter.compile(@replacement, @filters)
36
- end
34
+ private
37
35
 
38
- class CompiledFilter # :nodoc:
39
- def self.compile(replacement, filters)
40
- return ->(params) { params.dup } if filters.empty?
41
-
42
- strings = []
43
- regexps = []
44
- blocks = []
45
-
46
- filters.each do |item|
47
- case item
48
- when Proc
49
- blocks << item
50
- when Regexp
51
- regexps << item
52
- else
53
- strings << Regexp.escape(item.to_s)
54
- end
36
+ def compiled_filter
37
+ @compiled_filter ||= CompiledFilter.compile(@replacement, @filters)
55
38
  end
56
39
 
57
- deep_regexps, regexps = regexps.partition { |r| r.to_s.include?('\\.'.freeze) }
58
- deep_strings, strings = strings.partition { |s| s.include?('\\.'.freeze) }
40
+ class CompiledFilter # :nodoc:
41
+ def self.compile(replacement, filters)
42
+ return ->(params) { params.dup } if filters.empty?
59
43
 
60
- regexps << Regexp.new(strings.join('|'.freeze), true) unless strings.empty?
61
- deep_regexps << Regexp.new(deep_strings.join('|'.freeze), true) unless deep_strings.empty?
44
+ strings = []
45
+ regexps = []
46
+ blocks = []
62
47
 
63
- new replacement, regexps, deep_regexps, blocks
64
- end
48
+ filters.each do |item|
49
+ case item
50
+ when Proc
51
+ blocks << item
52
+ when Regexp
53
+ regexps << item
54
+ else
55
+ strings << Regexp.escape(item.to_s)
56
+ end
57
+ end
65
58
 
66
- attr_reader :regexps, :deep_regexps, :blocks
59
+ deep_regexps, regexps = regexps.partition { |r| r.to_s.include?('\\.'.freeze) }
60
+ deep_strings, strings = strings.partition { |s| s.include?('\\.'.freeze) }
67
61
 
68
- def initialize(replacement, regexps, deep_regexps, blocks)
69
- @replacement = replacement
70
- @regexps = regexps
71
- @deep_regexps = deep_regexps.any? ? deep_regexps : nil
72
- @blocks = blocks
73
- end
62
+ regexps << Regexp.new(strings.join('|'.freeze), true) unless strings.empty?
63
+ deep_regexps << Regexp.new(deep_strings.join('|'.freeze), true) unless deep_strings.empty?
74
64
 
75
- def call(original_params, parents = [])
76
- filtered_params = {}
77
-
78
- original_params.each do |key, value|
79
- parents.push(key) if deep_regexps
80
- if regexps.any? { |r| key =~ r }
81
- value = @replacement
82
- elsif deep_regexps && (joined = parents.join('.')) && deep_regexps.any? { |r| joined =~ r }
83
- value = @replacement
84
- elsif value.is_a?(Hash)
85
- value = call(value, parents)
86
- elsif value.is_a?(Array)
87
- value = value.map { |v| v.is_a?(Hash) ? call(v, parents) : v }
88
- elsif blocks.any?
89
- key = key.dup if key.duplicable?
90
- value = value.dup if value.duplicable?
91
- blocks.each { |b| b.call(key, value) }
65
+ new replacement, regexps, deep_regexps, blocks
92
66
  end
93
- parents.pop if deep_regexps
94
67
 
95
- filtered_params[key] = value
96
- end
68
+ attr_reader :regexps, :deep_regexps, :blocks
69
+
70
+ def initialize(replacement, regexps, deep_regexps, blocks)
71
+ @replacement = replacement
72
+ @regexps = regexps
73
+ @deep_regexps = deep_regexps.any? ? deep_regexps : nil
74
+ @blocks = blocks
75
+ end
97
76
 
98
- filtered_params
77
+ def call(original_params, parents = [])
78
+ filtered_params = {}
79
+
80
+ original_params.each do |key, value|
81
+ parents.push(key) if deep_regexps
82
+ if regexps.any? { |r| key =~ r }
83
+ value = @replacement
84
+ elsif deep_regexps && (joined = parents.join('.')) && deep_regexps.any? { |r| joined =~ r }
85
+ value = @replacement
86
+ elsif value.is_a?(Hash)
87
+ value = call(value, parents)
88
+ elsif value.is_a?(Array)
89
+ value = value.map { |v| v.is_a?(Hash) ? call(v, parents) : v }
90
+ elsif blocks.any?
91
+ key = key.dup if key.duplicable?
92
+ value = value.dup if value.duplicable?
93
+ blocks.each { |b| b.call(key, value) }
94
+ end
95
+ parents.pop if deep_regexps
96
+
97
+ filtered_params[key] = value
98
+ end
99
+
100
+ filtered_params
101
+ end
102
+ end
99
103
  end
100
104
  end
101
105
  end
@@ -1,3 +1,3 @@
1
1
  module GrapeLogging
2
- VERSION = '3.0.0'
2
+ VERSION = '3.0.1'
3
3
  end
data/lib/grape_logging.rb CHANGED
@@ -1,17 +1,12 @@
1
- require 'grape_logging/multi_io'
2
- require 'grape_logging/version'
3
- require 'grape_logging/formatters/default'
4
- require 'grape_logging/formatters/json'
5
- require 'grape_logging/formatters/lograge'
6
- require 'grape_logging/formatters/logstash'
7
- require 'grape_logging/formatters/rails'
8
- require 'grape_logging/loggers/base'
9
- require 'grape_logging/loggers/response'
10
- require 'grape_logging/loggers/filter_parameters'
11
- require 'grape_logging/loggers/client_env'
12
- require 'grape_logging/loggers/request_headers'
13
- require 'grape_logging/reporters/active_support_reporter'
14
- require 'grape_logging/reporters/logger_reporter'
15
- require 'grape_logging/timings'
16
- require 'grape_logging/middleware/request_logger'
17
- require 'grape_logging/util/parameter_filter'
1
+ require 'grape'
2
+ require 'rack/utils'
3
+ require 'zeitwerk'
4
+
5
+ # load zeitwerk
6
+ Zeitwerk::Loader.for_gem.tap do |loader|
7
+ loader.inflector.inflect 'multi_io' => 'MultiIO'
8
+ loader.setup
9
+ end
10
+
11
+ module GrapeLogging
12
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape_logging
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - aserafin
@@ -39,47 +39,19 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rake
42
+ name: zeitwerk
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '13.3'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '13.3'
55
- - !ruby/object:Gem::Dependency
56
- name: rspec
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '3.5'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '3.5'
69
- - !ruby/object:Gem::Dependency
70
- name: rubocop
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - '='
45
+ - - ">="
74
46
  - !ruby/object:Gem::Version
75
- version: 1.77.0
76
- type: :development
47
+ version: '0'
48
+ type: :runtime
77
49
  prerelease: false
78
50
  version_requirements: !ruby/object:Gem::Requirement
79
51
  requirements:
80
- - - '='
52
+ - - ">="
81
53
  - !ruby/object:Gem::Version
82
- version: 1.77.0
54
+ version: '0'
83
55
  description: This gem provides simple request logging for Grape with just few lines
84
56
  of code you have to put in your project! In return you will get response codes,
85
57
  paths, parameters and more!
@@ -140,7 +112,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
112
  - !ruby/object:Gem::Version
141
113
  version: '0'
142
114
  requirements: []
143
- rubygems_version: 3.6.7
115
+ rubygems_version: 3.6.9
144
116
  specification_version: 4
145
117
  summary: Out of the box request logging for Grape!
146
118
  test_files: []