AWS-ARN

 view release on metacpan or  search on metacpan

cpanfile  view on Meta::CPAN

requires 'Moo' => '2.0';
requires 'Try::Tiny';
requires 'Type::Utils';
requires 'Types::Standard';

on configure => sub {
    requires 'Module::Build::Tiny', '0.034';
    requires 'perl', '5.006';
};

lib/AWS/ARN.pm  view on Meta::CPAN

package AWS::ARN;

use strict;
use warnings;
use Moo;
use Types::Standard qw/Str/;
use Type::Utils;

our $VERSION = '0.007';

use overload '""' => sub {
	shift->arn;
};

my $partitionRe = my $serviceRe = qr{[\w-]+};
my $regionRe = qr{[\w-]*};
my $account_idRe = qr{\d*};
my $resource_idRe = qr{.+};
my $arnRe = qr{arn:$partitionRe:$serviceRe:$regionRe:$account_idRe:$resource_idRe};
my $Arn = declare(
	as Str, 

lib/AWS/ARN.pm  view on Meta::CPAN

	as Str,
	where { m{^$account_idRe$} }, 
	message { "$_ is not a valid AWS Account ID" }
);
my $ArnResourceID = declare(
	as Str,
	where { m{^$resource_idRe$} },
	message { "$_ is not a valid AWS Resource" },
);

sub _split_arn {
	my $self = shift;
	my ($index) = @_;
	return "" unless $self->_has_arn;
	my @parts = split( /:/, $self->arn, 6 );
	return $parts[$index||0]||"";
}

has arn => (
	is => 'rw',
	isa => $Arn,

lib/AWS/ARN.pm  view on Meta::CPAN

	trigger => 1,
);

has partition => (
	is => 'rw',
	isa => $ArnPartition,
	lazy => 1,
	builder => '_build_partition',
	clearer => '_clear_partition',
	default => 'aws',
	trigger => sub { shift->_clear_arn },
);

has service => (
	is => 'rw',
	isa => $ArnService,
	lazy => 1,
	required => 1,
	builder => '_build_service',
	clearer => '_clear_service',
	trigger => sub { shift->_clear_arn },
);

has region => (
	is => 'rw',
	isa => $ArnRegion,
	lazy => 1,
	builder => '_build_region',
	clearer => '_clear_region',
	trigger => sub { shift->_clear_arn },
);

has account_id => (
	is => 'rw',
	isa => $ArnAccountID,
	lazy => 1,
	builder => '_build_account_id',
	clearer => '_clear_account_id',
	trigger => sub { shift->_clear_arn },
);

has resource_id => (
	is => 'rw',
	isa => $ArnResourceID,
	lazy => 1,
	builder => '_build_resource_id',
	clearer => '_clear_resource_id',
	trigger => sub { shift->_clear_arn },
);

sub _build_arn {
	my $self = shift;
	my $arn = join( ':',
		'arn',
		$self->partition,
		$self->service,
		$self->region,
		$self->account_id,
		$self->resource_id,
	);
}

sub _build_partition {
	shift->_split_arn( 1 )
}
sub _build_service {
	shift->_split_arn( 2 )
}
sub _build_region {
	shift->_split_arn( 3 )
}
sub _build_account_id {
	shift->_split_arn( 4 )
}
sub _build_resource_id {
	shift->_split_arn( 5 )
}
sub _trigger_arn {
	my $self = shift;
	$self->_clear_partition;
	$self->_clear_service;
	$self->_clear_region;
	$self->_clear_account_id;
	$self->_clear_resource_id;
}

around BUILDARGS => sub {
	my ( $orig, $class, @args ) = @_;

	return { arn => $args[0] }
		if @args == 1 && !ref $args[0];

	return $class->$orig( @args );
};

no Try::Tiny;
no Type::Utils;



( run in 0.242 second using v1.01-cache-2.11-cpan-a5abf4f5562 )