From 3c56fb2e5b078ba5c6a495054f8904310394b614 Mon Sep 17 00:00:00 2001 From: Mike Jones Date: Tue, 9 Oct 2018 19:55:06 +0100 Subject: [PATCH] API methods for File, Job, Plugin --- lib/WebService/Mattermost/V4/API.pm | 9 +- .../Mattermost/V4/API/Object/File.pm | 46 ++++++++++ .../Mattermost/V4/API/Object/Job.pm | 35 +++++++ .../Mattermost/V4/API/Object/Plugin.pm | 37 ++++++++ .../Mattermost/V4/API/Resource/Job.pm | 92 +++++++++++++++++++ .../Mattermost/V4/API/Resource/Jobs.pm | 42 --------- 6 files changed, 218 insertions(+), 43 deletions(-) create mode 100644 lib/WebService/Mattermost/V4/API/Resource/Job.pm diff --git a/lib/WebService/Mattermost/V4/API.pm b/lib/WebService/Mattermost/V4/API.pm index 01b4d9d..74277b1 100644 --- a/lib/WebService/Mattermost/V4/API.pm +++ b/lib/WebService/Mattermost/V4/API.pm @@ -21,6 +21,7 @@ use WebService::Mattermost::V4::API::Resource::Email; use WebService::Mattermost::V4::API::Resource::Emoji; use WebService::Mattermost::V4::API::Resource::File; use WebService::Mattermost::V4::API::Resource::Files; +use WebService::Mattermost::V4::API::Resource::Job; use WebService::Mattermost::V4::API::Resource::Jobs; use WebService::Mattermost::V4::API::Resource::LDAP; use WebService::Mattermost::V4::API::Resource::Logs; @@ -74,6 +75,7 @@ has email => (is => 'ro', isa => InstanceOf[v4 'Email'], has emoji => (is => 'ro', isa => InstanceOf[v4 'Emoji'], lazy => 1, builder => 1); has file => (is => 'ro', isa => InstanceOf[v4 'File'], lazy => 1, builder => 1); has files => (is => 'ro', isa => InstanceOf[v4 'Files'], lazy => 1, builder => 1); +has job => (is => 'ro', isa => InstanceOf[v4 'Job'], lazy => 1, builder => 1); has jobs => (is => 'ro', isa => InstanceOf[v4 'Jobs'], lazy => 1, builder => 1); has ldap => (is => 'ro', isa => InstanceOf[v4 'LDAP'], lazy => 1, builder => 1); has logs => (is => 'ro', isa => InstanceOf[v4 'Logs'], lazy => 1, builder => 1); @@ -155,8 +157,9 @@ sub _build_database { shift->_new_resource('Database') sub _build_elasticsearch { shift->_new_resource('ElasticSearch') } sub _build_email { shift->_new_resource('Email') } sub _build_emoji { shift->_new_resource('Emoji') } -sub _build_files { shift->_new_resource('Files', 'files') } +sub _build_files { shift->_new_resource('Files') } sub _build_file { shift->_new_resource('File', 'files') } +sub _build_job { shift->_new_resource('Job', 'jobs') } sub _build_jobs { shift->_new_resource('Jobs') } sub _build_ldap { shift->_new_resource('LDAP') } sub _build_logs { shift->_new_resource('Logs') } @@ -267,6 +270,10 @@ See C. See C. +=item C + +See C. + =item C See C. diff --git a/lib/WebService/Mattermost/V4/API/Object/File.pm b/lib/WebService/Mattermost/V4/API/Object/File.pm index 7a3c35c..feb73ad 100644 --- a/lib/WebService/Mattermost/V4/API/Object/File.pm +++ b/lib/WebService/Mattermost/V4/API/Object/File.pm @@ -5,6 +5,7 @@ use Types::Standard qw(Bool Int Maybe Str); extends 'WebService::Mattermost::V4::API::Object'; with qw( + WebService::Mattermost::V4::API::Object::Role::APIMethods WebService::Mattermost::V4::API::Object::Role::BelongingToPost WebService::Mattermost::V4::API::Object::Role::BelongingToUser WebService::Mattermost::V4::API::Object::Role::ID @@ -29,6 +30,22 @@ sub _build_has_preview_image { shift->raw_data->{has_preview_image} ? 1 : 0 } ################################################################################ +sub BUILD { + my $self = shift; + + $self->api_resource_name('file'); + $self->set_available_api_methods([ qw( + get_thumbnail + get_preview + get_link + get_metadata + ) ]); + + return 1; +} + +################################################################################ + 1; __END__ @@ -40,6 +57,31 @@ WebService::Mattermost::V4::API::Object::File Details a Mattermost File object. +=head2 METHODS + +See matching methods in C +for full documentation. + +ID parameters are not required: + + my $response = $mattermost->api->file->get('ID-HERE')->item->get_thumbnail(); + +Is the same as: + + my $response = $mattermost->api->file->get_thumbnail('ID-HERE'); + +=over 4 + +=item C + +=item C + +=item C + +=item C + +=back + =head2 ATTRIBUTES =over 4 @@ -62,6 +104,10 @@ Details a Mattermost File object. =over 4 +=item C + +=item C + =item C =item C diff --git a/lib/WebService/Mattermost/V4/API/Object/Job.pm b/lib/WebService/Mattermost/V4/API/Object/Job.pm index 532dcee..393d3d2 100644 --- a/lib/WebService/Mattermost/V4/API/Object/Job.pm +++ b/lib/WebService/Mattermost/V4/API/Object/Job.pm @@ -5,6 +5,7 @@ use Types::Standard qw(HashRef Int Maybe Object Str); extends 'WebService::Mattermost::V4::API::Object'; with qw( + WebService::Mattermost::V4::API::Object::Role::APIMethods WebService::Mattermost::V4::API::Object::Role::ID WebService::Mattermost::V4::API::Object::Role::CreatedAt WebService::Mattermost::V4::API::Object::Role::Status @@ -21,6 +22,17 @@ has started_at => (is => 'ro', isa => Maybe[Object], lazy => 1, builder = ################################################################################ +sub BUILD { + my $self = shift; + + $self->api_resource_name('job'); + $self->set_available_api_methods([ 'cancel' ]); + + return 1; +} + +################################################################################ + sub _build_type { my $self = shift; @@ -68,6 +80,25 @@ WebService::Mattermost::V4::API::Object::Job =head1 DESCRIPTION +=head2 METHODS + +See matching methods in C +for full documentation. + +ID parameters are not required: + + my $response = $mattermost->api->job->get('ID-HERE')->item->cancel(); + +Is the same as: + + my $response = $mattermost->api->job->cancel('ID-HERE'); + +=over 4 + +=item C + +=back + =head2 ATTRIBUTES =over 4 @@ -92,6 +123,10 @@ DateTime. =over 4 +=item C + +=item C + =item C =item C diff --git a/lib/WebService/Mattermost/V4/API/Object/Plugin.pm b/lib/WebService/Mattermost/V4/API/Object/Plugin.pm index 2ae1eac..1631361 100644 --- a/lib/WebService/Mattermost/V4/API/Object/Plugin.pm +++ b/lib/WebService/Mattermost/V4/API/Object/Plugin.pm @@ -5,6 +5,7 @@ use Types::Standard qw(Bool HashRef Maybe Str); extends 'WebService::Mattermost::V4::API::Object'; with qw( + WebService::Mattermost::V4::API::Object::Role::APIMethods WebService::Mattermost::V4::API::Object::Role::Description WebService::Mattermost::V4::API::Object::Role::Name WebService::Mattermost::V4::API::Object::Role::ID @@ -31,6 +32,15 @@ around BUILDARGS => sub { return $self->$orig($args); }; +sub BUILD { + my $self = shift; + + $self->api_resource_name('plugin'); + $self->set_available_api_methods([ qw(remove activate deactivate) ]); + + return 1; +} + ################################################################################ 1; @@ -44,6 +54,29 @@ WebService::Mattermost::V4::API::Object::Plugin An active or inactive plugin. +=head2 METHODS + +See matching methods in C +for full documentation. + +ID parameters are not required: + + my @responses = map { $_->deactivate } @{$mattermost->api->plugins->all->item->active}; + +Is the same as: + + my @responses = map { $mattermost->api->plugin->deactivate($_) } qw(PLUGIN-IDS-HERE); + +=over 4 + +=item C + +=item C + +=item C + +=back + =head2 ATTRIBUTES =over 4 @@ -64,6 +97,10 @@ An active or inactive plugin. =over 4 +=item C + +=item C + =item C =item C diff --git a/lib/WebService/Mattermost/V4/API/Resource/Job.pm b/lib/WebService/Mattermost/V4/API/Resource/Job.pm new file mode 100644 index 0000000..0ed0f3c --- /dev/null +++ b/lib/WebService/Mattermost/V4/API/Resource/Job.pm @@ -0,0 +1,92 @@ +package WebService::Mattermost::V4::API::Resource::Job; + +use Moo; + +extends 'WebService::Mattermost::V4::API::Resource'; + +################################################################################ + +around [ qw(get cancel) ] => sub { + my $orig = shift; + my $self = shift; + my $id = shift; + + return $self->_validate_id($orig, $id, @_); +}; + +sub get { + my $self = shift; + my $id = shift; + + return $self->_single_view_get({ + view => 'Job', + endpoint => '%s', + ids => [ $id ], + }); +} + +sub cancel { + my $self = shift; + my $id = shift; + + return $self->_single_view_post({ + view => 'Job', + endpoint => '%s/cancel', + ids => [ $id ], + }); +} + +################################################################################ + +1; +__END__ + +=head1 NAME + +WebService::Mattermost::V4::API::Resource::Job + +=head1 DESCRIPTION + +=head2 USAGE + + use WebService::Mattermost; + + my $mm = WebService::Mattermost->new({ + authenticate => 1, + username => 'me@somewhere.com', + password => 'hunter2', + base_url => 'https://my.mattermost.server.com/api/v4/', + }); + + my $resource = $mm->api->teams->job; + +=head2 METHODS + +=over 4 + +=item C + +L + + my $response = $resource->get('JOB-ID-HERE'); + +=item C + +L + + my $response = $resource->cancel('JOB-ID-HERE'); + +=back + +=head1 SEE ALSO + +=over 4 + +=item L + +=back + +=head1 AUTHOR + +Mike Jones L + diff --git a/lib/WebService/Mattermost/V4/API/Resource/Jobs.pm b/lib/WebService/Mattermost/V4/API/Resource/Jobs.pm index 8b69738..33e8518 100644 --- a/lib/WebService/Mattermost/V4/API/Resource/Jobs.pm +++ b/lib/WebService/Mattermost/V4/API/Resource/Jobs.pm @@ -6,14 +6,6 @@ extends 'WebService::Mattermost::V4::API::Resource'; ################################################################################ -around [ qw(get_by_id cancel_by_id) ] => sub { - my $orig = shift; - my $self = shift; - my $id = shift; - - return $self->_validate_id($orig, $id, @_); -}; - sub all { my $self = shift; my $args = shift; @@ -35,28 +27,6 @@ sub create { }); } -sub get_by_id { - my $self = shift; - my $id = shift; - - return $self->_single_view_get({ - view => 'Job', - endpoint => '%s', - ids => [ $id ], - }); -} - -sub cancel_by_id { - my $self = shift; - my $id = shift; - - return $self->_single_view_post({ - view => 'Job', - endpoint => '%s/cancel', - ids => [ $id ], - }); -} - sub get_by_type { my $self = shift; my $type = shift; @@ -124,18 +94,6 @@ L data => {}, }); -=item C - -L - - my $response = $resource->get_by_id('JOB-ID-HERE'); - -=item C - -L - - my $response = $resource->cancel_by_id('JOB-ID-HERE'); - =item C L -- GitLab