Module: Deprecate::Deprecatable

Included in:
Object
Defined in:
lib/deprecate.rb

Instance Method Summary collapse

Instance Method Details

#__deprecated_run_action__(method_name, replacement = nil) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/deprecate.rb', line 29

def __deprecated_run_action__(method_name, replacement = nil)
  method_key = "#{self.class.name}##{method_name}"
  
  return if Deprecate.config[:warn_once] && Deprecate.warned_methods[method_key]

  replacement_text = replacement ? " (use #{replacement} instead)" : ""
  caller_info = if Deprecate.config[:show_caller]
    caller_location = caller_locations(3, 1)
    caller_location && caller_location.first ? caller_location.first.to_s : "unknown"
  else
    "unknown"
  end
  
  message = Deprecate.config[:message_format] % {
    method: method_name,
    replacement: replacement_text,
    caller: caller_info
  }

  Deprecate.config[:output_stream].puts(message)
  Deprecate.warned_methods[method_key] = true if Deprecate.config[:warn_once]
end

#deprecate(sym, replacement = nil, scope = nil) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/deprecate.rb', line 51

def deprecate(sym, replacement=nil, scope=nil)
  unless sym.is_a?(Symbol)
    raise ArgumentError, 'deprecate() requires symbols for its first argument.'
  end

  meth = instance_method(sym)
  unless scope
    pub = public_instance_methods
    pro = protected_instance_methods
    pri = private_instance_methods
    if pub.include?(sym) || pub.include?(sym.to_s)
      scope = :public
    elsif pro.include?(sym) || pro.include?(sym.to_s)
      scope = :protected
    elsif pri.include?(sym) || pri.include?(sym.to_s)
      scope = :private
    end
  end

  define_method(sym) do |*args|
    __deprecated_run_action__(sym, replacement)
    meth.bind(self).call(*args)
  end

  method(scope).call(sym) if scope
  return scope
end