ACK
On 01/14/2011 12:45 PM, lmartinc(a)redhat.com wrote:
From: Ladislav Martincik<lmartinc(a)redhat.com>
---
.../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")
+ -(a)assemblies.each 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 #{(a)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: #{(a)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:
#