class HandyHash
Constants
- VERSION
Public Class Methods
new(value=nil)
click to toggle source
# File lib/handy_hash.rb, line 8 def initialize(value=nil) if value value.each do |k, v| self[k] = __wrap v end end end
Private Class Methods
Nil()
click to toggle source
# File lib/handy_hash.rb, line 64 def Nil @Nil ||= new.tap(&:freeze) end
Public Instance Methods
[]=(k,v)
click to toggle source
Calls superclass method
# File lib/handy_hash.rb, line 21 def []=(k,v) super k, __wrap(v) end
freeze()
click to toggle source
Calls superclass method
# File lib/handy_hash.rb, line 16 def freeze super each{|_, v| v.freeze unless v.frozen?} end
method_missing(m, *args, &block)
click to toggle source
Calls superclass method
# File lib/handy_hash.rb, line 33 def method_missing(m, *args, &block) if m =~ /\Ato_ary\Z/ || m =~ /\=$/ || args.size > 1 || block_given? super else m = m.to_s if m[-1] == '!' m = m.to_s.sub!(/!$/, '') required = true end if m =~ /\A_(.+)_\Z/ m = $1 end __fetch_value m, required: required, default: args.first end end
patch(hash=nil, &block)
click to toggle source
# File lib/handy_hash.rb, line 25 def patch(hash=nil, &block) change_set = [].tap do |ch| ch << __wrap(hash) if hash ch << Builder.new(&block).data if block_given? end Patch.(self, *change_set) end
Private Instance Methods
__fetch_value(key, required: false, default: nil)
click to toggle source
# File lib/handy_hash.rb, line 51 def __fetch_value(key, required: false, default: nil) unless self[key].nil? self[key] else default || (required ? raise(ValueMissingError, "value missing: \"#{key}\"") : HandyHash.Nil) end end
__wrap(v)
click to toggle source
# File lib/handy_hash.rb, line 59 def __wrap(v) v.kind_of?(Hash) && !v.kind_of?(HandyHash) ? HandyHash.new(v) : v end