Refactorings again: idea for library

  • Thread starter Victor \Zverok\ Shepelev
  • Start date
V

Victor \Zverok\ Shepelev

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, :eek:ld_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
 
T

Trans

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, :eek:ld_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.
 

Members online

Forum statistics

Threads
473,743
Messages
2,569,478
Members
44,898
Latest member
BlairH7607

Latest Threads

Top