servus 0.6.0 → 0.7.0

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: eaa6e4a6098ddae071c236515fc72aa59fdc3707aa43bb145b14eb6830bef5dd
4
- data.tar.gz: e418da17ac2136fd8daac9a22b6fd3f2ff686fb9fc681b131eb4060e7363b1eb
3
+ metadata.gz: '0560049029e2b803e64323461fb8d5c8b56cdc1d69c5b5de83ca0e6a1858a65c'
4
+ data.tar.gz: 0d1e6a460fbbf1b5c7c26811ee8fbb5eccccf151f2c4d8d94a8270c1f1d5ef41
5
5
  SHA512:
6
- metadata.gz: 73a3a30becf0f5cc0da3829239332a8e619f4f156713b7743251b76b0213aece56c802f572f4aa9b761db4858e7266a7e11b14344bf0412d78eb34f1224f2384
7
- data.tar.gz: f091bb4cf55750907ca52c27c2aedaa0484692895bec7144368581d49f8a5741246588fc7e2b29c2d712795cffd1930656ac59b5434150180cd61b558faa3e13
6
+ metadata.gz: f59299fe30eb202c0a71858dc2c1491a29f4dd5a330e65ec471b412a1e060329bfca5c51eea2d7759fbddebbb2747fd65ccb79ecd048fc4d2dc07faba3f92420
7
+ data.tar.gz: 81f9a1277db2e3d6b4d383c29a4be4f9c4cf92ba1bac10f680e687ea6cf4438067ec4b2b19d05ccd3909962e87e7eec738721a28cf1b65f281548bec7fbcb42e
data/lib/servus/config.rb CHANGED
@@ -112,6 +112,39 @@ module Servus
112
112
  # @see Servus::Support::Lockdown
113
113
  attr_reader :lockdown_enabled
114
114
 
115
+ # Keys whose values are filtered from Servus's service-call argument
116
+ # logging, shown as `[FILTERED]`. Accepts the same notations as
117
+ # ActiveSupport::ParameterFilter (partial-match strings/symbols,
118
+ # regexps, procs).
119
+ #
120
+ # Defaults to `[]` — no filtering. Set the keys you want masked in your
121
+ # initializer; Rails users can simply reuse their app's request-log
122
+ # filtering as the value:
123
+ #
124
+ # config.log_filter_parameters = Rails.application.config.filter_parameters
125
+ #
126
+ # @return [Array] parameter filter patterns
127
+ attr_reader :log_filter_parameters
128
+
129
+ # Sets the log filter list, invalidating the memoized
130
+ # {#parameter_filter}. The list is frozen on assignment — reconfigure
131
+ # by assigning a new list, not by mutating in place.
132
+ #
133
+ # @param value [Array] parameter filter patterns
134
+ # @return [Array] the new value
135
+ def log_filter_parameters=(value)
136
+ @log_filter_parameters = Array(value).dup.freeze
137
+ @parameter_filter = nil
138
+ end
139
+
140
+ # Parameter filter built from {#log_filter_parameters}, memoized until
141
+ # the list is reassigned.
142
+ #
143
+ # @return [ActiveSupport::ParameterFilter]
144
+ def parameter_filter
145
+ @parameter_filter ||= ActiveSupport::ParameterFilter.new(log_filter_parameters)
146
+ end
147
+
115
148
  # Sets whether lockdown is enforced, immediately re-applying the
116
149
  # resulting `.new` visibility to {Servus::Base}.
117
150
  #
@@ -132,6 +165,7 @@ module Servus
132
165
  @require_service_arguments_schema = false
133
166
  @require_service_result_schema = false
134
167
  @require_event_payload_schema = false
168
+ @log_filter_parameters = [].freeze
135
169
  end
136
170
 
137
171
  def set_default_directories
@@ -17,12 +17,17 @@ module Servus
17
17
  end
18
18
  end
19
19
 
20
- # Logs a call to a service
20
+ # Logs a call to a service.
21
+ #
22
+ # When {Servus::Config#log_filter_parameters} is configured, matching
23
+ # argument values are replaced with `[FILTERED]` before logging. With
24
+ # the default empty list, arguments are logged verbatim.
21
25
  #
22
26
  # @param service_class [Class] The service class
23
27
  # @param args [Hash] The arguments passed to the service
24
28
  def self.log_call(service_class, args)
25
- logger.info("Calling #{service_class.name} with args: #{args.inspect}")
29
+ rendered = log_parameters(args)
30
+ logger.info("Calling #{service_class.name} with args: #{rendered.inspect}")
26
31
  end
27
32
 
28
33
  # Logs a result from a service
@@ -88,6 +93,18 @@ module Servus
88
93
  def self.log_exception(service_class, exception)
89
94
  logger.error("#{service_class.name} uncaught exception: #{exception.class} - #{exception.message}")
90
95
  end
96
+
97
+ # Filters parameters for logging based on the configured filter list.
98
+ #
99
+ # @param params [Hash] The parameters to filter
100
+ # @return [Hash] The filtered parameters
101
+ def self.log_parameters(params)
102
+ if Servus.config.log_filter_parameters.empty?
103
+ params
104
+ else
105
+ Servus.config.parameter_filter.filter(params)
106
+ end
107
+ end
91
108
  end
92
109
  end
93
110
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Servus
4
- VERSION = '0.6.0'
4
+ VERSION = '0.7.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: servus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sebastian Scholl
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-07-21 00:00:00.000000000 Z
11
+ date: 2026-08-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport