Class OpenStruct
In: lib/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>

Methods

Public Class methods

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.

[Source]

    # File lib/ostruct.rb, line 46
46:   def initialize(hash=nil)
47:     @table = {}
48:     if hash
49:       for k,v in hash
50:         @table[k.to_sym] = v
51:         new_ostruct_member(k)
52:       end
53:     end
54:   end

Public Instance methods

Compare this object and other for equality.

[Source]

     # File lib/ostruct.rb, line 145
145:   def ==(other)
146:     return false unless(other.kind_of?(OpenStruct))
147:     return @table == other.table
148:   end

Remove the named field from the object.

[Source]

     # File lib/ostruct.rb, line 107
107:   def delete_field(name)
108:     @table.delete name.to_sym
109:   end

Duplicate an OpenStruct object members.

[Source]

    # File lib/ostruct.rb, line 57
57:   def initialize_copy(orig)
58:     super
59:     @table = @table.dup
60:   end

Returns a string containing a detailed summary of the keys and values.

[Source]

     # File lib/ostruct.rb, line 116
116:   def inspect
117:     str = "#<#{self.class}"
118: 
119:     ids = (Thread.current[InspectKey] ||= [])
120:     if ids.include?(object_id)
121:       return str << ' ...>'
122:     end
123: 
124:     ids << object_id
125:     begin
126:       first = true
127:       for k,v in @table
128:         str << "," unless first
129:         first = false
130:         str << " #{k}=#{v.inspect}"
131:       end
132:       return str << '>'
133:     ensure
134:       ids.pop
135:     end
136:   end

[Source]

    # File lib/ostruct.rb, line 62
62:   def marshal_dump
63:     @table
64:   end

[Source]

    # File lib/ostruct.rb, line 65
65:   def marshal_load(x)
66:     @table = x
67:     @table.each_key{|key| new_ostruct_member(key)}
68:   end

[Source]

    # File lib/ostruct.rb, line 78
78:   def new_ostruct_member(name)
79:     name = name.to_sym
80:     unless self.respond_to?(name)
81:       class << self; self; end.class_eval do
82:         define_method(name) { @table[name] }
83:         define_method("#{name}=") { |x| modifiable[name] = x }
84:       end
85:     end
86:     name
87:   end
to_s()

Alias for inspect

Protected Instance methods

[Source]

    # File lib/ostruct.rb, line 70
70:   def modifiable
71:     if self.frozen?
72:       raise TypeError, "can't modify frozen #{self.class}", caller(2)
73:     end
74:     @table
75:   end

[Validate]