Trans
9/26/2007 2:34:00 PM
On Sep 26, 6:42 am, "Victor \"Zverok\" Shepelev"
<vshepe...@imho.com.ua> wrote:
> 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?
It a very interesting idea. But I fear it would too hard to maintain
for anything but the smallest lib/app. I think it's better to just to
have intermediary versions that add warnings to methods that are going
away soon (if possible).
T.