Object
OpenStruct allows you to create data objects and set arbitrary attributes. For example:
require 'ostruct' record = OpenStruct.new record.name = "John Smith" record.age = 70 record.pension = 300 puts record.name # -> "John Smith" puts record.address # -> nil
It is like a hash with a different way to access the data. In fact, it is implemented with a hash, and you can initialize it with one.
hash = { "country" => "Australia", :population => 20_000_000 } data = OpenStruct.new(hash) p data # -> <OpenStruct country="Australia" population=20000000>
Create a new OpenStruct object. The optional
hash
, if given, will generate attributes and values. For
example.
require 'ostruct' hash = { "country" => "Australia", :population => 20_000_000 } data = OpenStruct.new(hash) p data # -> <OpenStruct country="Australia" population=20000000>
By default, the resulting OpenStruct object will have no attributes.
# File ostruct.rb, line 46 def initialize(hash=nil) @table = {} if hash for k,v in hash @table[k.to_sym] = v new_ostruct_member(k) end end end
Compare this object and other
for equality.
# File ostruct.rb, line 141 def ==(other) return false unless(other.kind_of?(OpenStruct)) return @table == other.table end
Remove the named field from the object.
# File ostruct.rb, line 103 def delete_field(name) @table.delete name.to_sym end
Duplicate an OpenStruct object members.
# File ostruct.rb, line 57 def initialize_copy(orig) super @table = @table.dup end
Returns a string containing a detailed summary of the keys and values.
# File ostruct.rb, line 112 def inspect str = "#<#{self.class}" ids = (Thread.current[InspectKey] ||= []) if ids.include?(object_id) return str << ' ...>' end ids << object_id begin first = true for k,v in @table str << "," unless first first = false str << " #{k}=#{v.inspect}" end return str << '>' ensure ids.pop end end
# File ostruct.rb, line 65 def marshal_load(x) @table = x @table.each_key{|key| new_ostruct_member(key)} end