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