Namer

In an application I am writing, we gather three items about a person’s Name: Their Username and their First and last names.

In different parts of the application we want to have their names displayed in different ways. For Example, we want to have the opening page say Hi, First Name!. We want log entries to display their Username in one field, and their Last Name comma First Name in another field. We want to have their First Initial comma Last Name in another area.

In this application, we store names as attributes in an attributes table, rather then in the person table. I talked about Cross Model Attributes a while ago.

We assume the following:

  • Person is the model for people
  • Person.name is the username
  • Attrib is the model for attributes
  • Attrib.name holds the name of the Attribute
  • Attrib.value holds the value
  • We have polymorphic associations set up

To accommodate all of these different display needs, I wrote this little snippet of code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
  def namer(person_id, format)
     #Namer will return the person_id's name in the desired format
     #0 is First name only
     #1 is Last name only
     #2 is Last Name, First Name
     #3 is First name Last name
     #4 First Inital, Last Name
     #5 First name, last inital

     person = Person.find_by_id(person_id)

     unless person.attrib.find_by_name('First Name').nil?
       f = person.attrib.find_by_name('First Name')
       first = f[:value].to_s
     else
       tmp = 'No Name'
       return person.name
     end

     unless person.attrib.find_by_name('Last Name').nil?
       l = person.attrib.find_by_name('Last Name')
       last = l[:value].to_s
     else
       tmp = 'No Name'
       return person.name
     end

     case format
     when 0
       return first
     when 1
       return last
     when 2
       tmp = last + ', ' + first
       return tmp
     when 3
       tmp = first + ' ' + last
       return tmp
     when 4
         tmp = first[0..0].upcase + ' ' + last
         return tmp
     when 5
       tmp = first + ' ' + last[0..0].upcase
       return tmp
     end

   end

Leave a Reply