CastingHash is just like CRUDHash, except that both keys and values can be passed through casting procedures.
Like `new` but can take a priming Hash or Array-pairs.
hash - Hash-like object.
Examples
CastingHash[:a,1,:b,2]
Returns `CastingHash`.
# File lib/hashery/casting_hash.rb, line 21 def self.[](hash) s = new hash.each{ |k,v| s[k] = v } s end
Unlike traditional Hash a CastingHash's block argument coerces key/value pairs when store is called.
default - Default value. #cast_proc - Casting procedure.
# File lib/hashery/casting_hash.rb, line 34 def initialize(default=nil, &cast_proc) @cast_proc = cast_proc super(default, &nil) end
The cast procedure.
proc - Casting procedure.
Returns `Proc` used for casting.
# File lib/hashery/casting_hash.rb, line 46 def cast_proc(&proc) @cast_proc = proc if proc @cast_proc end
Set `#cast_proc`. This procedure must take two arguments (`key, value`) and return the same.
proc - Casting procedure.
Returns proc
.
# File lib/hashery/casting_hash.rb, line 59 def cast_proc=(proc) raise ArgumentError unless Proc === proc or NilClass === proc @cast_proc = proc end
Recast all entries via the cast procedure.
TODO: Isn't this the same as `rehash`?
Returns self
.
# File lib/hashery/casting_hash.rb, line 112 def recast! replace self end
Replace current entries with those from another Hash, or Hash-like object. Each entry is run through the casting procedure as it is added.
other - Hash-like object.
Returns self
.
# File lib/hashery/casting_hash.rb, line 87 def replace(other) super cast(other) end
CRUD method for create and update. Unlike the parent class the key, value pair are passed threw the #cast_proc before being set in the underlying hash table.
key - Key of entry. value - Value of entry.
Returns the value
.
# File lib/hashery/casting_hash.rb, line 74 def store(key, value) super(*cast_pair(key, value)) end
Convert the CastingHash to a regular Hash.
Returns an ordinary `Hash`.
# File lib/hashery/casting_hash.rb, line 96 def to_hash h = {}; each{ |k,v| h[k] = v }; h end