Make Note methods saner

This commit is contained in:
Riyad Preukschas 2012-10-13 16:23:12 +02:00
parent db3d90cbcb
commit b1461de993
7 changed files with 39 additions and 18 deletions

View file

@ -13,9 +13,7 @@ module NotesHelper
end
def link_to_commit_diff_line_note(note)
return unless note.line_note?
commit = note.target
commit = note.noteable
diff_index, diff_old_line, diff_new_line = note.line_code.split('_')
link_file = commit.diffs[diff_index.to_i].new_path

View file

@ -29,7 +29,7 @@ class Notify < ActionMailer::Base
def note_commit_email(recipient_id, note_id)
@note = Note.find(note_id)
@commit = @note.target
@commit = @note.noteable
@commit = CommitDecorator.decorate(@commit)
@project = @note.project
mail(to: recipient(recipient_id), subject: subject("note for commit #{@commit.short_id}", @commit.title))

View file

@ -48,11 +48,12 @@ class Note < ActiveRecord::Base
@notify_author ||= false
end
def target
if commit?
# override to return commits, which are not active record
def noteable
if for_commit?
project.commit(noteable_id)
else
noteable
super
end
# Temp fix to prevent app crash
# if note commit id doesnt exist
@ -74,22 +75,22 @@ class Note < ActiveRecord::Base
# Boolean
#
def notify_only_author?(user)
commit? && commit_author &&
for_commit? && commit_author &&
commit_author.email != user.email
end
def commit?
def for_commit?
noteable_type == "Commit"
end
def line_note?
def for_diff_line?
line_code.present?
end
def commit_author
@commit_author ||=
project.users.find_by_email(target.author_email) ||
project.users.find_by_name(target.author_name)
project.users.find_by_email(noteable.author_email) ||
project.users.find_by_name(noteable.author_name)
rescue
nil
end

View file

@ -36,4 +36,12 @@ module StaticModel
def destroyed?
false
end
def ==(other)
if other.is_a? StaticModel
id == other.id
else
super
end
end
end

View file

@ -8,10 +8,10 @@
ago
- unless note_for_main_target?(note)
- if note.commit?
- if note.for_commit?
%span.cgray
on #{link_to note.target.short_id, project_commit_path(@project, note.target)}
= link_to_commit_diff_line_note(note) if note.line_note?
on #{link_to note.noteable.short_id, project_commit_path(@project, note.noteable)}
= link_to_commit_diff_line_note(note) if note.for_diff_line?
-# only show vote if it's a note for the main target
- if note_for_main_target?(note)

View file

@ -235,7 +235,7 @@ describe Notify do
commit.stub(:safe_message).and_return('some message')
end
end
before(:each) { note.stub(:target).and_return(commit) }
before(:each) { note.stub(:noteable).and_return(commit) }
subject { Notify.note_commit_email(recipient.id, note.id) }

View file

@ -85,9 +85,19 @@ describe Note do
noteable_type: "Commit"
end
it "should be accessible through #noteable" do
@note.noteable_id.should == commit.id
@note.noteable.should be_a(Commit)
@note.noteable.should == commit
end
it "should save a valid note" do
@note.noteable_id.should == commit.id
@note.target.id.should == commit.id
@note.noteable == commit
end
it "should be recognized by #for_commit?" do
@note.should be_for_commit
end
end
@ -101,7 +111,11 @@ describe Note do
it "should save a valid note" do
@note.noteable_id.should == commit.id
@note.target.id.should == commit.id
@note.noteable.id.should == commit.id
end
it "should be recognized by #for_diff_line?" do
@note.should be_for_diff_line
end
end