erratum 3.3.0 → 4.0.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 +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 +3 -3
- data/lib/erratum/errors/crud/invalid_association.rb +20 -13
- data/lib/erratum/errors/crud/resource_not_found.rb +9 -5
- data/lib/erratum/errors/crud/resource_not_unique.rb +3 -3
- data/lib/erratum/errors/crud/resource_persistence.rb +11 -11
- data/lib/erratum/errors/crud.rb +9 -1
- data/lib/erratum/errors/request/parameter_missing.rb +3 -3
- data/lib/erratum/errors/request/unpermitted_parameters.rb +4 -4
- data/lib/erratum/rescuable_resource.rb +4 -4
- data/lib/erratum/verifiable_resource.rb +11 -6
- 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
@@ -31,7 +31,7 @@ class AttributeLength < RuntimeError
|
|
31
31
|
length: message_info[0],
|
32
32
|
}
|
33
33
|
|
34
|
-
new(initialization_parameters.merge(overrides))
|
34
|
+
new(**initialization_parameters.merge(overrides))
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
@@ -51,11 +51,11 @@ class AttributeLength < RuntimeError
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def source
|
54
|
-
|
54
|
+
super.merge(
|
55
55
|
'pointer' => pointer,
|
56
56
|
'parameter' => attribute,
|
57
57
|
'length' => length,
|
58
|
-
|
58
|
+
)
|
59
59
|
end
|
60
60
|
end
|
61
61
|
end
|
@@ -10,18 +10,18 @@ class InvalidAssociation < RuntimeError
|
|
10
10
|
include Errors::Crud
|
11
11
|
|
12
12
|
attr_accessor :association_name,
|
13
|
-
:association_id
|
14
|
-
:attributes
|
13
|
+
:association_id
|
15
14
|
|
16
15
|
def self.convert(original_error, overrides = {})
|
17
16
|
initialization_parameters = {}
|
18
17
|
|
19
18
|
case original_error.class.name
|
20
19
|
when 'ActiveRecord::InvalidForeignKey'
|
21
|
-
message_info_pattern = /DETAIL: Key \((
|
20
|
+
message_info_pattern = /DETAIL: Key \((.*?)(?:_id)?\)=\(([a-f0-9\-]+)\)/
|
22
21
|
message_info = original_error
|
23
22
|
.message
|
24
|
-
.match(message_info_pattern)
|
23
|
+
.match(message_info_pattern)
|
24
|
+
.captures
|
25
25
|
|
26
26
|
initialization_parameters = {
|
27
27
|
association_name: message_info[0],
|
@@ -29,7 +29,7 @@ class InvalidAssociation < RuntimeError
|
|
29
29
|
}
|
30
30
|
end
|
31
31
|
|
32
|
-
new(initialization_parameters.merge(overrides))
|
32
|
+
new(**initialization_parameters.merge(overrides))
|
33
33
|
end
|
34
34
|
|
35
35
|
def http_status
|
@@ -41,17 +41,24 @@ class InvalidAssociation < RuntimeError
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def detail
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
44
|
+
if association_name == 'id'
|
45
|
+
<<~HEREDOC.chomp.tr("\n", ' ')
|
46
|
+
You cannot #{action} this #{resource_name} because its
|
47
|
+
#{association_name} is still being referenced by other things.
|
48
|
+
HEREDOC
|
49
|
+
else
|
50
|
+
<<~HEREDOC.chomp.tr("\n", ' ')
|
51
|
+
The #{association_name} that you attempted to associate with the
|
52
|
+
#{resource_name} was not valid.
|
53
|
+
HEREDOC
|
54
|
+
end
|
48
55
|
end
|
49
56
|
|
50
57
|
def source
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
58
|
+
super.merge(
|
59
|
+
'association' => association_name,
|
60
|
+
'association_id' => association_id,
|
61
|
+
)
|
55
62
|
end
|
56
63
|
end
|
57
64
|
end
|
@@ -9,24 +9,26 @@ class ResourceNotFound < RuntimeError
|
|
9
9
|
include Error
|
10
10
|
include Errors::Crud
|
11
11
|
|
12
|
+
attr_accessor :missing_ids
|
13
|
+
|
12
14
|
def self.convert(original_error, overrides = {})
|
13
15
|
initialization_parameters = {}
|
14
16
|
|
15
17
|
case original_error.class.name
|
16
18
|
when 'ActiveRecord::RecordNotFound'
|
17
19
|
initialization_parameters = {
|
18
|
-
|
20
|
+
missing_ids: case original_error.message
|
19
21
|
when /\ACouldn't find .* without an ID\z/
|
20
22
|
[]
|
21
|
-
when /\ACouldn't find .* with
|
23
|
+
when /\ACouldn't find .* with '.*'=([a-f0-9\-]+)/
|
22
24
|
[Regexp.last_match(1)]
|
23
|
-
when /\ACouldn't find all .* with
|
25
|
+
when /\ACouldn't find all .* with '.*': ((?:[a-f0-9\-]+(?:, )?)+)/
|
24
26
|
Array(Regexp.last_match(1).split(', '))
|
25
27
|
end,
|
26
28
|
}
|
27
29
|
end
|
28
30
|
|
29
|
-
new(initialization_parameters.merge(overrides))
|
31
|
+
new(**initialization_parameters.merge(overrides))
|
30
32
|
end
|
31
33
|
|
32
34
|
def http_status
|
@@ -45,7 +47,9 @@ class ResourceNotFound < RuntimeError
|
|
45
47
|
end
|
46
48
|
|
47
49
|
def source
|
48
|
-
|
50
|
+
super.merge(
|
51
|
+
'missing_ids' => missing_ids,
|
52
|
+
)
|
49
53
|
end
|
50
54
|
|
51
55
|
def action
|
@@ -31,7 +31,7 @@ class ResourceNotUnique < RuntimeError
|
|
31
31
|
value: message_info[1],
|
32
32
|
}
|
33
33
|
|
34
|
-
new(initialization_parameters.merge(overrides))
|
34
|
+
new(**initialization_parameters.merge(overrides))
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
@@ -50,11 +50,11 @@ class ResourceNotUnique < RuntimeError
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def source
|
53
|
-
|
53
|
+
super.merge(
|
54
54
|
'pointer' => pointer,
|
55
55
|
'parameter' => attribute,
|
56
56
|
'value' => value,
|
57
|
-
|
57
|
+
)
|
58
58
|
end
|
59
59
|
end
|
60
60
|
end
|
@@ -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
|
@@ -62,11 +62,11 @@ class ResourcePersistence < RuntimeError
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def source
|
65
|
-
|
65
|
+
super.merge(
|
66
66
|
'pointer' => pointer,
|
67
67
|
'parameter' => attribute,
|
68
68
|
'value' => value,
|
69
|
-
|
69
|
+
)
|
70
70
|
end
|
71
71
|
end
|
72
72
|
end
|
data/lib/erratum/errors/crud.rb
CHANGED
@@ -15,10 +15,18 @@ module Crud
|
|
15
15
|
super(**args)
|
16
16
|
end
|
17
17
|
|
18
|
+
def source
|
19
|
+
{
|
20
|
+
'action' => action,
|
21
|
+
'resource_name' => resource_name_underscored,
|
22
|
+
'resource_id' => resource_id,
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
18
26
|
private
|
19
27
|
|
20
28
|
def resource_name_underscored
|
21
|
-
@resource_name_underscored ||= resource_name
|
29
|
+
@resource_name_underscored ||= resource_name&.gsub(/\s/, '_')
|
22
30
|
end
|
23
31
|
end
|
24
32
|
end
|
@@ -21,7 +21,7 @@ class ParameterMissing < 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 http_status
|
@@ -40,9 +40,9 @@ class ParameterMissing < RuntimeError
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def source
|
43
|
-
|
43
|
+
super.merge(
|
44
44
|
'required_parameter' => parameter,
|
45
|
-
|
45
|
+
)
|
46
46
|
end
|
47
47
|
end
|
48
48
|
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,13 +40,13 @@ 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
|
47
|
-
|
47
|
+
super.merge(
|
48
48
|
'unpermitted_parameters' => parameters,
|
49
|
-
|
49
|
+
)
|
50
50
|
end
|
51
51
|
end
|
52
52
|
end
|
@@ -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,23 +15,23 @@ 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,
|
22
21
|
resource_name: self.class.singular_underscored_base_resource_name,
|
22
|
+
resource_id: params[:id],
|
23
23
|
action: action_name,
|
24
24
|
),
|
25
25
|
)
|
26
26
|
|
27
|
-
render json:
|
27
|
+
render json: { 'errors' => erratum.as_json },
|
28
28
|
status: erratum.first.http_status
|
29
29
|
end
|
30
30
|
|
31
31
|
base.rescue_from 'Erratum::Error' do |exception|
|
32
32
|
exception = Array(exception)
|
33
33
|
|
34
|
-
render json:
|
34
|
+
render json: { 'errors' => exception.as_json },
|
35
35
|
status: exception.first.http_status
|
36
36
|
end
|
37
37
|
end
|
@@ -8,14 +8,19 @@ module VerifiableResource
|
|
8
8
|
base.include ::AppleCore::ActionController::ResourceNaming
|
9
9
|
|
10
10
|
base.before_action except: %i{index create} do
|
11
|
-
|
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
|
12
17
|
|
13
18
|
resource_not_found_error = Erratum.build(
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
+
'ResourceNotFound',
|
20
|
+
resource_name: base_name,
|
21
|
+
resource_id: [params[:id]],
|
22
|
+
action: action_name,
|
23
|
+
)
|
19
24
|
|
20
25
|
fail resource_not_found_error unless model.persisted?
|
21
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.6
|
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
|