* When concatenating strings together to hash you need to use a
separator that does not exist in the strings, otherwise you can
easily get duplicate hashes, eg:
Digest::SHA1.hexdigest('ab' + 'c') # => "a9993e364706816aba3e25717850c26c9cd0d89d"
Digest::SHA1.hexdigest('a' + 'bc') # => "a9993e364706816aba3e25717850c26c9cd0d89d"
Using a null character as a separator works around this problem:
Digest::SHA1.hexdigest('a' + 0.chr + 'bc') # => "0b2749668f0ea8df8a630da13f0d218709efd5ca"
Digest::SHA1.hexdigest('ab' + 0.chr + 'c') # => "dbdd4f85d8a56500aa5c9c8a0d456f96280c92e5"
* Expand attr_reader :name, to def name; @name; end
As attr_reader defined methods do not have a valid source location.
* Expose more internal state to allow the generation of nice match
identifications. Needs to be cleaned up.