nomener 0.2.8 → 0.2.9

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.
@@ -1,29 +1,33 @@
1
1
  #-- encoding: UTF-8
2
+ require 'nomener/base'
3
+
2
4
  module Nomener
5
+ # Module for suffix information
3
6
  module Suffixes
7
+ extend Nomener::Base
4
8
 
5
9
  # Internal: Regex to match suffixes or honorifics after names
6
10
  SUFFIXES = %r/(?<=\p{^Alpha})(?:
7
- AB # Bachelor of Arts
11
+ AB # Bachelor of Arts
8
12
  | APC
9
- | Attorney[\p{Blank}\-]at[\p{Blank}\-]Law\.? # Attorney at Law, Attorney-at-Law
10
- | B[AS]c? # Bachelor of Arts, Bachelor of Science
13
+ | Attorney[\p{Blank}\-]at[\p{Blank}\-]Law\.? # Attorney at Law
14
+ | B[AS]c? # Bachelor of Arts,Science
11
15
  | C\.?P\.?A\.?
12
16
  | CHB
13
17
  | DBE
14
- | D\.?[DMOPV]\.?[SMD]?\.? # DMD, DO, DPM, DDM, DVM
18
+ | D\.?[DMOPV]\.?[SMD]?\.? # DMD, DO, DPM, DDM, DVM
15
19
  | DSC
16
- | Esq(?:\.|uire\.?)? # Esq, Esquire
17
- | FAC(?:P|S) # FACP, FACS
20
+ | Esq(?:\.|uire\.?)? # Esq, Esquire
21
+ | FAC(?:P|S) # FACP, FACS
18
22
  | fils
19
23
  | FRSL
20
- | (?:[VX]?I{1,3})(?!\.) # roman numbers
21
- | (?:IX|IV|V|VI|XI)(?!\.) # roman numbers
22
- | (?:X{1,3})(?!\.) # roman numbers
24
+ | (?:[VX]?I{1,3})(?!\.) # roman numbers
25
+ | (?:IX|IV|V|VI|XI)(?!\.) # roman numbers
26
+ | (?:X{1,3})(?!\.) # roman numbers
23
27
  | Jn?r\.?
24
28
  | Junior
25
29
  | LLB
26
- | M\.?[BDS]\.?ed? # MB, MD, MS, MSed
30
+ | M\.?[BDS]\.?ed? # MB, MD, MS, MSed
27
31
  | MPH
28
32
  | P\.?\p{Blank}?A\.?
29
33
  | PC
@@ -31,10 +35,23 @@ module Nomener
31
35
  | Ph\.?\p{Blank}?D\.?
32
36
  | RN
33
37
  | SC
34
- | Sn?r\.? # Snr, Sr
38
+ | Sn?r\.? # Snr, Sr
35
39
  | Senior
36
40
  | V\.?M\.?D\.?
37
41
  )(?=[^\p{Alpha}\p{Blank}]+|\z)/x
42
+
43
+ # Internal: pull off what suffixes we can
44
+ # Modifies given string in place.
45
+ #
46
+ # nm - string of the name to parse
47
+ #
48
+ # Returns string of the suffixes found or and empty string
49
+ def self.parse_suffix!(nm)
50
+ return '' if nm.to_s.empty?
51
+
52
+ suffix = dustoff gut!(nm, SUFFIXES)
53
+ Cleaner.cleanup! nm
54
+ suffix
55
+ end
38
56
  end
39
57
  end
40
-
@@ -1,106 +1,128 @@
1
1
  #-- encoding: UTF-8
2
+ require 'nomener/base'
3
+
2
4
  module Nomener
5
+ # Module for title information
3
6
  module Titles
4
-
5
- # Internal: Regex for matching name prefixes such as honorifics and other formalities
6
- TITLES = %r!\b(
7
- خانم # Persian Mrs ?
8
- | (?:רעב|'ר) # Yiddish Mr.
9
- | አቶ # Amharic Mr.
10
- | Adi # Fiji
7
+ extend Nomener::Base
8
+
9
+ # Internal: Regex for matching name prefixes such as honorifics
10
+ # and other formalities
11
+ TITLES = %r/\b(?:
12
+ خانم # Persian Mrs ?
13
+ | (?:רעב|'ר) # Yiddish Mr.
14
+ | አቶ # Amharic Mr.
15
+ | Adi # Fiji
11
16
  | Air\p{Blank}(?:Commander|Commodore|Marshall) # Air Commander, Commodore, Marshall
12
17
  | Ald(?:erman|\.)?
13
- | (?:Arch)?Du(?:ke|chess) # Duke, Archduke, Duchess, Archduchess
14
- | Ato # Amharic Mr.
18
+ | (?:Arch)?Du(?:ke|chess) # Duke, Archduke, Duchess, Archduchess
19
+ | Ato # Amharic Mr.
15
20
  | Baron(?:ess)?
16
21
  | Bishop
17
- | Bulou # Fiji
22
+ | Bulou # Fiji
18
23
  | Brig(?:adier)?
19
24
  | Brother
20
25
  | Capt(?:ain|\.)?
21
- | Cdr\.? # Commander
26
+ | Cdr\.? # Commander
22
27
  | Chaplain
23
28
  | Colonel
24
- | Comm(?:ander|odore) # Commander, Commodore
29
+ | Comm(?:ander|odore) # Commander, Commodore
25
30
  | Count(?:ess)?
26
31
  | Dame
27
32
  | Det\.?
28
33
  | Dhr\.?
29
34
  | Doctor
30
35
  | Dr\.?
31
- # | Dona # Always with first name
32
- # | Do[mn] # Always with first name
36
+ # | Dona # Always with first name
37
+ # | Don # Always with first name
33
38
  | Dom
34
- | Erzherzog(?:in)? # Erzherzog, Erzherzogin
39
+ | Erzherzog(?:in)? # Erzherzog, Erzherzogin
35
40
  | Father
36
41
  | Field\p{Blank}Marshall
37
- | Flt?\.?(?:\p{Blank}(?:Lt|Off)\.?) # Fl Lt, Flt Lt, Fl Off, Flt Off
38
- | Flight(?:\p{Blank}(?:Lieutenant|Officer)) # Flight Lieutenant, Flight Officer
42
+ | Flt?\.?(?:\p{Blank}(?:Lt|Off)\.?) # Fl Lt, Flt Lt, Fl Off, Flt Off
43
+ | Flight(?:\p{Blank}(?:Lieutenant|Officer)) # Flight Lieutenant, Flight Officer
39
44
  | Frau
40
45
  | Fr\.?
41
- | Gen(?:eral|\.)? # General
42
- | H[äe]rra # Estonian, Finnish Mr
46
+ | Gen(?:eral|\.)? # General
47
+ | H[äe]rra # Estonian, Finnish Mr
43
48
  | Herr
44
- | Hra?\.? # Finnish
45
- | (?:Rt\.?|Right)?\p{Blank}?Hon\.?(?:ourable)? # Honourable, Right Honourable
46
- | Insp\.?(?:ector)? # Inspector
49
+ | Hra?\.? # Finnish
50
+ | (?:Rt\.?|Right)?\p{Blank}?Hon\.?(?:ourable)? # Honourable, Right Honourable
51
+ | Insp\.?(?:ector)? # Inspector
47
52
  | Judge
48
53
  | Justice
49
- | Khaanom # Persian Mrs
54
+ | Khaanom # Persian Mrs
50
55
  | Lady
51
56
  | Lieutenant(?:\p{Blank}(?:Commander|Colonel|General))? # Lieutenant, Lieutenant Commander, Lieutenant Colonel, Lieutenant General
52
- | Lt\.?(?:\p{Blank}(?:Cdr|Col|Gen)\.?)? # Lt, Lt Col, Lt Cdr, Lt Gen
57
+ | Lt\.?(?:\p{Blank}(?:Cdr|Col|Gen)\.?)? # Lt, Lt Col, Lt Cdr, Lt Gen
53
58
  | (?:Lt|Leut|Lieut)\.?
54
59
  | Lord
60
+ # | M\.? # French
55
61
  | Madam(?:e)?
62
+ | Mademoiselle # French
56
63
  | Maid
57
- | Major(?:\p{Blank}General)? # Major, Major General
58
- | Maj\.?(?:\p{Blank}Gen\.?)? # Maj, Maj Gen
64
+ | Ma[îi]tre # French
65
+ | Major(?:\p{Blank}General)? # Major, Major General
66
+ | Maj\.?(?:\p{Blank}Gen\.?)? # Maj, Maj Gen
59
67
  | (?:Master|Technical|Staff)?\p{Blank}?Sergeant
60
- | [MTS]?Sgt\.? # Master, Staff, Technical, or just Sergeant
68
+ | [MTS]?Sgt\.? # Master, Staff, Technical, or just Sergeant
61
69
  | Mast(?:er|\.)?
62
70
  | Matron
63
71
  | Menina
64
72
  | Messrs
65
73
  | Meneer
74
+ | Mlle\.? # French
66
75
  | Miss\.?
67
76
  | Mister
68
- | Mn[er]\.? # Mne (Mnr) Afrikaans Mr.
69
- | Mons(?:ignor|\.?) # Monsignor
77
+ | Mn[er]\.? # Mne (Mnr) Afrikaans Mr.
78
+ | Mme\.? # French
79
+ | Mons(?:ignor|\.?) # Monsignor
80
+ | Monsieur # French
70
81
  | Most\p{Blank}Rever[e|a]nd
71
- | Mother(?:\p{Blank}Superior)? # Mother, Mother Superior
82
+ | Mother(?:\p{Blank}Superior)? # Mother, Mother Superior
72
83
  | Mrs?\.?
73
- | Msgr\.? # Monsignor
74
- | M\/?s\.? # Ms, M/s
84
+ | Msgr\.? # Monsignor
85
+ | M\/?s\.? # Ms, Ms
75
86
  | Mt\.?\p{Blank}Revd?\.?
76
87
  | Mx\.?
77
- | (?-i:ông) # Vietnamese Mr. must be lowercase
88
+ | (?-i:ông) # Vietnamese Mr. must be lowercase
78
89
  | Pastor
79
90
  | Private
80
- | Prof(?:essor|\.)? # Professor, Prof
81
- | Pte\.? # Private
82
- | Pvt\.? # Private
83
- | PFC # Private first class
91
+ | Prof(?:essor|esseur|\.)? # Professor, Professeur, Prof
92
+ | Pte\.? # Private
93
+ | Pvt\.? # Private
94
+ | PFC # Private first class
84
95
  | Rabbi
85
- | Ratu # Fiji Sir
86
- | Reb\.? # Yiddish Mr.
96
+ | Ratu # Fiji Sir
97
+ | Reb\.? # Yiddish Mr.
87
98
  | Rever[e|a]nd
88
99
  | Revd?\.?
89
- | Ro(?:ko)? # Fiji
90
- | Se[nñ]h?orita # senorita, señorita, senhorita
91
- | Se[nñ]h?ora # senora, señora, senhora
92
- | Se[nñ][hy]?or(?:\p{Blank}Dom)? # senor, señor, senhor, senyor, senor dom
100
+ | Ro(?:ko)? # Fiji
101
+ | Se[nñ]h?orita # senorita, señorita, senhorita
102
+ | Se[nñ]h?ora # senora, señora, senhora
103
+ | Se[nñ][hy]?or(?:\p{Blank}Dom)? # senor,señor,senhor,senyor,senor dom
93
104
  | Sénher
94
105
  | Seigneur
95
106
  | Signor(?:a|e)
96
107
  | Sig(?:a|ra)?\.?
97
- | Sioro # Ido Mr.
98
- | Sro\.? # Ido Mr.
108
+ | Sioro # Ido Mr.
109
+ | Sro\.? # Ido Mr.
99
110
  | Sir
100
111
  | Sister
101
112
  | Sr(?:a|ta)?\.?
102
113
  | V\.?\ Revd?\.?
103
114
  | Very\ Rever[e|a]nd
104
- )\b!xi
115
+ )\b/xi
116
+
117
+ # Internal: pull off a title if we can
118
+ # Modifies given string in place.
119
+ #
120
+ # nm - string of the name to parse
121
+ #
122
+ # Returns string of the title found or and empty string
123
+ def self.parse_title!(nm)
124
+ return '' if nm.to_s.empty?
125
+ dustoff gut!(nm, TITLES)
126
+ end
105
127
  end
106
128
  end
@@ -1,4 +1,5 @@
1
1
  #-- encoding: UTF-8
2
+ # Module defining the Nomener version
2
3
  module Nomener
3
- VERSION = "0.2.8"
4
+ VERSION = '0.2.9'
4
5
  end
@@ -1,19 +1,19 @@
1
1
  #-- encoding: UTF-8
2
2
  require 'spec_helper'
3
3
 
4
- RSpec.describe "Nomener::Helper" do
4
+ RSpec.describe "Nomener::Cleaner" do
5
5
  context "with reformat" do
6
6
  it "returns the same string given" do
7
- expect(Nomener::Helper.reformat("Joe \"John\" O'Smith")).to eq "Joe \"John\" O'Smith"
7
+ expect(Nomener::Cleaner.reformat("Joe \"John\" O'Smith")).to eq "Joe \"John\" O'Smith"
8
8
  end
9
9
  it "returns the string with curved double quotes replaced" do
10
- expect(Nomener::Helper.reformat("Joe “John” O'Smith")).to eq "Joe \"John\" O'Smith"
10
+ expect(Nomener::Cleaner.reformat("Joe “John” O'Smith")).to eq "Joe \"John\" O'Smith"
11
11
  end
12
12
  it "returns the string with curved single quotes replaced" do
13
- expect(Nomener::Helper.reformat("Joe ‘John’ O'Smith")).to eq "Joe 'John' O'Smith"
13
+ expect(Nomener::Cleaner.reformat("Joe ‘John’ O'Smith")).to eq "Joe 'John' O'Smith"
14
14
  end
15
15
  it "returns the string with double angle quotes replaced" do
16
- expect(Nomener::Helper.reformat("Joe «John» O'Smith")).to eq "Joe \"John\" O'Smith"
16
+ expect(Nomener::Cleaner.reformat("Joe «John» O'Smith")).to eq "Joe \"John\" O'Smith"
17
17
  end
18
18
  end
19
19
  end
@@ -48,32 +48,6 @@ RSpec.describe "Nomener::Parser" do
48
48
 
49
49
  end
50
50
 
51
- context "with parse_title" do
52
- [
53
- {from: "Mr. Joe Smith", to: "Mr"},
54
- {from: "Joe Smith", to: ""},
55
- ].each do |name|
56
- it "returns the title from #{name[:from]}" do
57
- parsed = Nomener::Parser.parse_title!(name[:from])
58
- expect(parsed).to eq name[:to]
59
- end
60
- end
61
- end
62
-
63
- context "with parse_suffix" do
64
- [
65
- {from: "Mr. Joe Smith I", to: "I"},
66
- {from: "Joe Smith II", to: "II"},
67
- {from: "Joe Smith DMD", to: "DMD"},
68
- {from: "Joe Smith Jr. DMD", to: "Jr DMD"},
69
- ].each do |name|
70
- it "returns the suffix from #{name[:from]}" do
71
- parsed = Nomener::Parser.parse_suffix!(name[:from])
72
- expect(parsed).to eq name[:to]
73
- end
74
- end
75
- end
76
-
77
51
  context "with parse_nick" do
78
52
  [
79
53
  {from: "Joe Smith", to: ""},
@@ -5,4 +5,18 @@ RSpec.describe "Nomener::Suffixes" do
5
5
  it "has the constant regex SUFFIXES" do
6
6
  expect(Nomener::Suffixes::SUFFIXES).to be_a_kind_of(Regexp)
7
7
  end
8
+
9
+ context "with parse_suffix" do
10
+ [
11
+ {from: "Mr. Joe Smith I", to: "I"},
12
+ {from: "Joe Smith II", to: "II"},
13
+ {from: "Joe Smith DMD", to: "DMD"},
14
+ {from: "Joe Smith Jr. DMD", to: "Jr DMD"},
15
+ ].each do |name|
16
+ it "returns the suffix from #{name[:from]}" do
17
+ parsed = Nomener::Suffixes.parse_suffix!(name[:from])
18
+ expect(parsed).to eq name[:to]
19
+ end
20
+ end
21
+ end
8
22
  end
@@ -5,4 +5,237 @@ RSpec.describe "Nomener::Titles" do
5
5
  it "has the constant regex TITLES" do
6
6
  expect(Nomener::Titles::TITLES).to be_a_kind_of(Regexp)
7
7
  end
8
+
9
+ context "in the names" do
10
+ [
11
+ { name: "خانم Augusta Ada King", result: "خانم" },
12
+ { name: "רעב Bertrand Russell", result: "רעב" },
13
+ { skip: "Something is typed, or we clean it, improperly",
14
+ name: "'ר Bertrand Russell", result: "'ר" },
15
+ { name: "አቶ Bertrand Russell", result: "አቶ" },
16
+ { name: "Adi Augusta Ada King", result: "Adi" },
17
+ { name: "Air Commander Bertrand Russell", result: "Air Commander" },
18
+ { name: "Air Commodore Bertrand Russell", result: "Air Commodore" },
19
+ { name: "Air Marshall Bertrand Russell", result: "Air Marshall" },
20
+ { name: "Ald. Bertrand Russell", result: "Ald" },
21
+ { name: "Alderman Bertrand Russell", result: "Alderman" },
22
+ { name: "Archduke Bertrand Russell", result: "Archduke" },
23
+ { name: "Duke Bertrand Russell", result: "Duke" },
24
+ { name: "Archduchess Augusta Ada King", result: "Archduchess" },
25
+ { name: "Duchess Augusta Ada King", result: "Duchess" },
26
+ { name: "Ato Bertrand Russell", result: "Ato" },
27
+ { name: "Baron Bertrand Russell", result: "Baron" },
28
+ { name: "Baroness Augusta Ada King", result: "Baroness" },
29
+ { name: "Bishop Bertrand Russell", result: "Bishop" },
30
+ { name: "Brig Bertrand Russell", result: "Brig" },
31
+ { name: "Brig. Bertrand Russell", result: "Brig" },
32
+ { name: "Brigadier Bertrand Russell", result: "Brigadier" },
33
+ { name: "Brother Bertrand Russell", result: "Brother" },
34
+ { name: "Bulou Augusta Ada King", result: "Bulou" },
35
+ { name: "Capt Bertrand Russell", result: "Capt" },
36
+ { name: "Capt. Bertrand Russell", result: "Capt" },
37
+ { name: "Captain Bertrand Russell", result: "Captain" },
38
+ { name: "Cdr Bertrand Russell", result: "Cdr" },
39
+ { name: "Cdr. Bertrand Russell", result: "Cdr" },
40
+ { name: "Chaplain Bertrand Russell", result: "Chaplain" },
41
+ { name: "Colonel Bertrand Russell", result: "Colonel" },
42
+ { name: "Commander Bertrand Russell", result: "Commander" },
43
+ { name: "Commodore Bertrand Russell", result: "Commodore" },
44
+ { name: "Count Bertrand Russell", result: "Count" },
45
+ { name: "Countess Augusta Ada King", result: "Countess" },
46
+ { name: "Dame Augusta Ada King", result: "Dame" },
47
+ { name: "Det Bertrand Russell", result: "Det" },
48
+ { name: "Det. Bertrand Russell", result: "Det" },
49
+ { name: "Dhr Bertrand Russell", result: "Dhr" },
50
+ { name: "Dhr. Bertrand Russell", result: "Dhr" },
51
+ { name: "Doctor Bertrand Russell", result: "Doctor" },
52
+ { name: "Dr Bertrand Russell", result: "Dr" },
53
+ { name: "Dr. Bertrand Russell", result: "Dr" },
54
+ { name: "Dom Bertrand Russell", result: "Dom" },
55
+ # { name: "Don Bertrand Russell", result: "Don" },
56
+ # { name: "Dona Augusta Ada King", result: "Dona" },
57
+ { name: "Erzherzog Bertrand Russell", result: "Erzherzog" },
58
+ { name: "Erzherzogin Augusta Ada King", result: "Erzherzogin" },
59
+ { name: "Father Bertrand Russell", result: "Father" },
60
+ { name: "Field Marshall Bertrand Russell", result: "Field Marshall" },
61
+ { name: "Fl Lt Bertrand Russell", result: "Fl Lt" },
62
+ { name: "Fl. Lt. Bertrand Russell", result: "Fl Lt" },
63
+ { name: "Flt Lt Bertrand Russell", result: "Flt Lt" },
64
+ { name: "Flt. Lt. Bertrand Russell", result: "Flt Lt" },
65
+ { name: "Fl Off Bertrand Russell", result: "Fl Off" },
66
+ { name: "Fl. Off. Bertrand Russell", result: "Fl Off" },
67
+ { name: "Flt Off Bertrand Russell", result: "Flt Off" },
68
+ { name: "Flt. Off. Bertrand Russell", result: "Flt Off" },
69
+ { name: "Flight Officer Bertrand Russell", result: "Flight Officer" },
70
+ { name: "Flight Lieutenant Bertrand Russell", result: "Flight Lieutenant" },
71
+ { name: "Frau Augusta Ada King", result: "Frau" },
72
+ { name: "Fr Augusta Ada King", result: "Fr" },
73
+ { name: "Fr. Augusta Ada King", result: "Fr" },
74
+ { name: "Gen. Bertrand Russell", result: "Gen" },
75
+ { name: "General Bertrand Russell", result: "General" },
76
+ { name: "Herra Bertrand Russell", result: "Herra" },
77
+ { name: "Härra Bertrand Russell", result: "Härra" },
78
+ { name: "Herr Bertrand Russell", result: "Herr" },
79
+ { name: "Hra Bertrand Russell", result: "Hra" },
80
+ { name: "Hra. Bertrand Russell", result: "Hra" },
81
+ { name: "Hr Bertrand Russell", result: "Hr" },
82
+ { name: "Hr. Bertrand Russell", result: "Hr" },
83
+ { name: "Rt Hon Bertrand Russell", result: "Rt Hon" },
84
+ { name: "Rt. Hon. Bertrand Russell", result: "Rt Hon" },
85
+ { name: "Hon Bertrand Russell", result: "Hon" },
86
+ { name: "Hon. Bertrand Russell", result: "Hon" },
87
+ { name: "Right Honourable Bertrand Russell", result: "Right Honourable" },
88
+ { name: "Honourable Bertrand Russell", result: "Honourable" },
89
+ { name: "Insp Bertrand Russell", result: "Insp" },
90
+ { name: "Insp. Bertrand Russell", result: "Insp" },
91
+ { name: "Inspector Bertrand Russell", result: "Inspector" },
92
+ { name: "Judge Bertrand Russell", result: "Judge" },
93
+ { name: "Justice Bertrand Russell", result: "Justice" },
94
+ { name: "Khaanom Augusta Ada King", result: "Khaanom" },
95
+ { name: "Lady Augusta Ada King", result: "Lady" },
96
+ { name: "Lieutenant Bertrand Russell", result: "Lieutenant" },
97
+ { name: "Lieutenant Commander Bertrand Russell", result: "Lieutenant Commander" },
98
+ { name: "Lieutenant Colonel Bertrand Russell", result: "Lieutenant Colonel" },
99
+ { name: "Lieutenant General Bertrand Russell", result: "Lieutenant General" },
100
+ { name: "Lt Col Bertrand Russell", result: "Lt Col" },
101
+ { name: "Lt. Col. Bertrand Russell", result: "Lt Col" },
102
+ { name: "Lt Cdr Bertrand Russell", result: "Lt Cdr" },
103
+ { name: "Lt. Cdr. Bertrand Russell", result: "Lt Cdr" },
104
+ { name: "Lt Col Bertrand Russell", result: "Lt Col" },
105
+ { name: "Lt. Col. Bertrand Russell", result: "Lt Col" },
106
+ { name: "Lt Gen Bertrand Russell", result: "Lt Gen" },
107
+ { name: "Lt. Gen. Bertrand Russell", result: "Lt Gen" },
108
+ { name: "Lt Bertrand Russell", result: "Lt" },
109
+ { name: "Lt. Bertrand Russell", result: "Lt" },
110
+ { name: "Leut Bertrand Russell", result: "Leut" },
111
+ { name: "Leut. Bertrand Russell", result: "Leut" },
112
+ { name: "Lieut Bertrand Russell", result: "Lieut" },
113
+ { name: "Lieut. Bertrand Russell", result: "Lieut" },
114
+ { name: "Lord Bertrand Russell", result: "Lord" },
115
+ { name: "Madam Augusta Ada King", result: "Madam" },
116
+ { name: "Madame Augusta Ada King", result: "Madame" },
117
+ { name: "Mademoiselle Augusta Ada King", result: "Mademoiselle" },
118
+ { name: "Maid Augusta Ada King", result: "Maid" },
119
+ { name: "Maître Bertrand Russell", result: "Maître" },
120
+ { name: "Major Bertrand Russell", result: "Major" },
121
+ { name: "Major General Bertrand Russell", result: "Major General" },
122
+ { name: "Maj Bertrand Russell", result: "Maj" },
123
+ { name: "Maj. Bertrand Russell", result: "Maj" },
124
+ { name: "Maj Gen Bertrand Russell", result: "Maj Gen" },
125
+ { name: "Maj. Gen. Bertrand Russell", result: "Maj Gen" },
126
+ { name: "Mast Bertrand Russell", result: "Mast" },
127
+ { name: "Mast. Bertrand Russell", result: "Mast" },
128
+ { name: "Master Bertrand Russell", result: "Master" },
129
+ { name: "Master Sergeant Bertrand Russell", result: "Master Sergeant" },
130
+ { name: "Matron Augusta Ada King", result: "Matron" },
131
+ { name: "Menina Augusta Ada King", result: "Menina" },
132
+ { name: "Messrs Bertrand Russell", result: "Messrs" },
133
+ { name: "Meneer Bertrand Russell", result: "Meneer" },
134
+ { name: "Mlle Augusta Ada King", result: "Mlle" },
135
+ { name: "Miss Augusta Ada King", result: "Miss" },
136
+ { name: "Miss. Augusta Ada King", result: "Miss" },
137
+ { name: "Mister Bertrand Russell", result: "Mister" },
138
+ { name: "Mne Bertrand Russell", result: "Mne" },
139
+ { name: "Mne. Bertrand Russell", result: "Mne" },
140
+ { name: "Mme. Augusta Ada King", result: "Mme" },
141
+ { name: "Mnr Bertrand Russell", result: "Mnr" },
142
+ { name: "Mnr. Bertrand Russell", result: "Mnr" },
143
+ { name: "Mons Bertrand Russell", result: "Mons" },
144
+ { name: "Mons. Bertrand Russell", result: "Mons" },
145
+ { name: "Monsignor Bertrand Russell", result: "Monsignor" },
146
+ { name: "Monsieur Bertrand Russell", result: "Monsieur" },
147
+ { name: "Most Reverend Bertrand Russell", result: "Most Reverend" },
148
+ { name: "Most Reverand Bertrand Russell", result: "Most Reverand" },
149
+ { name: "Mother Augusta Ada King", result: "Mother" },
150
+ { name: "Mother Superior Augusta Ada King", result: "Mother Superior" },
151
+ { name: "Mr Bertrand Russell", result: "Mr" },
152
+ { name: "Mr. Bertrand Russell", result: "Mr" },
153
+ { name: "Mrs Augusta Ada King", result: "Mrs" },
154
+ { name: "Mrs. Augusta Ada King", result: "Mrs" },
155
+ { name: "Msgr. Bertrand Russell", result: "Msgr" },
156
+ { name: "Ms Augusta Ada King", result: "Ms" },
157
+ { name: "Ms. Augusta Ada King", result: "Ms" },
158
+ { name: "MSgt Bertrand Russell", result: "MSgt" },
159
+ { name: "MSgt. Bertrand Russell", result: "MSgt" },
160
+ { name: "Mt Rev Bertrand Russell", result: "Mt Rev" },
161
+ { name: "Mt. Rev. Bertrand Russell", result: "Mt Rev" },
162
+ { name: "Mt Revd Bertrand Russell", result: "Mt Revd" },
163
+ { name: "Mt. Revd. Bertrand Russell", result: "Mt Revd" },
164
+ { name: "Mx Bertrand Russell", result: "Mx" },
165
+ { name: "Mx. Bertrand Russell", result: "Mx" },
166
+ { name: "ông Bertrand Russell", result: "ông" },
167
+ { name: "Pastor Bertrand Russell", result: "Pastor" },
168
+ { name: "Private Bertrand Russell", result: "Private" },
169
+ { name: "Prof Bertrand Russell", result: "Prof" },
170
+ { name: "Prof. Bertrand Russell", result: "Prof" },
171
+ { name: "Professor Bertrand Russell", result: "Professor" },
172
+ { name: "Professeur Bertrand Russell", result: "Professeur" },
173
+ { name: "Pte Bertrand Russell", result: "Pte" },
174
+ { name: "Pte. Bertrand Russell", result: "Pte" },
175
+ { name: "Pvt Bertrand Russell", result: "Pvt" },
176
+ { name: "Pvt. Bertrand Russell", result: "Pvt" },
177
+ { name: "PFC Bertrand Russell", result: "PFC" },
178
+ { name: "Rabbi Bertrand Russell", result: "Rabbi" },
179
+ { name: "Ratu Bertrand Russell", result: "Ratu" },
180
+ { name: "Reb Bertrand Russell", result: "Reb" },
181
+ { name: "Reb. Bertrand Russell", result: "Reb" },
182
+ { name: "Rev Bertrand Russell", result: "Rev" },
183
+ { name: "Revd Bertrand Russell", result: "Revd" },
184
+ { name: "Reverand Bertrand Russell", result: "Reverand" },
185
+ { name: "Reverend Bertrand Russell", result: "Reverend" },
186
+ { name: "Ro Bertrand Russell", result: "Ro" },
187
+ { name: "Roko Bertrand Russell", result: "Roko" },
188
+ { name: "Senora Augusta Ada King", result: "Senora" },
189
+ { name: "Señora Augusta Ada King", result: "Señora" },
190
+ { name: "Senhora Augusta Ada King", result: "Senhora" },
191
+ { name: "Senor Bertrand Russell", result: "Senor" },
192
+ { name: "Señor Bertrand Russell", result: "Señor" },
193
+ { name: "Senhor Bertrand Russell", result: "Senhor" },
194
+ { name: "Senyor Bertrand Russell", result: "Senyor" },
195
+ { name: "Sénher Bertrand Russell", result: "Sénher" },
196
+ { name: "Senor Dom Bertrand Russell", result: "Senor Dom" },
197
+ { name: "Senorita Augusta Ada King", result: "Senorita" },
198
+ { name: "Señorita Augusta Ada King", result: "Señorita" },
199
+ { name: "Senhorita Augusta Ada King", result: "Senhorita" },
200
+ { name: "Seigneur Bertrand Russell", result: "Seigneur" },
201
+ { name: "Signore Bertrand Russell", result: "Signore" },
202
+ { name: "Signora Augusta Ada King", result: "Signora" },
203
+ { name: "Sig Bertrand Russell", result: "Sig" },
204
+ { name: "Sig. Bertrand Russell", result: "Sig" },
205
+ { name: "Siga Bertrand Russell", result: "Siga" },
206
+ { name: "Siga. Bertrand Russell", result: "Siga" },
207
+ { name: "Sigra Bertrand Russell", result: "Sigra" },
208
+ { name: "Sigra. Bertrand Russell", result: "Sigra" },
209
+ { name: "Sioro Bertrand Russell", result: "Sioro" },
210
+ { name: "Sro Bertrand Russell", result: "Sro" },
211
+ { name: "Sro. Bertrand Russell", result: "Sro" },
212
+ { name: "Sgt Bertrand Russell", result: "Sgt" },
213
+ { name: "Sgt. Bertrand Russell", result: "Sgt" },
214
+ { name: "Sergeant Bertrand Russell", result: "Sergeant" },
215
+ { name: "SSgt Bertrand Russell", result: "SSgt" },
216
+ { name: "SSgt. Bertrand Russell", result: "SSgt" },
217
+ { name: "Sir Bertrand Russell", result: "Sir" },
218
+ { name: "Sister Augusta Ada King", result: "Sister" },
219
+ { name: "Sr Bertrand Russell", result: "Sr" },
220
+ { name: "Sr. Bertrand Russell", result: "Sr" },
221
+ { name: "Sra Augusta Ada King", result: "Sra" },
222
+ { name: "Sra. Augusta Ada King", result: "Sra" },
223
+ { name: "Srta Augusta Ada King", result: "Srta" },
224
+ { name: "Srta. Augusta Ada King", result: "Srta" },
225
+ { name: "Staff Sergeant Bertrand Russell", result: "Staff Sergeant" },
226
+ { name: "Technical Sergeant Bertrand Russell", result: "Technical Sergeant" },
227
+ { name: "TSgt Bertrand Russell", result: "TSgt" },
228
+ { name: "TSgt. Bertrand Russell", result: "TSgt" },
229
+ { name: "V Revd Bertrand Russell", result: "V Revd" },
230
+ { name: "V. Revd. Bertrand Russell", result: "V Revd" },
231
+ { name: "Very Reverend Bertrand Russell", result: "Very Reverend" },
232
+ { name: "Very Reverand Bertrand Russell", result: "Very Reverand" },
233
+ ].each do |name|
234
+ it "parses #{name[:result]} from #{name[:name]}" do
235
+ skip name[:skip] if name.has_key?(:skip)
236
+ parsed = Nomener::Titles.parse_title!(name[:name])
237
+ expect(parsed).to eq name[:result]
238
+ end
239
+ end
240
+ end
8
241
  end