From 59a9e1dfe9eafa1bdb077cfe2fe4ff3c99c858e1 Mon Sep 17 00:00:00 2001 From: Marcin Ciunelis Date: Fri, 5 Oct 2012 16:16:51 +0200 Subject: [PATCH] extract backtrace related helpers --- app/helpers/backtrace_helper.rb | 16 ++++++++++++++++ app/helpers/backtrace_line_helper.rb | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ app/helpers/notices_helper.rb | 64 ---------------------------------------------------------------- 3 files changed, 67 insertions(+), 64 deletions(-) create mode 100644 app/helpers/backtrace_helper.rb create mode 100644 app/helpers/backtrace_line_helper.rb diff --git a/app/helpers/backtrace_helper.rb b/app/helpers/backtrace_helper.rb new file mode 100644 index 0000000..ba48753 --- /dev/null +++ b/app/helpers/backtrace_helper.rb @@ -0,0 +1,16 @@ +module BacktraceHelper + # Group lines into sections of in-app files and external files + # (An implementation of Enumerable#chunk so we don't break 1.8.7 support.) + def grouped_lines(lines) + line_groups = [] + lines.each do |line| + in_app = line.in_app? + if line_groups.last && line_groups.last[0] == in_app + line_groups.last[1] << line + else + line_groups << [in_app, [line]] + end + end + line_groups + end +end diff --git a/app/helpers/backtrace_line_helper.rb b/app/helpers/backtrace_line_helper.rb new file mode 100644 index 0000000..b83ab77 --- /dev/null +++ b/app/helpers/backtrace_line_helper.rb @@ -0,0 +1,51 @@ +module BacktraceLineHelper + def link_to_source_file(app, line, &block) + text = capture_haml(&block) + if line.in_app? + return link_to_github(app, line, text) if app.github_repo? + return link_to_bitbucket(app, line, text) if app.bitbucket_repo? + if app.issue_tracker && app.issue_tracker.respond_to?(:url_to_file) + # Return link to file on tracker if issue tracker supports this + return link_to_issue_tracker_file(app, line, text) + end + end + text + end + + def filepath_parts(file) + [file.split('/').last, file] + end + + def link_to_github(app, line, text = nil) + file_name, file_path = filepath_parts(line.file) + href = "%s#L%s" % [app.github_url_to_file(file_path), line.number] + link_to(text || file_name, href, :target => '_blank') + end + + def link_to_bitbucket(app, line, text = nil) + file_name, file_path = filepath_parts(line.file) + href = "%s#cl-%s" % [app.bitbucket_url_to_file(file_path), line.number] + link_to(text || file_name, href, :target => '_blank') + end + + def link_to_issue_tracker_file(app, line, text = nil) + file_name, file_path = filepath_parts(line.file_relative) + href = app.issue_tracker.url_to_file(file_path, line.number) + link_to(text || file_name, href, :target => '_blank') + end + + def path_for_backtrace_line(line) + path = File.dirname(line.file) + return '' if path == '.' + # Remove [PROJECT_ROOT] + path.gsub!('[PROJECT_ROOT]/', '') + # Make gem name bold if starts with [GEM_ROOT]/gems + path.gsub!(/\[GEM_ROOT\]\/gems\/([^\/]+)/, "\\1") + (path << '/').html_safe + end + + def file_for_backtrace_line(line) + file = File.basename(line.file) + end + +end diff --git a/app/helpers/notices_helper.rb b/app/helpers/notices_helper.rb index 6a2502c..45b0f6a 100644 --- a/app/helpers/notices_helper.rb +++ b/app/helpers/notices_helper.rb @@ -3,69 +3,5 @@ module NoticesHelper def notice_atom_summary(notice) render "notices/atom_entry.html.haml", :notice => notice end - - def link_to_source_file(app, line, &block) - text = capture_haml(&block) - if line.in_app? - return link_to_github(app, line, text) if app.github_repo? - return link_to_bitbucket(app, line, text) if app.bitbucket_repo? - if app.issue_tracker && app.issue_tracker.respond_to?(:url_to_file) - # Return link to file on tracker if issue tracker supports this - return link_to_issue_tracker_file(app, line, text) - end - end - text - end - - def filepath_parts(file) - [file.split('/').last, file] - end - - def link_to_github(app, line, text = nil) - file_name, file_path = filepath_parts(line.file) - href = "%s#L%s" % [app.github_url_to_file(file_path), line.number] - link_to(text || file_name, href, :target => '_blank') - end - - def link_to_bitbucket(app, line, text = nil) - file_name, file_path = filepath_parts(line.file) - href = "%s#cl-%s" % [app.bitbucket_url_to_file(file_path), line.number] - link_to(text || file_name, href, :target => '_blank') - end - - def link_to_issue_tracker_file(app, line, text = nil) - file_name, file_path = filepath_parts(line.file_relative) - href = app.issue_tracker.url_to_file(file_path, line.number) - link_to(text || file_name, href, :target => '_blank') - end - - # Group lines into sections of in-app files and external files - # (An implementation of Enumerable#chunk so we don't break 1.8.7 support.) - def grouped_lines(lines) - line_groups = [] - lines.each do |line| - in_app = line.in_app? - if line_groups.last && line_groups.last[0] == in_app - line_groups.last[1] << line - else - line_groups << [in_app, [line]] - end - end - line_groups - end - - def path_for_backtrace_line(line) - path = File.dirname(line.file) - return '' if path == '.' - # Remove [PROJECT_ROOT] - path.gsub!('[PROJECT_ROOT]/', '') - # Make gem name bold if starts with [GEM_ROOT]/gems - path.gsub!(/\[GEM_ROOT\]\/gems\/([^\/]+)/, "\\1") - (path << '/').html_safe - end - - def file_for_backtrace_line(line) - file = File.basename(line.file) - end end -- libgit2 0.21.2