X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=vendor%2Frails%2Factivesupport%2Flib%2Factive_support%2Fcore_ext%2Fexception.rb;fp=vendor%2Frails%2Factivesupport%2Flib%2Factive_support%2Fcore_ext%2Fexception.rb;h=cde0df4153947bb3d3ad64c3d0689c24d3e2bf94;hb=437aa336c44c74a30aeea16a06743c32747ed661;hp=0000000000000000000000000000000000000000;hpb=97a0772b06264134cfe38e7494f9427efe0840a0;p=feedcatcher.git diff --git a/vendor/rails/activesupport/lib/active_support/core_ext/exception.rb b/vendor/rails/activesupport/lib/active_support/core_ext/exception.rb new file mode 100644 index 0000000..cde0df4 --- /dev/null +++ b/vendor/rails/activesupport/lib/active_support/core_ext/exception.rb @@ -0,0 +1,45 @@ +module ActiveSupport + if RUBY_VERSION >= '1.9' + FrozenObjectError = RuntimeError + else + FrozenObjectError = TypeError + end +end + +# TODO: Turn all this into using the BacktraceCleaner. +class Exception # :nodoc: + def clean_message + Pathname.clean_within message + end + + TraceSubstitutions = [] + FrameworkStart = /action_controller\/dispatcher\.rb/.freeze + FrameworkRegexp = /generated|vendor|dispatch|ruby|script\/\w+/.freeze + + def clean_backtrace + backtrace.collect do |line| + Pathname.clean_within(TraceSubstitutions.inject(line) do |result, (regexp, sub)| + result.gsub regexp, sub + end) + end + end + + def application_backtrace + before_framework_frame = nil + before_application_frame = true + + trace = clean_backtrace.reject do |line| + before_framework_frame ||= (line =~ FrameworkStart) + non_app_frame = (line =~ FrameworkRegexp) + before_application_frame = false unless non_app_frame + before_framework_frame || (non_app_frame && !before_application_frame) + end + + # If we didn't find any application frames, return an empty app trace. + before_application_frame ? [] : trace + end + + def framework_backtrace + clean_backtrace.grep FrameworkRegexp + end +end