Amazon-S3-Thin
view release on metacpan or search on metacpan
lib/Amazon/S3/Thin/Resource.pm view on Meta::CPAN
package Amazon::S3::Thin::Resource;
use strict;
use warnings;
use URI::Escape qw(uri_escape_utf8);
sub new {
my $class = shift;
my $bucket = shift;
my $key = shift;
my $query_string = shift;
my $self = {
bucket => $bucket,
key => $key,
query_string => $query_string,
};
bless $self, $class;
}
sub _composer_url {
my $self = shift;
my $protocol = shift;
my $host = shift;
my $path = shift;
return "$protocol://$host/$path",
}
sub to_path_style_url {
my $self = shift;
my $protocol = shift;
my $region = shift;
return $self->_composer_url(
$protocol,
$self->_region_specific_host($region),
$self->{bucket} . '/' . $self->key_and_query
);
}
sub to_virtual_hosted_style_url {
my $self = shift;
my $protocol = shift;
return $self->_composer_url(
$protocol,
sprintf("%s.s3.amazonaws.com", $self->{bucket}),
$self->key_and_query
);
}
sub _region_specific_host {
my $self = shift;
my $region = shift;
if ($region eq 'us-east-1') {
return 's3.amazonaws.com';
}
return sprintf('s3.%s.amazonaws.com', $region); # 's3.eu-west-1.amazonaws.com'
}
# to keep B.C. for old implementation in case region is not given
sub to_url_without_region {
my $self = shift;
my $protocol = shift;
my $main_host = shift;
my $url;
my $bucket = $self->{bucket};
if ($self->_is_dns_bucket($self->{bucket})) {
# vhost style
$url = $self->_composer_url($protocol, $bucket . '.' . $main_host, $self->key_and_query);
} else {
# path style
$url = $self->_composer_url($protocol, $main_host, $self->{bucket} . "/" . $self->key_and_query);
}
( run in 1.162 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )