lib/hashery/static_hash.rb in hashery-1.4.0 vs lib/hashery/static_hash.rb in hashery-1.5.0
- old
+ new
@@ -1,47 +1,94 @@
-require 'hashery/statichash'
+# = StaticHash
+#
+# A Hash object which raises an error if any
+# previously-defined key attempts to be set again.
+#
+# == Synopsis
+#
+# foo = StaticHash.new
+# foo['name'] = 'Tom' #=> 'Tom'
+# foo['age'] = 30 #=> 30
+# foo['name'] = 'Bob'
+#
+# _produces_
+#
+# ArgumentError: Duplicate key for StaticHash -- 'name'
+#
+# == Credit
+#
+# StaticHash has it's orgins in Gavin Kistner's WriteOnceHash
+# class found in his +basiclibrary.rb+ script.
+
+class StaticHash < Hash
+
+ # Set a value for a key. Raises an error if that key already
+ # exists with a different value.
+
+ def []=(key, value)
+ if key?(key) && self[key] != value
+ raise ArgumentError, "Duplicate key for StaticHash -- #{key.inspect}"
+ end
+ super(key, value)
+ end
+
+ #
+ def update(hash)
+ dups = (keys | hash.keys)
+ if dups.empty?
+ super(hash)
+ else
+ raise ArgumentError, "Duplicate key for StaticHash -- #{dups.inspect}"
+ end
+ end
+
+ #
+ alias_method :merge!, :update
+
+end
+