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

== delete_field initialize_copy inspect marshal_dump marshal_load new new_ostruct_member to_s

### Public Class methods

new(hash=nil)

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

==(other)

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

delete_field(name)

Remove the named field from the object.

[Source]

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

initialize_copy(orig)

Duplicate an OpenStruct object members.

[Source]

    # File ostruct.rb, line 57
      def initialize_copy(orig)
        super
        @table = @table.dup
      end

inspect()

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

marshal_dump()

[Source]

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

marshal_load(x)

[Source]

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

new_ostruct_member(name)

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