./lib/hash_wia/module.rb in hash_wia-0.7.4 vs ./lib/hash_wia/module.rb in hash_wia-0.7.6

- old
+ new

@@ -16,16 +16,22 @@ data = super key data = super key.to_s if data.nil? data = super key.to_sym if key.respond_to?(:to_sym) && data.nil? # if we are returning hash as a value, just include with wia methods hash - data.extend HashWiaModule if data.is_a?(Hash) + if data.is_a?(Hash) + data.extend HashWiaModule + end data end def []= key, value + if @frozen_keys + raise NoMethodError, "Hash keys are frozen and can't be modified" + end + delete key super key, value end def delete key @@ -54,9 +60,26 @@ def merge hash dup.tap do |h| hash.each { |k, v| h[k] = v } end + end + + def freeze_keys! + @frozen_keys = true + self + end + + def each &block + to_a.each do |key, data| + if data.is_a?(Hash) + data.extend HashWiaModule + end + + block.call key, data + end + + self end def method_missing name, *args, &block strname = name.to_s