Commit 54fb0f858949ea3fab68861fe74d05a40cd45cfe
Exists in
master
and in
4 other branches
Merge branch 'notification_refactoring'
Showing
22 changed files
with
265 additions
and
65 deletions
Show diff stats
app/controllers/admin/users_controller.rb
| @@ -27,7 +27,6 @@ class Admin::UsersController < ApplicationController | @@ -27,7 +27,6 @@ class Admin::UsersController < ApplicationController | ||
| 27 | 27 | ||
| 28 | respond_to do |format| | 28 | respond_to do |format| |
| 29 | if @admin_user.save | 29 | if @admin_user.save |
| 30 | - Notify.new_user_email(@admin_user, params[:user][:password]).deliver | ||
| 31 | format.html { redirect_to [:admin, @admin_user], notice: 'User was successfully created.' } | 30 | format.html { redirect_to [:admin, @admin_user], notice: 'User was successfully created.' } |
| 32 | format.json { render json: @admin_user, status: :created, location: @admin_user } | 31 | format.json { render json: @admin_user, status: :created, location: @admin_user } |
| 33 | else | 32 | else |
app/controllers/application_controller.rb
| 1 | class ApplicationController < ActionController::Base | 1 | class ApplicationController < ActionController::Base |
| 2 | before_filter :authenticate_user! | 2 | before_filter :authenticate_user! |
| 3 | + before_filter :set_current_user_for_mailer | ||
| 3 | protect_from_forgery | 4 | protect_from_forgery |
| 4 | helper_method :abilities, :can? | 5 | helper_method :abilities, :can? |
| 5 | 6 | ||
| @@ -19,6 +20,10 @@ class ApplicationController < ActionController::Base | @@ -19,6 +20,10 @@ class ApplicationController < ActionController::Base | ||
| 19 | end | 20 | end |
| 20 | end | 21 | end |
| 21 | 22 | ||
| 23 | + def set_current_user_for_mailer | ||
| 24 | + MailerObserver.current_user = current_user | ||
| 25 | + end | ||
| 26 | + | ||
| 22 | def abilities | 27 | def abilities |
| 23 | @abilities ||= Six.new | 28 | @abilities ||= Six.new |
| 24 | end | 29 | end |
app/controllers/issues_controller.rb
| @@ -67,10 +67,7 @@ class IssuesController < ApplicationController | @@ -67,10 +67,7 @@ class IssuesController < ApplicationController | ||
| 67 | def create | 67 | def create |
| 68 | @issue = @project.issues.new(params[:issue]) | 68 | @issue = @project.issues.new(params[:issue]) |
| 69 | @issue.author = current_user | 69 | @issue.author = current_user |
| 70 | - | ||
| 71 | - if @issue.save && @issue.assignee != current_user | ||
| 72 | - Notify.new_issue_email(@issue).deliver | ||
| 73 | - end | 70 | + @issue.save |
| 74 | 71 | ||
| 75 | respond_with(@issue) | 72 | respond_with(@issue) |
| 76 | end | 73 | end |
app/controllers/notes_controller.rb
| @@ -12,10 +12,8 @@ class NotesController < ApplicationController | @@ -12,10 +12,8 @@ class NotesController < ApplicationController | ||
| 12 | def create | 12 | def create |
| 13 | @note = @project.notes.new(params[:note]) | 13 | @note = @project.notes.new(params[:note]) |
| 14 | @note.author = current_user | 14 | @note.author = current_user |
| 15 | - | ||
| 16 | - if @note.save | ||
| 17 | - notify if params[:notify] == '1' | ||
| 18 | - end | 15 | + @note.notify = true if params[:notify] == '1' |
| 16 | + @note.save | ||
| 19 | 17 | ||
| 20 | respond_to do |format| | 18 | respond_to do |format| |
| 21 | format.html {redirect_to :back} | 19 | format.html {redirect_to :back} |
| @@ -35,22 +33,4 @@ class NotesController < ApplicationController | @@ -35,22 +33,4 @@ class NotesController < ApplicationController | ||
| 35 | end | 33 | end |
| 36 | end | 34 | end |
| 37 | 35 | ||
| 38 | - protected | ||
| 39 | - | ||
| 40 | - def notify | ||
| 41 | - @project.users.reject { |u| u.id == current_user.id } .each do |u| | ||
| 42 | - case @note.noteable_type | ||
| 43 | - when "Commit" then | ||
| 44 | - Notify.note_commit_email(u, @note).deliver | ||
| 45 | - when "Issue" then | ||
| 46 | - Notify.note_issue_email(u, @note).deliver | ||
| 47 | - when "MergeRequest" | ||
| 48 | - true # someone should write email notification | ||
| 49 | - when "Snippet" | ||
| 50 | - true | ||
| 51 | - else | ||
| 52 | - Notify.note_wall_email(u, @note).deliver | ||
| 53 | - end | ||
| 54 | - end | ||
| 55 | - end | ||
| 56 | end | 36 | end |
app/mailers/notify.rb
| @@ -30,6 +30,14 @@ class Notify < ActionMailer::Base | @@ -30,6 +30,14 @@ class Notify < ActionMailer::Base | ||
| 30 | @commit = @project.repo.commits(note.noteable_id).first | 30 | @commit = @project.repo.commits(note.noteable_id).first |
| 31 | mail(:to => @user.email, :subject => "gitlab | #{@note.project.name} ") | 31 | mail(:to => @user.email, :subject => "gitlab | #{@note.project.name} ") |
| 32 | end | 32 | end |
| 33 | + | ||
| 34 | + def note_merge_request_email(user, note) | ||
| 35 | + @user = user | ||
| 36 | + @note = note | ||
| 37 | + @project = note.project | ||
| 38 | + @merge_request = note.noteable | ||
| 39 | + mail(:to => @user.email, :subject => "gitlab | #{@note.project.name} ") | ||
| 40 | + end | ||
| 33 | 41 | ||
| 34 | def note_issue_email(user, note) | 42 | def note_issue_email(user, note) |
| 35 | @user = user | 43 | @user = user |
| @@ -38,4 +46,27 @@ class Notify < ActionMailer::Base | @@ -38,4 +46,27 @@ class Notify < ActionMailer::Base | ||
| 38 | @issue = note.noteable | 46 | @issue = note.noteable |
| 39 | mail(:to => @user.email, :subject => "gitlab | #{@note.project.name} ") | 47 | mail(:to => @user.email, :subject => "gitlab | #{@note.project.name} ") |
| 40 | end | 48 | end |
| 49 | + | ||
| 50 | + def new_merge_request_email(merge_request) | ||
| 51 | + @user = merge_request.assignee | ||
| 52 | + @merge_request = merge_request | ||
| 53 | + @project = merge_request.project | ||
| 54 | + mail(:to => @user.email, :subject => "gitlab | #{@merge_request.title} ") | ||
| 55 | + end | ||
| 56 | + | ||
| 57 | + def changed_merge_request_email(user, merge_request) | ||
| 58 | + @user = user | ||
| 59 | + @assignee_was ||= User.find(merge_request.assignee_id_was) | ||
| 60 | + @merge_request = merge_request | ||
| 61 | + @project = merge_request.project | ||
| 62 | + mail(:to => @user.email, :subject => "gitlab | #{@merge_request.title} ") | ||
| 63 | + end | ||
| 64 | + | ||
| 65 | + def changed_issue_email(user, issue) | ||
| 66 | + @user = user | ||
| 67 | + @assignee_was ||= User.find(issue.assignee_id_was) | ||
| 68 | + @issue = issue | ||
| 69 | + @project = issue.project | ||
| 70 | + mail(:to => @user.email, :subject => "gitlab | #{@issue.title} ") | ||
| 71 | + end | ||
| 41 | end | 72 | end |
app/models/issue.rb
| @@ -59,5 +59,6 @@ end | @@ -59,5 +59,6 @@ end | ||
| 59 | # closed :boolean default(FALSE), not null | 59 | # closed :boolean default(FALSE), not null |
| 60 | # position :integer default(0) | 60 | # position :integer default(0) |
| 61 | # critical :boolean default(FALSE), not null | 61 | # critical :boolean default(FALSE), not null |
| 62 | +# branch_name :string(255) | ||
| 62 | # | 63 | # |
| 63 | 64 |
| @@ -0,0 +1,75 @@ | @@ -0,0 +1,75 @@ | ||
| 1 | +class MailerObserver < ActiveRecord::Observer | ||
| 2 | + observe :issue, :user, :note, :merge_request | ||
| 3 | + cattr_accessor :current_user | ||
| 4 | + | ||
| 5 | + def after_create(model) | ||
| 6 | + new_issue(model) if model.kind_of?(Issue) | ||
| 7 | + new_user(model) if model.kind_of?(User) | ||
| 8 | + new_note(model) if model.kind_of?(Note) | ||
| 9 | + new_merge_request(model) if model.kind_of?(MergeRequest) | ||
| 10 | + end | ||
| 11 | + | ||
| 12 | + def after_update(model) | ||
| 13 | + changed_merge_request(model) if model.kind_of?(MergeRequest) | ||
| 14 | + changed_issue(model) if model.kind_of?(Issue) | ||
| 15 | + end | ||
| 16 | + | ||
| 17 | + protected | ||
| 18 | + | ||
| 19 | + def new_issue(issue) | ||
| 20 | + if issue.assignee != current_user | ||
| 21 | + Notify.new_issue_email(issue).deliver | ||
| 22 | + end | ||
| 23 | + end | ||
| 24 | + | ||
| 25 | + def new_user(user) | ||
| 26 | + Notify.new_user_email(user, user.password).deliver | ||
| 27 | + end | ||
| 28 | + | ||
| 29 | + def new_note(note) | ||
| 30 | + return unless note.notify | ||
| 31 | + note.project.users.reject { |u| u.id == current_user.id } .each do |u| | ||
| 32 | + case note.noteable_type | ||
| 33 | + when "Commit" then | ||
| 34 | + Notify.note_commit_email(u, note).deliver | ||
| 35 | + when "Issue" then | ||
| 36 | + Notify.note_issue_email(u, note).deliver | ||
| 37 | + when "MergeRequest" then | ||
| 38 | + Notify.note_merge_request_email(u, note).deliver | ||
| 39 | + when "Snippet" | ||
| 40 | + true | ||
| 41 | + else | ||
| 42 | + Notify.note_wall_email(u, note).deliver | ||
| 43 | + end | ||
| 44 | + end | ||
| 45 | + end | ||
| 46 | + | ||
| 47 | + def new_merge_request(merge_request) | ||
| 48 | + if merge_request.assignee != current_user | ||
| 49 | + Notify.new_merge_request_email(merge_request).deliver | ||
| 50 | + end | ||
| 51 | + end | ||
| 52 | + | ||
| 53 | + def changed_merge_request(merge_request) | ||
| 54 | + if merge_request.assignee_id_changed? | ||
| 55 | + recipients_ids = merge_request.assignee_id_was, merge_request.assignee_id | ||
| 56 | + recipients_ids.delete current_user.id | ||
| 57 | + | ||
| 58 | + User.find(recipients_ids).each do |user| | ||
| 59 | + Notify.changed_merge_request_email(user, merge_request).deliver | ||
| 60 | + end | ||
| 61 | + end | ||
| 62 | + end | ||
| 63 | + | ||
| 64 | + def changed_issue(issue) | ||
| 65 | + if issue.assignee_id_changed? | ||
| 66 | + recipients_ids = issue.assignee_id_was, issue.assignee_id | ||
| 67 | + recipients_ids.delete current_user.id | ||
| 68 | + | ||
| 69 | + User.find(recipients_ids).each do |user| | ||
| 70 | + Notify.changed_issue_email(user, issue).deliver | ||
| 71 | + end | ||
| 72 | + end | ||
| 73 | + | ||
| 74 | + end | ||
| 75 | +end |
app/models/merge_request.rb
| @@ -44,3 +44,19 @@ class MergeRequest < ActiveRecord::Base | @@ -44,3 +44,19 @@ class MergeRequest < ActiveRecord::Base | ||
| 44 | project.commit(source_branch) | 44 | project.commit(source_branch) |
| 45 | end | 45 | end |
| 46 | end | 46 | end |
| 47 | +# == Schema Information | ||
| 48 | +# | ||
| 49 | +# Table name: merge_requests | ||
| 50 | +# | ||
| 51 | +# id :integer not null, primary key | ||
| 52 | +# target_branch :string(255) not null | ||
| 53 | +# source_branch :string(255) not null | ||
| 54 | +# project_id :integer not null | ||
| 55 | +# author_id :integer | ||
| 56 | +# assignee_id :integer | ||
| 57 | +# title :string(255) | ||
| 58 | +# closed :boolean default(FALSE), not null | ||
| 59 | +# created_at :datetime | ||
| 60 | +# updated_at :datetime | ||
| 61 | +# | ||
| 62 | + |
app/models/note.rb
| @@ -13,6 +13,7 @@ class Note < ActiveRecord::Base | @@ -13,6 +13,7 @@ class Note < ActiveRecord::Base | ||
| 13 | :prefix => true | 13 | :prefix => true |
| 14 | 14 | ||
| 15 | attr_protected :author, :author_id | 15 | attr_protected :author, :author_id |
| 16 | + attr_accessor :notify | ||
| 16 | 17 | ||
| 17 | validates_presence_of :project | 18 | validates_presence_of :project |
| 18 | 19 | ||
| @@ -35,6 +36,10 @@ class Note < ActiveRecord::Base | @@ -35,6 +36,10 @@ class Note < ActiveRecord::Base | ||
| 35 | scope :inc_author, includes(:author) | 36 | scope :inc_author, includes(:author) |
| 36 | 37 | ||
| 37 | mount_uploader :attachment, AttachmentUploader | 38 | mount_uploader :attachment, AttachmentUploader |
| 39 | + | ||
| 40 | + def notify | ||
| 41 | + @notify ||= false | ||
| 42 | + end | ||
| 38 | end | 43 | end |
| 39 | # == Schema Information | 44 | # == Schema Information |
| 40 | # | 45 | # |
app/models/project.rb
| @@ -247,14 +247,15 @@ end | @@ -247,14 +247,15 @@ end | ||
| 247 | # | 247 | # |
| 248 | # Table name: projects | 248 | # Table name: projects |
| 249 | # | 249 | # |
| 250 | -# id :integer not null, primary key | ||
| 251 | -# name :string(255) | ||
| 252 | -# path :string(255) | ||
| 253 | -# description :text | ||
| 254 | -# created_at :datetime | ||
| 255 | -# updated_at :datetime | ||
| 256 | -# private_flag :boolean default(TRUE), not null | ||
| 257 | -# code :string(255) | ||
| 258 | -# owner_id :integer | 250 | +# id :integer not null, primary key |
| 251 | +# name :string(255) | ||
| 252 | +# path :string(255) | ||
| 253 | +# description :text | ||
| 254 | +# created_at :datetime | ||
| 255 | +# updated_at :datetime | ||
| 256 | +# private_flag :boolean default(TRUE), not null | ||
| 257 | +# code :string(255) | ||
| 258 | +# owner_id :integer | ||
| 259 | +# default_branch :string(255) default("master"), not null | ||
| 259 | # | 260 | # |
| 260 | 261 |
app/models/users_project.rb
| @@ -23,13 +23,12 @@ end | @@ -23,13 +23,12 @@ end | ||
| 23 | # | 23 | # |
| 24 | # Table name: users_projects | 24 | # Table name: users_projects |
| 25 | # | 25 | # |
| 26 | -# id :integer not null, primary key | ||
| 27 | -# user_id :integer not null | ||
| 28 | -# project_id :integer not null | ||
| 29 | -# read :boolean default(FALSE) | ||
| 30 | -# write :boolean default(FALSE) | ||
| 31 | -# admin :boolean default(FALSE) | ||
| 32 | -# created_at :datetime | ||
| 33 | -# updated_at :datetime | 26 | +# id :integer not null, primary key |
| 27 | +# user_id :integer not null | ||
| 28 | +# project_id :integer not null | ||
| 29 | +# created_at :datetime | ||
| 30 | +# updated_at :datetime | ||
| 31 | +# repo_access :integer default(0), not null | ||
| 32 | +# project_access :integer default(0), not null | ||
| 34 | # | 33 | # |
| 35 | 34 |
| @@ -0,0 +1,16 @@ | @@ -0,0 +1,16 @@ | ||
| 1 | +%td.content{:align => "left", :style => "font-family: Helvetica, Arial, sans-serif; padding: 20px 0 0;", :valign => "top", :width => "600"} | ||
| 2 | + %table{:border => "0", :cellpadding => "0", :cellspacing => "0", :style => "color: #717171; font: normal 11px Helvetica, Arial, sans-serif; margin: 0; padding: 0;", :width => "600"} | ||
| 3 | + %tr | ||
| 4 | + %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} | ||
| 5 | + %td{:align => "left", :style => "padding: 20px 0 0;"} | ||
| 6 | + %h2{:style => "color:#646464; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "} | ||
| 7 | + Reassigned Issue | ||
| 8 | + = link_to truncate(@issue.title, :length => 16), project_issue_url(@project, @issue) | ||
| 9 | + %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} | ||
| 10 | + %tr | ||
| 11 | + %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} | ||
| 12 | + %td{:style => "padding: 15px 0 15px;", :valign => "top"} | ||
| 13 | + %p{:style => "color:#767676; font-weight: normal; margin: 0; padding: 0; line-height: 20px; font-size: 12px;font-family: Helvetica, Arial, sans-serif; "} | ||
| 14 | + Assignee changed from #{@assignee_was.name} to #{@issue.assignee.name} | ||
| 15 | + %td | ||
| 16 | + |
| @@ -0,0 +1,16 @@ | @@ -0,0 +1,16 @@ | ||
| 1 | +%td.content{:align => "left", :style => "font-family: Helvetica, Arial, sans-serif; padding: 20px 0 0;", :valign => "top", :width => "600"} | ||
| 2 | + %table{:border => "0", :cellpadding => "0", :cellspacing => "0", :style => "color: #717171; font: normal 11px Helvetica, Arial, sans-serif; margin: 0; padding: 0;", :width => "600"} | ||
| 3 | + %tr | ||
| 4 | + %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} | ||
| 5 | + %td{:align => "left", :style => "padding: 20px 0 0;"} | ||
| 6 | + %h2{:style => "color:#646464; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "} | ||
| 7 | + Reassigned Merge Request | ||
| 8 | + = link_to truncate(@merge_request.title, :length => 16), project_merge_request_url(@project, @merge_request) | ||
| 9 | + %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} | ||
| 10 | + %tr | ||
| 11 | + %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} | ||
| 12 | + %td{:style => "padding: 15px 0 15px;", :valign => "top"} | ||
| 13 | + %p{:style => "color:#767676; font-weight: normal; margin: 0; padding: 0; line-height: 20px; font-size: 12px;font-family: Helvetica, Arial, sans-serif; "} | ||
| 14 | + Assignee changed from #{@assignee_was.name} to #{@merge_request.assignee.name} | ||
| 15 | + %td | ||
| 16 | + |
app/views/notify/new_issue_email.html.haml
| @@ -4,7 +4,7 @@ | @@ -4,7 +4,7 @@ | ||
| 4 | %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} | 4 | %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} |
| 5 | %td{:align => "left", :style => "padding: 20px 0 0;"} | 5 | %td{:align => "left", :style => "padding: 20px 0 0;"} |
| 6 | %h2{:style => "color:#646464; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "} | 6 | %h2{:style => "color:#646464; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "} |
| 7 | - Hi #{@user.name}! New Issue was created and assigned to you. | 7 | + New Issue was created and assigned to you. |
| 8 | %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} | 8 | %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} |
| 9 | %tr | 9 | %tr |
| 10 | %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} | 10 | %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} |
| @@ -0,0 +1,20 @@ | @@ -0,0 +1,20 @@ | ||
| 1 | +%td.content{:align => "left", :style => "font-family: Helvetica, Arial, sans-serif; padding: 20px 0 0;", :valign => "top", :width => "600"} | ||
| 2 | + %table{:border => "0", :cellpadding => "0", :cellspacing => "0", :style => "color: #717171; font: normal 11px Helvetica, Arial, sans-serif; margin: 0; padding: 0;", :width => "600"} | ||
| 3 | + %tr | ||
| 4 | + %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} | ||
| 5 | + %td{:align => "left", :style => "padding: 20px 0 0;"} | ||
| 6 | + %h2{:style => "color:#646464; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "} | ||
| 7 | + New Merge Request | ||
| 8 | + = link_to truncate(@merge_request.title, :length => 16), project_merge_request_url(@project, @merge_request) | ||
| 9 | + %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} | ||
| 10 | + %tr | ||
| 11 | + %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} | ||
| 12 | + %td{:style => "padding: 15px 0 15px;", :valign => "top"} | ||
| 13 | + %p{:style => "color:#767676; font-weight: normal; margin: 0; padding: 0; line-height: 20px; font-size: 12px;font-family: Helvetica, Arial, sans-serif; "} | ||
| 14 | + Branches: #{@merge_request.source_branch} → #{@merge_request.target_branch} | ||
| 15 | + | ||
| 16 | + %p{:style => "color:#767676; font-weight: normal; margin: 0; padding: 0; line-height: 20px; font-size: 12px;font-family: Helvetica, Arial, sans-serif; "} | ||
| 17 | + Asignee: #{@merge_request.author.name} → #{@merge_request.assignee.name} | ||
| 18 | + | ||
| 19 | + %td | ||
| 20 | + |
| @@ -0,0 +1,23 @@ | @@ -0,0 +1,23 @@ | ||
| 1 | +%td.content{:align => "left", :style => "font-family: Helvetica, Arial, sans-serif; padding: 20px 0 0;", :valign => "top", :width => "600"} | ||
| 2 | + %table{:border => "0", :cellpadding => "0", :cellspacing => "0", :style => "color: #717171; font: normal 11px Helvetica, Arial, sans-serif; margin: 0; padding: 0;", :width => "600"} | ||
| 3 | + %tr | ||
| 4 | + %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} | ||
| 5 | + %td{:align => "left", :style => "padding: 20px 0 0;"} | ||
| 6 | + %h2{:style => "color:#646464; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "} | ||
| 7 | + New comment for Merge Request | ||
| 8 | + = link_to truncate(@merge_request.title, :length => 16), project_merge_request_url(@project, @merge_request, :anchor => "note_#{@note.id}") | ||
| 9 | + %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} | ||
| 10 | + %tr | ||
| 11 | + %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} | ||
| 12 | + %td{:style => "padding: 15px 0 15px;", :valign => "top"} | ||
| 13 | + %p{:style => "color:#767676; font-weight: normal; margin: 0; padding: 0; line-height: 20px; font-size: 12px;font-family: Helvetica, Arial, sans-serif; "} | ||
| 14 | + %a{:href => "#", :style => "color: #0eb6ce; text-decoration: none;"} #{@note.author.name} | ||
| 15 | + left next message: | ||
| 16 | + %br | ||
| 17 | + %table{:border => "0", :cellpadding => "0", :cellspacing => "0", :width => "558"} | ||
| 18 | + %tr | ||
| 19 | + %td{:valign => "top"} | ||
| 20 | + %cite{:style => "color:#767676; font-weight: normal; margin: 0; padding: 0; line-height: 20px; font-size: 12px;font-family: Helvetica, Arial, sans-serif; "} | ||
| 21 | + = @note.note | ||
| 22 | + %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} | ||
| 23 | + |
config/application.rb
| @@ -23,7 +23,7 @@ module Gitlab | @@ -23,7 +23,7 @@ module Gitlab | ||
| 23 | # config.plugins = [ :exception_notification, :ssl_requirement, :all ] | 23 | # config.plugins = [ :exception_notification, :ssl_requirement, :all ] |
| 24 | 24 | ||
| 25 | # Activate observers that should always be running. | 25 | # Activate observers that should always be running. |
| 26 | - # config.active_record.observers = :cacher, :garbage_collector, :forum_observer | 26 | + config.active_record.observers = :mailer_observer |
| 27 | 27 | ||
| 28 | # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. | 28 | # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. |
| 29 | # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. | 29 | # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. |
spec/models/issue_spec.rb
| @@ -39,5 +39,6 @@ end | @@ -39,5 +39,6 @@ end | ||
| 39 | # closed :boolean default(FALSE), not null | 39 | # closed :boolean default(FALSE), not null |
| 40 | # position :integer default(0) | 40 | # position :integer default(0) |
| 41 | # critical :boolean default(FALSE), not null | 41 | # critical :boolean default(FALSE), not null |
| 42 | +# branch_name :string(255) | ||
| 42 | # | 43 | # |
| 43 | 44 |
spec/models/merge_request_spec.rb
| @@ -26,3 +26,19 @@ describe MergeRequest do | @@ -26,3 +26,19 @@ describe MergeRequest do | ||
| 26 | :assignee => Factory(:user), | 26 | :assignee => Factory(:user), |
| 27 | :project => Factory.create(:project)).should be_valid } | 27 | :project => Factory.create(:project)).should be_valid } |
| 28 | end | 28 | end |
| 29 | +# == Schema Information | ||
| 30 | +# | ||
| 31 | +# Table name: merge_requests | ||
| 32 | +# | ||
| 33 | +# id :integer not null, primary key | ||
| 34 | +# target_branch :string(255) not null | ||
| 35 | +# source_branch :string(255) not null | ||
| 36 | +# project_id :integer not null | ||
| 37 | +# author_id :integer | ||
| 38 | +# assignee_id :integer | ||
| 39 | +# title :string(255) | ||
| 40 | +# closed :boolean default(FALSE), not null | ||
| 41 | +# created_at :datetime | ||
| 42 | +# updated_at :datetime | ||
| 43 | +# | ||
| 44 | + |
spec/models/project_spec.rb
| @@ -168,14 +168,15 @@ end | @@ -168,14 +168,15 @@ end | ||
| 168 | # | 168 | # |
| 169 | # Table name: projects | 169 | # Table name: projects |
| 170 | # | 170 | # |
| 171 | -# id :integer not null, primary key | ||
| 172 | -# name :string(255) | ||
| 173 | -# path :string(255) | ||
| 174 | -# description :text | ||
| 175 | -# created_at :datetime | ||
| 176 | -# updated_at :datetime | ||
| 177 | -# private_flag :boolean default(TRUE), not null | ||
| 178 | -# code :string(255) | ||
| 179 | -# owner_id :integer | 171 | +# id :integer not null, primary key |
| 172 | +# name :string(255) | ||
| 173 | +# path :string(255) | ||
| 174 | +# description :text | ||
| 175 | +# created_at :datetime | ||
| 176 | +# updated_at :datetime | ||
| 177 | +# private_flag :boolean default(TRUE), not null | ||
| 178 | +# code :string(255) | ||
| 179 | +# owner_id :integer | ||
| 180 | +# default_branch :string(255) default("master"), not null | ||
| 180 | # | 181 | # |
| 181 | 182 |
spec/models/users_project_spec.rb
| @@ -20,13 +20,12 @@ end | @@ -20,13 +20,12 @@ end | ||
| 20 | # | 20 | # |
| 21 | # Table name: users_projects | 21 | # Table name: users_projects |
| 22 | # | 22 | # |
| 23 | -# id :integer not null, primary key | ||
| 24 | -# user_id :integer not null | ||
| 25 | -# project_id :integer not null | ||
| 26 | -# read :boolean default(FALSE) | ||
| 27 | -# write :boolean default(FALSE) | ||
| 28 | -# admin :boolean default(FALSE) | ||
| 29 | -# created_at :datetime | ||
| 30 | -# updated_at :datetime | 23 | +# id :integer not null, primary key |
| 24 | +# user_id :integer not null | ||
| 25 | +# project_id :integer not null | ||
| 26 | +# created_at :datetime | ||
| 27 | +# updated_at :datetime | ||
| 28 | +# repo_access :integer default(0), not null | ||
| 29 | +# project_access :integer default(0), not null | ||
| 31 | # | 30 | # |
| 32 | 31 |
spec/requests/issues_spec.rb
| @@ -147,13 +147,12 @@ describe "Issues" do | @@ -147,13 +147,12 @@ describe "Issues" do | ||
| 147 | click_button "Save" | 147 | click_button "Save" |
| 148 | end | 148 | end |
| 149 | 149 | ||
| 150 | - it "should send valid email to user with email & password" do | 150 | + it "should send valid email to user" do |
| 151 | click_button "Save" | 151 | click_button "Save" |
| 152 | issue = Issue.last | 152 | issue = Issue.last |
| 153 | email = ActionMailer::Base.deliveries.last | 153 | email = ActionMailer::Base.deliveries.last |
| 154 | email.subject.should have_content("New Issue was created") | 154 | email.subject.should have_content("New Issue was created") |
| 155 | email.body.should have_content(issue.title) | 155 | email.body.should have_content(issue.title) |
| 156 | - email.body.should have_content(issue.assignee.name) | ||
| 157 | end | 156 | end |
| 158 | 157 | ||
| 159 | end | 158 | end |