module OpenStructable
Ostructable¶ ↑
OpensStructable is a mixin module which can provide OpenStruct behavior to any class or object. OpenStructable
allows extention of data objects with arbitrary attributes.
Usage¶ ↑
require 'ostructable' class Record include OpenStructable end record = Record.new record.name = "John Smith" record.age = 70 record.pension = 300 puts record.name # -> "John Smith" puts record.address # -> nil
Public Class Methods
new(hash=nil)
click to toggle source
# File lib/mixers/ostructable.rb, line 31 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 lib/mixers/ostructable.rb, line 124 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 lib/mixers/ostructable.rb, line 102 def delete_field(name) @__table__ ||= {} @__table__.delete name.to_sym end
initialize_copy(orig)
click to toggle source
duplicate an OpenStruct object members.
Calls superclass method
# File lib/mixers/ostructable.rb, line 42 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 lib/mixers/ostructable.rb, line 110 def inspect str = "<#{self.class}" for k,v in (@__table__ ||= {}) str << " #{k}=#{v.inspect}" end str << ">" end
marshal_dump()
click to toggle source
# File lib/mixers/ostructable.rb, line 47 def marshal_dump @table end
marshal_load(x)
click to toggle source
# File lib/mixers/ostructable.rb, line 50 def marshal_load(x) @table = x @table.each_key{|key| new_ostruct_member(key)} end
new_ostruct_member(name)
click to toggle source
# File lib/mixers/ostructable.rb, line 55 def new_ostruct_member(name) unless self.respond_to?(name) self.instance_eval %{ def #{name}; @__table__[:#{name}]; end def #{name}=(x); @__table__[:#{name}] = x; end } end end
update(hash)
click to toggle source
Generate additional attributes and values.
# File lib/mixers/ostructable.rb, line 67 def update(hash) @__table__ ||= {} if hash for k,v in hash @__table__[k.to_sym] = v new_ostruct_member(k) end end end