Commit 9fbbef6f7e7f2aedc6f91cd0cfdcadf7afb137d9
- Date: Sun Mar 02 15:04:11 +0000 2008
- Committer: Johan Sørensen (johan@johansorensen.com)
- Author: Johan Sørensen (johan@johansorensen.com)
- Commit SHA1: 9fbbef6f7e7f2aedc6f91cd0cfdcadf7afb137d9
- Tree SHA1: 634ad10283553a2abe934058ce8ca6fcbc836009
email receiver when creating a new merge request and start on base for merge_request#status
Commit diff
| |   |
| 21 | 21 | @body[:url] = "http://gitorious.org/p/#{repository.project.slug}/repos/#{repository.name}" |
| 22 | 22 | end |
| 23 | 23 | |
| 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 | |
| 24 | 35 | protected |
| 25 | 36 | def setup_email(user) |
| 26 | 37 | @recipients = "#{user.email}" |
| toggle raw diff |
--- a/app/models/mailer.rb
+++ b/app/models/mailer.rb
@@ -21,6 +21,17 @@ class Mailer < ActionMailer::Base
@body[:url] = "http://gitorious.org/p/#{repository.project.slug}/repos/#{repository.name}"
end
+ def merge_request_notification(merge_request)
+ setup_email(merge_request.target_repository.user)
+ @subject += %Q{#{merge_request.target_repository.user} has requested a merge in #{merge_request.target_repository.project}}
+ @body[:merge_request] = merge_request
+ @body[:project] = merge_request.target_repository.project
+ url = "http://gitorious.org/p/#{merge_request.target_repository.project.slug}"
+ url << "/repos/#{merge_request.target_repository.project.slug}"
+ url << "/merge_requests/#{merge_request.id}"
+ @body[:url] = url
+ end
+
protected
def setup_email(user)
@recipients = "#{user.email}" |
| |   |
| 9 | 9 | |
| 10 | 10 | validates_presence_of :user, :source_repository, :target_repository |
| 11 | 11 | 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 |
| 12 | 24 | end |
| toggle raw diff |
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -9,4 +9,16 @@ class MergeRequest < ActiveRecord::Base
validates_presence_of :user, :source_repository, :target_repository
attr_protected :user_id
+
+ def open?
+ status == STATUS_OPEN
+ end
+
+ def merged?
+ status == STATUS_MERGED
+ end
+
+ def rejected?
+ status == STATUS_REJECTED
+ end
end |
| |   |
| 1 | class MergeRequestObserver < ActiveRecord::Observer |
| 2 | |
| 3 | def after_create(record) |
| 4 | Mailer.deliver_merge_request_notification(record) |
| 5 | end |
| 6 | |
| 7 | end |
| toggle raw diff |
--- /dev/null
+++ b/app/models/merge_request_observer.rb
@@ -0,0 +1,7 @@
+class MergeRequestObserver < ActiveRecord::Observer
+
+ def after_create(record)
+ Mailer.deliver_merge_request_notification(record)
+ end
+
+end
\ No newline at end of file |
| |   |
| 1 | Hello <%= @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 | |
| 5 | You can review the request and its commits here: |
| 6 | <%= @url %> |
| 7 | |
| 8 | Thank you |
| 9 | |
| 10 | http://gitorious.org |
| toggle raw diff |
--- /dev/null
+++ b/app/views/mailer/merge_request_notification.rhtml
@@ -0,0 +1,10 @@
+Hello <%= @merge_request.target_repository.user.login -%>,
+
+<%= @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.
+
+You can review the request and its commits here:
+<%= @url %>
+
+Thank you
+
+http://gitorious.org |
| |   |
| 45 | 45 | # config.active_record.schema_format = :sql |
| 46 | 46 | |
| 47 | 47 | # 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 | ] |
| 49 | 53 | |
| 50 | 54 | # Make Active Record use UTC-base instead of local time |
| 51 | 55 | config.active_record.default_timezone = :utc |
| toggle raw diff |
--- a/config/environment.rb
+++ b/config/environment.rb
@@ -45,7 +45,11 @@ Rails::Initializer.run do |config|
# config.active_record.schema_format = :sql
# Activate observers that should always be running
- config.active_record.observers = [:user_observer, :repository_observer]
+ config.active_record.observers = [
+ :user_observer,
+ :repository_observer,
+ :merge_request_observer
+ ]
# Make Active Record use UTC-base instead of local time
config.active_record.default_timezone = :utc |
| |   |
| 44 | 44 | Mailer.deliver(mail) |
| 45 | 45 | Mailer.deliveries.should == [mail] |
| 46 | 46 | 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 |
| 47 | 60 | |
| 48 | 61 | end |
| toggle raw diff |
--- a/spec/models/mailer_spec.rb
+++ b/spec/models/mailer_spec.rb
@@ -44,5 +44,18 @@ describe Mailer do
Mailer.deliver(mail)
Mailer.deliveries.should == [mail]
end
+
+ it "sends merge_request_notification" do
+ merge_request = merge_requests(:moes_to_johans)
+ mail = Mailer.create_merge_request_notification(merge_request)
+
+ mail.to.should == [merge_request.target_repository.user.email]
+ mail.subject.should == "[Gitorious] #{merge_request.target_repository.user} has requested a merge in #{merge_request.target_repository.project}"
+ mail.body.should match(/moe has requested that you merge #{merge_request.source_repository.name} with #{merge_request.target_repository.name}/)
+ mail.body.should match(/in the #{merge_request.target_repository.project.title} project/)
+
+ Mailer.deliver(mail)
+ Mailer.deliveries.should == [mail]
+ end
end |
| |   |
| 24 | 24 | @merge_request.should have(1).error_on(:target_repository) |
| 25 | 25 | end |
| 26 | 26 | |
| 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 |
| 28 | 33 | |
| 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 |
| 30 | 38 | |
| 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 |
| 32 | 48 | end |
| toggle raw diff |
--- a/spec/models/merge_request_spec.rb
+++ b/spec/models/merge_request_spec.rb
@@ -24,9 +24,25 @@ describe MergeRequest do
@merge_request.should have(1).error_on(:target_repository)
end
- it "emails the owner of the target_repository on create"
+ it "emails the owner of the target_repository on create" do
+ Mailer.deliveries = []
+ mr = @merge_request.clone
+ mr.save
+ Mailer.deliveries.should_not be_empty
+ end
- it "has a merged? status"
+ it "has a merged? status" do
+ @merge_request.status = MergeRequest::STATUS_MERGED
+ @merge_request.merged?.should == true
+ end
- it "has a rejected? status"
+ it "has a rejected? status" do
+ @merge_request.status = MergeRequest::STATUS_REJECTED
+ @merge_request.rejected?.should == true
+ end
+
+ it "has a open? status" do
+ @merge_request.status = MergeRequest::STATUS_OPEN
+ @merge_request.open?.should == true
+ end
end |