Class | OpenStruct
In: | lib/standard/facets/ostruct.rb
Parent: | Object

### Methods

[] []= __merge__ __update__ each instance_delegate new ostruct_delegate ostruct_merge ostruct_update to_h to_ostruct

### Public Class methods

new(hash=nil) {|self| ...}

Allows the initialization of an OpenStruct with a setter block:

      person = OpenStruct.new do |o|
        o.name    = 'John Smith'
        o.gender  = :M
        o.age     = 71
      end

You can still provide a hash for initialization purposes, and even combine the two approaches if you wish.

      person = OpenStruct.new(:name => 'John Smith', :age => 31) do |p|
        p.gender = :M
      end

Alternatively you can provide a default block:

      stuff = OpenStruct.new{ |o,k| o[k] = [] }
      stuff.place << :a
      stuff.place << :b
      stuff.place #=> [:a, :b]

A setter block versus a defualt block is determined by the arity of the block. You can not provide both at the same time.

CREDIT: Noah Gibbs, Gavin Sinclair

### Public Instance methods

[](key)

Access a value in the OpenStruct by key, like a Hash. This increases OpenStruct‘s "duckiness".

      o = OpenStruct.new
      o.t = 4
      o['t']  #=> 4

[]=(key,val)

Set a value in the OpenStruct by key, like a Hash.

      o = OpenStruct.new
      o['t'] = 4
      o.t  #=> 4

__merge__(other)

Merge hash data creating a new OpenStruct object.

      o = OpenStruct.new
      x = o.ostruct_merge(:a => 2)
      x.a  #=> 2

__update__(other)

Insert/update hash data on the fly.

      o = OpenStruct.new
      o.ostruct_update(:a => 2)
      o.a  #=> 2

each(&blk)
instance_delegate()

Provides access to an OpenStruct‘s inner table.

      o = OpenStruct.new
      o.a = 1
      o.b = 2
      o.instance_delegate.map { |k, v| "#{k} #{v}" }
      #=> ["a 1", "b 2"]

ostruct_delegate()

Alias for instance_delegate

ostruct_merge(other)

Merge hash data creating a new OpenStruct object.

      o = OpenStruct.new
      x = o.ostruct_merge(:a => 2)
      x.a  #=> 2

ostruct_update(other)

Insert/update hash data on the fly.

      o = OpenStruct.new
      o.ostruct_update(:a => 2)
      o.a  #=> 2

to_h()
to_ostruct()

[Validate]