Skip to content

Commit

Permalink
Add get, put, delete versioning
Browse files Browse the repository at this point in the history
Signed-off-by: Gavin Reynolds <gavin@gavinreynolds.scot>
  • Loading branch information
gsreynolds committed Jul 9, 2020
1 parent cac1006 commit be8d2f3
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 11 deletions.
32 changes: 32 additions & 0 deletions lib/aliyun/oss/bucket.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,38 @@ def logging=(logging)
end
end

# 获取Bucket的versioning配置
# @return [BucketVersioning] Bucket的versioning配置
def versioning
@protocol.get_bucket_versioning(name)
end

# 设置Bucket的versioning配置
# @param versioning [BucketVersioning] versioning配置
def versioning=(versioning)
if versioning.enabled?
@protocol.put_bucket_versioning(name, versioning)
else
@protocol.delete_bucket_versioning(name)
end
end

# 获取Bucket的encryption配置
# @return [BucketEncryption] Bucket的encryption配置
def encryption
@protocol.get_bucket_encryption(name)
end

# 设置Bucket的encryption配置
# @param encryption [BucketEncryption] encryption配置
def encryption=(encryption)
if encryption.enabled?
@protocol.put_bucket_encryption(name, encryption)
else
@protocol.delete_bucket_encryption(name)
end
end

# 获取Bucket的website配置
# @return [BucketWebsite] Bucket的website配置
def website
Expand Down
52 changes: 52 additions & 0 deletions lib/aliyun/oss/protocol.rb
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,58 @@ def delete_bucket_logging(name)
logger.info("Done delete bucket logging")
end

# Put bucket versioning settings
# @param name [String] the bucket name
# @param versioning [BucketVersioning] versioning options
def put_bucket_versioning(name, versioning)
logger.info("Begin put bucket versioning, "\
"name: #{name}, versioning: #{versioning}")

sub_res = {'versioning' => nil}
body = Nokogiri::XML::Builder.new do |xml|
xml.VersioningConfiguration {
xml.Status versioning.enabled? ? 'Enabled' : 'Suspended'
}
end.to_xml

@http.put(
{:bucket => name, :sub_res => sub_res},
{:body => body})

logger.info("Done put bucket versioning")
end

# Get bucket versioning settings
# @param name [String] the bucket name
# @return [BucketVersioning] versioning options of this bucket
def get_bucket_versioning(name)
logger.info("Begin get bucket versioning, name: #{name}")

sub_res = {'versioning' => nil}
r = @http.get({:bucket => name, :sub_res => sub_res})

doc = parse_xml(r.body)
opts = {:enable => false}

versioning_node = doc.at_css("VersioningConfiguration")
opts[:enable] = get_node_text(versioning_node, 'Status') == 'Enabled'

logger.info("Done get bucket versioning")

BucketVersioning.new(opts)
end

# Delete bucket versioning settings, a.k.a. disable bucket versioning
# @param name [String] the bucket name
def delete_bucket_versioning(name)
logger.info("Begin delete bucket versioning, name: #{name}")

sub_res = {'versioning' => nil}
@http.delete({:bucket => name, :sub_res => sub_res})

logger.info("Done delete bucket versioning")
end

# Put bucket website settings
# @param name [String] the bucket name
# @param website [BucketWebsite] the bucket website options
Expand Down
12 changes: 1 addition & 11 deletions spec/aliyun/oss/bucket_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ def mock_logging(opts)
def mock_versioning(opts)
Nokogiri::XML::Builder.new do |xml|
xml.VersioningConfiguration {
xml.Status opts.enabled? ? 'Enabled' : 'Disabled'
xml.Status opts.enabled? ? 'Enabled' : 'Suspended'
}
end.to_xml
end
Expand Down Expand Up @@ -538,16 +538,6 @@ def err(msg, reqid = '0000')
.with(:query => query, :body => nil)
end

it "should raise Exception when enable versioning" do
query = {'versioning' => nil}
stub_request(:put, request_path).with(:query => query)

versioning_opts = BucketVersioning.new(:enable => nil)
expect {
@protocol.put_bucket_versioning(@bucket, versioning_opts)
}.to raise_error(ClientError)
end

it "should enable encryption" do
query = {'encryption' => nil}
stub_request(:put, request_path).with(:query => query)
Expand Down

0 comments on commit be8d2f3

Please sign in to comment.