ACK
On 01/14/2011 12:45 PM, [email protected] wrote: > From: Ladislav Martincik<[email protected]> > > --- > .../image_factory/assemblies_controller.rb | 63 > ++++++++++++++++++++ > src/app/models/assembly.rb | 2 + > src/app/views/image_factory/assemblies/_form.haml | 7 ++ > src/app/views/image_factory/assemblies/_list.haml | 28 +++++++++ > .../image_factory/assemblies/_properties.haml | 4 + > src/app/views/image_factory/assemblies/edit.haml | 4 + > src/app/views/image_factory/assemblies/index.haml | 3 +- > src/app/views/image_factory/assemblies/new.haml | 3 + > src/app/views/image_factory/assemblies/show.haml | 5 ++ > src/config/routes.rb | 2 +- > src/db/migrate/20110114111158_create_assemblies.rb | 13 ++++ > src/features/assembly.feature | 50 ++++++++++++++++ > src/features/step_definitions/assembly_steps.rb | 20 ++++++ > src/features/support/paths.rb | 3 + > 14 files changed, 205 insertions(+), 2 deletions(-) > create mode 100644 src/app/models/assembly.rb > create mode 100644 src/app/views/image_factory/assemblies/_form.haml > create mode 100644 src/app/views/image_factory/assemblies/_list.haml > create mode 100644 src/app/views/image_factory/assemblies/_properties.haml > create mode 100644 src/app/views/image_factory/assemblies/edit.haml > create mode 100644 src/app/views/image_factory/assemblies/new.haml > create mode 100644 src/app/views/image_factory/assemblies/show.haml > create mode 100644 src/db/migrate/20110114111158_create_assemblies.rb > create mode 100644 src/features/assembly.feature > create mode 100644 src/features/step_definitions/assembly_steps.rb > > diff --git a/src/app/controllers/image_factory/assemblies_controller.rb > b/src/app/controllers/image_factory/assemblies_controller.rb > index ce67f14..6627656 100644 > --- a/src/app/controllers/image_factory/assemblies_controller.rb > +++ b/src/app/controllers/image_factory/assemblies_controller.rb > @@ -1,6 +1,69 @@ > class ImageFactory::AssembliesController< ApplicationController > before_filter :require_user > + before_filter :load_assemblies, :only => [:index, :show] > > def index > end > + > + def show > + @assembly = Assembly.find(params[:id]) > + @url_params = params.clone > + @tab_captions = ['Properties'] > + @details_tab = params[:details_tab].blank? ? 'properties' : > params[:details_tab] > + respond_to do |format| > + format.js do > + if @url_params.delete :details_pane > + render :partial => 'layouts/details_pane' and return > + end > + render :partial => @details_tab and return > + end > + format.html { render :action => 'show'} > + end > + end > + > + def new > + @assembly = Assembly.new > + end > + > + def create > + @assembly = Assembly.new(params[:assembly]) > + if @assembly.save > + flash[:notice] = "Assembly added." > + redirect_to image_factory_assembly_url(@assembly) > + else > + render :action => :new > + end > + end > + > + def edit > + @assembly = Assembly.find(params[:id]) > + end > + > + def update > + @assembly = Assembly.find(params[:id]) > + if @assembly.update_attributes(params[:assembly]) > + flash[:notice] = "Assembly updated." > + redirect_to image_factory_assembly_url(@assembly) > + else > + render :action => :edit > + end > + end > + > + def multi_destroy > + Assembly.destroy(params[:assemblies_selected]) > + redirect_to image_factory_assemblies_url > + end > + > + protected > + > + def load_assemblies > + @header = [ > + { :name => "Assembly name", :sort_attr => :name } > + ] > + @assemblies = Assembly.paginate(:all, > + :page => params[:page] || 1, > + :order => (params[:order_field] || 'name') +' '+ (params[:order_dir] > || 'asc') > + ) > + @url_params = params.clone > + end > end > diff --git a/src/app/models/assembly.rb b/src/app/models/assembly.rb > new file mode 100644 > index 0000000..5eac9de > --- /dev/null > +++ b/src/app/models/assembly.rb > @@ -0,0 +1,2 @@ > +class Assembly< ActiveRecord::Base > +end > diff --git a/src/app/views/image_factory/assemblies/_form.haml > b/src/app/views/image_factory/assemblies/_form.haml > new file mode 100644 > index 0000000..39556e5 > --- /dev/null > +++ b/src/app/views/image_factory/assemblies/_form.haml > @@ -0,0 +1,7 @@ > += form.error_messages > +%fieldset.clear > + = form.label :name, t(:name), :class => "grid_3 alpha" > + = form.text_field :name, :class => "grid_5" > +%fieldset.clearfix > + = form.submit "Save", :class => "submit formbutton" > + = link_to t(:cancel), image_factory_assemblies_path, :class => 'button > formbutton' > diff --git a/src/app/views/image_factory/assemblies/_list.haml > b/src/app/views/image_factory/assemblies/_list.haml > new file mode 100644 > index 0000000..f29b322 > --- /dev/null > +++ b/src/app/views/image_factory/assemblies/_list.haml > @@ -0,0 +1,28 @@ > +- form_tag do > + = link_to "Create", new_image_factory_assembly_url, :class => 'button' > + = restful_submit_tag "Delete", 'destroy', > multi_destroy_image_factory_assemblies_path, 'DELETE', :id => 'delete_button' > + > + %table#assemblies_table > + %thead > + %tr > + %th > + %th= link_to "Name", image_factory_assemblies_url(:sort_by => > "name") > + [email protected] do |assembly| > + %tr > + %td > + %input{:name => "assemblies_selected[]", :type => "checkbox", > :value => assembly.id, :id => "assembly_checkbox_#{assembly.id}" } > + %td= link_to assembly.name, image_factory_assembly_path(assembly) > + > +:javascript > + $(document).ready(function () { > + $('#delete_button').click(function(e) { > + if ($("#assemblies_table input[@type=radio]:checked").length == 0) { > + alert('Please select any assembly to be deleted before clicking > Delete button.'); > + e.preventDefault(); > + } else { > + if (!confirm("Are you sure you want to delete this assembly?")) { > + e.preventDefault(); > + } > + } > + }); > + }); > diff --git a/src/app/views/image_factory/assemblies/_properties.haml > b/src/app/views/image_factory/assemblies/_properties.haml > new file mode 100644 > index 0000000..5f91f6e > --- /dev/null > +++ b/src/app/views/image_factory/assemblies/_properties.haml > @@ -0,0 +1,4 @@ > +.grid_13 > + %h2 #{@assembly.name} > + > + = link_to 'Edit', edit_image_factory_assembly_path(@assembly), :class => > 'button' > diff --git a/src/app/views/image_factory/assemblies/edit.haml > b/src/app/views/image_factory/assemblies/edit.haml > new file mode 100644 > index 0000000..04871c3 > --- /dev/null > +++ b/src/app/views/image_factory/assemblies/edit.haml > @@ -0,0 +1,4 @@ > +%h2 Editing Assembly: #{@assembly.name} > + > +- form_for @assembly, :url => image_factory_assembly_path(@assembly), :html > => { :method => :put } do |f| > + = render :partial => "form", :locals => { :form => f } > diff --git a/src/app/views/image_factory/assemblies/index.haml > b/src/app/views/image_factory/assemblies/index.haml > index 766d92c..62ccbc6 100644 > --- a/src/app/views/image_factory/assemblies/index.haml > +++ b/src/app/views/image_factory/assemblies/index.haml > @@ -1 +1,2 @@ > -image_factory/assemblies/index.haml > +- content_for :list do > + = render :partial => 'list' > diff --git a/src/app/views/image_factory/assemblies/new.haml > b/src/app/views/image_factory/assemblies/new.haml > new file mode 100644 > index 0000000..4763405 > --- /dev/null > +++ b/src/app/views/image_factory/assemblies/new.haml > @@ -0,0 +1,3 @@ > +%h2 New Assembly > +- form_for @assembly, :url => image_factory_assemblies_path do |f| > + = render :partial => "form", :locals => { :form => f } > diff --git a/src/app/views/image_factory/assemblies/show.haml > b/src/app/views/image_factory/assemblies/show.haml > new file mode 100644 > index 0000000..05eeedd > --- /dev/null > +++ b/src/app/views/image_factory/assemblies/show.haml > @@ -0,0 +1,5 @@ > +- content_for :list do > + = render :partial => 'list' > + > +- content_for :details do > + = render :partial => 'layouts/details_pane' > diff --git a/src/config/routes.rb b/src/config/routes.rb > index ad9fb67..00aaade 100644 > --- a/src/config/routes.rb > +++ b/src/config/routes.rb > @@ -39,7 +39,7 @@ ActionController::Routing::Routes.draw do |map| > end > > map.namespace 'image_factory' do |r| > - r.resources :assemblies > + r.resources :assemblies, :collection => { :multi_destroy => :delete } > 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 > diff --git a/src/db/migrate/20110114111158_create_assemblies.rb > b/src/db/migrate/20110114111158_create_assemblies.rb > new file mode 100644 > index 0000000..25aaf7b > --- /dev/null > +++ b/src/db/migrate/20110114111158_create_assemblies.rb > @@ -0,0 +1,13 @@ > +class CreateAssemblies< ActiveRecord::Migration > + def self.up > + create_table :assemblies do |t| > + t.string :name > + > + t.timestamps > + end > + end > + > + def self.down > + drop_table :assemblies > + end > +end > diff --git a/src/features/assembly.feature b/src/features/assembly.feature > new file mode 100644 > index 0000000..970f1b5 > --- /dev/null > +++ b/src/features/assembly.feature > @@ -0,0 +1,50 @@ > +Feature: Manage assemblies > + In order to manage my cloud infrastructure > + As a user > + I want to manage assemblies > + > + Background: > + Given I am an authorised user > + And I am logged in > + And I am using new UI > + > + Scenario: List assemblies > + Given I am on the homepage > + And there is a assembly named "MySQL cluster" > + When I go to the image factory assemblies page > + Then I should see "MySQL cluster" > + > + Scenario: Create a new Assembly > + Given there is a assembly named "MySQL cluster" > + And I am on the image factory assemblies page > + When I follow "Create" > + Then I should be on the new image factory assembly page > + And I should see "New Assembly" > + When I fill in "assembly[name]" with "App" > + And I press "Save" > + Then I should be on App's image factory assembly page > + And I should see "Assembly added" > + And I should have a assembly named "App" > + And I should see "App" > + > + Scenario: Edit a assembly > + Given there is a assembly named "MySQL cluster" > + And I am on the image factory assemblies page > + When I follow "MySQL cluster" > + And I follow "Edit" > + Then I should be on the edit image factory assembly page > + And I should see "Editing Assembly" > + When I fill in "assembly[name]" with "AppModified" > + And I press "Save" > + Then I should be on AppModified's image factory assembly page > + And I should see "Assembly updated" > + And I should have a assembly named "AppModified" > + And I should see "AppModified" > + > + Scenario: Delete a assembly > + Given there is a assembly named "App" > + And I am on the image factory assemblies page > + When I check the "App" assembly > + And I press "Delete" > + Then I should be on the image factory assemblies page > + And there should be no assemblies > diff --git a/src/features/step_definitions/assembly_steps.rb > b/src/features/step_definitions/assembly_steps.rb > new file mode 100644 > index 0000000..cb9c5f0 > --- /dev/null > +++ b/src/features/step_definitions/assembly_steps.rb > @@ -0,0 +1,20 @@ > +Then /^there should be no assemblies$/ do > + Assembly.count.should == 0 > +end > + > +Given /^there are no assemblies$/ do > + Assembly.count.should == 0 > +end > + > +Then /^I should have a assembly named "([^"]*)"$/ do |name| > + Assembly.find_by_name(name).should_not be_nil > +end > + > +Given /^there is a assembly named "([^"]*)"$/ do |name| > + Assembly.create!(:name => name) > +end > + > +When /^I check the "([^"]*)" assembly$/ do |name| > + assembly = Assembly.find_by_name(name) > + check("assembly_checkbox_#{assembly.id}") > +end > diff --git a/src/features/support/paths.rb b/src/features/support/paths.rb > index c0c77dc..dbe0077 100644 > --- a/src/features/support/paths.rb > +++ b/src/features/support/paths.rb > @@ -104,6 +104,9 @@ module NavigationHelpers > when /^(.*)'s image factory deployable page$/ > image_factory_deployable_path(Deployable.find_by_name($1)) > > + when /^(.*)'s image factory assembly page$/ > + image_factory_assembly_path(Assembly.find_by_name($1)) > + > # Add more mappings here. > # Here is an example that pulls values out of the Regexp: > # _______________________________________________ deltacloud-devel mailing list [email protected] https://fedorahosted.org/mailman/listinfo/deltacloud-devel
