Class: Lobbyliste::Factories::PersonFactory

Inherits:
Object
  • Object
show all
Defined in:
lib/lobbyliste/factories/person_factory.rb

Overview

This class is used to build a person from raw line data It has to split titles from the actual name

Constant Summary collapse

REGEX =

A list of regular expressions that try to match any titles that might occur

[
   # Prof titles
  /Prof\.?/,
  # Dr. titles
  /(PhD|Dr\.(([a-z]+\.?)+|(\-\w+\.?))*)/,
  # Dipl. titles
  /(Magister|(Dipl[\.|\-]+)([\w|ÖöÄäÜüß]*[\.|\-]*)*)/,
  # other academic abbreviations
  /\b([a-z|A-Z]{2,}\.)+/,
  # h.c.
  /h\.\s?c\./,
  # general abbreviations
  /\(?\b(M\.?Sc|B\.?Sc|B\.?sc|FH|fh|BA|Ba|TH|Th|VWA|univ|US|PD|RA|CCM|LD|Ing\.|OTL|CISA|CIA|CISM|CRISC|StB|vBP|StD|habil|med)\b\)?/,
  # job titles
  /((^\s*und)?(Mathematiker|(Bundes)?Vorstand|^Arzt|Assistent|Generalstabs[aä]rzt|Augenoptikermeister|Bankkauf|Bau-Ing\.|Betriebswirtschaftslehre|Mediziner|agrar|Schneidwerkzeugmechanikermeister|Studienassessor|Gesundheitsökonom|Syndikus|Straßenbaumeister|^Bruder|Pater|Prälat|Theologe|Jurist|\bmed|Ministerpräsident|(Medizin)?pädagog|Verwaltungs-Wirt|Veterinär|^Kauf|Generalleutnant|General|Generalarzt|Ergotherapeut|Fregattenkapitän|Agrarbiolog|Amtsanw[aä]lt|Apotheker|(Freie )?Architekt|(Berg-)?Assessor|Betriebswirt|^Bischof( von [a-z]+)?|Botschafter|(vereidigter )?Buchprüfer|Bundesbankoberamtsrat|Bundesinnungsmeister|Bundesminister|Bundespräsident|Bundestagspräsident|Bürgermeister|Chefapotheker|Diakon|Dompropst|Augenoptiker|Optometrist|Biolog|Brennmeister|Chemiker|((Kommunikations|Grafik)[\-\s]?)?Designer|Finanzwirt|Forstwirt|Geograph|Geolog|Geophysiker|Handelslehrer|Holzwirt|Informatiker|Jurist|Kauf|Mathematiker|Medizinpädagog|Meteorolog|physiker|Politolog|Psycholog|Pädagog|Rechtspfleger|Restaurator|Sachverständig|Sozialpädagog|Sozialwirt|Sozialwissenschaftler|Soziolog|Stomatolog|Verwaltungsbetriebswirt|Verwaltungswirt|Verwaltungswissenschaftler|Volkswirt|Wirtschafts(ing)?|Wirtschaftsjurist|Ökonom|Übersetzer|Domkapitular|Probst|Finanzfachwirt|(Forst|Bau)assessor|Hauptfeldwebel|Hauptmann|Honorar|Honorargeneralkonsul|Honorarkonsul|Justizminister|Kapitän(leutnant)?|Konsul|Land(es)?rat|Landwirtschaftsmeister|Lohnsteuerberater|Landwirtschaftsdirektor|Luftverkehrskauf|Magistratsr[aä]t|BreigGen|Generalmajor|Major|Minist|Ministerialdirektor|Ministerialdirigent|Monsignore|Notar|Oberamtsanw[aä]lt|Oberbürgermeister|Oberfeldarzt|Obermeister|Oberst|Oberstaatsanw[aä]lt|Oberstabsboots|Oberstabsfeldwebel|Oberstleutnant|Oberstudiendirektor|Staatssekretär|Parlamentarischer|Parlamentspräsident|Patentanw[aä]lt|(Landesjugend)?[Pp]farrer|Politikwissenschaftler|Privatdozent|Priv(\\.|at)-?Dozent|RA|Ran|Fachanwalt( für [a-z]+)?|Realschulrektor|Rechtsreferent|Regierungsamts(rat)?|Regionspräsident|Revieroberjäger|(Vorsitzender? )?Richter(in)?( am [a-zA-Z]+)?|Senator|Staats(minister|sekretär)|Stabsfeldwebel|Stabshauptmann|(Steuer|Wirtschafts)(berater|prüfer)|Stuckateurmeister|Studiendirektor|Studienrat|Uni(v(ersitäts)?)?|Verleger|Rechtsjournalist|Rechtsjurist|Veterinärdirektor|Vizepräsident des Verwaltungsgerichts|Visuelle Kommunikation|Zahntechnikermeister)(er|e|\s?in|mann|frau)?)(\s?am\s(Finanzgericht|Bundesverwaltungsgerichtshof|Verwaltungsgerichtshof))?(\bD\.)?(\s?a\.D\.)?([\.\-,\s\/]+|$)/,
  # Beamtenbezeichnung?
  /^D\.\s/,
  # more abbreviations
  /\b[A-ZÜÄÖ]{2,}\b/,
  # Everything after first colon
  /,.*$/
]

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(raw_data) ⇒ PersonFactory

Returns a new instance of PersonFactory.



39
40
41
42
# File 'lib/lobbyliste/factories/person_factory.rb', line 39

def initialize(raw_data)
  @raw_data = raw_data
  @name = nil
end

Class Method Details

.build(raw_data) ⇒ Lobbylist::Person

Returns builds a new person, might be nil if the line does not represent a person.

Returns:

  • (Lobbylist::Person)

    builds a new person, might be nil if the line does not represent a person



34
35
36
37
# File 'lib/lobbyliste/factories/person_factory.rb', line 34

def self.build(raw_data)
  factory = new(raw_data)
  factory.is_person? ? ::Lobbyliste::Person.new(factory.name,factory.titles,raw_data) : nil
end

Instance Method Details

#is_person?Boolean

Returns:

  • (Boolean)


59
60
61
# File 'lib/lobbyliste/factories/person_factory.rb', line 59

def is_person?
  !name.nil? && name.length > 2 && name.include?(" ")
end

#nameObject



44
45
46
47
48
49
50
51
52
53
# File 'lib/lobbyliste/factories/person_factory.rb', line 44

def name
  return @name if @name

  @name = @raw_data.dup
  REGEX.each do |regex|
    @name = clean(@name.gsub(regex,""))
  end

  @name
end

#titlesObject



55
56
57
# File 'lib/lobbyliste/factories/person_factory.rb', line 55

def titles
  @raw_data.gsub(name,"").split(", ").map(&:squish).reject{|x| x==""}
end