namae 0.8.7 → 0.9.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
- data/Gemfile +1 -1
- data/features/step_definitions/namae_steps.rb +11 -7
- data/lib/namae/name.rb +28 -0
- data/lib/namae/version.rb +2 -2
- data/namae.gemspec +3 -3
- data/spec/namae/name_spec.rb +38 -27
- data/spec/namae/parser_spec.rb +22 -22
- data/spec/namae/utility_spec.rb +3 -3
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ca79f39aed91f0816566c4374e8a80c2b10d7aef
|
|
4
|
+
data.tar.gz: 7e8b909610dab34673e3506f9abfbcbdba7f233a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1635916f55db9770ebc2b02b25af4b1d306119e5349db2ed6b5a146ab117e222081f7338c4e06a908fc1f1e8f58d887a99290cb4fecc7185f4baf3d508b15620
|
|
7
|
+
data.tar.gz: 891f0c209b26d0b0aabb79ad0cc1daa85410a900237482a36f0283ee674d603d68be12088ea9c4ae85ce35d1eee02ebb3dbe9b646d8052bd10e1c0e6b59246a8
|
data/Gemfile
CHANGED
|
@@ -13,24 +13,28 @@ end
|
|
|
13
13
|
|
|
14
14
|
Then /^the BibTeX parts should be:$/ do |table|
|
|
15
15
|
table.hashes.each do |row|
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
expect(
|
|
17
|
+
@name.values_at(:given, :particle, :family, :suffix).map(&:to_s)
|
|
18
|
+
).to eq(row.values_at('first', 'von', 'last', 'jr'))
|
|
18
19
|
end
|
|
19
20
|
end
|
|
20
21
|
|
|
21
22
|
Then /^the parts should be:$/ do |table|
|
|
22
23
|
table.hashes.each do |row|
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
expect(
|
|
25
|
+
@name.values_at(:given, :particle, :family, :suffix, :title, :appellation, :nick).map(&:to_s)
|
|
26
|
+
).to eq(row.values_at('given', 'particle', 'family', 'suffix', 'title', 'appellation', 'nick'))
|
|
25
27
|
end
|
|
26
28
|
end
|
|
27
29
|
|
|
28
30
|
Then /^there should be (\d+) names$/ do |count|
|
|
29
|
-
@names.length.
|
|
31
|
+
expect(@names.length).to eq(count.to_i)
|
|
30
32
|
end
|
|
31
33
|
|
|
32
34
|
Then /^the names should be:$/ do |table|
|
|
33
35
|
table.hashes.each_with_index do |row, i|
|
|
34
|
-
|
|
36
|
+
expect(
|
|
37
|
+
@names[i].values_at(*row.keys.map(&:to_sym)).map(&:to_s)
|
|
38
|
+
).to eq(row.values)
|
|
35
39
|
end
|
|
36
|
-
end
|
|
40
|
+
end
|
data/lib/namae/name.rb
CHANGED
|
@@ -49,6 +49,27 @@ module Namae
|
|
|
49
49
|
i.gsub!(/\s+/, '') unless options[:spaces]
|
|
50
50
|
i
|
|
51
51
|
end
|
|
52
|
+
|
|
53
|
+
# @param name [String] a name or part of a name
|
|
54
|
+
# @return [String] the passed-in name with normalized initials
|
|
55
|
+
def existing_initials_of(name, options = {})
|
|
56
|
+
return unless name
|
|
57
|
+
|
|
58
|
+
i = name.dup
|
|
59
|
+
|
|
60
|
+
i.gsub!(/\.+/, '')
|
|
61
|
+
i.gsub!(/\b[[:upper:]]+\b/) { |m| m.chars.join(' ') }
|
|
62
|
+
|
|
63
|
+
if options[:dots]
|
|
64
|
+
i.gsub!(/\b([[:upper:]])\b/, '\1.')
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
if !options[:spaces]
|
|
68
|
+
i.gsub!(/\b([[:upper:]]\.?)\s+/, '\1')
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
i
|
|
72
|
+
end
|
|
52
73
|
end
|
|
53
74
|
|
|
54
75
|
# A Name represents a single personal name, exposing its constituent
|
|
@@ -154,6 +175,13 @@ module Namae
|
|
|
154
175
|
super(*arguments.flatten.map { |k| k.is_a?(Symbol) ? Name.parts.index(k) : k })
|
|
155
176
|
end
|
|
156
177
|
|
|
178
|
+
def normalize_initials(options = {})
|
|
179
|
+
return self if given.nil?
|
|
180
|
+
|
|
181
|
+
options = Name.defaults[:initials].merge(options)
|
|
182
|
+
self.given = existing_initials_of given, options
|
|
183
|
+
self
|
|
184
|
+
end
|
|
157
185
|
|
|
158
186
|
# @return [String] a string representation of the name
|
|
159
187
|
def inspect
|
data/lib/namae/version.rb
CHANGED
data/namae.gemspec
CHANGED
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
|
5
|
-
# stub: namae 0.
|
|
5
|
+
# stub: namae 0.9.0 ruby lib
|
|
6
6
|
|
|
7
7
|
Gem::Specification.new do |s|
|
|
8
8
|
s.name = "namae"
|
|
9
|
-
s.version = "0.
|
|
9
|
+
s.version = "0.9.0"
|
|
10
10
|
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
12
12
|
s.require_paths = ["lib"]
|
|
13
13
|
s.authors = ["Sylvester Keil", "Dan Collis-Puro"]
|
|
14
|
-
s.date = "2014-
|
|
14
|
+
s.date = "2014-06-10"
|
|
15
15
|
s.description = " Namae (\u{540d}\u{524d}) is a parser for human names. It recognizes personal names of various cultural backgrounds and tries to split them into their component parts (e.g., given and family names, honorifics etc.). "
|
|
16
16
|
s.email = ["sylvester@keil.or.at", "dan@collispuro.com"]
|
|
17
17
|
s.extra_rdoc_files = [
|
data/spec/namae/name_spec.rb
CHANGED
|
@@ -4,117 +4,128 @@ module Namae
|
|
|
4
4
|
describe '.new' do
|
|
5
5
|
|
|
6
6
|
it 'returns an empty name by default' do
|
|
7
|
-
Name.new.
|
|
7
|
+
expect(Name.new).to be_empty
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
it 'sets all passed-in attributes' do
|
|
11
|
-
Name.new(:given => 'Foo').given.
|
|
11
|
+
expect(Name.new(:given => 'Foo').given).to eq('Foo')
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
it 'ignores unknown attributes' do
|
|
15
|
-
Name.new(:foo => 'bar').
|
|
15
|
+
expect(Name.new(:foo => 'bar')).to be_empty
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
describe '.parse' do
|
|
21
21
|
it 'returns an empty name for an empty string' do
|
|
22
|
-
Name.parse('').
|
|
23
|
-
Name.parse('').
|
|
22
|
+
expect(Name.parse('')).to be_empty
|
|
23
|
+
expect(Name.parse('')).to be_a(Name)
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
it 'returns a single name object if there is more than one name' do
|
|
27
|
-
Name.parse('Plato and Sokrates').given.
|
|
27
|
+
expect(Name.parse('Plato and Sokrates').given).to eq('Plato')
|
|
28
28
|
end
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
describe '#values_at' do
|
|
32
32
|
it 'returns an array with the given values' do
|
|
33
|
-
Name.new(:family => 'foo').values_at(:family).
|
|
33
|
+
expect(Name.new(:family => 'foo').values_at(:family)).to eq(['foo'])
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
it 'returns an array with the given values' do
|
|
37
|
-
Name.new(:family => 'foo').values_at(:family).
|
|
37
|
+
expect(Name.new(:family => 'foo').values_at(:family)).to eq(['foo'])
|
|
38
38
|
end
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
describe '#initials' do
|
|
42
42
|
it "returns the name's initials" do
|
|
43
|
-
Name.new(:family => 'Poe', :given => 'Edgar A.').initials.
|
|
43
|
+
expect(Name.new(:family => 'Poe', :given => 'Edgar A.').initials).to eq('E.A.P.')
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
it "returns the name's initials but leaves the family name expanded" do
|
|
47
|
-
Name.new(:family => 'Poe', :given => 'Edgar A.').initials(:expand => true).
|
|
47
|
+
expect(Name.new(:family => 'Poe', :given => 'Edgar A.').initials(:expand => true)).to eq('E.A. Poe')
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
describe '#normalize_initials' do
|
|
52
|
+
it "adds dots to existing initials" do
|
|
53
|
+
expect(Name.new(:given => 'Edgar A').normalize_initials.given).to eq('Edgar A.')
|
|
54
|
+
expect(Name.new(:given => 'A').normalize_initials.given).to eq('A.')
|
|
55
|
+
expect(Name.new(:given => 'E A').normalize_initials.given).to eq('E.A.')
|
|
56
|
+
expect(Name.new(:given => 'EA').normalize_initials.given).to eq('E.A.')
|
|
57
|
+
expect(Name.new(:given => 'JFK').normalize_initials.given).to eq('J.F.K.')
|
|
58
|
+
expect(Name.new(:given => 'E-A').normalize_initials.given).to eq('E.-A.')
|
|
48
59
|
end
|
|
49
60
|
end
|
|
50
61
|
|
|
51
62
|
describe '#merge' do
|
|
52
63
|
it 'merges the attributes in the given hash into the name' do
|
|
53
|
-
Name.new.merge(:family => 'foo').family.
|
|
64
|
+
expect(Name.new.merge(:family => 'foo').family).to eq('foo')
|
|
54
65
|
end
|
|
55
66
|
|
|
56
67
|
it 'merges the attributes in the given name into the name' do
|
|
57
|
-
Name.new.merge(Name.new(:family => 'foo')).family.
|
|
68
|
+
expect(Name.new.merge(Name.new(:family => 'foo')).family).to eq('foo')
|
|
58
69
|
end
|
|
59
70
|
|
|
60
71
|
it 'ignores unknown attributes' do
|
|
61
|
-
Name.new.merge(:foo => 'bar').
|
|
72
|
+
expect(Name.new.merge(:foo => 'bar')).to be_empty
|
|
62
73
|
end
|
|
63
74
|
|
|
64
75
|
it 'ignores nil values' do
|
|
65
|
-
Name.new(:family => 'foo').merge(:family => nil).family.
|
|
76
|
+
expect(Name.new(:family => 'foo').merge(:family => nil).family).to eq('foo')
|
|
66
77
|
end
|
|
67
78
|
end
|
|
68
79
|
|
|
69
80
|
describe '#inspect' do
|
|
70
81
|
it 'returns the name as a string' do
|
|
71
|
-
Name.new(:given => 'Ichiro').inspect.
|
|
82
|
+
expect(Name.new(:given => 'Ichiro').inspect).to eq('#<Name given="Ichiro">')
|
|
72
83
|
end
|
|
73
84
|
end
|
|
74
85
|
|
|
75
86
|
describe '#sort_order' do
|
|
76
87
|
it 'returns an empty string by default' do
|
|
77
|
-
Name.new.sort_order.
|
|
88
|
+
expect(Name.new.sort_order).to eq('')
|
|
78
89
|
end
|
|
79
90
|
|
|
80
91
|
it 'returns the name in sort order' do
|
|
81
|
-
Name.new(:given => 'Ichiro', :family => 'Suzuki').sort_order.
|
|
92
|
+
expect(Name.new(:given => 'Ichiro', :family => 'Suzuki').sort_order).to eq('Suzuki, Ichiro')
|
|
82
93
|
end
|
|
83
94
|
|
|
84
95
|
it 'returns only the given if there is no family name' do
|
|
85
|
-
Name.new(:given => 'Ichiro').sort_order.
|
|
96
|
+
expect(Name.new(:given => 'Ichiro').sort_order).to eq('Ichiro')
|
|
86
97
|
end
|
|
87
98
|
|
|
88
99
|
it 'returns only the family if there is no given name' do
|
|
89
|
-
Name.new(:family => 'Suzuki').sort_order.
|
|
100
|
+
expect(Name.new(:family => 'Suzuki').sort_order).to eq('Suzuki')
|
|
90
101
|
end
|
|
91
102
|
|
|
92
103
|
it 'includes the suffix' do
|
|
93
|
-
Name.new(:family => 'Griffey', :suffix => 'Jr.').sort_order.
|
|
94
|
-
Name.new(:family => 'Griffey', :given => 'Ken', :suffix => 'Jr.').sort_order.
|
|
104
|
+
expect(Name.new(:family => 'Griffey', :suffix => 'Jr.').sort_order).to eq('Griffey, Jr.')
|
|
105
|
+
expect(Name.new(:family => 'Griffey', :given => 'Ken', :suffix => 'Jr.').sort_order).to eq('Griffey, Jr., Ken')
|
|
95
106
|
end
|
|
96
107
|
end
|
|
97
108
|
|
|
98
109
|
describe '#display_order' do
|
|
99
110
|
it 'returns an empty string by default' do
|
|
100
|
-
Name.new.display_order.
|
|
111
|
+
expect(Name.new.display_order).to eq('')
|
|
101
112
|
end
|
|
102
113
|
|
|
103
114
|
it 'returns the name in display order' do
|
|
104
|
-
Name.new(:given => 'Ichiro', :family => 'Suzuki').display_order.
|
|
115
|
+
expect(Name.new(:given => 'Ichiro', :family => 'Suzuki').display_order).to eq('Ichiro Suzuki')
|
|
105
116
|
end
|
|
106
117
|
|
|
107
118
|
it 'returns only the given if there is no family name' do
|
|
108
|
-
Name.new(:given => 'Ichiro').display_order.
|
|
119
|
+
expect(Name.new(:given => 'Ichiro').display_order).to eq('Ichiro')
|
|
109
120
|
end
|
|
110
121
|
|
|
111
122
|
it 'returns only the family if there is no given name' do
|
|
112
|
-
Name.new(:family => 'Suzuki').display_order.
|
|
123
|
+
expect(Name.new(:family => 'Suzuki').display_order).to eq('Suzuki')
|
|
113
124
|
end
|
|
114
125
|
|
|
115
126
|
it 'includes the suffix' do
|
|
116
|
-
Name.new(:family => 'Griffey', :suffix => 'Jr.').display_order.
|
|
117
|
-
Name.new(:family => 'Griffey', :given => 'Ken', :suffix => 'Jr.').display_order.
|
|
127
|
+
expect(Name.new(:family => 'Griffey', :suffix => 'Jr.').display_order).to eq('Griffey Jr.')
|
|
128
|
+
expect(Name.new(:family => 'Griffey', :given => 'Ken', :suffix => 'Jr.').display_order).to eq('Ken Griffey Jr.')
|
|
118
129
|
end
|
|
119
130
|
end
|
|
120
131
|
|
data/spec/namae/parser_spec.rb
CHANGED
|
@@ -2,14 +2,14 @@ module Namae
|
|
|
2
2
|
describe 'Parser' do
|
|
3
3
|
|
|
4
4
|
it 'does not respond to .new' do
|
|
5
|
-
Parser.
|
|
5
|
+
expect(Parser).not_to respond_to(:new)
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
describe '.instance' do
|
|
9
9
|
let(:parser) { Parser.instance }
|
|
10
10
|
|
|
11
11
|
it 'returns the parser' do
|
|
12
|
-
parser.
|
|
12
|
+
expect(parser).to be_a(Parser)
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
describe '#next_token' do
|
|
@@ -19,35 +19,35 @@ module Namae
|
|
|
19
19
|
|
|
20
20
|
describe 'when the input is empty' do
|
|
21
21
|
it 'returns nil' do
|
|
22
|
-
parser.send(:next_token).
|
|
22
|
+
expect(parser.send(:next_token)).to be_nil
|
|
23
23
|
end
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
describe 'when the next input is " and "' do
|
|
27
27
|
before { parser.send(:input).string = ' and ' }
|
|
28
28
|
it 'returns an AND token' do
|
|
29
|
-
parser.send(:next_token).
|
|
29
|
+
expect(parser.send(:next_token)).to eq([:AND, :AND])
|
|
30
30
|
end
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
describe 'when the next input is " & "' do
|
|
34
34
|
before { parser.send(:input).string = ' & ' }
|
|
35
35
|
it 'returns an AND token' do
|
|
36
|
-
parser.send(:next_token).
|
|
36
|
+
expect(parser.send(:next_token)).to eq([:AND, :AND])
|
|
37
37
|
end
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
describe 'when the next input is " , "' do
|
|
41
41
|
before { parser.send(:input).string = ' , ' }
|
|
42
42
|
it 'returns a COMMA token' do
|
|
43
|
-
parser.send(:next_token).
|
|
43
|
+
expect(parser.send(:next_token)).to eq([:COMMA, :COMMA])
|
|
44
44
|
end
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
describe 'when the next input is " \'foo bar\' "' do
|
|
48
48
|
before { parser.send(:input).string = " 'foo bar' " }
|
|
49
49
|
it 'returns a NICK token' do
|
|
50
|
-
parser.send(:next_token).
|
|
50
|
+
expect(parser.send(:next_token)).to eq([:NICK, 'foo bar'])
|
|
51
51
|
end
|
|
52
52
|
end
|
|
53
53
|
|
|
@@ -55,7 +55,7 @@ module Namae
|
|
|
55
55
|
describe "the next token is #{appellation.inspect}" do
|
|
56
56
|
before { parser.send(:input).string = appellation }
|
|
57
57
|
it 'returns an APPELLATION token' do
|
|
58
|
-
parser.send(:next_token).
|
|
58
|
+
expect(parser.send(:next_token)).to eq([:APPELLATION, appellation])
|
|
59
59
|
end
|
|
60
60
|
end
|
|
61
61
|
end
|
|
@@ -64,11 +64,11 @@ module Namae
|
|
|
64
64
|
describe "the next token is #{suffix.inspect}" do
|
|
65
65
|
before { parser.send(:input).string = suffix }
|
|
66
66
|
it 'returns an SUFFIX token' do
|
|
67
|
-
parser.send(:next_token).
|
|
67
|
+
expect(parser.send(:next_token)).to eq([:SUFFIX, suffix])
|
|
68
68
|
end
|
|
69
69
|
|
|
70
70
|
it 'the input matches the suffix pattern' do
|
|
71
|
-
parser.suffix.
|
|
71
|
+
expect(parser.suffix).to match(suffix)
|
|
72
72
|
end
|
|
73
73
|
end
|
|
74
74
|
end
|
|
@@ -77,52 +77,52 @@ module Namae
|
|
|
77
77
|
|
|
78
78
|
describe '#parse!' do
|
|
79
79
|
it 'returns an empty list by default' do
|
|
80
|
-
parser.parse!('').
|
|
80
|
+
expect(parser.parse!('')).to be_empty
|
|
81
81
|
end
|
|
82
82
|
|
|
83
83
|
it 'returns a list of names' do
|
|
84
|
-
parser.parse!('foo')[0].
|
|
84
|
+
expect(parser.parse!('foo')[0]).to be_a(Name)
|
|
85
85
|
end
|
|
86
86
|
|
|
87
87
|
describe 'when parsing a single name' do
|
|
88
88
|
|
|
89
89
|
it 'treats "Ichiro" as a given name' do
|
|
90
|
-
parser.parse!('Ichiro')[0].given.
|
|
90
|
+
expect(parser.parse!('Ichiro')[0].given).to eq('Ichiro')
|
|
91
91
|
end
|
|
92
92
|
|
|
93
93
|
it 'treats "Lord Byron" as a title and family name' do
|
|
94
|
-
parser.parse!('Lord Byron')[0].values_at(:family, :title).
|
|
94
|
+
expect(parser.parse!('Lord Byron')[0].values_at(:family, :title)).to eq(['Byron', 'Lord'])
|
|
95
95
|
end
|
|
96
96
|
|
|
97
97
|
it 'parses given and family part name in "Ichiro Suzuki"' do
|
|
98
|
-
parser.parse!('Ichiro Suzuki')[0].values_at(:given, :family).
|
|
98
|
+
expect(parser.parse!('Ichiro Suzuki')[0].values_at(:given, :family)).to eq(%w{Ichiro Suzuki})
|
|
99
99
|
end
|
|
100
100
|
|
|
101
101
|
it 'parses given, nick and family part name in "Yukihiro \'Matz\' Matsumoto"' do
|
|
102
|
-
parser.parse!("Yukihiro 'Matz' Matsumoto")[0].values_at(:given, :family, :nick).
|
|
102
|
+
expect(parser.parse!("Yukihiro 'Matz' Matsumoto")[0].values_at(:given, :family, :nick)).to eq(%w{Yukihiro Matsumoto Matz})
|
|
103
103
|
end
|
|
104
104
|
|
|
105
105
|
it 'parses given, nick and family part name in \'Yukihiro "Matz" Matsumoto\'' do
|
|
106
|
-
parser.parse!('Yukihiro "Matz" Matsumoto')[0].values_at(:given, :family, :nick).
|
|
106
|
+
expect(parser.parse!('Yukihiro "Matz" Matsumoto')[0].values_at(:given, :family, :nick)).to eq(%w{Yukihiro Matsumoto Matz})
|
|
107
107
|
end
|
|
108
108
|
|
|
109
109
|
it 'parses given and family name in "Poe, Edgar A."' do
|
|
110
|
-
parser.parse!('Poe, Edgar A.')[0].values_at(:given, :family).
|
|
110
|
+
expect(parser.parse!('Poe, Edgar A.')[0].values_at(:given, :family)).to eq(['Edgar A.', 'Poe'])
|
|
111
111
|
end
|
|
112
112
|
|
|
113
113
|
%w{Mr. Mr Mrs. Ms Herr Frau Miss}.each do |appellation|
|
|
114
114
|
it "recognizes #{appellation.inspect} as an appellation" do
|
|
115
|
-
parser.parse!([appellation, 'Edgar A. Poe'].join(' '))[0].appellation.
|
|
115
|
+
expect(parser.parse!([appellation, 'Edgar A. Poe'].join(' '))[0].appellation).to eq(appellation)
|
|
116
116
|
end
|
|
117
117
|
end
|
|
118
118
|
|
|
119
119
|
it 'parses common Jr. as a suffix in sort order' do
|
|
120
|
-
parser.parse!('Griffey, Jr., Ken')[0].values_at(:given, :family, :suffix).
|
|
121
|
-
parser.parse!('Griffey, Ken, Jr.')[0].values_at(:given, :family, :suffix).
|
|
120
|
+
expect(parser.parse!('Griffey, Jr., Ken')[0].values_at(:given, :family, :suffix)).to eq(['Ken', 'Griffey', 'Jr.'])
|
|
121
|
+
expect(parser.parse!('Griffey, Ken, Jr.')[0].values_at(:given, :family, :suffix)).to eq(['Ken', 'Griffey', 'Jr.'])
|
|
122
122
|
end
|
|
123
123
|
|
|
124
124
|
it 'parses common Jr. as a suffix in display order' do
|
|
125
|
-
parser.parse!('Ken Griffey Jr.')[0].values_at(:given, :family, :suffix).
|
|
125
|
+
expect(parser.parse!('Ken Griffey Jr.')[0].values_at(:given, :family, :suffix)).to eq(['Ken', 'Griffey', 'Jr.'])
|
|
126
126
|
end
|
|
127
127
|
|
|
128
128
|
end
|
data/spec/namae/utility_spec.rb
CHANGED
|
@@ -2,19 +2,19 @@ describe 'Namae' do
|
|
|
2
2
|
|
|
3
3
|
describe '.parse' do
|
|
4
4
|
it 'returns an empty list by default' do
|
|
5
|
-
Namae.parse('').
|
|
5
|
+
expect(Namae.parse('')).to be_empty
|
|
6
6
|
end
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
describe '.parse!' do
|
|
10
10
|
it 'returns an empty list by default' do
|
|
11
|
-
Namae.parse!('').
|
|
11
|
+
expect(Namae.parse!('')).to be_empty
|
|
12
12
|
end
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
describe '.options' do
|
|
16
16
|
it 'returns the parse options' do
|
|
17
|
-
Namae.options.
|
|
17
|
+
expect(Namae.options).to equal(Namae::Parser.instance.options)
|
|
18
18
|
end
|
|
19
19
|
end
|
|
20
20
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: namae
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.9.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sylvester Keil
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2014-
|
|
12
|
+
date: 2014-06-10 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: simplecov
|