From 244e94de80751091f3ef0208dfb6b8502a6c13eb Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Tue, 28 Sep 2010 20:19:55 +0000 Subject: [PATCH] Refactor the hardcoded event actions (notifiables) to use a class git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4220 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/settings_controller.rb | 2 +- lib/redmine.rb | 1 + lib/redmine/notifiable.rb | 19 ++++++++++++ test/unit/lib/redmine/notifiable_test.rb | 38 ++++++++++++++++++++++++ 4 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 lib/redmine/notifiable.rb create mode 100644 test/unit/lib/redmine/notifiable_test.rb diff --git a/app/controllers/settings_controller.rb b/app/controllers/settings_controller.rb index 77e1da56b..2e904ec19 100644 --- a/app/controllers/settings_controller.rb +++ b/app/controllers/settings_controller.rb @@ -26,7 +26,7 @@ class SettingsController < ApplicationController end def edit - @notifiables = %w(issue_added issue_updated news_added document_added file_added message_posted wiki_content_added wiki_content_updated) + @notifiables = Redmine::Notifiable.all if request.post? && params[:settings] && params[:settings].is_a?(Hash) settings = (params[:settings] || {}).dup.symbolize_keys settings.each do |name, value| diff --git a/lib/redmine.rb b/lib/redmine.rb index eac459c2f..9d9b0e408 100644 --- a/lib/redmine.rb +++ b/lib/redmine.rb @@ -8,6 +8,7 @@ require 'redmine/core_ext' require 'redmine/themes' require 'redmine/hook' require 'redmine/plugin' +require 'redmine/notifiable' require 'redmine/wiki_formatting' require 'redmine/scm/base' diff --git a/lib/redmine/notifiable.rb b/lib/redmine/notifiable.rb new file mode 100644 index 000000000..fa192ab25 --- /dev/null +++ b/lib/redmine/notifiable.rb @@ -0,0 +1,19 @@ +module Redmine + class Notifiable + CoreNotifications = [ + 'issue_added', + 'issue_updated', + 'news_added', + 'document_added', + 'file_added', + 'message_posted', + 'wiki_content_added', + 'wiki_content_updated' + ] + + # TODO: Plugin API for adding a new notification? + def self.all + CoreNotifications + end + end +end diff --git a/test/unit/lib/redmine/notifiable_test.rb b/test/unit/lib/redmine/notifiable_test.rb new file mode 100644 index 000000000..e0f16b462 --- /dev/null +++ b/test/unit/lib/redmine/notifiable_test.rb @@ -0,0 +1,38 @@ +# redMine - project management software +# Copyright (C) 2006-2008 Jean-Philippe Lang +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +require File.dirname(__FILE__) + '/../../../test_helper' + +class Redmine::NotifiableTest < ActiveSupport::TestCase + def setup + end + + def test_included_core_notifications + assert_equal 8, Redmine::Notifiable::CoreNotifications.length + Redmine::Notifiable::CoreNotifications.length + + %w(issue_added issue_updated news_added document_added file_added message_posted wiki_content_added wiki_content_updated).each do |notifiable| + assert Redmine::Notifiable::CoreNotifications.include?(notifiable), "missing #{notifiable}" + end + end + + def test_all_should_include_all_of_the_core_notifications + Redmine::Notifiable::CoreNotifications.each do |notifiable| + assert Redmine::Notifiable.all.include?(notifiable), "missing #{notifiable} in #all" + end + end +end -- 2.39.5