From b7b96b8a20376a6db53a7286f218c5f6a4ed71e0 Mon Sep 17 00:00:00 2001 From: Kevin Glowacz Date: Thu, 28 Jan 2021 16:11:30 -0600 Subject: [PATCH 1/2] Fix parsing of hyphenated last name, first name --- lib/nameable/latin.rb | 2 +- spec/nameable/latin_spec.rb | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/nameable/latin.rb b/lib/nameable/latin.rb index dc31382..50d0daf 100644 --- a/lib/nameable/latin.rb +++ b/lib/nameable/latin.rb @@ -120,7 +120,7 @@ def parse(name) raise InvalidNameError unless name if name.class == String if name.index(',') - name = "#{Regexp.last_match(2)} #{Regexp.last_match(1)}" if name =~ /^([a-z]+)\s*,\s*,*([^,]*)/i + name = "#{Regexp.last_match(2)} #{Regexp.last_match(1)}" if name =~ /^([a-z-]+)\s*,\s*,*([^,]*)/i end name = name.strip.split(/\s+/) diff --git a/spec/nameable/latin_spec.rb b/spec/nameable/latin_spec.rb index 04154b7..fd139a2 100644 --- a/spec/nameable/latin_spec.rb +++ b/spec/nameable/latin_spec.rb @@ -156,6 +156,10 @@ it_behaves_like :generalized_parsing, "Chris #{last}", [nil, 'Chris', nil, 'Horn-Derp', nil] end end + + context 'with a hyphenated last name, first name' do + it_behaves_like :generalized_parsing, 'Horn-Derp, Chris', [nil, 'Chris', nil, 'Horn-Derp', nil] + end end context 'gender' do From d1ebdceb4667db3fd519d54bb7b7324b044f66c6 Mon Sep 17 00:00:00 2001 From: Kevin Glowacz Date: Thu, 28 Jan 2021 16:26:47 -0600 Subject: [PATCH 2/2] Account for all hyphenated scenarios in last, first --- lib/nameable/latin.rb | 2 +- spec/nameable/latin_spec.rb | 16 +++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/nameable/latin.rb b/lib/nameable/latin.rb index 50d0daf..5d6ca4d 100644 --- a/lib/nameable/latin.rb +++ b/lib/nameable/latin.rb @@ -120,7 +120,7 @@ def parse(name) raise InvalidNameError unless name if name.class == String if name.index(',') - name = "#{Regexp.last_match(2)} #{Regexp.last_match(1)}" if name =~ /^([a-z-]+)\s*,\s*,*([^,]*)/i + name = "#{Regexp.last_match(2)} #{Regexp.last_match(1)}" if name =~ /^([a-z]+(?:\s*-{1,2}\s*[a-z]+)*)\s*,\s*,*([^,]*)/i end name = name.strip.split(/\s+/) diff --git a/spec/nameable/latin_spec.rb b/spec/nameable/latin_spec.rb index fd139a2..39f893f 100644 --- a/spec/nameable/latin_spec.rb +++ b/spec/nameable/latin_spec.rb @@ -151,14 +151,20 @@ end end + context 'with a hyphenated last name' do - ['Horn - Derp', 'Horn-Derp', 'Horn--Derp', 'Horn -- Derp'].each do |last| - it_behaves_like :generalized_parsing, "Chris #{last}", [nil, 'Chris', nil, 'Horn-Derp', nil] + hyphenated_last_names = ['Horn - Derp', 'Horn-Derp', 'Horn--Derp', 'Horn -- Derp'] + context 'in standard order' do + hyphenated_last_names.each do |last| + it_behaves_like :generalized_parsing, "Chris #{last}", [nil, 'Chris', nil, 'Horn-Derp', nil] + end end - end - context 'with a hyphenated last name, first name' do - it_behaves_like :generalized_parsing, 'Horn-Derp, Chris', [nil, 'Chris', nil, 'Horn-Derp', nil] + context 'in last name, first name' do + hyphenated_last_names.each do |last| + it_behaves_like :generalized_parsing, "#{last}, Chris", [nil, 'Chris', nil, 'Horn-Derp', nil] + end + end end end