From: Jan Provaznik jprovazn@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