[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

deprecated

Robert Klemme

2/25/2008 9:24:00 PM


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

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>

Kind regards

robert
3 Answers

Joel VanderWerf

2/25/2008 10:02:00 PM

0

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

--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407

Robert Klemme

2/26/2008 7:45:00 AM

0

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

Good idea! This could even be combined with standard logging libs.

Kind regards

robert

Stéphane Wirtel

2/26/2008 11:42:00 PM

0

Thanks for this code :d