Hi Matt,
overall looks good and works fine, though have 2 notes (+2 inline
notes): could you please add a cucumber test? On pick_assemblies page it
would be great to add "back" link pointing back to Assemblies tab.
Jan
On 04/18/2011 05:37 PM, Matt Wagner wrote:
---
.../image_factory/deployables_controller.rb | 23 +++++++++++++++-
.../image_factory/deployables/_assemblies.haml | 28 ++++++++++++++++++++
src/app/views/image_factory/deployables/_form.haml | 3 ++
.../deployables/_pick_assemblies.haml | 15 ++++++++++
src/config/locales/en.yml | 1 +
src/config/routes.rb | 2 +-
6 files changed, 70 insertions(+), 2 deletions(-)
create mode 100644 src/app/views/image_factory/deployables/_assemblies.haml
create mode 100644 src/app/views/image_factory/deployables/_pick_assemblies.haml
diff --git a/src/app/controllers/image_factory/deployables_controller.rb
b/src/app/controllers/image_factory/deployables_controller.rb
index 5b8210c..093da6a 100644
--- a/src/app/controllers/image_factory/deployables_controller.rb
+++ b/src/app/controllers/image_factory/deployables_controller.rb
@@ -8,7 +8,7 @@ class ImageFactory::DeployablesController< ApplicationController
def show
@deployable = Deployable.find(params[:id])
@url_params = params.clone
- @tab_captions = ['Properties']
+ @tab_captions = ['Properties', 'Assemblies']
@details_tab = params[:details_tab].blank? ? 'properties' :
params[:details_tab]
respond_to do |format|
format.js do
@@ -41,6 +41,9 @@ class ImageFactory::DeployablesController< ApplicationController
def update
@deployable = Deployable.find(params[:id])
+ if assemblies = params.delete(:assemblies_selected)
+ @deployable.assembly_ids += assemblies.collect{|a| a.to_i}
+ end
personally I think it's cleaner to have separate action for adding
assemblies
if @deployable.update_attributes(params[:deployable])
flash[:notice] = "Deployable updated."
redirect_to image_factory_deployable_url(@deployable)
@@ -54,6 +57,24 @@ class ImageFactory::DeployablesController< ApplicationController
redirect_to image_factory_deployables_url
end
+ def pick_assemblies
+ @deployable = Deployable.find(params[:id], :include => :assemblies)
+ @assemblies = Assembly.all - @deployable.assemblies
+ render :partial => 'pick_assemblies'
this won't work w/o JS
+ end
+
+ def remove_assemblies
+ @deployable = Deployable.find(params[:id], :include => :assemblies)
+ if params[:assemblies_selected].present?
+ @deployable.assembly_ids = @deployable.assembly_ids -
params[:assemblies_selected].collect{|a| a.to_i}
+ @deployable.save!
+ end
+ respond_to do |format|
+ format.js { render :partial => 'assemblies' }
+ format.html { redirect_to image_factory_deployable_url(@deployable) and return }
+ end
+ end
+
protected
def load_deployables
diff --git a/src/app/views/image_factory/deployables/_assemblies.haml
b/src/app/views/image_factory/deployables/_assemblies.haml
new file mode 100644
index 0000000..47f9f66
--- /dev/null
+++ b/src/app/views/image_factory/deployables/_assemblies.haml
@@ -0,0 +1,28 @@
+.grid_13
+- form_tag do
+ = restful_submit_tag "Remove Selected", 'destroy',
remove_assemblies_image_factory_deployable_path(@deployable), 'DELETE', :id =>
'delete_button'
+ = link_to "Add Assembly...",
pick_assemblies_image_factory_deployable_path(@deployable), :class =>
'button', :id => 'add_assembly'
+
+ %table#assemblies_table
+ %thead
+ %tr
+ %th
+ %th= "Name"
+ %th= "Created"
+ -@deployable.assemblies(:include => :templates).each do |assembly|
+ %tr
+ %td
+ %input{:name => "assemblies_selected[]", :type =>
"checkbox", :value => assembly.id, :id =>
"assembly_checkbox_#{assembly.id}" }
+ %td= assembly.name
+ %td= assembly.created_at
+
+:javascript
+ $(document).ready(function () {
+ $('#add_assembly').click(function(e) {
+ e.preventDefault();
+ var url = $(this).attr('href');
+ $.get(url, function(data) {
+ $('#ui-tabs-2').html(data);
+ });
+ });
+ });
\ No newline at end of file
diff --git a/src/app/views/image_factory/deployables/_form.haml
b/src/app/views/image_factory/deployables/_form.haml
index cd08ebc..98c2232 100644
--- a/src/app/views/image_factory/deployables/_form.haml
+++ b/src/app/views/image_factory/deployables/_form.haml
@@ -2,6 +2,9 @@
%fieldset.clear
= form.label :name, t(:name), :class => "grid_3 alpha"
= form.text_field :name, :class => "grid_5"
+%fieldset.clear
+ = form.label :summary, t(:summary), :class => "grid_3 alpha"
+ = form.text_area :summary, :class => "grid_5", :rows => 3
%fieldset.clearfix
= form.submit "Save", :class => "submit formbutton"
= link_to t(:cancel), image_factory_deployables_path, :class => 'button
formbutton'
diff --git a/src/app/views/image_factory/deployables/_pick_assemblies.haml
b/src/app/views/image_factory/deployables/_pick_assemblies.haml
new file mode 100644
index 0000000..a049451
--- /dev/null
+++ b/src/app/views/image_factory/deployables/_pick_assemblies.haml
@@ -0,0 +1,15 @@
+.grid_13
+ - form_tag(image_factory_deployable_path(@deployable)) do
+ %table#assemblies_list
+ %thead
+ %tr
+ %th
+ %th= "Name"
+ -(a)assemblies.each do |assembly|
+ %tr
+ %td
+ %input{:name => "assemblies_selected[]", :type =>
"checkbox", :value => assembly.id, :id =>
"assembly_checkbox_#{assembly.id}" }
+ %td= assembly.name
+
+ -# AJAX post
+ = restful_submit_tag('Save', 'update',
image_factory_deployable_path(@deployable), 'PUT')
\ No newline at end of file
diff --git a/src/config/locales/en.yml b/src/config/locales/en.yml
index 7510a05..58673e0 100644
--- a/src/config/locales/en.yml
+++ b/src/config/locales/en.yml
@@ -90,6 +90,7 @@ en:
not_deleted: "Could not delete the following Pool Families: %{list}."
setting: Settings
name: Name
+ summary: Summary
admin:
settings:
index:
diff --git a/src/config/routes.rb b/src/config/routes.rb
index 162260c..6eef181 100644
--- a/src/config/routes.rb
+++ b/src/config/routes.rb
@@ -44,7 +44,7 @@ ActionController::Routing::Routes.draw do |map|
map.namespace 'image_factory' do |r|
r.resources :assemblies
r.resources :image_imports
- r.resources :deployables, :collection => { :multi_destroy => :delete }
+ r.resources :deployables, :collection => { :multi_destroy => :delete },
:member => { :pick_assemblies => :get, :remove_assemblies => :delete }
r.resources :templates, :collection => {:collections => :get, :add_selected
=> :get, :metagroup_packages => :get, :remove_package => :get, :multi_destroy
=> :delete}
r.connect "/builds/update_status.:format", :controller => :builds,
:action => :update_status
r.resources :builds, :collection => { :delete => :delete, :upload =>
:get, :retry => :post }