Class OpenObject
In: lib/more/facets/openobject.rb
Parent: Hash

OpenObject

OpenObject is very similar to Ruby‘s own OpenStruct, but it offers some useful advantages. With OpenStruct slots with the same name‘s as predefined Object methods can not be used. With OpenObject any slot can be defined, OpendObject is also a bit faster becuase it is based on a Hash, not method signitures.

Because OpenObject is a subclass of Hash, it can do just about everything a Hash can do, except that most public methods have been made protected and thus available only internally or via send.

OpenObject will also clobber any method for which a slot is defined. Even generally very important methods can be clobbered, like instance_eval. So be aware of this. OpenObject should be used in well controlled scenarios.

If you wish to pass an OpenObject to a routine that normal takes a Hash, but are uncertain it can handle the distictions properly you can convert easily to a Hash using to_hash! and the result will automatically be converted back to an OpenObject on return.

  o = OpenObject.new(:a=>1,:b=>2)
  o.as_hash!{ |h| h.update(:a=>6) }
  o #=> #<OpenObject {:a=>6,:b=>2}>

Finally, unlike a regular Hash, all OpenObject‘s keys are symbols and all keys are converted to such using to_sym on the fly.

Methods

==   []   []   []=   as_hash!   default!   define_slot   delete   each   fetch   initialize_copy   inspect   merge   method_missing   new   protect_slot   store   to_a   to_h   to_hash   to_openobject   to_proc   update  

Constants

PUBLIC_METHODS = /(^__|^instance_|^object_|^\W|^as$|^send$|^class$|\?$)/

Public Class methods

Inititalizer for OpenObject is slightly differnt than that of Hash. It does not take a default parameter, but an initial priming Hash as with OpenStruct. The initializer can still take a default block however. To set the degault value use ++default!(value)++.

  OpenObject(:a=>1).default!(0)

Public Instance methods

Check equality. (Should equal be true for Hash too?)

Preform inplace action on OpenObject as if it were a regular Hash.

Set the default value.

Iterate over each key-value pair. (Careful, this can be clobbered!)

Object inspection. (Careful, this can be clobbered!)

Merge one OpenObject with another creating a new OpenObject.

Conversion methods. (Careful, these can be clobbered!)

Update this OpenObject with another.

Protected Instance methods

[Validate]