[PATCH conductor 1/4] Mustachifying deployables/show

ifarkas at redhat.com ifarkas at redhat.com
Mon May 14 14:15:16 UTC 2012


From: Imre Farkas <ifarkas at redhat.com>

---
 aeolus-conductor.spec.in                           |    3 +-
 src/app/controllers/deployables_controller.rb      |   27 ++++++----
 .../views/deployables/_image_status.html.mustache  |   16 ++++++
 src/app/views/deployables/show.html.haml           |   49 ++------------------
 src/public/javascripts/backbone/views.js           |   17 +++++--
 5 files changed, 51 insertions(+), 61 deletions(-)
 create mode 100644 src/app/views/deployables/_image_status.html.mustache

diff --git a/aeolus-conductor.spec.in b/aeolus-conductor.spec.in
index 3a9511c..b9bb080 100644
--- a/aeolus-conductor.spec.in
+++ b/aeolus-conductor.spec.in
@@ -196,7 +196,8 @@ haml="app/views/hardware_profiles app/views/realm_mappings \
       app/views/api/builds app/views/api/provider_images \
       app/views/api/target_images app/views/api/entrypoint \
       app/views/api/environments"
-mustache="app/views/instances app/views/pools app/views/deployments"
+mustache="app/views/instances app/views/pools app/views/deployments \
+          app/views/deployables"
 html="public"
 ico="public"
 jpg="public/images public/stylesheets/images"
diff --git a/src/app/controllers/deployables_controller.rb b/src/app/controllers/deployables_controller.rb
index 543cb53..2336c39 100644
--- a/src/app/controllers/deployables_controller.rb
+++ b/src/app/controllers/deployables_controller.rb
@@ -80,25 +80,30 @@ class DeployablesController < ApplicationController
     flash.now[:error] = @deployable_errors unless @deployable_errors.empty?
 
     if @missing_images.empty?
-      @build_results = {}
+      @image_status = []
       @pushed_count = 0
-      ProviderAccount.includes(:provider, :pool_families).where('providers.enabled' => true, 'pool_families.id' => @deployable.catalogs.first.pool_family.id).each do |account|
-        type = account.provider.provider_type.deltacloud_driver
-        @build_results[type] ||= []
-        status = @deployable.build_status(images, account)
-        @pushed_count += 1 if (status == :pushed)
-        @build_results[type] << {
-          :account => account.label,
-          :provider => account.provider.name,
-          :status => status,
+
+      @catalog.pool_family.provider_accounts.includes(:provider).where('providers.enabled' => true).each do |provider_account|
+        deltacloud_driver = provider_account.provider.provider_type.deltacloud_driver
+        build_status = @deployable.build_status(images, provider_account)
+        @pushed_count += 1 if (build_status == :pushed)
+
+        @image_status << {
+          :deltacloud_driver => deltacloud_driver,
+          :provider_account_label => provider_account.label,
+          :provider_name => provider_account.provider.name,
+          :build_status => build_status,
+          :translated_build_status => t("deployables.show.build_statuses_descriptions.#{build_status}")
         }
+
+        @image_status.sort_by{ |image_status_for_account| image_status_for_account[:deltacloud_driver]  }
       end
     end
 
     respond_to do |format|
       format.html
       format.json do
-        render :json => { :build_results => @build_results }
+        render :json => { :image_status => @image_status }
       end
     end
 
diff --git a/src/app/views/deployables/_image_status.html.mustache b/src/app/views/deployables/_image_status.html.mustache
new file mode 100644
index 0000000..4628f0a
--- /dev/null
+++ b/src/app/views/deployables/_image_status.html.mustache
@@ -0,0 +1,16 @@
+<li>
+  <div class="summary">
+    <div class="info">
+      <h2>{{deltacloud_driver}}</h2>
+      <span>{{provider_name}}</span>
+      |
+      <span>{{provider_account_label}}</span>
+    </div>
+    <div class="controls">
+      <div class="build_status">
+        <span>{{translated_build_status}}</span>
+        <div class="build_status_icon {{build_status}}"></div>
+      </div>
+    </div>
+  </div>
+</li>
diff --git a/src/app/views/deployables/show.html.haml b/src/app/views/deployables/show.html.haml
index a79573a..c1d0ea4 100644
--- a/src/app/views/deployables/show.html.haml
+++ b/src/app/views/deployables/show.html.haml
@@ -60,19 +60,8 @@
 
     .content
       %ul#providers-list.catalog_pretty
-        - @build_results.each do |provider_type, results|
-          - results.each do |result|
-            %li
-              .summary
-                .info
-                  %h2= provider_type
-                  %span= result[:provider]
-                  |
-                  %span= result[:account]
-                .controls
-                  .build_status
-                    %span= t(".build_statuses_descriptions.#{result[:status]}")
-                    %div{:class => "build_status_icon #{result[:status]}"}
+        - @image_status.each do |image_status_for_account|
+          = render :partial => 'image_status', :mustache => image_status_for_account
   - else
     %header
       %h2.build= t('.build_status')
@@ -128,35 +117,5 @@
     });
   });
 
-%script#deployableBuildsTemplate{ :type => 'text/x-jquery-tmpl' }
-  :plain
-    {{each(provider_type, results) build_results}}
-      {{each(index, result) results}}
-        <li>
-          <div class="summary">
-            <div class="info">
-              <h2>${provider_type}</h2>
-              <span>${result['provider']}</span>
-              |
-              <span>${result['account']}</span>
-            </div>
-            <div class="controls">
-              <div class="build_status">
-                {{if result['status'] == 'not_built'}}
-                  <span>#{t('deployables.show.build_statuses_descriptions.not_built')}</span>
-                {{else result['status'] == 'building'}}
-                  <span>#{t('deployables.show.build_statuses_descriptions.building')}</span>
-                {{else result['status'] == 'not_pushed'}}
-                  <span>#{t('deployables.show.build_statuses_descriptions.not_pushed')}</span>
-                {{else result['status'] == 'pushing'}}
-                  <span>#{t('deployables.show.build_statuses_descriptions.pushing')}</span>
-                {{else result['status'] == 'pushed'}}
-                  <span>#{t('deployables.show.build_statuses_descriptions.pushed')}</span>
-                {{/if}}
-                <div class="build_status_icon ${result['status']}"></div>
-              </div>
-            </div>
-          </div>
-        </li>
-      {{/each}}
-    {{/each}}
+%script#imageStatusTemplate{ :type => 'text/html' }
+  = render :partial => 'image_status'
diff --git a/src/public/javascripts/backbone/views.js b/src/public/javascripts/backbone/views.js
index 055202a..0231673 100644
--- a/src/public/javascripts/backbone/views.js
+++ b/src/public/javascripts/backbone/views.js
@@ -200,16 +200,25 @@ Conductor.Views.DeployablesShow = Backbone.View.extend({
   el: '#content',
 
   render: function() {
+    var $template = this.$('#imageStatusTemplate');
+    if($template.length === 0) return;
+
     var $builds = this.$('ul#providers-list');
     if($builds.length === 0) return;
-
     $builds.empty();
-    $('#deployableBuildsTemplate').tmpl(this.model.toJSON()).appendTo($builds);
+
+    var imageStatus = this.model.get('image_status');
+    var imageStatusHtml = '';
+    $.each(imageStatus, function(imageStatusIndex, imageStatusForAccount) {
+      imageStatusHtml += Mustache.to_html($template.html(), imageStatusForAccount);
+    });
+
+    $builds.html(imageStatusHtml);
 
     // get values of all build results
-    var build_results_values = _.flatten(_.values(this.model.get("build_results")));
+    var build_results_values = _.flatten(_.values(this.model.get("image_status")));
     var enable_launch_button = _.any(build_results_values, function(build_results){
-      return build_results.status === "pushed";
+      return build_results.build_status === "pushed";
     });
 
     // toggle "disabled" class
-- 
1.7.6.5




More information about the aeolus-devel mailing list