From: Jan Provaznik <jprovazn(a)redhat.com>
Icicle represnts output from image build (or image push) in xml format.
---
src/app/models/icicle.rb | 17 +++++++++++++++++
src/app/models/provider_image.rb | 12 +++++++++++-
src/db/migrate/20110222153957_create_icicles.rb | 15 +++++++++++++++
src/spec/factories/icicle.rb | 3 +++
src/spec/factories/provider_image.rb | 1 +
src/spec/models/icicle_spec.rb | 17 +++++++++++++++++
src/spec/models/provider_image_spec.rb | 10 ++++++++++
7 files changed, 74 insertions(+), 1 deletions(-)
create mode 100644 src/app/models/icicle.rb
create mode 100644 src/db/migrate/20110222153957_create_icicles.rb
create mode 100644 src/spec/factories/icicle.rb
create mode 100644 src/spec/models/icicle_spec.rb
diff --git a/src/app/models/icicle.rb b/src/app/models/icicle.rb
new file mode 100644
index 0000000..14037f9
--- /dev/null
+++ b/src/app/models/icicle.rb
@@ -0,0 +1,17 @@
+# == Schema Information
+# Schema version: 20110223132404
+#
+# Table name: icicles
+#
+# id :integer not null, primary key
+# uuid :string(255)
+# xml :text
+# created_at :datetime
+# updated_at :datetime
+#
+
+class Icicle < ActiveRecord::Base
+ validates_presence_of :uuid
+ validates_uniqueness_of :uuid
+ has_many :provider_images
+end
diff --git a/src/app/models/provider_image.rb b/src/app/models/provider_image.rb
index 0ac23c2..c2d9e2e 100644
--- a/src/app/models/provider_image.rb
+++ b/src/app/models/provider_image.rb
@@ -1,5 +1,5 @@
# == Schema Information
-# Schema version: 20110221125633
+# Schema version: 20110223132404
#
# Table name: provider_images
#
@@ -10,13 +10,23 @@
# uploaded :boolean
# registered :boolean
# uuid :string(255)
+# icicle_id :integer
#
class ProviderImage < ActiveRecord::Base
belongs_to :provider
belongs_to :image
+ belongs_to :icicle
validates_presence_of :provider_id
validates_presence_of :image_id
validates_uniqueness_of :uuid, :allow_nil => true
+
+ after_destroy :destroy_orphaned_icicles
+
+ def destroy_orphaned_icicles
+ if self.icicle and self.icicle.provider_images.empty?
+ self.icicle.destroy
+ end
+ end
end
diff --git a/src/db/migrate/20110222153957_create_icicles.rb
b/src/db/migrate/20110222153957_create_icicles.rb
new file mode 100644
index 0000000..a48dec8
--- /dev/null
+++ b/src/db/migrate/20110222153957_create_icicles.rb
@@ -0,0 +1,15 @@
+class CreateIcicles < ActiveRecord::Migration
+ def self.up
+ create_table :icicles do |t|
+ t.string :uuid
+ t.text :xml
+ t.timestamps
+ end
+ add_column :provider_images, :icicle_id, :integer
+ end
+
+ def self.down
+ drop_table :icicles
+ remove_column :provider_images, :icicle_id
+ end
+end
diff --git a/src/spec/factories/icicle.rb b/src/spec/factories/icicle.rb
new file mode 100644
index 0000000..3961561
--- /dev/null
+++ b/src/spec/factories/icicle.rb
@@ -0,0 +1,3 @@
+Factory.define :icicle do |i|
+ i.sequence(:uuid) { |n| "icicle#{n}" }
+end
diff --git a/src/spec/factories/provider_image.rb b/src/spec/factories/provider_image.rb
index 55c2281..2dbe453 100644
--- a/src/spec/factories/provider_image.rb
+++ b/src/spec/factories/provider_image.rb
@@ -4,6 +4,7 @@ Factory.define :provider_image do |ri|
ri.sequence(:provider_image_key) { |n| "provider_image_key#(n)" }
ri.uploaded true
ri.registered true
+ ri.association :icicle
end
Factory.define :mock_provider_image, :parent => :provider_image do |i|
diff --git a/src/spec/models/icicle_spec.rb b/src/spec/models/icicle_spec.rb
new file mode 100644
index 0000000..d4a1e86
--- /dev/null
+++ b/src/spec/models/icicle_spec.rb
@@ -0,0 +1,17 @@
+require 'spec_helper'
+
+describe Icicle do
+ it "should not be valid if uuid is not set" do
+ i = Factory.build(:icicle, :uuid => nil)
+ i.valid?.should be_false
+ i.uuid = ''
+ i.valid?.should be_false
+ end
+
+ it "should have a unique uuid" do
+ old = Factory(:icicle)
+ old.should be_valid
+ new = Factory.build(:icicle, :uuid => old.uuid)
+ new.should_not be_valid
+ end
+end
diff --git a/src/spec/models/provider_image_spec.rb
b/src/spec/models/provider_image_spec.rb
index 419d976..4ad2a50 100644
--- a/src/spec/models/provider_image_spec.rb
+++ b/src/spec/models/provider_image_spec.rb
@@ -21,4 +21,14 @@ describe ProviderImage do
i = Factory.build(:mock_provider_image, :uuid => '1')
i.should_not be_valid
end
+
+ it "should delete orphaned icicles" do
+ icicle = Factory(:icicle)
+ i1 = Factory(:mock_provider_image, :icicle => icicle)
+ i2 = Factory(:mock_provider_image, :icicle => icicle)
+ i1.destroy
+ Icicle.find_by_id(icicle.id).should_not be_nil
+ i2.destroy
+ Icicle.find_by_id(icicle.id).should be_nil
+ end
end
--
1.7.4