Person Name

Person name is an active record plugin to add support for full names. A persons name consists of the following parts: prefix, first_name, middle_name, intercalation, last_name and suffix

If you have to fill in a name for somebody, you have to display all those fields, and fill them in. The goal is to make one field that can split up the name and assign it to the correct fields automatically. You can also still use the more precise input if necessary.

Usage

Small gem to insert easy person name behaviour into rails models

migration:

create_table :people do |t|
    t.person_name :name
    t.person_name :birth_name
    t.boolean :female, :null => true

    t.timestamps
end

In this case the following fields are created:

name_prefix
name_first_name
name_middle_name
name_intercalation
name_last_name
name_suffix

birth_name_prefix
birth_name_first_name
birth_name_middle_name
birth_name_intercalation
birth_name_last_name
birth_name_suffix

female
created_at
updated_at

model:

class Person < ActiveRecord::Base

    has_person_name :name, :birth_name

end

Now put this thing to use:

p = Person.new
p.name = "Matthijs Jacobus Groen"
p.name.first_name # Matthijs
p.name.middle_name # Jacobus
p.name.last_name # Groen
p.name.short_name # M.J. Groen

p = Person.new
p.name = "Ariejan de Vroom"
p.name.first_name # Ariejan
p.name.intercalation # de
p.name.last_name # Vroom
p.name.full_last_name # de Vroom

p = Person.new
p.name = "Cornelia Maria Hendrika Damen-van Valkenberg"
p.name.first_name # Cornelia
p.name.middle_name # Maria Hendrika
p.name.last_name # Damen-van Valkenberg

Sometimes, things can go wrong:

p = Person.new
p.name = "Yolanthe Cabau van Kasbergen"
p.name.first_name # Yolanthe
p.name.middle_name # Cabau
p.name.intercalation # van
p.name.last_name # Kasbergen

But, if you correct it, it will remember it:

p.name.intercalation = nil
p.name.middle_name = nil
p.name.last_name = "Cabau van Kasbergen"

# and now change something:

p.name = "Yolanthe Truuske Cabau van Kasbergen"
p.name.first_name # Yolanthe
p.name.middle_name # Truuske
p.name.intercalation # nil
p.name.last_name # Cabau van Kasbergen