| Module | OpenStructable |
| In: |
lib/more/facets/ostructable.rb
|
OpensStructable is a mixin module which can provide OpenStruct behavior to any class or object. OpenStructable allows extention of data objects with arbitrary attributes.
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
# File lib/more/facets/ostructable.rb, line 61 def initialize(hash=nil) @__table__ = {} if hash for k,v in hash @__table__[k.to_sym] = v new_ostruct_member(k) end end end
Compare this object and other for equality.
# File lib/more/facets/ostructable.rb, line 154 def ==(other) return false unless(other.kind_of?(OpenStruct)) return @__table__ == other.table end
Remove the named field from the object.
# File lib/more/facets/ostructable.rb, line 132 def delete_field(name) @__table__ ||= {} @__table__.delete name.to_sym end
duplicate an OpenStruct object members.
# File lib/more/facets/ostructable.rb, line 72 def initialize_copy(orig) super @__table__ = @__table__.dup end
Returns a string containing a detailed summary of the keys and values.
# File lib/more/facets/ostructable.rb, line 140 def inspect str = "<#{self.class}" for k,v in (@__table__ ||= {}) str << " #{k}=#{v.inspect}" end str << ">" end
# File lib/more/facets/ostructable.rb, line 80 def marshal_load(x) @table = x @table.each_key{|key| new_ostruct_member(key)} end
# File lib/more/facets/ostructable.rb, line 85 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