./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