Class: PersonNameParser

Inherits:
Object
  • Object
show all
Defined in:
app/services/person_name_parser.rb

Overview

Service object: person name parser.

Instance Attribute Summary collapse

Delegated Instance Attributes collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ PersonNameParser

Returns an open struct like
:prefix => nil,
:first => "Tom",
:middle => nil,
:last => "Januszewski",
:suffix



14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'app/services/person_name_parser.rb', line 14

def initialize(name)
  require 'nameable'
  if name.present?
    @name_parts = Nameable.parse name
    # Special case of detecting Haikunator names
    if @name_parts.first == 'Guest'
      @name_parts.last = [@name_parts.middle, @name_parts.last].filter_map(&:presence).join(' ')
      @name_parts.middle = nil
    end
  else
    @name_parts = OpenStruct.new
  end
end

Instance Attribute Details

#name_partsObject (readonly)

Returns the value of attribute name_parts.



4
5
6
# File 'app/services/person_name_parser.rb', line 4

def name_parts
  @name_parts
end

Instance Method Details

#abbreviated_nameObject



32
33
34
35
36
37
# File 'app/services/person_name_parser.rb', line 32

def abbreviated_name
  str = []
  str << "#{@name_parts.first[0]}." if @name_parts.first
  str << @name_parts.last
  str.join.join(' ')
end

#firstObject

Alias for Name_parts#first

Returns:

  • (Object)

    Name_parts#first

See Also:



6
# File 'app/services/person_name_parser.rb', line 6

delegate :prefix, :first, :middle, :last, :suffix, to: :name_parts

#full_nameObject



50
51
52
# File 'app/services/person_name_parser.rb', line 50

def full_name
  %i[prefix first middle last suffix].filter_map { |k| name_parts.send(k).to_s.squish.presence }.join(' ')
end

#lastObject

Alias for Name_parts#last

Returns:

  • (Object)

    Name_parts#last

See Also:



6
# File 'app/services/person_name_parser.rb', line 6

delegate :prefix, :first, :middle, :last, :suffix, to: :name_parts

#middleObject

Alias for Name_parts#middle

Returns:

  • (Object)

    Name_parts#middle

See Also:



6
# File 'app/services/person_name_parser.rb', line 6

delegate :prefix, :first, :middle, :last, :suffix, to: :name_parts

#obfuscated_nameObject



39
40
41
42
43
44
# File 'app/services/person_name_parser.rb', line 39

def obfuscated_name
  np = []
  np << @name_parts.first
  np << "#{@name_parts&.last&.first(1)}." if @name_parts.last
  np.join(' ')
end

#prefixObject

Alias for Name_parts#prefix

Returns:

  • (Object)

    Name_parts#prefix

See Also:



6
# File 'app/services/person_name_parser.rb', line 6

delegate :prefix, :first, :middle, :last, :suffix, to: :name_parts

#simple_nameObject



46
47
48
# File 'app/services/person_name_parser.rb', line 46

def simple_name
  %i[first middle last].filter_map { |k| name_parts.send(k).to_s.squish.presence }.join(' ')
end

#suffixObject

Alias for Name_parts#suffix

Returns:

  • (Object)

    Name_parts#suffix

See Also:



6
# File 'app/services/person_name_parser.rb', line 6

delegate :prefix, :first, :middle, :last, :suffix, to: :name_parts

#to_party(party) ⇒ Object



58
59
60
61
62
63
64
65
# File 'app/services/person_name_parser.rb', line 58

def to_party(party)
  party.prefix = name_parts.prefix&.first(10)
  party.first_name = name_parts.first&.first(255)
  party.middle_name = name_parts.middle&.first(255)
  party.last_name = name_parts.last&.first(255)
  party.suffix = name_parts.suffix&.first(10)
  party.full_name = full_name&.first(255)
end

#to_sObject



54
55
56
# File 'app/services/person_name_parser.rb', line 54

def to_s
  full_name
end

#valid?Boolean

Returns:

  • (Boolean)


28
29
30
# File 'app/services/person_name_parser.rb', line 28

def valid?
  [prefix, first, middle, last, suffix].any?(&:present?)
end