---
.../controllers/image_factory/builds_controller.rb | 7 +++++
.../image_factory/templates_controller.rb | 14 +++++++++-
src/app/models/image.rb | 6 ++--
src/app/views/image_factory/templates/_builds.haml | 25 ++++++++++++++-----
src/config/routes.rb | 2 +-
5 files changed, 41 insertions(+), 13 deletions(-)
diff --git a/src/app/controllers/image_factory/builds_controller.rb b/src/app/controllers/image_factory/builds_controller.rb
index 9b83bd7..9f0579f 100644
--- a/src/app/controllers/image_factory/builds_controller.rb
+++ b/src/app/controllers/image_factory/builds_controller.rb
@@ -43,6 +43,13 @@ class ImageFactory::BuildsController < ApplicationController
render :action => 'new'
end
end
+
+ def upload_or_delete
+ @tpl = Template.find(params[:template_id])
+ # FIXME: add logic to upload image
+ # or delete image depending on which button was used
+ redirect_to image_factory_template_path(@tpl, :details_tab => 'builds')
+ end
def edit
# FIXME: is @tpl defined here? do we need check_permission here?
diff --git a/src/app/controllers/image_factory/templates_controller.rb b/src/app/controllers/image_factory/templates_controller.rb
index c79cdce..eef4e61 100644
--- a/src/app/controllers/image_factory/templates_controller.rb
+++ b/src/app/controllers/image_factory/templates_controller.rb
@@ -196,20 +196,30 @@ class ImageFactory::TemplatesController < ApplicationController
def load_images(tpl)
@images_header = [
+ {:name => '', :sort_attr => 'select'},
{:name => 'ARCH', :sort_attr => 'templates.architecture'},
{:name => 'PROVIDER', :sort_attr => 'provider'},
{:name => 'STATUS', :sort_attr => 'status'},
{:name => 'UPLOADED?', :sort_attr => 'images.uploaded'},
]
-
@imaged_provider_types = {}
+ @targets_not_built = {}
+ @target_build_status = {}
+
+ Image.available_targets.each do |id, target|
+ @targets_not_built[id] = target
+ end
+
tpl.images.each do |img|
+ @target_build_status[img.target] = img.status
+ @targets_not_built.delete(img.target)
img.provider_images.each do |pimg|
@imaged_provider_types[pimg.provider_id] = img.target
end
end
+ @targets_not_built = @targets_not_built.invert
- @providers_not_uploaded = Provider.find_all_by_provider_type((a)imaged_provider_types.keys.uniq)
+ @providers_not_uploaded = Provider.find_all_by_provider_type((a)imaged_provider_types.values.uniq)
@providers_not_uploaded.each do |provider|
if @imaged_provider_types.has_key?(provider.id)
@providers_not_uploaded.delete(provider)
diff --git a/src/app/models/image.rb b/src/app/models/image.rb
index 7d71089..aee6e98 100644
--- a/src/app/models/image.rb
+++ b/src/app/models/image.rb
@@ -82,11 +82,11 @@ class Image < ActiveRecord::Base
if Image.find_by_template_id_and_target(template.id, target)
raise ImageExistsError, "An attempted build of this template for the target '#{target}' already exists"
end
-
+
unless provider = Provider.find_by_target_with_account(target)
raise "There is no provider for '#{target}' type with valid account."
end
-
+
img = nil
Image.transaction do
img = Image.create!(
@@ -97,7 +97,7 @@ class Image < ActiveRecord::Base
)
ProviderImage.create!(
:image_id => img.id,
- :provider_id => provider
+ :provider_id => provider.id
)
end
return img
diff --git a/src/app/views/image_factory/templates/_builds.haml b/src/app/views/image_factory/templates/_builds.haml
index a9822f0..f1a98c8 100644
--- a/src/app/views/image_factory/templates/_builds.haml
+++ b/src/app/views/image_factory/templates/_builds.haml
@@ -3,11 +3,20 @@ Builds for
= @tpl.platform_version
, template "#{(a)tpl.name}"
-- form_tag :action => "" do
+- form_tag(image_factory_builds_path, { :action => 'create', :method => :post }) do
+ = hidden_field_tag :template_id, @tpl.id
+ New Build for
+ = select( "targets", "", options_for_select(@targets_not_built))
+ = submit_tag "Go", :name => "build"
+
+- form_tag(upload_or_delete_image_factory_builds_path, { :action => "destroy", :method => :post }) do
+ = hidden_field_tag :template_id, @tpl.id
/= restful_submit_tag "Cancel Job", :name => "job_details", :disabled => true, :class => "icon"
/= restful_submit_tag "Show Job Details", :name => "job_details", :disabled => true, :class => "icon"
/= restful_submit_tag "Show Job Log", :name => "job_log", :disabled => true, :class => "icon"
/= restful_submit_tag "Clear Job History", :name => "job_history", :disabled => true, :class => "icon"
+ = submit_tag "Upload", :name => "upload"
+ = submit_tag "Delete", :name => "delete"
%table
= sortable_table_header(@images_header)
@@ -19,13 +28,15 @@ Builds for
- @images.each do |img|
- img.provider_images.each do |pimg|
%tr
+ %td= check_box_tag 'selected[]', pimg.provider_id, @url_params[:select] == 'all', :id => "selected_#{pimg.provider_id}"
%td= img.template.architecture
%td= pimg.provider.nil? ? '' : pimg.provider.name
%td= img.status
%td= pimg.uploaded? ? 'yes' : 'no'
- - @providers_not_uploaded.each do |provider|
- %tr
- %td= @tpl.architecture
- %td= provider.name
- %td= img.status
- %td no
\ No newline at end of file
+ - @providers_not_uploaded.each do |provider|
+ %tr
+ %td= check_box_tag 'selected[]', provider.id, @url_params[:select] == 'all', :id => "selected_#{provider.id}"
+ %td= @tpl.architecture
+ %td= provider.name
+ %td= @target_build_status[provider.provider_type]
+ %td no
\ No newline at end of file
diff --git a/src/config/routes.rb b/src/config/routes.rb
index ee65acb..48853da 100644
--- a/src/config/routes.rb
+++ b/src/config/routes.rb
@@ -45,7 +45,7 @@ ActionController::Routing::Routes.draw do |map|
r.resources :assemblies
r.resources :deployables, :collection => { :multi_destroy => :delete }
r.resources :templates, :collection => {:collections => :get, :add_selected => :get, :metagroup_packages => :get, :remove_package => :get, :multi_destroy => :delete}
- r.resources :builds
+ r.resources :builds, :collection => { :upload_or_delete => :delete }
end
map.namespace 'admin' do |r|
--
1.7.4