From: "marcandre (Marc-Andre Lafortune)" Date: 2012-10-29T06:35:41+09:00 Subject: [ruby-core:48532] [ruby-trunk - Feature #1400][Closed] Please add a method to enumerate fields in OpenStruct Issue #1400 has been updated by marcandre (Marc-Andre Lafortune). Status changed from Assigned to Closed This issue was solved with changeset r37372. Tomas, thank you for reporting this issue. Your contribution to Ruby is greatly appreciated. May Ruby be with you. ---------- * lib/ostruct.rb (each_pair): Add #each_pair [#1400] ---------------------------------------- Feature #1400: Please add a method to enumerate fields in OpenStruct https://bugs.ruby-lang.org/issues/1400#change-31900 Author: tpo (Tomas Pospisek) Status: Closed Priority: Normal Assignee: marcandre (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/