From: "Victor \"Zverok\" Shepelev" Date: 2007-09-26T22:42:23+09:00 Subject: Refactorings again: idea for library Hi all. Here's an idea stolen from [1] and [2]. 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. The trick: library/changelog.rb --- module MyLibrary::Changelog version(0.2.5) do 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 end end --- in code, which uses our library: --- require 'library' require 'library/changelog' #can omit this if you're not interested in changes s = SomeClass.new s.method_a #prints "Warning: method #method_a is renamed to #method_b. Called from app.rb:10 #then calls s.method_b s.old_method #throws "Error: #old_method was removed because he was too old" #? or prints warning and DOESN'T calls any method SomeModule::method_c #prints "Warning: method #method_c moved to OtherModule. Called from app.rb:12 #then calls OtherModule::method_c ClassA.new #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. Wha? V. 1: http://www.dogbiscuit.org/mdub/weblog/Tech/Programming/Ruby/RubyMethodRename d 2: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/49730