AnyEvent-WebService-Tracks
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/AnyEvent/WebService/Tracks/Resource.pm view on Meta::CPAN
sub readonly {
my ( $class, @fields ) = @_;
no strict 'refs';
foreach my $field (@fields) {
*{$class . '::' . $field} = sub {
my $self = shift;
if(@_) {
croak "$field is readonly";
}
return $self->{$field};
};
}
}
sub accessor {
my ( $class, @fields ) = @_;
no strict 'refs';
foreach my $field (@fields) {
*{$class . '::' . $field} = sub {
my $self = shift;
if(@_) {
$self->{$field} = shift;
$self->{'_dirty'}{$field} = 1;
}
return $self->{$field};
};
}
}
sub new {
my ( $class, %params ) = @_;
$params{'_dirty'} = {};
return bless \%params, $class;
}
sub destroy {
my ( $self, $cb ) = @_;
$self->{'parent'}->do_delete([$self->resource_path, $self->id . '.xml'], sub {
return $_[2];
}, sub {
my ( $headers ) = @_;
if($self->{'parent'}->status_successful($headers->{'Status'})) {
bless $self, 'AnyEvent::WebService::Tracks::DestroyedResource';
$cb->(1);
} else {
$cb->(undef, $headers->{'status'});
}
});
}
sub update {
my ( $self, $cb ) = @_;
unless(%{$self->{'_dirty'}}) {
$cb->($self);
return;
}
my $xml = $self->{'parent'}->generate_xml($self->xml_root,
{ map { $_ => $self->{$_} } keys %{$self->{'_dirty'}} });
my $outer = $xml;
my $url = [$self->resource_path, $self->id . '.xml'];
$self->{'parent'}->do_put($url, $xml, sub {
return @_[1, 2];
}, sub {
my ( $xml, $headers ) = @_;
if($self->{'parent'}->status_successful($headers->{'Status'})) {
if($xml eq 'Success') {
$self->{'parent'}->do_get($url, sub {
return $_[1];
}, sub {
my ( $xml ) = @_;
my $other = $self->{'parent'}->parse_single(ref($self), $xml);
%$self = %$other;
$cb->($self);
});
} elsif($xml eq '') {
$cb->(undef, 'Update failed');
} else {
my $other = $self->{'parent'}->parse_single(ref($self), $xml);
%$self = %$other;
$cb->($self);
}
} else {
$cb->(undef, $headers->{'status'});
}
});
}
1;
__END__
=head1 NAME
AnyEvent::WebService::Tracks::Resource - Generic superclass for Tracks resources
=head1 VERSION
0.02
=head1 DESCRIPTION
AnyEvent::WebService::Tracks::Resource is a generic superclass for Context,
Project, and Todo objects, and provides common methods.
=head1 ACCESSORS
Accessors for resource objects don't actually update the object in Tracks;
view all matches for this distributionview release on metacpan - search on metacpan
( run in 1.157 second using v1.00-cache-2.02-grep-82fe00e-cpan-1310916c57ae )