package Net::Fastly::Version; use strict; use base qw(Net::Fastly::Model); Net::Fastly::Version->mk_accessors(qw(service_id number name active locked staging testing deployed comment created_at updated_at)); =head1 NAME Net::Fastly::Version - a representation of a version of a service =head1 ACCESSORS =head2 service_id The id of the service this belongs to. =head2 name The name of this version. =head2 active Whether this version is active or not. =head2 locked Whether this version is locked or not. =head2 staging Whether this version is in staging or not. =head2 testing Whether this version is in testing or not. =head2 deployed Whether this version is deployed or not. =head2 comment a free form comment field =cut sub _get_path { my $class = shift; my $service = shift; my $number = shift; return "/service/$service/version/$number"; } sub _post_path { my $class = shift; my %opts = @_; return "/service/".$opts{service_id}."/version"; } sub _put_path { my $class = shift; my $obj = shift; return $class->_get_path($obj->service_id, $obj->number); } =head1 METHODS =cut =head2 service Get the service object for this version =cut sub service { my $self = shift; return $self->_fetcher->_get("Net::Fastly::Service", $self->service_id); } =head2 settings Get the settings object for this version =cut sub settings { my $self = shift; return $self->_fetcher->get_settings($self->service_id, $self->number); } =head2 activate Activate this version. This will cause it to be deployed. =cut sub activate { my $self = shift; my $hash = $self->_fetcher->client->_put($self->_put_path($self)."/activate"); return defined $hash; } =head2 deactivate Deactivate this version. =cut sub deactivate { my $self = shift; my $hash = $self->_fetcher->client->_put($self->_put_path($self)."/deactivate"); return defined $hash; } =head2 clone Clone this version - creates a new version which can then be modified and deployed. =cut sub clone { my $self = shift; my $hash = $self->_fetcher->client->_put($self->_put_path($self)."/clone"); return Net::Fastly::Version->new($self->_fetcher, %$hash); } =head2 generated_vcl Get the VCL object representing the VCL file generated by the system. =cut sub generated_vcl { my $self = shift; my $hash = $self->_fetcher->client->_get($self->_put_path($self)."/generated_vcl", @_); return undef unless defined $hash; return Net::Fastly::VCL->new($self->_fetcher, content => $hash->{content}, name => $hash->{md5}, version => $hash->{version}, service_id => $hash->{service_id}, ); } =head2 upload_vcl Upload a raw VCL file to be used by the system. =cut sub upload_vcl { my $self = shift; my $name = shift; my $content = shift; my %params = @_; my $hash = $self->_fetcher->client->_post($self->_put_path($self)."/vcl", name => $name, content => $content, %params); return undef unless defined $hash; return Net::Fastly::VCL->new($self->_fetcher, %$hash); } =head2 vcl The uploaded vcl for this version =cut sub vcl { my $self = shift; my $name = shift; my $vcl = $self->_fetcher->get_vcl($self->service_id, $self->number, $name, @_); return $vcl; } =head2 validate Validate the current setup. =cut sub validate { my $self = shift; my $hash = $self->_fetcher->client->_get($self->_put_path($self)."/validate"); return defined $hash; } 1;