Issue #1400 has been updated by Thomas Sawyer.


It was also recommended to me to suggest #to_h here.

    def to_h
      @table.dup
    end

It would be a much easier way of working with the underlying table, such as getting field names.

    openstruct.to_h.keys

And of course much more.

----------------------------------------
Feature #1400: Please add a method to enumerate fields in OpenStruct
https://bugs.ruby-lang.org/issues/1400

Author: Tomas Pospisek
Status: Assigned
Priority: Normal
Assignee: Marc-Andre Lafortune
Category: lib
Target version: 2.0.0


=begin
 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:
  
    #
=end



-- 
http://bugs.ruby-lang.org/