diff --git a/lib/fog/aws/models/s3/bucket.rb b/lib/fog/aws/models/s3/bucket.rb new file mode 100644 index 000000000..a05c61467 --- /dev/null +++ b/lib/fog/aws/models/s3/bucket.rb @@ -0,0 +1,13 @@ +module Fog + module AWS + class S3 + + class Bucket < Fog::Model + + attr_accessor :creation_date, :name, :owner + + end + + end + end +end diff --git a/lib/fog/aws/models/s3/buckets.rb b/lib/fog/aws/models/s3/buckets.rb new file mode 100644 index 000000000..35328821a --- /dev/null +++ b/lib/fog/aws/models/s3/buckets.rb @@ -0,0 +1,61 @@ +module Fog + module AWS + class S3 + + def buckets + Fog::AWS::S3::Buckets.new(:connection => self) + end + + class Buckets < Fog::Collection + + def all + data = connection.get_service.body + owner = Fog::AWS::S3::Owner.new({ + :connection => connection, + :display_name => data['Owner']['DisplayName'], + :id => data['Owner']['ID'] + }) + buckets = [] + data['Buckets'].each do |bucket| + buckets << Fog::AWS::S3::Bucket.new({ + :connection => connection, + :creation_date => bucket['CreationDate'], + :name => bucket['Name'], + :owner => owner + }) + end + buckets + end + + def get(name, options = {}) + data = connection.get_bucket(name, options).body + objects = Fog::AWS::S3::Objects.new({ + :connection => connection, + :is_truncated => data['IsTruncated'], + :marker => data['Marker'], + :max_keys => data['MaxKeys'], + :name => data['Name'], + :prefix => data['Prefix'] + }) + data['Contents'].each do |object| + objects << Fog::AWS::S3::Object.new({ + :connection => connection, + :etag => object['ETag'], + :key => object['Key'], + :last_modified => object['LastModified'], + :owner => Fog::AWS::S3::Owner.new({ + :display_name => object['Owner']['DisplayName'], + :id => object['Owner']['ID'] + }), + :size => object['Size'], + :storage_class => object['StorageClass'] + }) + end + objects + end + + end + + end + end +end diff --git a/lib/fog/aws/models/s3/object.rb b/lib/fog/aws/models/s3/object.rb new file mode 100644 index 000000000..bc67d8312 --- /dev/null +++ b/lib/fog/aws/models/s3/object.rb @@ -0,0 +1,13 @@ +module Fog + module AWS + class S3 + + class Object < Fog::Model + + attr_accessor :etag, :key, :last_modified, :owner, :size, :storage_class + + end + + end + end +end diff --git a/lib/fog/aws/models/s3/objects.rb b/lib/fog/aws/models/s3/objects.rb new file mode 100644 index 000000000..ccaa047c5 --- /dev/null +++ b/lib/fog/aws/models/s3/objects.rb @@ -0,0 +1,13 @@ +module Fog + module AWS + class S3 + + class Objects < Fog::Collection + + attr_accessor :is_truncated, :marker, :max_keys, :name, :prefix + + end + + end + end +end diff --git a/lib/fog/aws/models/s3/owner.rb b/lib/fog/aws/models/s3/owner.rb new file mode 100644 index 000000000..f23e11559 --- /dev/null +++ b/lib/fog/aws/models/s3/owner.rb @@ -0,0 +1,13 @@ +module Fog + module AWS + class S3 + + class Owner < Fog::Model + + attr_accessor :display_name, :id + + end + + end + end +end diff --git a/lib/fog/aws/s3.rb b/lib/fog/aws/s3.rb index 845ca8216..c68cfb8bc 100644 --- a/lib/fog/aws/s3.rb +++ b/lib/fog/aws/s3.rb @@ -6,10 +6,19 @@ require 'hmac-sha1' require 'mime/types' current_directory = File.dirname(__FILE__) +require "#{current_directory}/../collection" require "#{current_directory}/../connection" +require "#{current_directory}/../model" require "#{current_directory}/../parser" require "#{current_directory}/../response" +models_directory = "#{current_directory}/models/s3" +require "#{models_directory}/bucket" +require "#{models_directory}/buckets" +require "#{models_directory}/object" +require "#{models_directory}/objects" +require "#{models_directory}/owner" + parsers_directory = "#{current_directory}/parsers/s3" require "#{parsers_directory}/copy_object" require "#{parsers_directory}/get_bucket" diff --git a/lib/fog/collection.rb b/lib/fog/collection.rb new file mode 100644 index 000000000..a07414851 --- /dev/null +++ b/lib/fog/collection.rb @@ -0,0 +1,34 @@ +module Fog + class Collection < Array + + def initialize(attributes = {}) + for key, value in attributes + send(:"#{key}=", value) + end + end + + def inspect + data = "#<#{self.class.name}" + for attribute in (self.instance_variables - ['@connection']) + data << " #{attribute}=#{send(attribute[1..-1].to_sym).inspect}" + end + data << "[" + self.each do |element| + data << "#{element.inspect}, " + end + data = data[0..-3] + data << "]>" + end + + private + + def connection=(new_connection) + @connection = new_connection + end + + def connection + @connection + end + + end +end diff --git a/lib/fog/model.rb b/lib/fog/model.rb new file mode 100644 index 000000000..d66a6feac --- /dev/null +++ b/lib/fog/model.rb @@ -0,0 +1,29 @@ +module Fog + class Model + + def initialize(attributes = {}) + for key, value in attributes + send(:"#{key}=", value) + end + end + + def inspect + data = "#<#{self.class.name}" + for attribute in (self.instance_variables - ['@connection']) + data << " #{attribute}=#{send(attribute[1..-1].to_sym).inspect}" + end + data << ">" + end + + private + + def connection=(new_connection) + @connection = new_connection + end + + def connection + @connection + end + + end +end diff --git a/spec/aws/models/s3/buckets_spec.rb b/spec/aws/models/s3/buckets_spec.rb new file mode 100644 index 000000000..d3a3fcaa4 --- /dev/null +++ b/spec/aws/models/s3/buckets_spec.rb @@ -0,0 +1,13 @@ +require File.dirname(__FILE__) + '/../../../spec_helper' + +describe 'S3.buckets' do + + it "should return buckets from all" do + p s3.buckets.all + end + + it "should return bucket from get" do + p s3.buckets.get('monki') + end + +end \ No newline at end of file