class Module
def deprecated *meths
meths.each do |me|
aliased = "_deprecate_#{me}"
alias_method aliased, me
class_eval "def #{me}(*a,&b) $stderr.puts 'WARNING: deprecated method called: #{me}'; #{aliased}(*a,&b) end"
end
end
end
irb(main):010:0> class String
irb(main):011:1> deprecated :to_i
irb(main):012:1> end
=> [:to_i]
irb(main):013:0> "123".to_i
WARNING: deprecated method called: to_i
=> 123
irb(main):014:0>
class Module
def deprecated *meths
meths.each do |me|
aliased = "_deprecate_#{me}"
alias_method aliased, me
class_eval "def #{me}(*a,&b) $stderr.puts 'WARNING: deprecated method called: #{me}'; #{aliased}(*a,&b) end"
end
end
end
Nice (and I'm not a Java fan). I'd make the output indirect, though, in case of GUI etc. Also, you could use this to only warn on the first call of each method for a given class.
class Module
def deprecated *meths
meths.each do |me|
aliased = "_deprecate_#{me}"
alias_method aliased, me
class_eval %{
def #{me}(*a,&b)
warn_deprecated('#{me}')
#{aliased}(*a,&b)
end
}
end
end
end
class Object
def warn_deprecated me
warn "WARNING: deprecated method called: #{me}"
end
end
···
--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407
Good idea! This could even be combined with standard logging libs.
Kind regards
robert
···
On 25.02.2008 23:02, Joel VanderWerf wrote:
Robert Klemme wrote:
This just occurred to me (for Java fans):
class Module
def deprecated *meths
meths.each do |me|
aliased = "_deprecate_#{me}"
alias_method aliased, me
class_eval "def #{me}(*a,&b) $stderr.puts 'WARNING: deprecated method called: #{me}'; #{aliased}(*a,&b) end"
end
end
end
Nice (and I'm not a Java fan). I'd make the output indirect, though, in case of GUI etc. Also, you could use this to only warn on the first call of each method for a given class.
class Module
def deprecated *meths
meths.each do |me|
aliased = "_deprecate_#{me}"
alias_method aliased, me
class_eval %{
def #{me}(*a,&b)
warn_deprecated('#{me}')
#{aliased}(*a,&b)
end
}
end
end
end
class Object
def warn_deprecated me
warn "WARNING: deprecated method called: #{me}"
end
end