On Apr 23, 2009, at 8:34 AM, Tomas Pospisek wrote: > Feature #1400: Please add a method to enumerate fields in OpenStruct > http://redmine.ruby-lang.org/issues/show/1400 > > Author: Tomas Pospisek > Status: Open, Priority: Normal > > There are two ways to find out what fields an OpenStruct instance > has. One is through inspect, > however that returns a String that needs to be parsed. > > The second is by white box engineering, looking at OpenStructs > source code and seeing that in > fact, it has a hash and getting the keys of that hash... > > The second way is faster, more robust, but will break once > OpenStruct will be re-engineered... > > So I suggest to add an explicit method to return a list of fields in > an OpenStruct instance: > > --- ostruct.rb.old 2009-04-23 15:26:45.000000000 +0200 > +++ ostruct.rb 2009-04-23 15:32:41.000000000 +0200 > @@ -110,6 +110,15 @@ > @table.delete name.to_sym > end > > + # > + # Returns an Array containing the fields of an OpenStruct instance > + # > + # p record.fields # -> [:age, :pension, :name] > + # > + def fields > + @table.keys > + end > + > InspectKey = :__inspect_key__ # :nodoc: > > # I'm wondering if members() would be a better name, to match Struct's support of this feature. Either way, this change would remove a key for use. Perhaps a __members__() would be safer, for that reason. Anyway, I'm just thinking out load here. I support the change. James Edward Gray II