On 04/19/2011 08:15 PM, Matt Wagner wrote:
.../image_factory/deployables_controller.rb | 41 +++++++++++++++++++- .../image_factory/deployables/_assemblies.haml | 28 +++++++++++++ src/app/views/image_factory/deployables/_form.haml | 3 + .../deployables/_pick_assemblies.haml | 16 ++++++++ .../image_factory/deployables/pick_assemblies.haml | 5 ++ src/app/views/layouts/_details_pane.haml | 2 +- src/config/locales/en.yml | 1 + src/config/routes.rb | 2 +- src/features/deployable.feature | 25 ++++++++++++ src/features/step_definitions/assembly_steps.rb | 14 +++++++ 10 files changed, 133 insertions(+), 4 deletions(-) create mode 100644 src/app/views/image_factory/deployables/_assemblies.haml create mode 100644 src/app/views/image_factory/deployables/_pick_assemblies.haml create mode 100644 src/app/views/image_factory/deployables/pick_assemblies.haml create mode 100644 src/features/step_definitions/assembly_steps.rb
diff --git a/src/app/controllers/image_factory/deployables_controller.rb b/src/app/controllers/image_factory/deployables_controller.rb index 917d0d6..05e9596 100644 --- a/src/app/controllers/image_factory/deployables_controller.rb +++ b/src/app/controllers/image_factory/deployables_controller.rb @@ -1,6 +1,7 @@ class ImageFactory::DeployablesController< ApplicationController before_filter :require_user
- before_filter :load_deployables, :only => [:index, :show]
before_filter :load_deployables, :only => [:index, :show, :pick_assemblies]
before_filter :load_deployable_with_assemblies, :only => [:remove_assemblies, :add_assemblies, :pick_assemblies]
def index end
@@ -8,7 +9,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
@@ -70,6 +71,38 @@ class ImageFactory::DeployablesController< ApplicationController redirect_to image_factory_deployables_url end
def pick_assemblies
@assemblies = Assembly.all - @deployable.assemblies
respond_to do |format|
format.js { render :partial => 'pick_assemblies' }
format.html { render 'pick_assemblies' }
end
end
def add_assemblies
if assemblies = params.delete(:assemblies_selected)
@deployable.assembly_ids += assemblies.collect{|a| a.to_i}
@deployable.save!
flash[:notice] = "Assemblies saved."
end
respond_to do |format|
format.js { render :partial => 'assemblies' }
format.html { redirect_to image_factory_deployable_url(@deployable, :details_tab => 'assemblies') and return }
end
end
def remove_assemblies
if params[:assemblies_selected].present?
@deployable.assembly_ids = @deployable.assembly_ids - params[:assemblies_selected].collect{|a| a.to_i}
@deployable.save!
flash[:notice] = "Assemblies removed."
end
respond_to do |format|
format.js { render :partial => 'assemblies' }
format.html { redirect_to image_factory_deployable_url(@deployable, :details_tab => 'assemblies') and return }
end
end
protected
def load_deployables
@@ -82,4 +115,8 @@ class ImageFactory::DeployablesController< ApplicationController ) @url_params = params.clone end
- def load_deployable_with_assemblies
- @deployable = Deployable.find(params[:id], :include => :assemblies)
- end end
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..cfaf30b --- /dev/null +++ b/src/app/views/image_factory/deployables/_pick_assemblies.haml @@ -0,0 +1,16 @@ +.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', 'add_assemblies', add_assemblies_image_factory_deployable_path(@deployable), 'PUT')
- = link_to "Back", image_factory_deployable_path(@deployable, :details_tab => 'assemblies'), :class => 'button'
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..c223367 --- /dev/null +++ b/src/app/views/image_factory/deployables/pick_assemblies.haml @@ -0,0 +1,5 @@ +- content_for :list do
- = render :partial => 'list'
+- content_for :details do
- = render :partial => 'pick_assemblies'
diff --git a/src/app/views/layouts/_details_pane.haml b/src/app/views/layouts/_details_pane.haml index c38bff4..9e895e9 100644 --- a/src/app/views/layouts/_details_pane.haml +++ b/src/app/views/layouts/_details_pane.haml @@ -1,7 +1,7 @@ %ul.ui-tabs-nav.ui-helper-reset.ui-helper-clearfix.ui-widget-header.ui-corner-all - @tab_captions.each do |tab| %li.ui-state-default.ui-corner-top{ :class => "#{'ui-tabs-selected ui-state-active' if @details_tab == slug(tab)}"}
%a{ :href => url_for(@url_params.merge(:details_tab => slug(tab)))}
#details-selected%a{ :href => url_for(@url_params.merge(:details_tab => slug(tab))), :id => "details_#{tab}"} %span = tab
diff --git a/src/config/locales/en.yml b/src/config/locales/en.yml index 3f8b566..9cfe221 100644 --- a/src/config/locales/en.yml +++ b/src/config/locales/en.yml @@ -106,6 +106,7 @@ en: other: "Deployables %{list} were not deleted. They have deployments associated with them." setting: Settings name: Name
- summary: Summary admin: settings: index:
diff --git a/src/config/routes.rb b/src/config/routes.rb index 162260c..54cb7c1 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, :add_assemblies => :put } 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 }
diff --git a/src/features/deployable.feature b/src/features/deployable.feature index 012a459..7e1da9a 100644 --- a/src/features/deployable.feature +++ b/src/features/deployable.feature @@ -47,3 +47,28 @@ Feature: Manage Deployables And I press "Delete" Then I should be on the image factory deployables page And there should be no deployables
- Scenario: Add an assembly to a deployable
- Given there is a deployable named "Webserver"
- Given there is an assembly named "Apache"
- And I am on the image factory deployables page
- When I follow "Webserver"
- And I follow "details_Assemblies"
- And I follow "Add Assembly..."
- Then I should see "Apache"
- When I check the "Apache" assembly
- And I press "Save"
- Then I should see "Assemblies saved."
- And I should see "Apache"
- Scenario: Remove an assembly from a deployable
- Given there is a deployable named "Webserver"
- Given there is an assembly named "Apache" belonging to "Webserver"
- And I am on the image factory deployables page
- When I follow "Webserver"
- And I follow "details_Assemblies"
- Then I should see "Apache"
- When I check the "Apache" assembly
- And I press "Remove Selected"
- Then I should see "Assemblies removed."
- And I should not see "Apache"
diff --git a/src/features/step_definitions/assembly_steps.rb b/src/features/step_definitions/assembly_steps.rb new file mode 100644 index 0000000..df70370 --- /dev/null +++ b/src/features/step_definitions/assembly_steps.rb @@ -0,0 +1,14 @@ +Given /^there is an assembly named "([^"]*)"$/ do |name|
- Assembly.create!(:name => name, :architecture => 'x86_64')
+end
+Given /^there is an assembly named "([^"]*)" belonging to "([^"]*)"$/ do |assembly_name, deployable_name|
- deployable = Deployable.find_by_name(deployable_name)
- deployable.assemblies.create!(:name => assembly_name, :architecture => 'x86_64')
+# Assembly.create!(:name => assembly, :architecture => 'x86_64', :deployable => Deployable.find_by_name(deployable)) +end
+When /^I check the "([^"]*)" assembly$/ do |name|
- assembly = Assembly.find_by_name(name)
- check("assembly_checkbox_#{assembly.id}")
+end \ No newline at end of file
Nice, ACK and pushed.