Commit 9fbbef6f7e7f2aedc6f91cd0cfdcadf7afb137d9

email receiver when creating a new merge request and start on base for merge_request#status

Commit diff

app/models/mailer.rb

 
2121 @body[:url] = "http://gitorious.org/p/#{repository.project.slug}/repos/#{repository.name}"
2222 end
2323
24 def merge_request_notification(merge_request)
25 setup_email(merge_request.target_repository.user)
26 @subject += %Q{#{merge_request.target_repository.user} has requested a merge in #{merge_request.target_repository.project}}
27 @body[:merge_request] = merge_request
28 @body[:project] = merge_request.target_repository.project
29 url = "http://gitorious.org/p/#{merge_request.target_repository.project.slug}"
30 url << "/repos/#{merge_request.target_repository.project.slug}"
31 url << "/merge_requests/#{merge_request.id}"
32 @body[:url] = url
33 end
34
2435 protected
2536 def setup_email(user)
2637 @recipients = "#{user.email}"
toggle raw diff

app/models/merge_request.rb

 
99
1010 validates_presence_of :user, :source_repository, :target_repository
1111 attr_protected :user_id
12
13 def open?
14 status == STATUS_OPEN
15 end
16
17 def merged?
18 status == STATUS_MERGED
19 end
20
21 def rejected?
22 status == STATUS_REJECTED
23 end
1224end
toggle raw diff

app/models/merge_request_observer.rb

 
1class MergeRequestObserver < ActiveRecord::Observer
2
3 def after_create(record)
4 Mailer.deliver_merge_request_notification(record)
5 end
6
7end
toggle raw diff

app/views/mailer/merge_request_notification.rhtml

 
1Hello <%= @merge_request.target_repository.user.login -%>,
2
3<%= @merge_request.source_repository.user.login -%> has requested that you merge <%= @merge_request.source_repository.name -%> with <%= @merge_request.target_repository.name -%> in the <%= @project.title -%> project.
4
5You can review the request and its commits here:
6<%= @url %>
7
8Thank you
9
10http://gitorious.org
toggle raw diff

config/environment.rb

 
4545 # config.active_record.schema_format = :sql
4646
4747 # Activate observers that should always be running
48 config.active_record.observers = [:user_observer, :repository_observer]
48 config.active_record.observers = [
49 :user_observer,
50 :repository_observer,
51 :merge_request_observer
52 ]
4953
5054 # Make Active Record use UTC-base instead of local time
5155 config.active_record.default_timezone = :utc
toggle raw diff

spec/models/mailer_spec.rb

 
4444 Mailer.deliver(mail)
4545 Mailer.deliveries.should == [mail]
4646 end
47
48 it "sends merge_request_notification" do
49 merge_request = merge_requests(:moes_to_johans)
50 mail = Mailer.create_merge_request_notification(merge_request)
51
52 mail.to.should == [merge_request.target_repository.user.email]
53 mail.subject.should == "[Gitorious] #{merge_request.target_repository.user} has requested a merge in #{merge_request.target_repository.project}"
54 mail.body.should match(/moe has requested that you merge #{merge_request.source_repository.name} with #{merge_request.target_repository.name}/)
55 mail.body.should match(/in the #{merge_request.target_repository.project.title} project/)
56
57 Mailer.deliver(mail)
58 Mailer.deliveries.should == [mail]
59 end
4760
4861end
toggle raw diff

spec/models/merge_request_spec.rb

 
2424 @merge_request.should have(1).error_on(:target_repository)
2525 end
2626
27 it "emails the owner of the target_repository on create"
27 it "emails the owner of the target_repository on create" do
28 Mailer.deliveries = []
29 mr = @merge_request.clone
30 mr.save
31 Mailer.deliveries.should_not be_empty
32 end
2833
29 it "has a merged? status"
34 it "has a merged? status" do
35 @merge_request.status = MergeRequest::STATUS_MERGED
36 @merge_request.merged?.should == true
37 end
3038
31 it "has a rejected? status"
39 it "has a rejected? status" do
40 @merge_request.status = MergeRequest::STATUS_REJECTED
41 @merge_request.rejected?.should == true
42 end
43
44 it "has a open? status" do
45 @merge_request.status = MergeRequest::STATUS_OPEN
46 @merge_request.open?.should == true
47 end
3248end
toggle raw diff