Here’s an idea stolen from  and .
Suppose we have a library. Suppose we’ve done some refactorings in it
(method or class renamed, class splitted into several, or joined, or…)
The task: change all client code in correspondence to library change.
method_renamed [SomeClass, :method_a] => :method_b
method_removed [SomeClass, :old_method], “he was too old”
module_method_moved [SomeModule, :method_c] => OtherModule
class_renamed ClassA => ClassB
in code, which uses our library:
require ‘library/changelog’ #can omit this if you’re not interested in
s = SomeClass.new
#prints "Warning: method #method_a is renamed to #method_b. Called from
#then calls s.method_b
#throws “Error: #old_method was removed because he was too old”
#? or prints warning and DOESN’T calls any method
#prints "Warning: method #method_c moved to OtherModule. Called from
#then calls OtherModule::method_c
#prints “Warning: ClassA renamed to ClassB. blah”
#then calls ClassB.new
the version(0.0.2) in example above can allow user to say
MyLibrary::ChangeLog.from_version = 0.2.1 #migrating from 0.2.1 to 0.2.5
and see only appropriate warnings.