2014-05-06 Version 2.1.0 Now works with underlying types that support #[] but not #fetch. 2014-04-16 Version 2.0.1 Added documentation to the module overview specifying the requirements for supporting alternate underlying data types (i.e. other than Array or Hash). No other changes. 2014-03-21 Version 2.0.0 XKeys can now be used with data types other than array or hash (as long as they support array- or hash-like interfaces). New custom nodes can be generated by defining an #xkeys_new method. The method is responsible for adding XKeys extensions to the new node as needed/desired. See Sarah::XK in gem sarah-xk for an example. Using :[] (push mode) as the first of multiple keys now works correctly. 2013-07-25 Version 1.0.1 The auto-indexing array key for set has been changed from nil to :[] in order to support nil keys (e.g. in case a NULL value from a database field is being used as a nil key). Get and set now have compatible syntax so that you can use ||=: root[key1, ..., keyN[, option_hash]] root[key1, ..., keyN[, option_hash]] = value root = {}.extend XKeys::Hash root[:top, :[], :[] => false] ||= 'just because' # root => { :top => { :[] => 'just because' } } Note that a leading nil is no longer ignored on get. Use array[int1, int2, {}] to avoid array[start, length] slice interpretation. Option :raise => true raises a KeyError or IndexError on a missing value. Option :raise => *parameters raises the specified exception, e.g. :raise => RuntimeError or :raise => [RuntimeError, 'SNAFU']. The :else option defaults to nil on get. Use :raise to force an exception. 2013-07-08 Version 0.0.2 Packaging and documentation cleanup. 2013-07-08 Version 0.0.1 First release.