erratum 3.4.2 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/LICENSE.txt +1 -1
- data/lib/erratum/error.rb +1 -1
- data/lib/erratum/errors/crud/attribute_length.rb +1 -1
- data/lib/erratum/errors/crud/invalid_association.rb +1 -1
- data/lib/erratum/errors/crud/resource_not_found.rb +3 -3
- data/lib/erratum/errors/crud/resource_not_unique.rb +1 -1
- data/lib/erratum/errors/crud/resource_persistence.rb +9 -9
- data/lib/erratum/errors/request/parameter_missing.rb +1 -1
- data/lib/erratum/errors/request/unpermitted_parameters.rb +2 -2
- data/lib/erratum/rescuable_resource.rb +3 -4
- data/lib/erratum/verifiable_resource.rb +11 -10
- data/lib/erratum/version.rb +1 -1
- data/lib/erratum.rb +11 -11
- data.tar.gz.sig +0 -0
- metadata +85 -59
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 97d95100468476620622a7be9cf70e486922fc3f29a8054a5bda626c9859c1e5
|
4
|
+
data.tar.gz: 46757dc475658d01525ce9e2ec4c9581c907aa3ae7edf5102ebab271a87b22a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d637d1a2d25d501ccef7c321a3a3d9c27624c4b265a213c53cd20061afae155cce0f87be1772dfdf63125b57a39923b6df4a9e01cbaad8bb6d63310e0ee14c0
|
7
|
+
data.tar.gz: eb367c1ad645b49498e8ca870c452dd32d58fd04bc2cc65d01b1267a8ddf7bad4b61883f58849bca66c31f85fa964aba338ad53c73df0cc213a91d3d99012941
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/LICENSE.txt
CHANGED
data/lib/erratum/error.rb
CHANGED
@@ -20,15 +20,15 @@ class ResourceNotFound < RuntimeError
|
|
20
20
|
missing_ids: case original_error.message
|
21
21
|
when /\ACouldn't find .* without an ID\z/
|
22
22
|
[]
|
23
|
-
when /\ACouldn't find .* with
|
23
|
+
when /\ACouldn't find .* with '.*'=([a-f0-9\-]+)/
|
24
24
|
[Regexp.last_match(1)]
|
25
|
-
when /\ACouldn't find all .* with
|
25
|
+
when /\ACouldn't find all .* with '.*': ((?:[a-f0-9\-]+(?:, )?)+)/
|
26
26
|
Array(Regexp.last_match(1).split(', '))
|
27
27
|
end,
|
28
28
|
}
|
29
29
|
end
|
30
30
|
|
31
|
-
new(initialization_parameters.merge(overrides))
|
31
|
+
new(**initialization_parameters.merge(overrides))
|
32
32
|
end
|
33
33
|
|
34
34
|
def http_status
|
@@ -16,32 +16,32 @@ class ResourcePersistence < RuntimeError
|
|
16
16
|
:attribute,
|
17
17
|
:value
|
18
18
|
|
19
|
-
def self.convert(original_error, overrides = {})
|
19
|
+
def self.convert(original_error, overrides = {}) # rubocop:disable Metrics/AbcSize
|
20
20
|
case original_error.class.name
|
21
21
|
when 'ActiveRecord::RecordInvalid',
|
22
22
|
'ActiveRecord::RecordNotSaved'
|
23
23
|
|
24
|
-
original_error.record.errors.each_with_object([]) do |
|
25
|
-
initialization_parameters = if attribute == :base
|
24
|
+
original_error.record.errors.each_with_object([]) do |error, errors|
|
25
|
+
initialization_parameters = if error.attribute == :base
|
26
26
|
{
|
27
27
|
attribute: nil,
|
28
|
-
detail: error.
|
28
|
+
detail: error.message,
|
29
29
|
pointer: '/data/base',
|
30
30
|
value: nil,
|
31
31
|
}
|
32
32
|
else
|
33
33
|
{
|
34
|
-
attribute: attribute.to_s.camelize(:lower),
|
35
|
-
detail: "#{attribute.to_s.humanize} #{error}",
|
36
|
-
pointer: "/data/attributes/#{attribute}",
|
34
|
+
attribute: error.attribute.to_s.camelize(:lower),
|
35
|
+
detail: "#{error.class.name}: #{error.attribute.to_s.humanize} #{error.message}",
|
36
|
+
pointer: "/data/attributes/#{error.attribute}",
|
37
37
|
value: original_error
|
38
38
|
.record
|
39
|
-
.public_send(attribute)
|
39
|
+
.public_send(error.attribute)
|
40
40
|
.to_s,
|
41
41
|
}
|
42
42
|
end
|
43
43
|
|
44
|
-
errors << new(initialization_parameters.merge(overrides))
|
44
|
+
errors << new(**initialization_parameters.merge(overrides))
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
@@ -21,7 +21,7 @@ class UnpermittedParameters < RuntimeError
|
|
21
21
|
}
|
22
22
|
end
|
23
23
|
|
24
|
-
new(initialization_parameters.merge(overrides))
|
24
|
+
new(**initialization_parameters.merge(overrides))
|
25
25
|
end
|
26
26
|
|
27
27
|
def initialize(**attrs)
|
@@ -40,7 +40,7 @@ class UnpermittedParameters < RuntimeError
|
|
40
40
|
|
41
41
|
def detail
|
42
42
|
"Attempting to #{action} a #{resource_name} with the following parameters is " \
|
43
|
-
|
43
|
+
"not allowed: #{parameters.join(', ')}"
|
44
44
|
end
|
45
45
|
|
46
46
|
def source
|
@@ -4,7 +4,7 @@ require 'apple_core/action_controller/resource_naming'
|
|
4
4
|
|
5
5
|
module Erratum
|
6
6
|
module RescuableResource
|
7
|
-
def self.included(base)
|
7
|
+
def self.included(base) # rubocop:disable Metrics/AbcSize
|
8
8
|
base.include ::AppleCore::ActionController::ResourceNaming
|
9
9
|
|
10
10
|
base.rescue_from 'ActiveRecord::RecordInvalid',
|
@@ -15,7 +15,6 @@ module RescuableResource
|
|
15
15
|
'ActiveRecord::ValueTooLong',
|
16
16
|
'ActionController::ParameterMissing',
|
17
17
|
'ActionController::UnpermittedParameters' do |exception|
|
18
|
-
|
19
18
|
erratum = Array(
|
20
19
|
Erratum.build(
|
21
20
|
exception,
|
@@ -25,14 +24,14 @@ module RescuableResource
|
|
25
24
|
),
|
26
25
|
)
|
27
26
|
|
28
|
-
render json:
|
27
|
+
render json: { 'errors' => erratum.as_json },
|
29
28
|
status: erratum.first.http_status
|
30
29
|
end
|
31
30
|
|
32
31
|
base.rescue_from 'Erratum::Error' do |exception|
|
33
32
|
exception = Array(exception)
|
34
33
|
|
35
|
-
render json:
|
34
|
+
render json: { 'errors' => exception.as_json },
|
36
35
|
status: exception.first.http_status
|
37
36
|
end
|
38
37
|
end
|
@@ -8,18 +8,19 @@ module VerifiableResource
|
|
8
8
|
base.include ::AppleCore::ActionController::ResourceNaming
|
9
9
|
|
10
10
|
base.before_action except: %i{index create} do
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
base_name = self.class.singular_underscored_base_resource_name
|
12
|
+
model = if respond_to?(:authorized_resource, true)
|
13
|
+
authorized_resource.processed
|
14
|
+
else
|
15
|
+
public_send(base_name)
|
16
|
+
end
|
16
17
|
|
17
18
|
resource_not_found_error = Erratum.build(
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
'ResourceNotFound',
|
20
|
+
resource_name: base_name,
|
21
|
+
resource_id: [params[:id]],
|
22
|
+
action: action_name,
|
23
|
+
)
|
23
24
|
|
24
25
|
fail resource_not_found_error unless model.persisted?
|
25
26
|
end
|
data/lib/erratum/version.rb
CHANGED
data/lib/erratum.rb
CHANGED
@@ -26,8 +26,7 @@ require 'erratum/version'
|
|
26
26
|
module Erratum
|
27
27
|
using ::AppleCore::Refinements::Hash
|
28
28
|
|
29
|
-
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
30
|
-
def self.build(original_error, overrides = {})
|
29
|
+
def self.build(original_error, overrides = {}) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
31
30
|
overrides = overrides.symbolize_keys
|
32
31
|
original_error_name = error_name(original_error)
|
33
32
|
build_error_name = mapped_error_name(original_error_name)
|
@@ -36,17 +35,18 @@ module Erratum
|
|
36
35
|
if original_error.is_a?(Class) &&
|
37
36
|
original_error < ::Erratum::Error
|
38
37
|
|
39
|
-
original_error.new(overrides)
|
38
|
+
original_error.new(**overrides)
|
40
39
|
elsif original_error.is_a?(String)
|
41
|
-
build_error_class.new(overrides)
|
40
|
+
build_error_class.new(**overrides)
|
42
41
|
elsif original_error.is_a?(::Erratum::Error)
|
43
42
|
original_source = original_error.source.symbolize_keys
|
44
43
|
|
45
|
-
build_error_class.new(original_source.merge(overrides))
|
44
|
+
build_error_class.new(**original_source.merge(overrides))
|
46
45
|
elsif build_error_class.respond_to?(:convert)
|
47
|
-
build_error_class.convert(original_error, overrides)
|
46
|
+
build_error_class.convert(original_error, **overrides)
|
48
47
|
elsif build_error_class < Exception &&
|
49
48
|
build_error_class == original_error.class
|
49
|
+
|
50
50
|
::Erratum::Errors::RuntimeError.wrap(original_error)
|
51
51
|
else
|
52
52
|
::Erratum::Errors::RuntimeError.new(
|
@@ -54,7 +54,6 @@ module Erratum
|
|
54
54
|
)
|
55
55
|
end
|
56
56
|
end
|
57
|
-
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
58
57
|
|
59
58
|
def self.raise(error_type, **args)
|
60
59
|
Kernel.fail build(error_type, **args)
|
@@ -67,9 +66,10 @@ module Erratum
|
|
67
66
|
alias fail raise
|
68
67
|
|
69
68
|
def self.error_name(error)
|
70
|
-
|
71
|
-
|
72
|
-
|
69
|
+
case error
|
70
|
+
when String
|
71
|
+
error.delete_prefix('::')
|
72
|
+
when Class
|
73
73
|
error.name
|
74
74
|
else
|
75
75
|
error.class.name
|
@@ -80,7 +80,7 @@ module Erratum
|
|
80
80
|
configuration
|
81
81
|
.error_mappings
|
82
82
|
.fetch(name, name)
|
83
|
-
.
|
83
|
+
.delete_prefix('::')
|
84
84
|
end
|
85
85
|
|
86
86
|
def self.error_class(name)
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: erratum
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- thegranddesign
|
@@ -10,117 +10,137 @@ bindir: bin
|
|
10
10
|
cert_chain:
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
13
|
+
MIIEyjCCAzKgAwIBAgIBATANBgkqhkiG9w0BAQsFADBVMSIwIAYDVQQDDBlsb2Nh
|
14
|
+
bGV1bmtub3duODEwX3J1YnlnZW1zMRowGAYKCZImiZPyLGQBGRYKcHJvdG9ubWFp
|
15
|
+
bDETMBEGCgmSJomT8ixkARkWA2NvbTAeFw0yMjA3MDkwNTMxMjJaFw0yMzA3MDkw
|
16
|
+
NTMxMjJaMFUxIjAgBgNVBAMMGWxvY2FsZXVua25vd244MTBfcnVieWdlbXMxGjAY
|
17
|
+
BgoJkiaJk/IsZAEZFgpwcm90b25tYWlsMRMwEQYKCZImiZPyLGQBGRYDY29tMIIB
|
18
|
+
ojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA0otlhSPyU7jLLW1p786Mo/pV
|
19
|
+
5cJ1Ed8D/bJK78PqGFO2h0ZUefupxT5PRMokLYNNGRPopnAAxZ0zVxJ68aOyYCBW
|
20
|
+
Wk3/XFcXCrtk/OcFwLTltgeMjyqCBd/zRRx6CCjY4uOfH0E3n1gQ6Fbmewjg83XJ
|
21
|
+
nOs7Gu/hzj5+feEQ1Exmg6z1oCM/8BTIBtK+p++HvcDK3AhJ7x3fc6P9WS+22w6j
|
22
|
+
7jpi3p9YtoAjrXIzw3lsobiX+bEt+N+T47e8gOATVgapuZ/QmJzNU6LWepehs4V1
|
23
|
+
8J+FUaIMV7nAMKmpkbYL51uHEiGV+HDx1HUdOsCFx8zD4h49KRT2t6AcumJ5P1Cj
|
24
|
+
c7NX2xl85ShHDNNFkozuC2c5cwj6F20EVaVjGwv2OFq0S2tUw9EJXHTN9RpfRUmn
|
25
|
+
IHwS9M4gcJO7IzV39a1YL6+9hrabF4+JTSYDehq8oxTdcOPLYyvH54aJWVqCrnLO
|
26
|
+
KNa/p6hMmwxTWNS5Vz0uxuEGyE9E0tHbtjIs2XX5AgMBAAGjgaQwgaEwCQYDVR0T
|
27
|
+
BAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFAK3RicwO0f6+puFN6lRVMOKMJuu
|
28
|
+
MDMGA1UdEQQsMCqBKGxvY2FsZXVua25vd244MTArcnVieWdlbXNAcHJvdG9ubWFp
|
29
|
+
bC5jb20wMwYDVR0SBCwwKoEobG9jYWxldW5rbm93bjgxMCtydWJ5Z2Vtc0Bwcm90
|
30
|
+
b25tYWlsLmNvbTANBgkqhkiG9w0BAQsFAAOCAYEAQwV6pOp5gm8141pyXeQFI/5E
|
31
|
+
rZYO3MvdyZM8O3HMD51LDS8mtMURceaKZM6WTambe2RVX4A++0qUiEnn9K4Fexm/
|
32
|
+
SEGaC/Gp+Fg9D1SKfkdq9bgdIhOEUwiGqjczgzNC806AtWZ+awI940oydFYZlpo0
|
33
|
+
jMQihPPJEqF1U6JBDMZYV5tX/dJYSGRl9L3s1k2tjoN98q+beNaZQDn21Amml4eK
|
34
|
+
KEkMeTTJ2E4GVzR9eKEETLq2LygdUWWZ5NdWOYTxJMdg1GZp3b6X8hJrwfOiizqt
|
35
|
+
/ANlIEh11/pOnWa6WPUVpGIMpYdquvmJXnF2LX6zxkKK1hbrebt+vAEAGczgw1Ri
|
36
|
+
rkLM6y+BHQdkOTj3VG4MjIU8D4h1Z73Exzxds/VbVKMEz+8JrFjGJ/tYa0PZ8U5p
|
37
|
+
3yXL4G6eW3rdBW/OiLF7GgG2o26d02OMzf4+ubUVS5LQDOcd4vgNPLWzJSBt1YIh
|
38
|
+
TgBsED7Me5YdMVXxtTWYsF1VMzaL9hReD3UXGcxe
|
33
39
|
-----END CERTIFICATE-----
|
34
|
-
date:
|
40
|
+
date: 2022-07-09 00:00:00.000000000 Z
|
35
41
|
dependencies:
|
36
42
|
- !ruby/object:Gem::Dependency
|
37
43
|
name: apple_core
|
38
44
|
requirement: !ruby/object:Gem::Requirement
|
39
45
|
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '1.0'
|
40
49
|
- - ">="
|
41
50
|
- !ruby/object:Gem::Version
|
42
51
|
version: 1.3.1
|
52
|
+
type: :runtime
|
53
|
+
prerelease: false
|
54
|
+
version_requirements: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
43
56
|
- - "~>"
|
44
57
|
- !ruby/object:Gem::Version
|
45
58
|
version: '1.0'
|
46
|
-
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.3.1
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: actionpack
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '7.0'
|
69
|
+
- - "<"
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '8.0'
|
72
|
+
type: :development
|
47
73
|
prerelease: false
|
48
74
|
version_requirements: !ruby/object:Gem::Requirement
|
49
75
|
requirements:
|
50
76
|
- - ">="
|
51
77
|
- !ruby/object:Gem::Version
|
52
|
-
version:
|
53
|
-
- - "
|
78
|
+
version: '7.0'
|
79
|
+
- - "<"
|
54
80
|
- !ruby/object:Gem::Version
|
55
|
-
version: '
|
81
|
+
version: '8.0'
|
56
82
|
- !ruby/object:Gem::Dependency
|
57
|
-
name:
|
83
|
+
name: activerecord
|
58
84
|
requirement: !ruby/object:Gem::Requirement
|
59
85
|
requirements:
|
60
|
-
- - "
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '7.0'
|
89
|
+
- - "<"
|
61
90
|
- !ruby/object:Gem::Version
|
62
|
-
version: '
|
91
|
+
version: '8.0'
|
63
92
|
type: :development
|
64
93
|
prerelease: false
|
65
94
|
version_requirements: !ruby/object:Gem::Requirement
|
66
95
|
requirements:
|
67
|
-
- - "
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '7.0'
|
99
|
+
- - "<"
|
68
100
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
101
|
+
version: '8.0'
|
70
102
|
- !ruby/object:Gem::Dependency
|
71
|
-
name:
|
103
|
+
name: byebug
|
72
104
|
requirement: !ruby/object:Gem::Requirement
|
73
105
|
requirements:
|
74
106
|
- - "~>"
|
75
107
|
- !ruby/object:Gem::Version
|
76
|
-
version: '
|
108
|
+
version: '11.1'
|
77
109
|
type: :development
|
78
110
|
prerelease: false
|
79
111
|
version_requirements: !ruby/object:Gem::Requirement
|
80
112
|
requirements:
|
81
113
|
- - "~>"
|
82
114
|
- !ruby/object:Gem::Version
|
83
|
-
version: '
|
115
|
+
version: '11.1'
|
84
116
|
- !ruby/object:Gem::Dependency
|
85
|
-
name:
|
117
|
+
name: rspec
|
86
118
|
requirement: !ruby/object:Gem::Requirement
|
87
119
|
requirements:
|
88
|
-
- - "
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
version: '6.0'
|
91
|
-
- - ">="
|
120
|
+
- - "~>"
|
92
121
|
- !ruby/object:Gem::Version
|
93
|
-
version: '
|
122
|
+
version: '3.11'
|
94
123
|
type: :development
|
95
124
|
prerelease: false
|
96
125
|
version_requirements: !ruby/object:Gem::Requirement
|
97
126
|
requirements:
|
98
|
-
- - "
|
99
|
-
- !ruby/object:Gem::Version
|
100
|
-
version: '6.0'
|
101
|
-
- - ">="
|
127
|
+
- - "~>"
|
102
128
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
129
|
+
version: '3.11'
|
104
130
|
- !ruby/object:Gem::Dependency
|
105
|
-
name:
|
131
|
+
name: rspeckled
|
106
132
|
requirement: !ruby/object:Gem::Requirement
|
107
133
|
requirements:
|
108
|
-
- - "
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '6.0'
|
111
|
-
- - ">="
|
134
|
+
- - "~>"
|
112
135
|
- !ruby/object:Gem::Version
|
113
|
-
version: '
|
136
|
+
version: '0.0'
|
114
137
|
type: :development
|
115
138
|
prerelease: false
|
116
139
|
version_requirements: !ruby/object:Gem::Requirement
|
117
140
|
requirements:
|
118
|
-
- - "
|
119
|
-
- !ruby/object:Gem::Version
|
120
|
-
version: '6.0'
|
121
|
-
- - ">="
|
141
|
+
- - "~>"
|
122
142
|
- !ruby/object:Gem::Version
|
123
|
-
version: '
|
143
|
+
version: '0.0'
|
124
144
|
description: ''
|
125
145
|
email:
|
126
146
|
- rubygems@livinghighontheblog.com
|
@@ -152,11 +172,18 @@ files:
|
|
152
172
|
- lib/erratum/rescuable_resource.rb
|
153
173
|
- lib/erratum/verifiable_resource.rb
|
154
174
|
- lib/erratum/version.rb
|
155
|
-
homepage: https://
|
175
|
+
homepage: https://github.com/thekompanee/erratum
|
156
176
|
licenses:
|
157
177
|
- MIT
|
158
178
|
metadata:
|
159
179
|
allowed_push_host: https://rubygems.org
|
180
|
+
bug_tracker_uri: https://github.com/thekompanee/erratum/issues
|
181
|
+
changelog_uri: https://github.com/thekompanee/erratum/blob/master/CHANGELOG.md
|
182
|
+
documentation_uri: https://github.com/thekompanee/erratum/tree/releases/v4.0.0
|
183
|
+
homepage_uri: https://github.com/thekompanee/erratum
|
184
|
+
source_code_uri: https://github.com/thekompanee/erratum
|
185
|
+
wiki_uri: https://github.com/thekompanee/erratum/wiki
|
186
|
+
rubygems_mfa_required: 'true'
|
160
187
|
post_install_message:
|
161
188
|
rdoc_options: []
|
162
189
|
require_paths:
|
@@ -172,8 +199,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
172
199
|
- !ruby/object:Gem::Version
|
173
200
|
version: '0'
|
174
201
|
requirements: []
|
175
|
-
|
176
|
-
rubygems_version: 2.7.7
|
202
|
+
rubygems_version: 3.3.7
|
177
203
|
signing_key:
|
178
204
|
specification_version: 4
|
179
205
|
summary: Errors Need Love
|
metadata.gz.sig
CHANGED
Binary file
|