Class: PersonNameParser

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

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



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

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].map(&:presence).compact.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.



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

def name_parts
  @name_parts
end

Instance Method Details

#abbreviated_nameObject



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

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:



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

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

#full_nameObject



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

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

#lastObject

Alias for Name_parts#last

Returns:

  • (Object)

    Name_parts#last

See Also:



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

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

#middleObject

Alias for Name_parts#middle

Returns:

  • (Object)

    Name_parts#middle

See Also:



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

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

#obfuscated_nameObject



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

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:



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

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

#simple_nameObject



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

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

#suffixObject

Alias for Name_parts#suffix

Returns:

  • (Object)

    Name_parts#suffix

See Also:



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

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

#to_party(party) ⇒ Object



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

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



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

def to_s
  full_name
end

#valid?Boolean

Returns:

  • (Boolean)


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

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