Method: Arrow::Object.deprecate_class_method

Defined in:
lib/arrow/object.rb

.deprecate_class_method(oldSym, newSym = oldSym) ⇒ Object

Like Object.deprecate_method, but for class methods.



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/arrow/object.rb', line 68

def self::deprecate_class_method( oldSym, newSym=oldSym )
  warningMessage = ''

  # If the method is being removed, alias it away somewhere and build
  # an appropriate warning message. Otherwise, just build a warning
  # message.
  if oldSym == newSym
    newSym = ("__deprecated_" + oldSym.to_s + "__").to_sym
    warningMessage = "%s::%s is deprecated" %
      [ self.name, oldSym.to_s ]
    alias_class_method newSym, oldSym
  else
    warningMessage = "%s::%s is deprecated; use %s::%s instead" %
      [ self.name, oldSym.to_s, self.name, newSym.to_s ]
  end

  # Build the method that logs a warning and then calls the true
  # method.
  class_eval %Q{
    def self::#{oldSym.to_s}( *args, &block )
      Arrow::Logger.notice "warning: %s: #{warningMessage}" % [ caller(1) ]
      send( #{newSym.inspect}, *args, &block )
    rescue => err
      # Mangle exceptions to point someplace useful
      Kernel.raise err, err.message, err.backtrace[2..-1]
    end
  }
end