aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support
diff options
context:
space:
mode:
Diffstat (limited to 'activesupport/lib/active_support')
-rw-r--r--activesupport/lib/active_support/core_ext/exception.rb19
-rw-r--r--activesupport/lib/active_support/core_ext/pathname.rb7
-rw-r--r--activesupport/lib/active_support/core_ext/pathname/clean_within.rb14
3 files changed, 33 insertions, 7 deletions
diff --git a/activesupport/lib/active_support/core_ext/exception.rb b/activesupport/lib/active_support/core_ext/exception.rb
index 0b65af7bf8..2e3965117b 100644
--- a/activesupport/lib/active_support/core_ext/exception.rb
+++ b/activesupport/lib/active_support/core_ext/exception.rb
@@ -1,25 +1,30 @@
-class Exception
- alias :clean_message :message
+class Exception # :nodoc:
+ def clean_message
+ Pathname.clean_within message
+ end
TraceSubstitutions = []
- FrameworkRegexp = /generated_code|vendor|dispatch|ruby|script\/\w+/
+ FrameworkRegexp = /generated|vendor|dispatch|ruby|script\/\w+/
def clean_backtrace
backtrace.collect do |line|
- TraceSubstitutions.inject(line) do |line, (regexp, sub)|
+ Pathname.clean_within(TraceSubstitutions.inject(line) do |line, (regexp, sub)|
line.gsub regexp, sub
- end
+ end)
end
end
def application_backtrace
before_application_frame = true
- clean_backtrace.reject do |line|
- non_app_frame = !! (line =~ FrameworkRegexp)
+ trace = clean_backtrace.reject do |line|
+ non_app_frame = (line =~ FrameworkRegexp)
before_application_frame = false unless non_app_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
diff --git a/activesupport/lib/active_support/core_ext/pathname.rb b/activesupport/lib/active_support/core_ext/pathname.rb
new file mode 100644
index 0000000000..9e78c273d9
--- /dev/null
+++ b/activesupport/lib/active_support/core_ext/pathname.rb
@@ -0,0 +1,7 @@
+require 'pathname'
+require File.dirname(__FILE__) + '/pathname/clean_within'
+
+class Pathname#:nodoc:
+ extend ActiveSupport::CoreExtensions::Pathname::CleanWithin
+end
+
diff --git a/activesupport/lib/active_support/core_ext/pathname/clean_within.rb b/activesupport/lib/active_support/core_ext/pathname/clean_within.rb
new file mode 100644
index 0000000000..ae03e1bc5a
--- /dev/null
+++ b/activesupport/lib/active_support/core_ext/pathname/clean_within.rb
@@ -0,0 +1,14 @@
+module ActiveSupport #:nodoc:
+ module CoreExtensions #:nodoc:
+ module Pathname #:nodoc:
+ module CleanWithin
+ # Clean the paths contained in the provided string.
+ def clean_within(string)
+ string.gsub(%r{[\w. ]+(/[\w. ]+)+(\.rb)?(\b|$)}) do |path|
+ new(path).cleanpath
+ end
+ end
+ end
+ end
+ end
+end