[PATCH] Initial BaseImages#show implementation

Matt Wagner matt.wagner at redhat.com
Wed Nov 28 04:03:43 UTC 2012


Build/push controls still need to be implemented,
and Backbone auto-refresh needs updating.
---
 .../tim/base_images_controller_decorator.rb        | 19 ++++++++
 src/app/helpers/images_helper.rb                   |  7 ---
 src/app/helpers/mustache_helper.rb                 | 13 ++++++
 .../views/tim/base_images/_status.html.mustache    | 32 +++++++++++++
 src/app/views/tim/base_images/show.html.haml       | 54 ++++++++++++++++++++++
 src/config/locales/en.yml                          |  1 +
 6 files changed, 119 insertions(+), 7 deletions(-)
 create mode 100644 src/app/views/tim/base_images/_status.html.mustache
 create mode 100644 src/app/views/tim/base_images/show.html.haml

diff --git a/src/app/decorators/controllers/tim/base_images_controller_decorator.rb b/src/app/decorators/controllers/tim/base_images_controller_decorator.rb
index 433f171..13a287b 100644
--- a/src/app/decorators/controllers/tim/base_images_controller_decorator.rb
+++ b/src/app/decorators/controllers/tim/base_images_controller_decorator.rb
@@ -8,6 +8,8 @@ Tim::BaseImagesController.class_eval do
 
   before_filter :set_tabs_and_headers, :only => [:index]
   before_filter :set_new_form_variables, :only => [:new]
+  before_filter :set_image_versions, :only => :show
+  before_filter :set_provider_accounts, :only => :show
 
  def edit_xml
     @base_image = Tim::BaseImage.new(params[:base_image])
@@ -82,4 +84,21 @@ Tim::BaseImagesController.class_eval do
       list_for_user(current_session, current_user, Privilege::USE)
     t("tim.base_images.flash.error.no_provider_accounts") if @accounts.empty?
   end
+
+  def set_image_versions
+    @versions = @base_image.image_versions.order('created_at DESC')
+    @latest_version = @versions.first # because we sorted above
+    # @version is the specific image version we're viewing
+    @version = if params[:version]
+      @versions.find{|v| v.id == params[:version]} || @latest_version
+    else
+      @latest_version
+    end
+  end
+
+  def set_provider_accounts
+    target_images = @version.target_images(:include => :provider_images) # don't do multiple queries
+    @targets = target_images.group_by{|ti| ti.target}
+  end
+
 end
diff --git a/src/app/helpers/images_helper.rb b/src/app/helpers/images_helper.rb
index 1962fbe..3317140 100644
--- a/src/app/helpers/images_helper.rb
+++ b/src/app/helpers/images_helper.rb
@@ -18,11 +18,4 @@
 # Likewise, all the methods added will be available for all controllers.
 
 module ImagesHelper
-  def options_for_build_select(builds, selected, latest)
-      options_for_select(builds.map do |b|
-        label = Time.at(b.timestamp.to_f).to_s
-        label += " (#{t'images.show.latest'})" if b.uuid == latest
-        [label, b.uuid]
-      end, selected ? selected.uuid : nil)
-  end
 end
diff --git a/src/app/helpers/mustache_helper.rb b/src/app/helpers/mustache_helper.rb
index 25fe539..a3961bb 100644
--- a/src/app/helpers/mustache_helper.rb
+++ b/src/app/helpers/mustache_helper.rb
@@ -148,4 +148,17 @@ module MustacheHelper
     result
   end
 
+  def image_builds_for_mustache(base_image)
+    retval = []
+    base_image.each_pair do |target,target_images|
+      timg_hash = {:target => target, :combined_images => []} 
+      target_images.each do |timg|
+        timg_hash [:combined_images] << {:target_image => timg, 
+                                         :provider_images => timg.provider_images}
+      end
+      retval << timg_hash
+    end
+    retval
+  end
+
 end
diff --git a/src/app/views/tim/base_images/_status.html.mustache b/src/app/views/tim/base_images/_status.html.mustache
new file mode 100644
index 0000000..67fe988
--- /dev/null
+++ b/src/app/views/tim/base_images/_status.html.mustache
@@ -0,0 +1,32 @@
+{{#images}}
+  <li class="clearfix">
+    <dl>
+      <dt>
+        <div class="build-actions">
+          <h3>{{target}}</h3>
+        </div>
+      </dt>
+      <dd>
+        <table class="light_table">
+          <thead>
+            <tr><th>
+              <strong><%= t('tim.base_images.show.account') %></strong>
+            </th>
+            <th>
+              <%= t('tim.base_images.show.provider') %>
+            </th>
+            <th>
+              <%= t('tim.base_images.show.providers_image_id') %>
+            </th>
+            <th class="image_controls"></th>
+          </tr></thead>
+          <tbody>
+          {{#combined_images}}
+            {{#provider_images}}
+              <tr>
+                <td><strong> {{provider_account.name}} </strong></td>
+                <td class="light">{{provider_account.provider_name }} </td>
+                <td class="light">{{factory_id}}</td>
+            {{/provider_images}}
+          {{/combined_images}}
+{{/images}}
diff --git a/src/app/views/tim/base_images/show.html.haml b/src/app/views/tim/base_images/show.html.haml
new file mode 100644
index 0000000..97b3ccd
--- /dev/null
+++ b/src/app/views/tim/base_images/show.html.haml
@@ -0,0 +1,54 @@
+= render :partial => 'layouts/admin_nav'
+
+%header.page-header
+  .obj_actions
+    .return_to
+      =t'return_to'
+      = link_to t('tim.base_images.index.images'), base_images_path
+    - if @base_image.pool_family and check_privilege(Privilege::USE, @base_image.pool_family)
+      .button-group
+        = link_to t('tim.base_images.show.new_deployable_from_image'), main_app.new_deployable_path(:create_from_image => @base_image.id), :class => 'button' # mawagner -- See if this exists
+        - unless @base_image.imported?
+          = link_to t('tim.base_images.show.template_xml'), main_app.template_image_path(@base_image.uuid), :class => 'button' # See if this link works
+        = button_to t("delete"), base_image_path(@base_image.id), :method => 'delete', :confirm => t('general.delete_confirmation'), :class => 'button danger', :id => 'delete'
+  %h1.no-icon= image_name(@base_image)
+
+- user_can_build = (@base_image.pool_family and check_privilege(Privilege::USE, @base_image.pool_family))
+%section.content-section
+  %header
+    %h2=t'properties'
+  .content
+    %table.properties_table
+      %tbody
+        %tr
+          %td= t('tim.base_images.environment')
+          %td= @base_image.pool_family.name
+        %tr
+          %td= t('tim.base_images.show.image_id')
+          %td= @base_image.uuid
+
+%section.content-section
+  %header
+    .section-controls
+      - if @versions.any?
+        %span= t'tim.base_images.show.view_build'
+        - if user_can_build
+          = form_tag image_path(@base_image.id), :method => :get do
+            = select_tag :build, options_for_build_select(@versions, @version, @latest_image_version)
+            = submit_tag t('tim.base_images.show.select_build'), :id => 'select_build_button'
+    %h2= t('tim.base_images.show.provider_images')
+
+  .content
+    %ul.image_builds
+      = render :partial => 'status', :mustache => {:images => image_builds_for_mustache(@targets)}
+
+:javascript
+  $(document).ready(function(){
+    $("#select_build_button").hide();
+    $("#build").change(function() {
+      $("#select_build_button").click();
+    });
+  });
+
+%script#imageStatusTemplate{ :type => 'text/html' }
+  = render :partial => 'status'
diff --git a/src/config/locales/en.yml b/src/config/locales/en.yml
index a31bd01..66f3de1 100644
--- a/src/config/locales/en.yml
+++ b/src/config/locales/en.yml
@@ -1698,3 +1698,4 @@ en:
         make_deployable: Automatically make "%{name}" Deployable.
         edit_xml: View and Edit Template XML
         save_template: Save Image Template
+      imported_parenthetical: "(Imported)"
-- 
1.7.11.4




More information about the aeolus-devel mailing list