The problem with undef is that it actually prevents any sends to an object with that name. What is intended here is probably to remove the method that was just added to the object. On MRI you can get away with this, since method_missing is implemented in C. In Rubinius, method_missing is implemented in Ruby. So when you do undef, you prevent any calls to method_missing in the future, also the default method_missing that raises the NoMethodError. This commit changes it to use remove_method, which is probably the intended behavior here and allows for the specs to pass on Rubinius in the same way.
The segment initialize initalizes the segment and item delimiters but now using the method setup_delimiters
Also minor refactoring in other classes.