validation_errors 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4fed7190ae44232b3441ccaa634450ceefa80ac74dd5615c6b0b58147fc3990d
4
- data.tar.gz: 3fc056004f5e810c75489c009df26d2bd42f3804d163b3c2bcd2ab85665a50e4
3
+ metadata.gz: a477abd871a7de8b45962e84d301fa87507f75f91c63e722668c3151fa808358
4
+ data.tar.gz: 9546453a776ce4579cf4c32cf23fefe42cea5282331c30dc3460961a266401a6
5
5
  SHA512:
6
- metadata.gz: f2fd1b962e6f1dca4fa2cdb6dc672bc45823d1e79e20a1ccbe44f5dc562207e7871c1f5637acfb8698af7c54caad3be70de5b80f44d5bdab501d76825522d11c
7
- data.tar.gz: 15191622d27d105d9872cd266b9610e6c8e6db98c650aefb0efcd0ef9d833ec1f6ebe00fc7ef101443abac6c959bd099dcc6cc426a0434505bb3653ce6f53d02
6
+ metadata.gz: 5b248a94703c3bd0145794e06776baee1723664201b255fb47251fb8e41528c8c938f315bd48b07e23cb1d298929c3229b6dc8b1257dfc9782764fd1e2e22162
7
+ data.tar.gz: 64ae712dbac662fcb2458e5096e7c03ba668126cacd9a8257eb6acbd2c2afa1b90b9d9a5683b2744be6dfe2a3451cb836d9718e077f10168415502a0137cd216
data/CHANGELOG.md CHANGED
@@ -1,11 +1,12 @@
1
- ## Unreleased
1
+ ## [0.3.0] - 2024-11-05
2
2
 
3
- - ...
3
+ - Fix persistance in case of rolled back transactions.
4
+ - Filter `Rails.application.config.filter_parameters` by default. Does not support procs.
4
5
 
5
6
  ## [0.2.0] - 2022-12-29
6
7
 
7
- - Allow to use a custom action name when tracking errors
8
+ - Allow to use a custom action name when tracking errors.
8
9
 
9
10
  ## [0.1.0] - 2022-09-19
10
11
 
11
- - Initial release
12
+ - Initial release.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- validation_errors (0.2.0)
4
+ validation_errors (0.3.0)
5
5
  activerecord (>= 4.1.0)
6
6
  zeitwerk (>= 2.0.0)
7
7
 
@@ -46,6 +46,7 @@ GEM
46
46
  rubocop-ast (>= 0.4.0)
47
47
  ruby-progressbar (1.11.0)
48
48
  sqlite3 (1.5.0-arm64-darwin)
49
+ sqlite3 (1.5.0-x86_64-linux)
49
50
  standard (0.13.0)
50
51
  rubocop (= 1.10.0)
51
52
  rubocop-performance (= 1.9.2)
@@ -56,6 +57,7 @@ GEM
56
57
 
57
58
  PLATFORMS
58
59
  arm64-darwin-21
60
+ x86_64-linux
59
61
 
60
62
  DEPENDENCIES
61
63
  minitest (~> 5.0)
@@ -65,4 +67,4 @@ DEPENDENCIES
65
67
  validation_errors!
66
68
 
67
69
  BUNDLED WITH
68
- 2.3.21
70
+ 2.5.18
data/README.md CHANGED
@@ -184,6 +184,34 @@ group by 1, 2
184
184
  FlatValidationError.group(:invalid_model_name, :error_column).count
185
185
  ```
186
186
 
187
+ ## RailsAdmin integration
188
+
189
+ We provide here some code samples to integrate the models in [RailsAdmin](https://github.com/sferik/rails_admin).
190
+
191
+ This configuration will give you a basic configuration to work with the validation errors efficiently.
192
+ ```ruby
193
+ config.model "ValidationError" do
194
+ list do
195
+ include_fields :invalid_model_name, :invalid_model_id, :action, :created_at
196
+
197
+ field :details, :string do
198
+ visible false
199
+ searchable true
200
+ filterable true
201
+ end
202
+ end
203
+
204
+ show do
205
+ include_fields :invalid_model_name, :invalid_model_id, :action
206
+
207
+ field(:created_at)
208
+ field(:details) do
209
+ formatted_value { "<pre>#{JSON.pretty_generate(bindings[:object].details)}</pre>".html_safe }
210
+ end
211
+ end
212
+ end
213
+ ```
214
+
187
215
  ## Development
188
216
 
189
217
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests.
@@ -2,9 +2,37 @@
2
2
 
3
3
  class ValidationError < ActiveRecord::Base
4
4
  def self.track(invalid_model, action: invalid_model.persisted? ? "update" : "create")
5
+ details = filter_sensible_information(invalid_model.errors.details)
5
6
  create!(invalid_model_name: invalid_model.class.name,
6
7
  invalid_model_id: invalid_model.id,
7
- details: invalid_model.errors.details,
8
+ details: details,
8
9
  action: action)
9
10
  end
11
+
12
+ def self.filter_sensible_information(details)
13
+ filter_parameters = if defined?(Rails) && Rails.respond_to?(:application)
14
+ Rails.application.config.filter_parameters
15
+ else
16
+ []
17
+ end
18
+ filtered_details = details.dup
19
+ filtered_details.each do |column_name, errors|
20
+ filter_parameters.each do |filter|
21
+ must_filter = case filter
22
+ when Regexp
23
+ filter.match?(column_name)
24
+ when String, Symbol
25
+ filter.to_s == column_name.to_s
26
+ end
27
+ if must_filter
28
+ errors.each do |error|
29
+ if error[:value].present?
30
+ error[:value] = "***"
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ filtered_details
37
+ end
10
38
  end
@@ -22,18 +22,31 @@ module ValidationErrors
22
22
  end
23
23
 
24
24
  module InstanceMethods
25
- def save(**options)
25
+ def update(attributes)
26
26
  super.tap do |result|
27
27
  ValidationError.track(self) unless result
28
28
  end
29
29
  end
30
30
 
31
+ def update!(attributes)
32
+ super
33
+ rescue ActiveRecord::RecordInvalid
34
+ ValidationError.track(self)
35
+ raise
36
+ end
37
+
38
+ def save(**options)
39
+ super.tap do |result|
40
+ ValidationError.track(self) unless result || persisted?
41
+ end
42
+ end
43
+
31
44
  # Attempts to save the record just like {ActiveRecord::Base#save}[rdoc-ref:Base#save] but
32
45
  # will raise an ActiveRecord::RecordInvalid exception instead of returning +false+ if the record is not valid.
33
46
  def save!(**options)
34
47
  super
35
48
  rescue ActiveRecord::RecordInvalid
36
- ValidationError.track(self)
49
+ ValidationError.track(self) unless persisted?
37
50
  raise
38
51
  end
39
52
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: validation_errors
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alessandro Rodi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-12-29 00:00:00.000000000 Z
11
+ date: 2024-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -144,7 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
144
144
  - !ruby/object:Gem::Version
145
145
  version: '0'
146
146
  requirements: []
147
- rubygems_version: 3.3.10
147
+ rubygems_version: 3.2.22
148
148
  signing_key:
149
149
  specification_version: 4
150
150
  summary: Track ActiveRecord validation errors on database