---
src/app/models/image.rb | 30 ++++++++++++++++++++++++++++++
src/app/models/image_build.rb | 36 ++++++++++++++++++++++++++++++++++++
src/app/models/provider_image.rb | 28 ++++++++++++++++++++++++++++
src/app/models/target_image.rb | 26 ++++++++++++++++++++++++++
src/lib/warehouse_client.rb | 2 +-
src/lib/warehouse_model.rb | 20 ++++++++++++++++++++
src/spec/spec_helper.rb | 7 +++++++
7 files changed, 148 insertions(+), 1 deletions(-)
create mode 100644 src/app/models/image.rb
create mode 100644 src/app/models/image_build.rb
create mode 100644 src/app/models/provider_image.rb
create mode 100644 src/app/models/target_image.rb
create mode 100644 src/lib/warehouse_model.rb
diff --git a/src/app/models/image.rb b/src/app/models/image.rb
new file mode 100644
index 0000000..a4e69b6
--- /dev/null
+++ b/src/app/models/image.rb
@@ -0,0 +1,30 @@
+class Image < WarehouseModel
+
+ def initialize(attrs)
+ attrs.each do |k,v|
+ self.class.send(:attr_accessor, k.to_sym) unless respond_to?(:"#{k}=")
+ send(:"#{k}=", v)
+ end
+ end
+
+ def self.all
+ self.set_warehouse_and_bucket('images') if self.bucket.nil?
+
+ self.bucket.objects.map do |wh_object|
+ wh_object.attrs(wh_object.attr_list)
+ end
+ end
+
+ def self.find(uuid)
+ self.set_warehouse_and_bucket('images') if self.bucket.nil?
+ if self.bucket.include?(uuid)
+ Image.new(self.bucket.object(uuid).attrs(self.bucket.object(uuid).attr_list))
+ else
+ raise BucketObjectNotFound
+ end
+ end
+
+ def image_builds
+ ImageBuild.find_all_by_image_uuid(self.uuid)
+ end
+end
\ No newline at end of file
diff --git a/src/app/models/image_build.rb b/src/app/models/image_build.rb
new file mode 100644
index 0000000..a98cdd8
--- /dev/null
+++ b/src/app/models/image_build.rb
@@ -0,0 +1,36 @@
+require 'warehouse_client'
+
+class ImageBuild < WarehouseModel
+
+ def initialize(attrs)
+ attrs.each do |k,v|
+ self.class.send(:attr_accessor, k.to_sym) unless respond_to?(:"#{k}=")
+ send(:"#{k}=", v)
+ end
+ end
+
+ def self.all
+ self.set_warehouse_and_bucket('builds') if self.bucket.nil?
+ self.bucket.objects.map do |wh_object|
+ wh_object.attrs(wh_object.attr_list)
+ end
+ end
+
+ def self.find(uuid)
+ self.set_warehouse_and_bucket('builds') if self.bucket.nil?
+ if self.class.bucket.include?(uuid)
+ self.class.bucket.object(uuid).attrs(self.class.bucket.object(uuid).attr_list)
+ else
+ raise BucketObjectNotFound
+ end
+ end
+
+ def self.find_all_by_image_uuid(uuid)
+ self.set_warehouse_and_bucket('builds') if self.bucket.nil?
+ self.bucket.objects.map do |wh_object|
+ if wh_object.attr('image')[1] == uuid
+ ImageBuild.new(wh_object.attrs(wh_object.attr_list))
+ end
+ end.compact
+ end
+end
\ No newline at end of file
diff --git a/src/app/models/provider_image.rb b/src/app/models/provider_image.rb
new file mode 100644
index 0000000..2aac4e4
--- /dev/null
+++ b/src/app/models/provider_image.rb
@@ -0,0 +1,28 @@
+require 'warehouse_client'
+
+class ProviderImage< WarehouseModel
+
+ def initialize(attrs)
+ attrs.each do |k,v|
+ self.class.send(:attr_accessor, k.to_sym) unless respond_to?(:"#{k}=")
+ send(:"#{k}=", v)
+ end
+ end
+
+ def self.all
+ self.set_warehouse_and_bucket('provider_images') if self.bucket.nil?
+
+ self.bucket.objects.map do |wh_object|
+ wh_object.attrs(wh_object.attr_list)
+ end
+ end
+
+ def self.find(uuid)
+ self.set_warehouse_and_bucket('provider_images') if self.bucket.nil?
+ if self.bucket.include?(uuid)
+
ProviderImage.new(self.bucket.object(uuid).attrs(self.bucket.object(uuid).attr_list))
+ else
+ raise BucketObjectNotFound
+ end
+ end
+end
\ No newline at end of file
diff --git a/src/app/models/target_image.rb b/src/app/models/target_image.rb
new file mode 100644
index 0000000..d6380c9
--- /dev/null
+++ b/src/app/models/target_image.rb
@@ -0,0 +1,26 @@
+class TargetImage < WarehouseModel
+
+ def initialize(attrs)
+ attrs.each do |k,v|
+ self.class.send(:attr_accessor, k.to_sym) unless respond_to?(:"#{k}=")
+ send(:"#{k}=", v)
+ end
+ end
+
+ def self.all
+ self.set_warehouse_and_bucket('target_images') if self.bucket.nil?
+
+ self.bucket.objects.map do |wh_object|
+ wh_object.attrs(wh_object.attr_list)
+ end
+ end
+
+ def self.find(uuid)
+ self.set_warehouse_and_bucket('target_images') if self.bucket.nil?
+ if self.bucket.include?(uuid)
+
TargetImage.new(self.bucket.object(uuid).attrs(self.bucket.object(uuid).attr_list))
+ else
+ raise BucketObjectNotFound
+ end
+ end
+end
\ No newline at end of file
diff --git a/src/lib/warehouse_client.rb b/src/lib/warehouse_client.rb
index 12b8d9d..51d256f 100644
--- a/src/lib/warehouse_client.rb
+++ b/src/lib/warehouse_client.rb
@@ -133,7 +133,7 @@ module Warehouse
end
def create_bucket(bucket)
- @connection.do_request "/#{bucket}", :method => :put
+ @connection.do_request "/#{bucket}", :method => :put rescue
RestClient::InternalServerError
Bucket.new(bucket, @connection)
end
diff --git a/src/lib/warehouse_model.rb b/src/lib/warehouse_model.rb
new file mode 100644
index 0000000..3c246df
--- /dev/null
+++ b/src/lib/warehouse_model.rb
@@ -0,0 +1,20 @@
+require 'warehouse_client'
+class BucketObjectNotFound < Exception;end
+class BucketNotFound < Exception;end
+
+class WarehouseModel
+
+ WAREHOUSE_CONFIG =
YAML.load_file("#{RAILS_ROOT}/config/image_warehouse.yml")
+ class << self
+ attr_accessor :warehouse, :bucket
+
+ def set_warehouse_and_bucket(bucket_name)
+ begin
+ self.warehouse = Warehouse::Client.new(WAREHOUSE_CONFIG['baseurl'])
+ self.bucket = self.warehouse.bucket(bucket_name)
+ rescue
+ raise BucketNotFound
+ end
+ end
+ end
+end
\ No newline at end of file
diff --git a/src/spec/spec_helper.rb b/src/spec/spec_helper.rb
index 88413c0..e61f649 100644
--- a/src/spec/spec_helper.rb
+++ b/src/spec/spec_helper.rb
@@ -74,4 +74,11 @@ Spec::Runner.configure do |config|
config.after(:each) do
DatabaseCleaner.clean
end
+
+ def create_test_iwhd_data_for(bucket_name)
+ require 'warehouse_client'
+ warehouse_client =
Warehouse::Client.new(YAML.load_file("#{RAILS_ROOT}/config/image_warehouse.yml")['baseurl'])
+ bucket = warehouse_client.create_bucket(bucket_name)
+ bucket.create_object("#{bucket_name}_testing_uuid","",{:uuid
=> "#{bucket_name}_testing_uuid"})
+ end
end
--
1.7.4.4