Commit f2f02b6ca346f67f96d076b0cbbad93c11c9d6bc
1 parent
07cd269d
Exists in
master
and in
1 other branch
Add links to source files in notification emails
Showing
5 changed files
with
23 additions
and
9 deletions
Show diff stats
app/mailers/mailer.rb
app/models/backtrace_line.rb
app/views/mailer/err_notification.html.haml
| ... | ... | @@ -28,7 +28,9 @@ |
| 28 | 28 | %p.monospace |
| 29 | 29 | = @notice.where |
| 30 | 30 | - @notice.in_app_backtrace_lines.each do |line| |
| 31 | - %p.backtrace= line | |
| 31 | + %p.backtrace | |
| 32 | + = link_to_source_file(line) do | |
| 33 | + = line.to_s | |
| 32 | 34 | %br |
| 33 | 35 | %p.heading URL: |
| 34 | 36 | %p.monospace |
| ... | ... | @@ -40,6 +42,7 @@ |
| 40 | 42 | %br |
| 41 | 43 | %p.heading FULL BACKTRACE: |
| 42 | 44 | - @notice.backtrace_lines.each do |line| |
| 43 | - %p.backtrace= line | |
| 45 | + %p.backtrace | |
| 46 | + = link_to_source_file(line) do | |
| 47 | + = line.to_s | |
| 44 | 48 | %br |
| 45 | - | ... | ... |
app/views/notices/_backtrace_line.html.haml
| 1 | 1 | %tr{:class => defined?(row_class) && row_class} |
| 2 | 2 | %td.line{:class => line.in_app? && 'in-app' } |
| 3 | 3 | = link_to_source_file(line) do |
| 4 | - %span.path>=raw line.decorated_path | |
| 4 | + %span.path>= raw line.decorated_path | |
| 5 | 5 | %span.file>= line.file_name |
| 6 | 6 | - if line.number.present? |
| 7 | 7 | %span.number>= ":#{line.number}" | ... | ... |
spec/mailers/mailer_spec.rb
| ... | ... | @@ -6,24 +6,34 @@ describe Mailer do |
| 6 | 6 | include EmailSpec::Matchers |
| 7 | 7 | |
| 8 | 8 | let(:notice) { Fabricate(:notice, :message => "class < ActionController::Base") } |
| 9 | - let!(:email) { Mailer.err_notification(notice).deliver } | |
| 9 | + | |
| 10 | + before do | |
| 11 | + notice.backtrace.lines.last.update_attributes(:file => "[PROJECT_ROOT]/path/to/file.js") | |
| 12 | + notice.app.update_attributes :asset_host => "http://example.com" | |
| 13 | + | |
| 14 | + @email = Mailer.err_notification(notice).deliver | |
| 15 | + end | |
| 10 | 16 | |
| 11 | 17 | it "should send the email" do |
| 12 | 18 | ActionMailer::Base.deliveries.size.should == 1 |
| 13 | 19 | end |
| 14 | 20 | |
| 15 | 21 | it "should html-escape the notice's message for the html part" do |
| 16 | - email.should have_body_text("class < ActionController::Base") | |
| 22 | + @email.should have_body_text("class < ActionController::Base") | |
| 17 | 23 | end |
| 18 | 24 | |
| 19 | 25 | it "should have inline css" do |
| 20 | - email.should have_body_text('<p class="backtrace" style="') | |
| 26 | + @email.should have_body_text('<p class="backtrace" style="') | |
| 27 | + end | |
| 28 | + | |
| 29 | + it "should have links to source files" do | |
| 30 | + @email.should have_body_text('<a href="http://example.com/path/to/file.js" target="_blank">path/to/file.js') | |
| 21 | 31 | end |
| 22 | 32 | |
| 23 | 33 | context 'with a very long message' do |
| 24 | 34 | let(:notice) { Fabricate(:notice, :message => 6.times.collect{|a| "0123456789" }.join('')) } |
| 25 | 35 | it "should truncate the long message" do |
| 26 | - email.subject.should =~ / \d{47}\.{3}$/ | |
| 36 | + @email.subject.should =~ / \d{47}\.{3}$/ | |
| 27 | 37 | end |
| 28 | 38 | end |
| 29 | 39 | end | ... | ... |