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>

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 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

Public Instance methods

Compare this object and other for equality.

[Source]

# 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.

[Source]

# File ostruct.rb, line 102
  def delete_field(name)
    @table.delete name.to_sym
  end

Duplicate an OpenStruct object members.

[Source]

# 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.

[Source]

# 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

[Source]

# File ostruct.rb, line 62
  def marshal_dump
    @table
  end

[Source]

# File ostruct.rb, line 65
  def marshal_load(x)
    @table = x
    @table.each_key{|key| new_ostruct_member(key)}
  end

[Source]

# File ostruct.rb, line 70
  def new_ostruct_member(name)
    name = name.to_sym
    unless self.respond_to?(name)
      meta = class << self; self; end
      meta.send(:define_method, name) { @table[name] }
      meta.send(:define_method, "#{name}=""#{name}=") { |x| @table[name] = x }
    end
  end
to_s()

Alias for inspect

[Validate]