From d6efeeb39232fd53515a647b8db81cca23e24134 Mon Sep 17 00:00:00 2001 From: Ryan Jones Date: Fri, 10 Aug 2012 17:22:22 -0600 Subject: [PATCH] finish off notification modeling --- app/controllers/apps_controller.rb | 14 +++++++++++++- app/models/app.rb | 5 +++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/app/controllers/apps_controller.rb b/app/controllers/apps_controller.rb index 004bff5..8cd23e0 100644 --- a/app/controllers/apps_controller.rb +++ b/app/controllers/apps_controller.rb @@ -29,12 +29,14 @@ class AppsController < InheritedResources::Base def create @app = App.new(params[:app]) initialize_subclassed_issue_tracker + initialize_subclassed_notification_service create! end def update @app = resource initialize_subclassed_issue_tracker + initialize_subclassed_notification_service update! end @@ -70,6 +72,7 @@ class AppsController < InheritedResources::Base end def initialize_subclassed_issue_tracker + # set the app's issue tracker if params[:app][:issue_tracker_attributes] && tracker_type = params[:app][:issue_tracker_attributes][:type] if IssueTracker.subclasses.map(&:name).concat(["IssueTracker"]).include?(tracker_type) @app.issue_tracker = tracker_type.constantize.new(params[:app][:issue_tracker_attributes]) @@ -77,6 +80,15 @@ class AppsController < InheritedResources::Base end end + def initialize_subclassed_notification_service + # set the app's notification service + if params[:app][:notification_service_attributes] && notification_type = params[:app][:notification_service_attributes][:type] + if NotificationService.subclasses.map(&:name).concat(["NotificationService"]).include?(notification_type) + @app.notification_service = notification_type.constantize.new(params[:app][:notification_service_attributes]) + end + end + end + def begin_of_association_chain # Filter the @apps collection to apps watched by the current user, unless user is an admin. # If user is an admin, then no filter is applied, and all apps are shown. @@ -90,7 +102,7 @@ class AppsController < InheritedResources::Base def plug_params app app.watchers.build if app.watchers.none? app.issue_tracker = IssueTracker.new unless app.issue_tracker_configured? - app.notification_service = NotificationService.new + app.notification_service = NotificationService.new unless app.notification_service_configured? app.copy_attributes_from(params[:copy_attributes_from]) if params[:copy_attributes_from] end diff --git a/app/models/app.rb b/app/models/app.rb index 1aedfeb..c88cebc 100644 --- a/app/models/app.rb +++ b/app/models/app.rb @@ -124,6 +124,11 @@ class App !!(issue_tracker && issue_tracker.class < IssueTracker && issue_tracker.project_id.present?) end + def notification_service_configured? + !!(notification_service && notification_service.class < NotificationService && notification_service.api_token.present?) + end + + def notification_recipients if notify_all_users (User.all.map(&:email).reject(&:blank?) + watchers.map(&:address)).uniq -- libgit2 0.21.2