Class | OpenStruct |
In: |
ostruct.rb
|
Parent: | 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 142 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 102 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 111 def inspect str = "#<#{self.class}" Thread.current[InspectKey] ||= [] if Thread.current[InspectKey].include?(self) then str << " ..." else first = true for k,v in @table str << "," unless first first = false Thread.current[InspectKey] << v begin str << " #{k}=#{v.inspect}" ensure Thread.current[InspectKey].pop end end end str << ">" end
# File ostruct.rb, line 65 def marshal_load(x) @table = x @table.each_key{|key| new_ostruct_member(key)} end