Generally setters return either self or the value being set - because of this order, you'll be returning a downcased name.  Is that intentional, or do you really want to be doing:

   self.canonical_name = app_name.downcase
   super