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:
     #
-- 
1.7.3.5

_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel

Reply via email to