aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/deprecation/reporting.rb
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2009-04-17 21:29:30 -0700
committerJeremy Kemper <jeremy@bitsweat.net>2009-04-17 21:29:30 -0700
commit727e9dc18a7059f024b922b65951198ff0184fdd (patch)
tree740e578645d8fdc45dbec0a4412a8455cc05bfed /activesupport/lib/active_support/deprecation/reporting.rb
parent3202671dc9360c4a89d80355824b239b52b2f611 (diff)
downloadrails-727e9dc18a7059f024b922b65951198ff0184fdd.tar.gz
rails-727e9dc18a7059f024b922b65951198ff0184fdd.tar.bz2
rails-727e9dc18a7059f024b922b65951198ff0184fdd.zip
Dice up ActiveSupport::Deprecation
Diffstat (limited to 'activesupport/lib/active_support/deprecation/reporting.rb')
-rw-r--r--activesupport/lib/active_support/deprecation/reporting.rb55
1 files changed, 55 insertions, 0 deletions
diff --git a/activesupport/lib/active_support/deprecation/reporting.rb b/activesupport/lib/active_support/deprecation/reporting.rb
new file mode 100644
index 0000000000..fcb05ad8d9
--- /dev/null
+++ b/activesupport/lib/active_support/deprecation/reporting.rb
@@ -0,0 +1,55 @@
+module ActiveSupport
+ module Deprecation
+ class << self
+ attr_accessor :silenced
+
+ def warn(message = nil, callstack = caller)
+ if behavior && !silenced
+ behavior.call(deprecation_message(callstack, message), callstack)
+ end
+ end
+
+ # Silence deprecation warnings within the block.
+ def silence
+ old_silenced, @silenced = @silenced, true
+ yield
+ ensure
+ @silenced = old_silenced
+ end
+
+ def deprecated_method_warning(method_name, message = nil)
+ warning = "#{method_name} is deprecated and will be removed from Rails #{deprecation_horizon}"
+ case message
+ when Symbol then "#{warning} (use #{message} instead)"
+ when String then "#{warning} (#{message})"
+ else warning
+ end
+ end
+
+ private
+ def deprecation_message(callstack, message = nil)
+ message ||= "You are using deprecated behavior which will be removed from the next major or minor release."
+ "DEPRECATION WARNING: #{message}. #{deprecation_caller_message(callstack)}"
+ end
+
+ def deprecation_caller_message(callstack)
+ file, line, method = extract_callstack(callstack)
+ if file
+ if line && method
+ "(called from #{method} at #{file}:#{line})"
+ else
+ "(called from #{file}:#{line})"
+ end
+ end
+ end
+
+ def extract_callstack(callstack)
+ if md = callstack.first.match(/^(.+?):(\d+)(?::in `(.*?)')?/)
+ md.captures
+ else
+ callstack.first
+ end
+ end
+ end
+ end
+end