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/