capitalize-names 1.0.3 → 1.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 +5 -5
- data/lib/capitalize_names.rb +1 -1
- data/lib/capitalize_names/capitalizer.rb +62 -45
- data/lib/capitalize_names/errors.rb +3 -10
- data/lib/capitalize_names/version.rb +3 -0
- metadata +23 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: a8e58cd8d2216549bc0bd47a2f3ce851abbcf8eed7e404a84ec43593b81fe959
|
4
|
+
data.tar.gz: 77f0ce726f15d3ca5e793be5485c282b71fac70a9b7bd01df4d0c648fcb4e66b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e6dd722c7e906cef3d58c203da2a52d2274ddc115dd902169b02f6f80c34f3ff81c2484a3f86ca11a6cf41f0ffabad3a3dbe48911daa2b899dc539cf0e0c4738
|
7
|
+
data.tar.gz: f438bda12d9d4eac554b297f9e4044f4c7663197e32ed355fcb2701a1d1048252088057f82b19c2c8b3838bfe64468e18857251e7f62d872065333dd615cbf7f
|
data/lib/capitalize_names.rb
CHANGED
@@ -2,6 +2,12 @@ module CapitalizeNames
|
|
2
2
|
class Capitalizer
|
3
3
|
attr_accessor :name
|
4
4
|
|
5
|
+
HYPHEN = /(\s*-\s*)/
|
6
|
+
|
7
|
+
MC = /^Mc(\w)(?=\w)/i
|
8
|
+
MAC = /^Mac(\w)(?=\w)/i
|
9
|
+
O_APOSTROPHE = /^O'(\w)(?=\w)/i
|
10
|
+
|
5
11
|
def initialize(name)
|
6
12
|
@name = name
|
7
13
|
end
|
@@ -14,7 +20,7 @@ module CapitalizeNames
|
|
14
20
|
def capitalize
|
15
21
|
begin
|
16
22
|
capitalize!
|
17
|
-
rescue
|
23
|
+
rescue CapitalizeNames::Errors::GenericError
|
18
24
|
name
|
19
25
|
end
|
20
26
|
end
|
@@ -25,59 +31,70 @@ module CapitalizeNames
|
|
25
31
|
true
|
26
32
|
end
|
27
33
|
|
34
|
+
def surname_suffix_position?(position, name, surname_or_suffix)
|
35
|
+
# surname/suffix must be:
|
36
|
+
# 1. at start of name or after a space or a -
|
37
|
+
# -and-
|
38
|
+
# 2. followed by the end of string or a space or a -
|
39
|
+
(
|
40
|
+
(position == 0) || \
|
41
|
+
(
|
42
|
+
position > 0 && (name[position-1] == ' ' || name[position-1] == '-')
|
43
|
+
)
|
44
|
+
) && (
|
45
|
+
(name.length == position+surname_or_suffix.length) || \
|
46
|
+
(name[position+surname_or_suffix.length] == ' ') || (name[position+surname_or_suffix.length] == '-')
|
47
|
+
)
|
48
|
+
end
|
49
|
+
|
28
50
|
def _capitalize
|
29
|
-
|
30
|
-
mc = /^Mc(\w)(?=\w)/i
|
31
|
-
mac = /^Mac(\w)(?=\w)/i
|
32
|
-
oap = /^O'(\w)(?=\w)/i
|
33
|
-
hyphens_index = []
|
34
|
-
while nm.index('-') do
|
35
|
-
index = nm.index('-')
|
36
|
-
hyphens_index << index
|
37
|
-
nm = nm[0...index] + ' ' + nm[index+1..-1]
|
38
|
-
end
|
51
|
+
_name = name
|
39
52
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
end
|
52
|
-
}.map{|w|
|
53
|
-
begin
|
54
|
-
w.gsub(oap, "O'" + w[2].upcase)
|
55
|
-
rescue
|
56
|
-
w
|
53
|
+
hyphens = []
|
54
|
+
|
55
|
+
while (match = _name.match(HYPHEN)) do
|
56
|
+
_start = match.begin(1)
|
57
|
+
_end = match.end(1)
|
58
|
+
_value = match[1]
|
59
|
+
|
60
|
+
if _start == 0
|
61
|
+
_name = _name[_end..-1]
|
62
|
+
else
|
63
|
+
_name = _name[0..._start] << ' ' << _name[_end..-1]
|
57
64
|
end
|
65
|
+
|
66
|
+
hyphens << [_start, _end, _value]
|
67
|
+
end
|
68
|
+
|
69
|
+
_name = _name.split.map{ |w|
|
70
|
+
w.mb_chars.capitalize.to_str
|
71
|
+
}.map{ |w|
|
72
|
+
w.gsub(MC) { "Mc#{$1.upcase}" }\
|
73
|
+
.gsub(MAC) { "Mac#{$1.upcase}" }\
|
74
|
+
.gsub(O_APOSTROPHE) { "O'#{$1.upcase}" }
|
58
75
|
}
|
59
76
|
|
60
|
-
|
61
|
-
|
62
|
-
|
77
|
+
_name = _name.join(" ")
|
78
|
+
|
79
|
+
hyphens.reverse.each do |_start, _end, _value|
|
80
|
+
if _start == 0
|
81
|
+
_name = _value << _name
|
82
|
+
else
|
83
|
+
_name = _name[0..._start] << _value << (_name[_start+1..-1] || "")
|
84
|
+
end
|
63
85
|
end
|
64
86
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
(CapitalizeNames::SURNAMES + CapitalizeNames::SUFFIXES).each do |
|
69
|
-
|
70
|
-
if
|
71
|
-
|
72
|
-
# 1. at start of name or after a space or a -
|
73
|
-
# -and-
|
74
|
-
# 2. followed by the end of string or a space or a -
|
75
|
-
if ( ((pos == 0) or (pos > 0 and (nm[pos-1] == ' ' or nm[pos-1] == '-'))) and ((nm.length == pos+surname.length) or (nm[pos+surname.length] == ' ') or (nm[pos+surname.length] == '-')) )
|
76
|
-
nm = nm[0...pos] + surname + nm[pos+surname.length..-1]
|
77
|
-
end
|
87
|
+
_name = _name.gsub("Van ", "van ").gsub("De ", "de ").gsub("Dit ", "dit ")
|
88
|
+
_name << " "
|
89
|
+
|
90
|
+
(CapitalizeNames::SURNAMES + CapitalizeNames::SUFFIXES).each do |surname_or_suffix|
|
91
|
+
position = _name.downcase.index(surname_or_suffix.downcase)
|
92
|
+
if position and surname_suffix_position?(position, _name, surname_or_suffix)
|
93
|
+
_name = _name[0...position] << surname_or_suffix << _name[position+surname_or_suffix.length..-1]
|
78
94
|
end
|
79
95
|
end
|
80
|
-
|
96
|
+
|
97
|
+
_name[0...-1]
|
81
98
|
end
|
82
99
|
end
|
83
100
|
end
|
@@ -1,13 +1,6 @@
|
|
1
1
|
module CapitalizeNames
|
2
2
|
module Errors
|
3
|
-
class
|
4
|
-
|
5
|
-
self.constants
|
6
|
-
.map { |c| self.const_get(c) }
|
7
|
-
.select{ |c| c < Exception }
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
class InvalidName < Exception; end;
|
3
|
+
class GenericError < Exception; end
|
4
|
+
class InvalidName < GenericError; end
|
12
5
|
end
|
13
|
-
end
|
6
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capitalize-names
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kyle Tate
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-09-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -24,20 +24,34 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: minitest
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
|
-
- - "
|
45
|
+
- - ">="
|
32
46
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
47
|
+
version: '0'
|
34
48
|
type: :development
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
|
-
- - "
|
52
|
+
- - ">="
|
39
53
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
54
|
+
version: '0'
|
41
55
|
description: 'A simple gem to capitalize names, based off of: http://dzone.com/snippets/capitalize-proper-names'
|
42
56
|
email: kbt.tate@gmail.com
|
43
57
|
executables: []
|
@@ -49,6 +63,7 @@ files:
|
|
49
63
|
- lib/capitalize_names/errors.rb
|
50
64
|
- lib/capitalize_names/suffixes.rb
|
51
65
|
- lib/capitalize_names/surnames.rb
|
66
|
+
- lib/capitalize_names/version.rb
|
52
67
|
homepage: http://github.com/infiton/capitalize-names
|
53
68
|
licenses:
|
54
69
|
- MIT
|
@@ -59,7 +74,7 @@ require_paths:
|
|
59
74
|
- lib
|
60
75
|
required_ruby_version: !ruby/object:Gem::Requirement
|
61
76
|
requirements:
|
62
|
-
- - "
|
77
|
+
- - ">"
|
63
78
|
- !ruby/object:Gem::Version
|
64
79
|
version: '2.0'
|
65
80
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
@@ -69,7 +84,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
69
84
|
version: '0'
|
70
85
|
requirements: []
|
71
86
|
rubyforge_project:
|
72
|
-
rubygems_version: 2.
|
87
|
+
rubygems_version: 2.7.6
|
73
88
|
signing_key:
|
74
89
|
specification_version: 4
|
75
90
|
summary: Capitalizes names; handles edge cases.
|