On 4/19/07, hemant <gethemant / gmail.com> wrote:
> On 4/19/07, hemant <gethemant / gmail.com> wrote:
> > On 4/19/07, Kris Helenek <khelenek / hotmail.com> wrote:
> > > Thanks Hemant!  I still have trouble seeing things as methods without
> > > the parentheses(); but it makes perfect sense now.  And i wrote a nice
> > > little module to duplicate what is often done to create good debug
> > > output in hibernate (j2ee world):
> > >
> > > module ReflectionToString
> > >   def to_s
> > >     str = self.class.name + "["
> > >     for attribute in self.attributes
> > >       str += attribute[0].to_s + ": " + attribute[1].to_s + ", "
> > >     end
> > >     str += "]"
> > >     str
> > >   end
> > > end
> > >
> > > Someone could probably clean it up a bit but its just a first pass...
> >
> > def to_s
> >   str = "#{self.class} ["
> >   @attributes.each {|x| str << "#{attribute[0]}  : #{attribute[1]} , " }
> >   str << "]"
> > end
> >
> > No need to return str, because last statement evaluated is returned.
> >
> > >
> > > I have a Rails specific question (i know this is kinda the wrong forum,
> > > but I'm already here..) Where is the appropriate place to store this
> > > module? In the helper or model folder? lib? A new folder? Don't know the
> > > conventions yet and I haven't seen anything about utility classes yet...
> > > thanks again.
> > >
> >
> > #{RAILS_ROOT}/lib is the appropriate place, although when it grows a
> > little more bigger and may be reusable, its good idea to create a
> > plugin.
> >
>
>
> Oops, replace "attribute" with x in the iterator, please.
>


Also, your method is a bit buggy and hence mine is too, it value
returned by to_s will have a  "," at the end.

so a better approach would be:

def to_s
  str = "#{self.class} ["
  str << @attributes.map {|key,value| "#{key} : #{value}"}.join(',')
  str << "]"
end