Merge pull request #329 from abf/rosa-build:328-post-commit-hooks-to-email-updates

#328: post-commit hooks to email updates
This commit is contained in:
avokhmin 2013-11-27 13:32:04 +04:00
commit e40c076a38
14 changed files with 86 additions and 14 deletions

View File

@ -11,7 +11,7 @@ module ActivityFeedsHelper
feed_title = feed_title.gsub(/\s{2,}/, ' ').strip feed_title = feed_title.gsub(/\s{2,}/, ' ').strip
end end
def user_link user, user_name def user_link(user, user_name, full_url = false)
user.persisted? ? link_to(user_name, user_path(user)) : user_name user.persisted? ? link_to(user_name, full_url ? user_url(user) : user_path(user)) : user_name
end end
end end

View File

@ -1,6 +1,9 @@
# -*- encoding : utf-8 -*- # -*- encoding : utf-8 -*-
class UserMailer < ActionMailer::Base class UserMailer < ActionMailer::Base
add_template_helper ActivityFeedsHelper
add_template_helper CommitHelper
default :from => "\"#{APP_CONFIG['project_name']}\" <#{APP_CONFIG['do-not-reply-email']}>" default :from => "\"#{APP_CONFIG['project_name']}\" <#{APP_CONFIG['do-not-reply-email']}>"
default_url_options.merge!(:protocol => 'https') if APP_CONFIG['mailer_https_url'] default_url_options.merge!(:protocol => 'https') if APP_CONFIG['mailer_https_url']
@ -52,7 +55,7 @@ class UserMailer < ActionMailer::Base
end end
def build_list_notification(build_list, user) def build_list_notification(build_list, user)
I18n.locale = user.language if user.language set_locale user
@user, @build_list = user, build_list @user, @build_list = user, build_list
subject = "[№ #{build_list.id}] " subject = "[№ #{build_list.id}] "
@ -69,7 +72,7 @@ class UserMailer < ActionMailer::Base
end end
def invite_approve_notification(register_request) def invite_approve_notification(register_request)
I18n.locale = register_request.language if register_request.language set_locale register_request
@register_request = register_request @register_request = register_request
mail( mail(
:to => register_request.email, :to => register_request.email,
@ -79,8 +82,32 @@ class UserMailer < ActionMailer::Base
end end
end end
def git_delete_branch_notification(user, options)
set_locale user
mail(
:to => user.email,
:subject => I18n.t('notifications.subjects.update_code', :project_name => "#{options[:project_owner]}/#{options[:project_name]}")
) do |format|
format.html { render 'git_delete_branch_notification', :locals => options }
end
end
def git_new_push_notification(user, options)
set_locale user
mail(
:to => user.email,
:subject => I18n.t('notifications.subjects.update_code', :project_name => "#{options[:project_owner]}/#{options[:project_name]}")
) do |format|
format.html { render 'git_new_push_notification', :locals => options }
end
end
protected protected
def set_locale(user)
I18n.locale = user.language if user.language
end
def email_with_name(user, email = APP_CONFIG['do-not-reply-email']) def email_with_name(user, email = APP_CONFIG['do-not-reply-email'])
"\"#{user.user_appeal}\" <#{email}>" "\"#{user.user_appeal}\" <#{email}>"
end end

View File

@ -1,7 +1,8 @@
json.user do json.user do
json.(@user, :id) json.(@user, :id)
json.notifiers do json.notifiers do
json.(@user.notifier, :can_notify, :new_comment, :new_comment_reply, :new_issue, :issue_assign, :new_comment_commit_owner, :new_comment_commit_repo_owner, :new_comment_commit_commentor, :new_build, :new_associated_build) json.(@user.notifier, :can_notify, :new_comment, :new_comment_reply, :new_issue, :issue_assign, :new_comment_commit_owner, :new_comment_commit_repo_owner, :new_comment_commit_commentor, :new_build, :new_associated_build,
:update_code)
end end
end end

View File

@ -0,0 +1,8 @@
- user = User.where(:email => user_email).first || User.new(:email => user_email) if defined?(user_email)
%p
- _user_link = defined?(user_email) ? user_link(user, defined?(user_name) ? user_name : user_email, true) : nil
= t('notifications.bodies.delete_branch', :branch_name => branch_name, :user_link => _user_link).html_safe
= raw t("notifications.bodies.project", :project_link => link_to("#{project_owner}/#{project_name}", project_url(project_owner, project_name)) )
= render 'footer'

View File

@ -0,0 +1,20 @@
- user = User.where(:email => user_email).first || User.new(:email => user_email) if defined?(user_email)
%p
- _user_link = defined?(user_email) ? user_link(user, defined?(user_name) ? user_name : user_email, true) : nil
= raw t("notifications.bodies.#{change_type}_branch", {:branch_name => branch_name, :user_link => _user_link})
= raw t("notifications.bodies.project", :project_link => link_to("#{project_owner}/#{project_name}", project_url(project_owner, project_name)) )
%p
- last_commits.each do |commit|
= link_to shortest_hash_id(commit[0]), commit_url(project_owner, project_name, commit[0])
= commit[1]
%br
- if defined? other_commits
%br
=link_to t('notifications.bodies.more_commits', :count => other_commits_count, :commits => commits_pluralize(other_commits_count)),
diff_url(project_owner, project_name, :diff => other_commits)
= render 'footer'

View File

@ -9,7 +9,7 @@
= form_for @user.notifier, :url => notifiers_settings_path, :html => {:class => :form} do |f| = form_for @user.notifier, :url => notifiers_settings_path, :html => {:class => :form} do |f|
= render 'notifier', :f => f, :field => :can_notify = render 'notifier', :f => f, :field => :can_notify
%h3= t("layout.settings.notifiers.code_header") %h3= t("layout.settings.notifiers.code_header")
- [:new_comment_commit_owner, :new_comment_commit_repo_owner, :new_comment_commit_commentor].each do |field| - [:update_code, :new_comment_commit_owner, :new_comment_commit_repo_owner, :new_comment_commit_commentor].each do |field|
= render 'notifier', :f => f, :field => field = render 'notifier', :f => f, :field => field
%h3= t("layout.settings.notifiers.tracker_header") %h3= t("layout.settings.notifiers.tracker_header")
- [:new_comment, :new_comment_reply, :new_issue, :issue_assign].each do |field| - [:new_comment, :new_comment_reply, :new_issue, :issue_assign].each do |field|

View File

@ -154,11 +154,11 @@ en:
group_already_added: Group already added group_already_added: Group already added
successfully_added: Member %s successfully added successfully_added: Member %s successfully added
error_in_adding: Member %s adding error error_in_adding: Member %s adding error
wrong_user: User with nickname '%{uname}' not found! wrong_user: "User with nickname '%{uname}' not found!"
blob: blob:
successfully_updated: File '%{name}' successfully updated successfully_updated: "File '%{name}' successfully updated"
updating_error: Error updating file '%{name}' updating_error: "Error updating file '%{name}'"
attributes: attributes:
password: Password password: Password
@ -188,6 +188,7 @@ en:
new_comment_reply: New reply of comment notifications new_comment_reply: New reply of comment notifications
new_issue: New task notifications new_issue: New task notifications
issue_assign: New task assignment notifications issue_assign: New task assignment notifications
update_code: Notify about changes of code in my projects
new_comment_commit_owner: Notify about comments to my commit new_comment_commit_owner: Notify about comments to my commit
new_comment_commit_repo_owner: Notify about comments to my repository commits new_comment_commit_repo_owner: Notify about comments to my repository commits
new_comment_commit_commentor: Notify about comments after my commit new_comment_commit_commentor: Notify about comments after my commit

View File

@ -12,6 +12,7 @@ en:
notifications: notifications:
subjects: subjects:
update_code: "[%{project_name}] Update of project"
new_comment_notification: New comment to your task new_comment_notification: New comment to your task
new_commit_comment_notification: New comment to commit new_commit_comment_notification: New comment to commit
new_issue_notification: New task added to project new_issue_notification: New task added to project

View File

@ -12,6 +12,7 @@ ru:
notifications: notifications:
subjects: subjects:
update_code: "[%{project_name}] Обновление проекта"
new_comment_notification: Новый комментарий к Вашей задаче new_comment_notification: Новый комментарий к Вашей задаче
new_commit_comment_notification: Новый комментарий к коммиту new_commit_comment_notification: Новый комментарий к коммиту
new_issue_notification: Новая задача добавлена к проекту new_issue_notification: Новая задача добавлена к проекту

View File

@ -154,11 +154,11 @@ ru:
group_already_added: Группа уже добавлена group_already_added: Группа уже добавлена
successfully_added: Участник %s успешно добавлен successfully_added: Участник %s успешно добавлен
error_in_adding: Ошибка при добавлении участника %s error_in_adding: Ошибка при добавлении участника %s
wrong_user: Пользователь с ником '%{uname}' не найден. wrong_user: "Пользователь с ником '%{uname}' не найден."
blob: blob:
successfully_updated: Файл '%{name}' успешно обновлен successfully_updated: "Файл '%{name}' успешно обновлен"
updating_error: Ошибка обновления файла '%{name}' updating_error: "Ошибка обновления файла '%{name}'"
attributes: attributes:
password: Пароль password: Пароль
@ -188,6 +188,7 @@ ru:
new_comment_reply: Оповещать о новом ответе на мой комментарий new_comment_reply: Оповещать о новом ответе на мой комментарий
new_issue: Оповещать о новых задачах в моих проектах new_issue: Оповещать о новых задачах в моих проектах
issue_assign: Оповещать, когда на меня выставляют задачу issue_assign: Оповещать, когда на меня выставляют задачу
update_code: Оповещать об изменении кода в моих проектах
new_comment_commit_owner: Оповещать о комментариях к моему коммиту new_comment_commit_owner: Оповещать о комментариях к моему коммиту
new_comment_commit_repo_owner: Оповещать о комментариях к коммитам в моем репозитории new_comment_commit_repo_owner: Оповещать о комментариях к коммитам в моем репозитории
new_comment_commit_commentor: Оповещать о комментариях к коммиту после моего new_comment_commit_commentor: Оповещать о комментариях к коммиту после моего

View File

@ -0,0 +1,5 @@
class AddNewCommitToSettingsNotifier < ActiveRecord::Migration
def change
add_column :settings_notifiers, :update_code, :boolean, :default => false
end
end

View File

@ -11,7 +11,7 @@
# #
# It's strongly recommended to check this file into your version control system. # It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20131107152408) do ActiveRecord::Schema.define(:version => 20131126154305) do
create_table "activity_feeds", :force => true do |t| create_table "activity_feeds", :force => true do |t|
t.integer "user_id", :null => false t.integer "user_id", :null => false
@ -21,6 +21,8 @@ ActiveRecord::Schema.define(:version => 20131107152408) do
t.datetime "updated_at" t.datetime "updated_at"
end end
add_index "activity_feeds", ["user_id", "kind"], :name => "index_activity_feeds_on_user_id_and_kind"
create_table "advisories", :force => true do |t| create_table "advisories", :force => true do |t|
t.string "advisory_id" t.string "advisory_id"
t.text "description", :default => "" t.text "description", :default => ""
@ -509,7 +511,7 @@ ActiveRecord::Schema.define(:version => 20131107152408) do
add_index "repository_statuses", ["repository_id", "platform_id"], :name => "index_repository_statuses_on_repository_id_and_platform_id", :unique => true add_index "repository_statuses", ["repository_id", "platform_id"], :name => "index_repository_statuses_on_repository_id_and_platform_id", :unique => true
create_table "settings_notifiers", :force => true do |t| create_table "settings_notifiers", :force => true do |t|
t.integer "user_id", :null => false t.integer "user_id", :null => false
t.boolean "can_notify", :default => true t.boolean "can_notify", :default => true
t.boolean "new_comment", :default => true t.boolean "new_comment", :default => true
t.boolean "new_comment_reply", :default => true t.boolean "new_comment_reply", :default => true
@ -522,6 +524,7 @@ ActiveRecord::Schema.define(:version => 20131107152408) do
t.boolean "new_comment_commit_commentor", :default => true t.boolean "new_comment_commit_commentor", :default => true
t.boolean "new_build", :default => true t.boolean "new_build", :default => true
t.boolean "new_associated_build", :default => true t.boolean "new_associated_build", :default => true
t.boolean "update_code", :default => false
end end
create_table "ssh_keys", :force => true do |t| create_table "ssh_keys", :force => true do |t|

View File

@ -44,6 +44,9 @@ module Modules::Observers::ActivityFeed::Git
:kind => kind, :kind => kind,
:data => options :data => options
) )
if recipient.notifier.can_notify && recipient.notifier.update_code
UserMailer.send(kind, recipient, options).deliver
end
end end
when 'Hash' # 'Gollum::Committer' when 'Hash' # 'Gollum::Committer'

View File

@ -124,6 +124,7 @@ describe Repository do
end end
it '#remove_projects' do it '#remove_projects' do
stub_redis
repository = FactoryGirl.create(:repository) repository = FactoryGirl.create(:repository)
project = FactoryGirl.create(:project) project = FactoryGirl.create(:project)
repository.projects << project repository.projects << project