erratum 3.3.0 → 4.0.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: e3e6c5faf31997ee03d768c4550dbb14d18e7aaa603071bc4cb49f2224fc42e7
4
- data.tar.gz: bd9de11bb451c959ae4de0717f4ad29691bb72a092111180bda53b78e138d3fc
3
+ metadata.gz: 97d95100468476620622a7be9cf70e486922fc3f29a8054a5bda626c9859c1e5
4
+ data.tar.gz: 46757dc475658d01525ce9e2ec4c9581c907aa3ae7edf5102ebab271a87b22a4
5
5
  SHA512:
6
- metadata.gz: f7073c9d975cb2de901082f0b2d64f1d2068ba19d2c9e1a9505ba07ae348e7057848e0964d50ded7c1d55bb8fb3ff6447de567a347e6541c63cd57fb77bdf4ab
7
- data.tar.gz: 5a18d081d56259c87a948a207c29d4952f82426f2dd615deca753900dc077ff19726b8cddbe2fc453d4502f6ceadbac841aba94f5ed6853c4008da7022fe0f15
6
+ metadata.gz: 0d637d1a2d25d501ccef7c321a3a3d9c27624c4b265a213c53cd20061afae155cce0f87be1772dfdf63125b57a39923b6df4a9e01cbaad8bb6d63310e0ee14c0
7
+ data.tar.gz: eb367c1ad645b49498e8ca870c452dd32d58fd04bc2cc65d01b1267a8ddf7bad4b61883f58849bca66c31f85fa964aba338ad53c73df0cc213a91d3d99012941
checksums.yaml.gz.sig CHANGED
Binary file
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2010-2016 The Kompanee, Ltd
1
+ Copyright (c) 2010-2019 The Kompanee, Ltd
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  of this software and associated documentation files (the "Software"), to deal
data/lib/erratum/error.rb CHANGED
@@ -74,7 +74,7 @@ module Error
74
74
  @code ||= self.class.name
75
75
  .underscore
76
76
  .gsub(%r{\A[^/]+/}, '')
77
- .gsub(%r{/}, '.')
77
+ .tr('/', '.')
78
78
  end
79
79
 
80
80
  def title
@@ -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 \((.*)_id\)=\(([a-f0-9\-]+)\)/
20
+ message_info_pattern = /DETAIL: Key \((.*?)(?:_id)?\)=\(([a-f0-9\-]+)\)/
22
21
  message_info = original_error
23
22
  .message
24
- .match(message_info_pattern)[1..-1]
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
- <<~HEREDOC.chomp.tr("\n", ' ')
45
- The #{association_name} that you attempted to associate with the
46
- #{resource_name} was not valid.
47
- HEREDOC
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
- resource_name => attributes,
53
- "#{association_name} id" => association_id,
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
- resource_id: case original_error.message
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 \'.*\'=([a-f0-9\-]+)/
23
+ when /\ACouldn't find .* with '.*'=([a-f0-9\-]+)/
22
24
  [Regexp.last_match(1)]
23
- when /\ACouldn't find all .* with \'.*\': ((?:[a-f0-9\-]+(?:, )?)+)/
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
- { "#{resource_name_underscored}_id" => resource_id }
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 |(attribute, error), errors|
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.to_s,
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
@@ -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.gsub(/\s/, '_')
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
- "not allowed: #{parameters.join(', ')}"
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: Hash['errors' => erratum.as_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: Hash['errors' => exception.as_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
- model = public_send(self.class.singular_underscored_base_resource_name)
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
- 'ResourceNotFound',
15
- resource_name: self.class.singular_underscored_base_resource_name,
16
- resource_id: [params[:id]],
17
- action: action_name,
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Erratum
4
- VERSION = '3.3.0'
4
+ VERSION = '4.0.0'
5
5
  end
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
- if error.is_a?(String)
71
- error.gsub(/\A::/, '')
72
- elsif error.is_a? Class
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
- .gsub(/\A::/, '')
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: 3.3.0
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
- MIIDqjCCApKgAwIBAgIBATANBgkqhkiG9w0BAQUFADBNMREwDwYDVQQDDAhydWJ5
14
- Z2VtczEjMCEGCgmSJomT8ixkARkWE2xpdmluZ2hpZ2hvbnRoZWJsb2cxEzARBgoJ
15
- kiaJk/IsZAEZFgNjb20wHhcNMTcwODAyMjI1OTM1WhcNMTgwODAyMjI1OTM1WjBN
16
- MREwDwYDVQQDDAhydWJ5Z2VtczEjMCEGCgmSJomT8ixkARkWE2xpdmluZ2hpZ2hv
17
- bnRoZWJsb2cxEzARBgoJkiaJk/IsZAEZFgNjb20wggEiMA0GCSqGSIb3DQEBAQUA
18
- A4IBDwAwggEKAoIBAQDtLa7+7p49gW15OgOyRZad/F92iZcMdDjZ2kAxZlviXgVe
19
- PCtjfdURobH+YMdt++6eRkE25utIFqHyN51Shxfdc21T3fPQe/ZEoMyiJK4tYzbh
20
- 7VjNJG4ldvKKpS1p7iVz9imnyTxNwb0JaIOsOFCA04T0u6aCQi2acNvAPLviXk0q
21
- xJ/CKjI4QUTZKVrBt8Q1Egrp2yzmEnSNftDuTbBb8m4vDR+w325CwbKCgycHJ1/g
22
- YZ3FO76TzJuRVbsYS/bU5XKHVEpkeFmWBqEXsk4DuUIWLa6WZEJcoZf+YP+1pycG
23
- 7YqSbydpINtEdopD+EEI+g+zNJ4nSI8/eQcQyEjBAgMBAAGjgZQwgZEwCQYDVR0T
24
- BAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFDWuVrg4ve0vLu71kqiGdyBnzJGV
25
- MCsGA1UdEQQkMCKBIHJ1YnlnZW1zQGxpdmluZ2hpZ2hvbnRoZWJsb2cuY29tMCsG
26
- A1UdEgQkMCKBIHJ1YnlnZW1zQGxpdmluZ2hpZ2hvbnRoZWJsb2cuY29tMA0GCSqG
27
- SIb3DQEBBQUAA4IBAQDJIpHjbBPGiaY4wOHcXlltQ+BMmhWQNh+1fZtyajQd+7Ay
28
- fv23mO7Mf25Q38gopQlpaODkfxq54Jt8FvQbr5RYRS4j+JEKb75NgrAtehd8USUd
29
- CiJJGH+yvGNWug9IGZCGX91HIbTsLQ5IUUWQasC5jGP8nxXufUr9xgAJZZenewny
30
- B2qKu8q1A/kj6cw62RCY7yBmUXxlcJBj8g+JKYAFbYYKUdQSzf50k9IiWLWunJM+
31
- Y2GAoHKstmfIVhc4XHOPpmTd2o/C29O9oaRgjrkfQEhF/KvJ/PhoV5hvokzsCyI5
32
- iUeXPfvrGD/itYIBCgk+fnzyQQ4QtE5hTQaWQ3o2
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: 2018-05-26 00:00:00.000000000 Z
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
- type: :runtime
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: 1.3.1
53
- - - "~>"
78
+ version: '7.0'
79
+ - - "<"
54
80
  - !ruby/object:Gem::Version
55
- version: '1.0'
81
+ version: '8.0'
56
82
  - !ruby/object:Gem::Dependency
57
- name: rspec
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: '3.7'
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: '3.7'
101
+ version: '8.0'
70
102
  - !ruby/object:Gem::Dependency
71
- name: rspeckled
103
+ name: byebug
72
104
  requirement: !ruby/object:Gem::Requirement
73
105
  requirements:
74
106
  - - "~>"
75
107
  - !ruby/object:Gem::Version
76
- version: '0.0'
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: '0.0'
115
+ version: '11.1'
84
116
  - !ruby/object:Gem::Dependency
85
- name: activerecord
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: '4.2'
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: '4.2'
129
+ version: '3.11'
104
130
  - !ruby/object:Gem::Dependency
105
- name: actionpack
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: '4.2'
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: '4.2'
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://example.com
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
- rubyforge_project:
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