]> source.dussan.org Git - sonarqube.git/commitdiff
Quality Gates: better handling of errors
authorStas Vilchik <vilchiks@gmail.com>
Thu, 27 Feb 2014 16:46:49 +0000 (17:46 +0100)
committerStas Vilchik <vilchiks@gmail.com>
Thu, 27 Feb 2014 16:46:57 +0000 (17:46 +0100)
sonar-server/src/main/webapp/javascripts/quality-gate/app.coffee
sonar-server/src/main/webapp/javascripts/quality-gate/app.js
sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-condition-view.coffee
sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-condition-view.js
sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-header-view.coffee
sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-header-view.js
sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-renaming-view.coffee
sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-renaming-view.js
sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-new-view.coffee

index 06e97b566ffc3a8a0c5326058b72675b8b97dd59..b40dd599f915aebaea09638604d46f0304143d93 100644 (file)
@@ -37,6 +37,14 @@ requirejs [
   QualityGateRouter
 ) ->
 
+  # Create a generic error handler for ajax requests
+  jQuery.ajaxSetup
+    error: (jqXHR) ->
+      if jqXHR.responseJSON?.errors?
+        alert _.pluck(jqXHR.responseJSON.errors, 'msg').join '. '
+      else
+        alert jqXHR.responseText
+
   # Create a Quality Gate Application
   App = new Marionette.Application
 
@@ -80,7 +88,8 @@ requirejs [
     App.openFirstQualityGate() if initial
 
   # Load metrics and the list of quality gates before start the application
-  jQuery.when(App.metrics.fetch(), App.qualityGates.fetch()).done ->
-    jQuery('.quality-gate-page-loader').remove()
-    # Start the application
-    App.start()
+  jQuery.when(App.metrics.fetch(), App.qualityGates.fetch())
+    .done ->
+      jQuery('.quality-gate-page-loader').remove()
+      # Start the application
+      App.start()
index 4e664ec8f13347bcc5a1007bf414925e05c5d58c..51ec105c419f67f9b3e63e8c9a7746665b35cc0f 100644 (file)
 
   requirejs(['backbone', 'backbone.marionette', 'handlebars', 'quality-gate/collections/quality-gates', 'quality-gate/collections/metrics', 'quality-gate/views/quality-gate-sidebar-list-view', 'quality-gate/router', 'handlebars-extensions'], function(Backbone, Marionette, Handlebars, QualityGates, Metrics, QualityGateSidebarListItemView, QualityGateRouter) {
     var App;
+    jQuery.ajaxSetup({
+      error: function(jqXHR) {
+        var _ref;
+        if (((_ref = jqXHR.responseJSON) != null ? _ref.errors : void 0) != null) {
+          return alert(_.pluck(jqXHR.responseJSON.errors, 'msg').join('. '));
+        } else {
+          return alert(jqXHR.responseText);
+        }
+      }
+    });
     App = new Marionette.Application;
     App.metrics = new Metrics;
     App.qualityGates = new QualityGates;
index 114b897e1f113cb5994a0406b674fa0e4321a7d5..5cf922fcfe0ab34ef65abcb00764a2937e6d8bea 100644 (file)
@@ -77,9 +77,11 @@ define [
         op: @ui.operatorSelect.val()
         warning: @ui.warningInput.val()
         error: @ui.errorInput.val()
-      @model.save().done =>
-        @options.collectionView.updateConditions()
-        @hideSpinner()
+      @model.save()
+        .always =>
+          @hideSpinner()
+        .done =>
+          @options.collectionView.updateConditions()
 
 
     deleteCondition: ->
index c93a5b62674ef150ef9f27547c4db0b7d931d852..2c61f70392f907f9c1d2be20cba6dc8003ab45a3 100644 (file)
           warning: this.ui.warningInput.val(),
           error: this.ui.errorInput.val()
         });
-        return this.model.save().done(function() {
-          _this.options.collectionView.updateConditions();
+        return this.model.save().always(function() {
           return _this.hideSpinner();
+        }).done(function() {
+          return _this.options.collectionView.updateConditions();
         });
       };
 
index c2ec768d610302cd12b59bdae6743218e231636e..e8401a75442b8f8488fa211b14c4176c448c7547 100644 (file)
@@ -36,14 +36,15 @@ define [
       @options.detailView.showHeaderSpinner()
       data = if set then { id: @model.id } else {}
       method = if set then 'set_as_default' else 'unset_default'
-      jQuery.ajax({
+      jQuery.ajax
         type: 'POST'
         url: "#{baseUrl}/api/qualitygates/#{method}"
         data: data
-      }).done =>
+      .always =>
+        @options.detailView.hideHeaderSpinner()
+      .done =>
         @options.app.unsetDefaults @model.id
         @model.set 'default', !@model.get('default')
-        @options.detailView.hideHeaderSpinner()
 
 
     setAsDefault: ->
index 2641adc13e8447a44506695263ed06b27c4edf5c..760b0f487de706a52829bbbdcba993da5ed7c8a2 100644 (file)
           type: 'POST',
           url: "" + baseUrl + "/api/qualitygates/" + method,
           data: data
+        }).always(function() {
+          return _this.options.detailView.hideHeaderSpinner();
         }).done(function() {
           _this.options.app.unsetDefaults(_this.model.id);
-          _this.model.set('default', !_this.model.get('default'));
-          return _this.options.detailView.hideHeaderSpinner();
+          return _this.model.set('default', !_this.model.get('default'));
         });
       };
 
index cd557648e4a4d2189082736c04376b9313400dc4..e5b778535409e4dd7e78b2c8d6997d9286d8d97f 100644 (file)
@@ -26,16 +26,17 @@ define [
     rename: ->
       @options.detailView.showHeaderSpinner()
       newName = @ui.input.val()
-      jQuery.ajax({
+      jQuery.ajax
         url: "#{baseUrl}/api/qualitygates/rename"
         type: 'POST'
         data:
           id: @model.id
           name: newName
-      }).done =>
+      .always =>
+        @options.detailView.hideHeaderSpinner()
+      .done =>
         @model.set 'name', newName
         @options.detailView.showHeader()
-        @options.detailView.hideHeaderSpinner()
 
 
     cancel: ->
index 4339214161be28814a50533d5e4c24d42f6a9ca9..983f29a17a1e8406628ee533dc71046618a27ee7 100644 (file)
             id: this.model.id,
             name: newName
           }
+        }).always(function() {
+          return _this.options.detailView.hideHeaderSpinner();
         }).done(function() {
           _this.model.set('name', newName);
-          _this.options.detailView.showHeader();
-          return _this.options.detailView.hideHeaderSpinner();
+          return _this.options.detailView.showHeader();
         });
       };
 
index a0dfca698a3db81d596f84bccd33ae445b827b08..681c63cfe4f7b7f8880a0706955f3acb2e7e3aa6 100644 (file)
@@ -28,11 +28,11 @@ define [
     save: ->
       @showHeaderSpinner()
       name = @ui.input.val()
-      jQuery.ajax({
+      jQuery.ajax
         url: "#{baseUrl}/api/qualitygates/create"
         type: 'POST'
         data: name: name
-      }).done (r) =>
+      .done (r) =>
         @model.set r
         @options.app.qualityGates.add @model
         @options.app.router.navigate "show/#{@model.id}", trigger: true