erratum 3.0.0 → 3.1.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/lib/erratum/configuration.rb +21 -4
- data/lib/erratum/error.rb +4 -3
- data/lib/erratum/errors/{authentication_errors/duplicate_authentication_error.rb → authentication/duplicate_authentication.rb} +3 -3
- data/lib/erratum/errors/{authentication_errors/invalid_token_error.rb → authentication/invalid_token.rb} +3 -3
- data/lib/erratum/errors/{authentication_errors/invalid_username_or_password_error.rb → authentication/invalid_username_or_password.rb} +3 -3
- data/lib/erratum/errors/{authorization_error.rb → authentication.rb} +1 -1
- data/lib/erratum/errors/{authorization_errors/forbidden_error.rb → authorization/forbidden.rb} +3 -3
- data/lib/erratum/errors/{authentication_error.rb → authorization.rb} +1 -1
- data/lib/erratum/errors/{crud_errors/association_error.rb → crud/invalid_association.rb} +3 -3
- data/lib/erratum/errors/{crud_errors/resource_not_found_error.rb → crud/resource_not_found.rb} +3 -3
- data/lib/erratum/errors/{crud_errors/resource_persistence_error.rb → crud/resource_persistence.rb} +3 -3
- data/lib/erratum/errors/{crud_error.rb → crud.rb} +1 -1
- data/lib/erratum/errors/{request_errors/parameter_missing_error.rb → request/parameter_missing.rb} +3 -3
- data/lib/erratum/errors/{request_errors/unpermitted_parameters_error.rb → request/unpermitted_parameters.rb} +3 -3
- data/lib/erratum/errors/runtime_error.rb +11 -0
- data/lib/erratum/rescuable_resource.rb +2 -2
- data/lib/erratum/verifiable_resource.rb +2 -2
- data/lib/erratum/version.rb +1 -1
- data/lib/erratum.rb +81 -31
- data.tar.gz.sig +0 -0
- metadata +30 -17
- metadata.gz.sig +0 -0
- data/lib/erratum/resource_naming.rb +0 -42
- data/lib/erratum/utilities/string.rb +0 -147
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a64ec04a4883f093019192fde51fd407c734c7d7
|
4
|
+
data.tar.gz: f747c1132538479444c7d4d674d777d35b144d6d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c2e4c60ab35531a59e889d2b3648c0b6c2b8e28080d252c47d2aee34d403baa98474d56e8ed75200a5b3fbb4154479f82f3405b726c3ca1eba252f137eac9de3
|
7
|
+
data.tar.gz: f8c9aa8f46c7fc4307d5d3821c7eaa84489918b9f10cb42269f0997716474160ef3330ab0ce0386dd9b8326d7f38300c5faace01f5af7ebcbc82a76df6298c78
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
@@ -6,16 +6,33 @@ module Erratum
|
|
6
6
|
class Configuration
|
7
7
|
include Singleton
|
8
8
|
|
9
|
-
|
9
|
+
DEFAULT_ERROR_MAPPINGS = {
|
10
|
+
'ActionController::ParameterMissing' => '::Erratum::Errors::ParameterMissing',
|
11
|
+
'ActionController::UnpermittedParameters' => '::Erratum::Errors::UnpermittedParameters',
|
12
|
+
'ActiveRecord::InvalidForeignKey' => '::Erratum::Errors::InvalidAssociation',
|
13
|
+
'ActiveRecord::RecordInvalid' => '::Erratum::Errors::ResourcePersistence',
|
14
|
+
'ActiveRecord::RecordNotFound' => '::Erratum::Errors::ResourceNotFound',
|
15
|
+
'ActiveRecord::RecordNotSaved' => '::Erratum::Errors::ResourcePersistence',
|
16
|
+
}.freeze
|
10
17
|
|
11
|
-
|
12
|
-
url_mappings['external_documentation_urls']
|
13
|
-
end
|
18
|
+
attr_writer :url_mappings
|
14
19
|
|
15
20
|
def developer_documentation_urls
|
16
21
|
url_mappings['developer_documentation_urls']
|
17
22
|
end
|
18
23
|
|
24
|
+
def error_mappings
|
25
|
+
@error_mappings ||= DEFAULT_ERROR_MAPPINGS.dup
|
26
|
+
end
|
27
|
+
|
28
|
+
def error_mappings=(other)
|
29
|
+
@error_mappings = DEFAULT_ERROR_MAPPINGS.merge(other)
|
30
|
+
end
|
31
|
+
|
32
|
+
def external_documentation_urls
|
33
|
+
url_mappings['external_documentation_urls']
|
34
|
+
end
|
35
|
+
|
19
36
|
def to_h
|
20
37
|
{
|
21
38
|
'external_documentation_urls' => external_documentation_urls,
|
data/lib/erratum/error.rb
CHANGED
@@ -2,10 +2,11 @@
|
|
2
2
|
|
3
3
|
require 'json'
|
4
4
|
require 'erratum/configurable'
|
5
|
-
require '
|
5
|
+
require 'apple_core/refinements/string'
|
6
6
|
|
7
7
|
module Erratum
|
8
8
|
module Error
|
9
|
+
using ::AppleCore::Refinements::String
|
9
10
|
include Configurable
|
10
11
|
|
11
12
|
module ClassMethods
|
@@ -70,8 +71,8 @@ module Error
|
|
70
71
|
alias status http_status
|
71
72
|
|
72
73
|
def code
|
73
|
-
@code ||=
|
74
|
-
.underscore
|
74
|
+
@code ||= self.class.name
|
75
|
+
.underscore
|
75
76
|
.gsub(%r{\A[^/]+/}, '')
|
76
77
|
.gsub(%r{/}, '.')
|
77
78
|
end
|
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'erratum/error'
|
4
|
-
require 'erratum/errors/
|
4
|
+
require 'erratum/errors/authentication'
|
5
5
|
|
6
6
|
module Erratum
|
7
7
|
module Errors
|
8
|
-
class
|
8
|
+
class DuplicateAuthentication < RuntimeError
|
9
9
|
include Error
|
10
|
-
include
|
10
|
+
include Errors::Authentication
|
11
11
|
|
12
12
|
attr_accessor :provider,
|
13
13
|
:provider_user_id,
|
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'erratum/error'
|
4
|
-
require 'erratum/errors/
|
4
|
+
require 'erratum/errors/authentication'
|
5
5
|
|
6
6
|
module Erratum
|
7
7
|
module Errors
|
8
|
-
class
|
8
|
+
class InvalidToken < RuntimeError
|
9
9
|
include Error
|
10
|
-
include
|
10
|
+
include Errors::Authentication
|
11
11
|
|
12
12
|
attr_accessor :authentication_token
|
13
13
|
|
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'erratum/error'
|
4
|
-
require 'erratum/errors/
|
4
|
+
require 'erratum/errors/authentication'
|
5
5
|
|
6
6
|
module Erratum
|
7
7
|
module Errors
|
8
|
-
class
|
8
|
+
class InvalidUsernameOrPassword < RuntimeError
|
9
9
|
include Error
|
10
|
-
include
|
10
|
+
include Errors::Authentication
|
11
11
|
|
12
12
|
attr_accessor :username
|
13
13
|
|
data/lib/erratum/errors/{authorization_errors/forbidden_error.rb → authorization/forbidden.rb}
RENAMED
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'erratum/error'
|
4
|
-
require 'erratum/errors/
|
4
|
+
require 'erratum/errors/authorization'
|
5
5
|
|
6
6
|
module Erratum
|
7
7
|
module Errors
|
8
|
-
class
|
8
|
+
class Forbidden < RuntimeError
|
9
9
|
include Error
|
10
|
-
include
|
10
|
+
include Errors::Authorization
|
11
11
|
|
12
12
|
NON_SPECIFIC_RESOURCE_ACTIONS = %w{index create}.freeze
|
13
13
|
|
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'erratum/error'
|
4
|
-
require 'erratum/errors/
|
4
|
+
require 'erratum/errors/crud'
|
5
5
|
|
6
6
|
module Erratum
|
7
7
|
module Errors
|
8
|
-
class
|
8
|
+
class InvalidAssociation < RuntimeError
|
9
9
|
include Error
|
10
|
-
include
|
10
|
+
include Errors::Crud
|
11
11
|
|
12
12
|
attr_accessor :association_name,
|
13
13
|
:association_id,
|
data/lib/erratum/errors/{crud_errors/resource_not_found_error.rb → crud/resource_not_found.rb}
RENAMED
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'erratum/error'
|
4
|
-
require 'erratum/errors/
|
4
|
+
require 'erratum/errors/crud'
|
5
5
|
|
6
6
|
module Erratum
|
7
7
|
module Errors
|
8
|
-
class
|
8
|
+
class ResourceNotFound < RuntimeError
|
9
9
|
include Error
|
10
|
-
include
|
10
|
+
include Errors::Crud
|
11
11
|
|
12
12
|
def self.convert(original_error, overrides = {})
|
13
13
|
initialization_parameters = {}
|
data/lib/erratum/errors/{crud_errors/resource_persistence_error.rb → crud/resource_persistence.rb}
RENAMED
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'erratum/error'
|
4
|
-
require 'erratum/errors/
|
4
|
+
require 'erratum/errors/crud'
|
5
5
|
|
6
6
|
module Erratum
|
7
7
|
module Errors
|
8
|
-
class
|
8
|
+
class ResourcePersistence < RuntimeError
|
9
9
|
include Error
|
10
|
-
include
|
10
|
+
include Errors::Crud
|
11
11
|
|
12
12
|
attr_accessor :pointer,
|
13
13
|
:attribute,
|
data/lib/erratum/errors/{request_errors/parameter_missing_error.rb → request/parameter_missing.rb}
RENAMED
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'erratum/error'
|
4
|
-
require 'erratum/errors/
|
4
|
+
require 'erratum/errors/crud'
|
5
5
|
|
6
6
|
module Erratum
|
7
7
|
module Errors
|
8
|
-
class
|
8
|
+
class ParameterMissing < RuntimeError
|
9
9
|
include Error
|
10
|
-
include
|
10
|
+
include Errors::Crud
|
11
11
|
|
12
12
|
attr_accessor :parameter
|
13
13
|
|
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'erratum/error'
|
4
|
-
require 'erratum/errors/
|
4
|
+
require 'erratum/errors/crud'
|
5
5
|
|
6
6
|
module Erratum
|
7
7
|
module Errors
|
8
|
-
class
|
8
|
+
class UnpermittedParameters < RuntimeError
|
9
9
|
include Error
|
10
|
-
include
|
10
|
+
include Errors::Crud
|
11
11
|
|
12
12
|
attr_accessor :parameters
|
13
13
|
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'apple_core/action_controller/resource_naming'
|
4
4
|
|
5
5
|
module Erratum
|
6
6
|
module RescuableResource
|
7
7
|
def self.included(base)
|
8
|
-
base.include ResourceNaming
|
8
|
+
base.include ::AppleCore::ActionController::ResourceNaming
|
9
9
|
|
10
10
|
base.rescue_from 'ActiveRecord::RecordInvalid',
|
11
11
|
'ActiveRecord::RecordNotSaved',
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'apple_core/action_controller/resource_naming'
|
4
4
|
|
5
5
|
module Erratum
|
6
6
|
module VerifiableResource
|
7
7
|
def self.included(base)
|
8
|
-
base.include ResourceNaming
|
8
|
+
base.include ::AppleCore::ActionController::ResourceNaming
|
9
9
|
|
10
10
|
base.before_action except: %i{index create} do
|
11
11
|
model = public_send(self.class.singular_resource_name)
|
data/lib/erratum/version.rb
CHANGED
data/lib/erratum.rb
CHANGED
@@ -1,49 +1,99 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'apple_core/refinements/hash'
|
4
|
+
|
3
5
|
require 'erratum/configuration'
|
4
6
|
require 'erratum/error'
|
5
|
-
require 'erratum/errors/
|
6
|
-
require 'erratum/errors/
|
7
|
-
require 'erratum/errors/
|
8
|
-
require 'erratum/errors/
|
9
|
-
require 'erratum/errors/
|
10
|
-
require 'erratum/errors/
|
11
|
-
require 'erratum/errors/
|
12
|
-
require 'erratum/errors/
|
13
|
-
require 'erratum/errors/
|
14
|
-
require 'erratum/errors/
|
15
|
-
require 'erratum/errors/
|
16
|
-
require 'erratum/errors/
|
7
|
+
require 'erratum/errors/authentication'
|
8
|
+
require 'erratum/errors/authentication/duplicate_authentication'
|
9
|
+
require 'erratum/errors/authentication/invalid_token'
|
10
|
+
require 'erratum/errors/authentication/invalid_username_or_password'
|
11
|
+
require 'erratum/errors/authorization'
|
12
|
+
require 'erratum/errors/authorization/forbidden'
|
13
|
+
require 'erratum/errors/crud'
|
14
|
+
require 'erratum/errors/crud/invalid_association'
|
15
|
+
require 'erratum/errors/crud/resource_not_found'
|
16
|
+
require 'erratum/errors/crud/resource_persistence'
|
17
|
+
require 'erratum/errors/request/parameter_missing'
|
18
|
+
require 'erratum/errors/request/unpermitted_parameters'
|
19
|
+
require 'erratum/errors/runtime_error'
|
17
20
|
require 'erratum/rescuable_resource'
|
18
21
|
require 'erratum/verifiable_resource'
|
19
22
|
require 'erratum/version'
|
20
23
|
|
21
24
|
module Erratum
|
22
|
-
|
23
|
-
Object.const_get("Erratum::Errors::#{error_type}")
|
24
|
-
end
|
25
|
+
using ::AppleCore::Refinements::Hash
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
|
27
|
+
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
28
|
+
def self.build(original_error, overrides = {})
|
29
|
+
overrides = overrides.symbolize_keys
|
30
|
+
original_error_name = error_name(original_error)
|
31
|
+
build_error_name = mapped_error_name(original_error_name)
|
32
|
+
build_error_class = error_class(build_error_name)
|
33
|
+
|
34
|
+
if original_error.is_a?(Class) &&
|
35
|
+
original_error < ::Erratum::Error
|
36
|
+
|
37
|
+
original_error.new(overrides)
|
38
|
+
elsif original_error.is_a?(String)
|
39
|
+
build_error_class.new(overrides)
|
40
|
+
elsif original_error.is_a?(::Erratum::Error)
|
41
|
+
original_source = original_error.source.symbolize_keys
|
29
42
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
fetch('ParameterMissingError').convert(original_error, overrides)
|
41
|
-
when 'ActionController::UnpermittedParameters'
|
42
|
-
fetch('UnpermittedParametersError').convert(original_error, overrides)
|
43
|
+
build_error_class.new(original_source.merge(overrides))
|
44
|
+
elsif build_error_class.respond_to?(:convert)
|
45
|
+
build_error_class.convert(original_error, overrides)
|
46
|
+
elsif build_error_class < Exception &&
|
47
|
+
build_error_class == original_error.class
|
48
|
+
::Erratum::Errors::RuntimeError.wrap(original_error)
|
49
|
+
else
|
50
|
+
::Erratum::Errors::RuntimeError.new(
|
51
|
+
message: "#{build_error_class.name}: #{original_error.inspect}",
|
52
|
+
)
|
43
53
|
end
|
44
54
|
end
|
55
|
+
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
45
56
|
|
46
57
|
def self.raise(error_type, **args)
|
47
58
|
Kernel.fail build(error_type, **args)
|
48
59
|
end
|
60
|
+
|
61
|
+
def self.fail(error_type, **args)
|
62
|
+
Kernel.fail build(error_type, **args)
|
63
|
+
end
|
64
|
+
|
65
|
+
alias fail raise
|
66
|
+
|
67
|
+
def self.error_name(error)
|
68
|
+
if error.is_a?(String)
|
69
|
+
error.gsub(/\A::/, '')
|
70
|
+
elsif error.is_a? Class
|
71
|
+
error.name
|
72
|
+
else
|
73
|
+
error.class.name
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def self.mapped_error_name(name)
|
78
|
+
configuration
|
79
|
+
.error_mappings
|
80
|
+
.fetch(name, name)
|
81
|
+
.gsub(/\A::/, '')
|
82
|
+
end
|
83
|
+
|
84
|
+
def self.error_class(name)
|
85
|
+
if const_defined?("::#{name}")
|
86
|
+
Object.const_get(name)
|
87
|
+
else
|
88
|
+
Object.const_get("Erratum::Errors::#{name}")
|
89
|
+
end
|
90
|
+
rescue NameError => error
|
91
|
+
Kernel.raise(
|
92
|
+
error.exception(<<~HEREDOC.chomp.tr("\n", ' ')),
|
93
|
+
Erratum could not find an error class with either the name "#{name}" or
|
94
|
+
with the name "Erratum::Errors::#{name}". Please verify the spelling and
|
95
|
+
that the class is loaded.
|
96
|
+
HEREDOC
|
97
|
+
)
|
98
|
+
end
|
49
99
|
end
|
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.
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- thegranddesign
|
@@ -31,8 +31,22 @@ cert_chain:
|
|
31
31
|
Y2GAoHKstmfIVhc4XHOPpmTd2o/C29O9oaRgjrkfQEhF/KvJ/PhoV5hvokzsCyI5
|
32
32
|
iUeXPfvrGD/itYIBCgk+fnzyQQ4QtE5hTQaWQ3o2
|
33
33
|
-----END CERTIFICATE-----
|
34
|
-
date: 2018-04-
|
34
|
+
date: 2018-04-27 00:00:00.000000000 Z
|
35
35
|
dependencies:
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: apple_core
|
38
|
+
requirement: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '1.0'
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '1.0'
|
36
50
|
- !ruby/object:Gem::Dependency
|
37
51
|
name: rspec
|
38
52
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,24 +128,23 @@ files:
|
|
114
128
|
- lib/erratum/configurable.rb
|
115
129
|
- lib/erratum/configuration.rb
|
116
130
|
- lib/erratum/error.rb
|
117
|
-
- lib/erratum/errors/
|
118
|
-
- lib/erratum/errors/
|
119
|
-
- lib/erratum/errors/
|
120
|
-
- lib/erratum/errors/
|
121
|
-
- lib/erratum/errors/
|
122
|
-
- lib/erratum/errors/
|
123
|
-
- lib/erratum/errors/
|
124
|
-
- lib/erratum/errors/
|
125
|
-
- lib/erratum/errors/
|
126
|
-
- lib/erratum/errors/
|
127
|
-
- lib/erratum/errors/
|
128
|
-
- lib/erratum/errors/
|
131
|
+
- lib/erratum/errors/authentication.rb
|
132
|
+
- lib/erratum/errors/authentication/duplicate_authentication.rb
|
133
|
+
- lib/erratum/errors/authentication/invalid_token.rb
|
134
|
+
- lib/erratum/errors/authentication/invalid_username_or_password.rb
|
135
|
+
- lib/erratum/errors/authorization.rb
|
136
|
+
- lib/erratum/errors/authorization/forbidden.rb
|
137
|
+
- lib/erratum/errors/crud.rb
|
138
|
+
- lib/erratum/errors/crud/invalid_association.rb
|
139
|
+
- lib/erratum/errors/crud/resource_not_found.rb
|
140
|
+
- lib/erratum/errors/crud/resource_persistence.rb
|
141
|
+
- lib/erratum/errors/request/parameter_missing.rb
|
142
|
+
- lib/erratum/errors/request/unpermitted_parameters.rb
|
143
|
+
- lib/erratum/errors/runtime_error.rb
|
129
144
|
- lib/erratum/rescuable_resource.rb
|
130
|
-
- lib/erratum/resource_naming.rb
|
131
|
-
- lib/erratum/utilities/string.rb
|
132
145
|
- lib/erratum/verifiable_resource.rb
|
133
146
|
- lib/erratum/version.rb
|
134
|
-
homepage: https://
|
147
|
+
homepage: https://example.com
|
135
148
|
licenses:
|
136
149
|
- MIT
|
137
150
|
metadata:
|
metadata.gz.sig
CHANGED
Binary file
|
@@ -1,42 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'erratum/utilities/string'
|
4
|
-
|
5
|
-
module Erratum
|
6
|
-
module ResourceNaming
|
7
|
-
CONTROLLER_RESOURCE_NAME_PATTERN = /\A((.*?::)?.*?)(\w+)Controller\z/
|
8
|
-
|
9
|
-
def plural_underscored_base_resource_name
|
10
|
-
@plural_underscored_base_resource_name ||= \
|
11
|
-
::Erratum::Utilities::String.pluralize(
|
12
|
-
::Erratum::Utilities::String.underscore(
|
13
|
-
plural_resource_base_class_name,
|
14
|
-
),
|
15
|
-
)
|
16
|
-
.downcase
|
17
|
-
end
|
18
|
-
|
19
|
-
def singular_underscored_base_resource_name
|
20
|
-
@singular_underscored_base_resource_name ||= \
|
21
|
-
::Erratum::Utilities::String.singularize(
|
22
|
-
::Erratum::Utilities::String.underscore(
|
23
|
-
plural_resource_base_class_name,
|
24
|
-
),
|
25
|
-
)
|
26
|
-
.downcase
|
27
|
-
end
|
28
|
-
|
29
|
-
def singular_resource_base_class_name
|
30
|
-
@singular_resource_base_class_name ||= \
|
31
|
-
::Erratum::Utilities::String
|
32
|
-
.singularize(plural_resource_base_class_name)
|
33
|
-
end
|
34
|
-
|
35
|
-
def plural_resource_base_class_name
|
36
|
-
@plural_resource_base_class_name ||= \
|
37
|
-
::Erratum::Utilities::String.pluralize(
|
38
|
-
name[CONTROLLER_RESOURCE_NAME_PATTERN, 3],
|
39
|
-
)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,147 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Erratum
|
4
|
-
module Utilities
|
5
|
-
class String
|
6
|
-
# rubocop:disable Style/PerlBackrefs
|
7
|
-
def self.camelize(other, uppercase_first_letter = true)
|
8
|
-
return unless other
|
9
|
-
return other.camelize if defined?(ActiveSupport::Inflector)
|
10
|
-
|
11
|
-
string = other.to_s
|
12
|
-
|
13
|
-
string = if uppercase_first_letter
|
14
|
-
string.sub(/^[a-z\d]*/, &:capitalize)
|
15
|
-
else
|
16
|
-
string.downcase
|
17
|
-
end
|
18
|
-
|
19
|
-
string.gsub!(%r{(?:_|(/))([a-z\d]*)}i) do
|
20
|
-
"#{$1}#{acronyms[$2] || $2.capitalize}"
|
21
|
-
end
|
22
|
-
|
23
|
-
string.gsub!('/', '::')
|
24
|
-
|
25
|
-
string
|
26
|
-
end
|
27
|
-
# rubocop:enable Style/PerlBackrefs
|
28
|
-
|
29
|
-
# rubocop:disable Metrics/MethodLength
|
30
|
-
def self.pluralize(other)
|
31
|
-
return unless other
|
32
|
-
return other.pluralize if defined?(ActiveSupport::Inflector)
|
33
|
-
|
34
|
-
result = other.to_s.dup
|
35
|
-
|
36
|
-
inflections = {
|
37
|
-
'person' => 'people',
|
38
|
-
'man' => 'men',
|
39
|
-
'child' => 'children',
|
40
|
-
'sex' => 'sexes',
|
41
|
-
'move' => 'moves',
|
42
|
-
'zombie' => 'zombies',
|
43
|
-
/(quiz)$/i => '\1zes',
|
44
|
-
/^(oxen)$/i => '\1',
|
45
|
-
/^(ox)$/i => '\1en',
|
46
|
-
/^(m|l)ice$/i => '\1ice',
|
47
|
-
/^(m|l)ouse$/i => '\1ice',
|
48
|
-
/(matr|vert|ind)(?:ix|ex)$/i => '\1ices',
|
49
|
-
/(x|ch|ss|sh)$/i => '\1es',
|
50
|
-
/([^aeiouy]|qu)y$/i => '\1ies',
|
51
|
-
/(hive)$/i => '\1s',
|
52
|
-
/(?:([^f])fe|([lr])f)$/i => '\1\2ves',
|
53
|
-
/sis$/i => 'ses',
|
54
|
-
/([ti])a$/i => '\1a',
|
55
|
-
/([ti])um$/i => '\1a',
|
56
|
-
/(buffal|tomat)o$/i => '\1oes',
|
57
|
-
/(bu)s$/i => '\1ses',
|
58
|
-
/(alias|status)$/i => '\1es',
|
59
|
-
/(octop|vir)i$/i => '\1i',
|
60
|
-
/(octop|vir)us$/i => '\1i',
|
61
|
-
/^(ax|test)is$/i => '\1es',
|
62
|
-
/s$/i => 's',
|
63
|
-
/$/ => 's',
|
64
|
-
}
|
65
|
-
|
66
|
-
inflections.each do |(rule, replacement)|
|
67
|
-
break if result.sub!(rule, replacement)
|
68
|
-
end
|
69
|
-
|
70
|
-
result
|
71
|
-
end
|
72
|
-
# rubocop:enable Metrics/MethodLength
|
73
|
-
|
74
|
-
# rubocop:disable Metrics/MethodLength, Metrics/AlignHash
|
75
|
-
def self.singularize(other)
|
76
|
-
return unless other
|
77
|
-
return other.singularize if defined?(ActiveSupport::Inflector)
|
78
|
-
|
79
|
-
result = other.to_s.dup
|
80
|
-
|
81
|
-
inflections = {
|
82
|
-
/(database)s$/i => '\1',
|
83
|
-
/(quiz)zes$/i => '\1',
|
84
|
-
/(matr)ices$/i => '\1ix',
|
85
|
-
/(vert|ind)ices$/i => '\1ex',
|
86
|
-
/^(ox)en/i => '\1',
|
87
|
-
/(alias|status)(es)?$/i => '\1',
|
88
|
-
/(octop|vir)(us|i)$/i => '\1us',
|
89
|
-
/^(a)x[ie]s$/i => '\1xis',
|
90
|
-
/(cris|test)(is|es)$/i => '\1is',
|
91
|
-
/(shoe)s$/i => '\1',
|
92
|
-
/(o)es$/i => '\1',
|
93
|
-
/(bus)(es)?$/i => '\1',
|
94
|
-
/^(m|l)ice$/i => '\1ouse',
|
95
|
-
/(x|ch|ss|sh)es$/i => '\1',
|
96
|
-
/(m)ovies$/i => '\1ovie',
|
97
|
-
/(s)eries$/i => '\1eries',
|
98
|
-
/([^aeiouy]|qu)ies$/i => '\1y',
|
99
|
-
/([lr])ves$/i => '\1f',
|
100
|
-
/(tive)s$/i => '\1',
|
101
|
-
/(hive)s$/i => '\1',
|
102
|
-
/([^f])ves$/i => '\1fe',
|
103
|
-
/(^analy)(sis|ses)$/i => '\1sis',
|
104
|
-
/
|
105
|
-
(
|
106
|
-
(a)naly |
|
107
|
-
(b)a |
|
108
|
-
(d)iagno |
|
109
|
-
(p)arenthe |
|
110
|
-
(p)rogno |
|
111
|
-
(s)ynop |
|
112
|
-
(t)he
|
113
|
-
)
|
114
|
-
(sis|ses)
|
115
|
-
$
|
116
|
-
/xi => '\1sis',
|
117
|
-
/([ti])a$/i => '\1um',
|
118
|
-
/(n)ews$/i => '\1ews',
|
119
|
-
/(ss)$/i => '\1',
|
120
|
-
/s$/i => '',
|
121
|
-
}
|
122
|
-
|
123
|
-
inflections.each do |(rule, replacement)|
|
124
|
-
break if result.sub!(rule, replacement)
|
125
|
-
end
|
126
|
-
|
127
|
-
result
|
128
|
-
end
|
129
|
-
# rubocop:enable Metrics/MethodLength, Metrics/AlignHash
|
130
|
-
|
131
|
-
def self.underscore(other)
|
132
|
-
return unless other
|
133
|
-
return other.underscore if defined?(ActiveSupport::Inflector)
|
134
|
-
|
135
|
-
word = other.to_s.gsub('::', '/')
|
136
|
-
word.gsub!(/(?:([A-Za-z\d])|^)(?=\b|[^a-z])/) do
|
137
|
-
"#{Regexp.last_match(1)}#{Regexp.last_match(1) && ''}"
|
138
|
-
end
|
139
|
-
word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2')
|
140
|
-
word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
|
141
|
-
word.tr!('-', '_')
|
142
|
-
word.downcase!
|
143
|
-
word
|
144
|
-
end
|
145
|
-
end
|
146
|
-
end
|
147
|
-
end
|