Resending an earlier patch, this time with a fix for a bug Tomas found.
-- Matt
--- .../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 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' + 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" + -@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 }
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"
-@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 }
aeolus-devel@lists.fedorahosted.org