In Files

  • ostruct.rb

Class/Module Index [+]

Quicksearch

OpenStruct

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>

Public Class Methods

new(hash=nil) click to toggle source

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
            

Public Instance Methods

==(other) click to toggle source

Compare this object and other for equality.

 
               # File ostruct.rb, line 141
def ==(other)
  return false unless(other.kind_of?(OpenStruct))
  return @table == other.table
end
            
delete_field(name) click to toggle source

Remove the named field from the object.

 
               # File ostruct.rb, line 103
def delete_field(name)
  @table.delete name.to_sym
end
            
initialize_copy(orig) click to toggle source

Duplicate an OpenStruct object members.

 
               # File ostruct.rb, line 57
def initialize_copy(orig)
  super
  @table = @table.dup
end
            
inspect() click to toggle source

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

 
               # File ostruct.rb, line 112
def inspect
  str = "#<#{self.class}"

  ids = (Thread.current[InspectKey] ||= [])
  if ids.include?(object_id)
    return str << ' ...>'
  end

  ids << object_id
  begin
    first = true
    for k,v in @table
      str << "," unless first
      first = false
      str << " #{k}=#{v.inspect}"
    end
    return str << '>'
  ensure
    ids.pop
  end
end
            
Also aliased as: to_s
marshal_dump() click to toggle source
 
               # File ostruct.rb, line 62
def marshal_dump
  @table
end
            
marshal_load(x) click to toggle 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) click to toggle source
 
               # File ostruct.rb, line 70
def new_ostruct_member(name)
  name = name.to_sym
  unless self.respond_to?(name)
    class << self; self; end.class_eval do
      define_method(name) { @table[name] }
      define_method(:"#{name}=") { |x| @table[name] = x }
    end
  end
end
            
to_s() click to toggle source
Alias for: inspect

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus