diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..20b3b3b --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.byebug_history +Gemfile.lock \ No newline at end of file diff --git a/Rakefile b/Rakefile index 67c8283..3383b4d 100644 --- a/Rakefile +++ b/Rakefile @@ -7,5 +7,5 @@ Hoe.spec('namelib') do |p| self.readme_file = 'README.md' developer("Gaspard d'Hautefeuille.eu", "ruby@dhautefeuille.eu") license 'GPL' - extra_dev_deps << ['minitest', '~> 4.0'] + extra_dev_deps << ['minitest', '~> 5.0'] end diff --git a/lib/namelib.rb b/lib/namelib.rb index 56e85fa..d6731cd 100644 --- a/lib/namelib.rb +++ b/lib/namelib.rb @@ -1,6 +1,33 @@ +require 'byebug' module Namelib VERSION = '2.1.0' + POST_NOMINAL_INITIALS = %w( + VC GC KG LG KT LT KP GCB OM GCSI GCMG GCIE GCVO GBE CH KCB DCB KCSI KCMG + DCMG KCIE KCVO DCVO KBE DBE CB CSI CMG CIE CVO CBE DSO LVO OBE ISO MVO MBE + IOM CGC RRC DSC MC DFC AFC ARRC OBI DCM CGM GM IDSM DSM MM DFM AFM SGM IOM + CPM QGM RVM BEM QPM QFSM QAM CPM MSM ERD VD TD UD ED RD VRD AE + + PC ADC QHP QHS QHDS QHNS QHC SCJ J LJ QS SL QC KC JP DL MP MSP MSYP AM AM + MLA MEP DBEnv DConstMgt DREst EdD DPhil PhD DLitt DSocSci MD EngD DD LLD + DProf MA MArch MAnth MSc MMORSE MMath MMathStat MPharm MPhil MSc MSci MSt + MRes MEng MChem MBiochem MSocSc MMus LLM BCL MPhys MComp MAcc MFin MBA MPA + MEd MEP MEnt MCGI MGeol MLitt MEarthSc MClinRes BA BSc LLB BEng MBChB FdA + FdSc FdEng PgDip PgD PgCert PgC PgCLTHE AUH AKC AUS HNC HNCert HND HNDip + DipHE Dip OND CertHE ACSM MCSM DIC AICSM ARSM ARCS LLB LLM BCL MJur DPhil + PhD LLD DipLP FCILEx GCILEx ACILEx CQSW DipSW BSW MSW FCILT CMILT MILT CPL + CTP CML PLS CTL DLP PLog EJLog ESLog EMLog JrLog Log SrLog BArch MArch ARB + RIBA RIAS RIAI RSAW MB BM BS BCh BChir MRCS FRCS MS MCh. MRCP FRCP MRCPCH + FRCPCH MRCPath MFPM FFPM BDS MRCPsych FRCPsych MRCOG FRCOG MCEM FCEM FRCA + FFPMRCA MRCGP FRCGP BSc MScChiro MChiro MSc DC LFHOM MFHOM FFHOM FADO FBDO + FCOptom MCOptom MOst DPT MCSP FCSP. SROT MSCR FSCR. CPhT RN VN RVN BVSc + BVetMed VetMB BVM&S MRCVS FRCVS FAWM PGCAP PGCHE PGCE PGDE BEd NPQH QTS + CSci CSciTeach RSci RSciTech CEng IEng EngTech ICTTech DEM MM CMarEng + CMarSci CMarTech IMarEng MarEngTech RGN SRN RMN RSCN SEN EN RNMH RN RM RN1 + RNA RN2 RN3 RNMH RN4 RN5 RNLD RN6 RN8 RNC RN7 RN9 RHV RSN ROH RFHN SPAN + SPMH SPCN SPLD SPHP SCHM SCLD SPCC SPDN V100 V200 V300 LPE MSc + ) + # Returns a new +String+ with the contents properly namecased def nc(options = {}) Namelib.nc self, options @@ -16,7 +43,7 @@ def self.nc! str, options = {} end def self.nc str, options = {} - options = { :lazy => true, :irish => true, :spanish => true }.merge options + options = { :lazy => true, :irish => true, :spanish => true, :post_nominal_initials => true }.merge options # Skip if string is mixed case if options[:lazy] @@ -80,6 +107,12 @@ def self.nc str, options = {} end end + if options[:post_nominal_initials] + POST_NOMINAL_INITIALS.each do |pni| + localstring.gsub!(/(\b)(#{pni})(.?\s*)$/i, '\1' + pni + '\3') + end + end + localstring end end diff --git a/namelib.gemspec b/namelib.gemspec index 532d199..f37e597 100644 --- a/namelib.gemspec +++ b/namelib.gemspec @@ -24,7 +24,7 @@ Gem::Specification.new do |s| if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then s.add_development_dependency(%q, ["~> 4.0"]) - s.add_development_dependency(%q, ["~> 4.0"]) + s.add_development_dependency(%q, ["~> 5.0"]) s.add_development_dependency(%q, ["~> 3.13"]) else s.add_dependency(%q, ["~> 4.0"]) diff --git a/test/test_namelib.rb b/test/test_namelib.rb index 0909827..66027a3 100644 --- a/test/test_namelib.rb +++ b/test/test_namelib.rb @@ -29,6 +29,13 @@ def setup "Henry VIII", "Louis III", "Louis XIV", "Charles II", "Fred XLIX", "Yusof bin Ishak", ] + + @proper_names_with_post_initials = [ + "Keith Smith PhD", "John McAfee MEarthSc", + "Jan van Yke, MCOptom", "John el Grecco, PhD.", + "Mike Spaceattheend RSciTech. ", + "Richard de l'Hôpital Mas i Gavarró V200" + ] end def test_namelib @@ -41,6 +48,16 @@ def test_namelib end end + def test_namelib_post_nominal_initials + @proper_names_with_post_initials.each do |name| + assert_equal(name, Namelib(name.downcase)) + n = name.dup + n.extend(Namelib) + assert_equal(name, n.nc) + assert_equal(name, Namelib(name)) + end + end + def test_namelib_modify @proper_names.each do |name| nc_name = Namelib!(name.downcase)