File Coverage

blib/lib/WebService/Mattermost/V4/API.pm
Criterion Covered Total %
statement 185 186 99.4
branch 2 2 100.0
condition 2 3 66.6
subroutine 86 87 98.8
pod 0 1 0.0
total 275 279 98.5


line stmt bran cond sub pod time code
1             package WebService::Mattermost::V4::API;
2              
3             # ABSTRACT: Mattermost API v4 wrapper.
4              
5 7     7   49 use Moo;
  7         15  
  7         50  
6 7     7   5115 use MooX::HandlesVia;
  7         50990  
  7         44  
7 7     7   989 use Types::Standard qw(ArrayRef Bool InstanceOf Str);
  7         14  
  7         52  
8              
9 7     7   8980 use WebService::Mattermost::V4::API::Resource::Analytics;
  7         27  
  7         285  
10 7     7   3934 use WebService::Mattermost::V4::API::Resource::Audits;
  7         25  
  7         268  
11 7     7   3107 use WebService::Mattermost::V4::API::Resource::Bots;
  7         469  
  7         239  
12 7     7   3133 use WebService::Mattermost::V4::API::Resource::Brand;
  7         34  
  7         208  
13 7     7   2950 use WebService::Mattermost::V4::API::Resource::Cache;
  7         34  
  7         198  
14 7     7   3080 use WebService::Mattermost::V4::API::Resource::Channel;
  7         22  
  7         213  
15 7     7   3572 use WebService::Mattermost::V4::API::Resource::Channel::Member;
  7         21  
  7         262  
16 7     7   3240 use WebService::Mattermost::V4::API::Resource::Channels;
  7         19  
  7         197  
17 7     7   3014 use WebService::Mattermost::V4::API::Resource::Cluster;
  7         20  
  7         208  
18 7     7   3005 use WebService::Mattermost::V4::API::Resource::Compliance;
  7         24  
  7         212  
19 7     7   3194 use WebService::Mattermost::V4::API::Resource::Compliance::Report;
  7         21  
  7         194  
20 7     7   3109 use WebService::Mattermost::V4::API::Resource::DataRetention;
  7         22  
  7         220  
21 7     7   3071 use WebService::Mattermost::V4::API::Resource::Database;
  7         22  
  7         198  
22 7     7   3003 use WebService::Mattermost::V4::API::Resource::ElasticSearch;
  7         20  
  7         262  
23 7     7   3252 use WebService::Mattermost::V4::API::Resource::Email;
  7         23  
  7         190  
24 7     7   2977 use WebService::Mattermost::V4::API::Resource::Emoji;
  7         21  
  7         189  
25 7     7   3084 use WebService::Mattermost::V4::API::Resource::File;
  7         22  
  7         187  
26 7     7   2942 use WebService::Mattermost::V4::API::Resource::Files;
  7         20  
  7         183  
27 7     7   3110 use WebService::Mattermost::V4::API::Resource::Job;
  7         19  
  7         227  
28 7     7   3148 use WebService::Mattermost::V4::API::Resource::Jobs;
  7         20  
  7         187  
29 7     7   3073 use WebService::Mattermost::V4::API::Resource::LDAP;
  7         22  
  7         204  
30 7     7   2948 use WebService::Mattermost::V4::API::Resource::Logs;
  7         23  
  7         276  
31 7     7   3114 use WebService::Mattermost::V4::API::Resource::OAuth;
  7         20  
  7         242  
32 7     7   3364 use WebService::Mattermost::V4::API::Resource::OAuth::Application;
  7         22  
  7         209  
33 7     7   3119 use WebService::Mattermost::V4::API::Resource::Plugin;
  7         26  
  7         199  
34 7     7   3163 use WebService::Mattermost::V4::API::Resource::Plugins;
  7         32  
  7         223  
35 7     7   3386 use WebService::Mattermost::V4::API::Resource::Post;
  7         22  
  7         205  
36 7     7   3048 use WebService::Mattermost::V4::API::Resource::Posts;
  7         19  
  7         224  
37 7     7   3243 use WebService::Mattermost::V4::API::Resource::Reactions;
  7         19  
  7         181  
38 7     7   3084 use WebService::Mattermost::V4::API::Resource::Roles;
  7         18  
  7         212  
39 7     7   3178 use WebService::Mattermost::V4::API::Resource::S3;
  7         21  
  7         208  
40 7     7   3009 use WebService::Mattermost::V4::API::Resource::SAML;
  7         21  
  7         274  
41 7     7   3016 use WebService::Mattermost::V4::API::Resource::Schemes;
  7         21  
  7         253  
42 7     7   2974 use WebService::Mattermost::V4::API::Resource::System;
  7         22  
  7         191  
43 7     7   3250 use WebService::Mattermost::V4::API::Resource::Team;
  7         26  
  7         294  
44 7     7   3299 use WebService::Mattermost::V4::API::Resource::Teams;
  7         22  
  7         196  
45 7     7   3832 use WebService::Mattermost::V4::API::Resource::User;
  7         24  
  7         212  
46 7     7   3379 use WebService::Mattermost::V4::API::Resource::Users;
  7         23  
  7         246  
47 7     7   3143 use WebService::Mattermost::V4::API::Resource::Webhook;
  7         23  
  7         229  
48 7     7   3008 use WebService::Mattermost::V4::API::Resource::WebRTC;
  7         23  
  7         202  
49 7     7   46 use WebService::Mattermost::Helper::Alias 'v4';
  7         18  
  7         12107  
50              
51             ################################################################################
52              
53             has auth_token => (is => 'ro', isa => Str, required => 1);
54             has base_url => (is => 'ro', isa => Str, required => 1);
55              
56             has authenticate => (is => 'ro', isa => Bool, default => 0);
57             has debug => (is => 'ro', isa => Bool, default => 0);
58             has resources => (is => 'rw', isa => ArrayRef, default => sub { [] },
59                 handles_via => 'Array',
60                 handles => {
61                     add_resource => 'push',
62                 });
63              
64             has analytics => (is => 'ro', isa => InstanceOf[v4 'Analytics'], lazy => 1, builder => 1);
65             has application => (is => 'ro', isa => InstanceOf[v4 'OAuth::Application'], lazy => 1, builder => 1);
66             has audits => (is => 'ro', isa => InstanceOf[v4 'Audits'], lazy => 1, builder => 1);
67             has bots => (is => 'ro', isa => InstanceOf[v4 'Bots'], lazy => 1, builder => 1);
68             has brand => (is => 'ro', isa => InstanceOf[v4 'Brand'], lazy => 1, builder => 1);
69             has cache => (is => 'ro', isa => InstanceOf[v4 'Cache'], lazy => 1, builder => 1);
70             has channel => (is => 'ro', isa => InstanceOf[v4 'Channel'], lazy => 1, builder => 1);
71             has channel_member => (is => 'ro', isa => InstanceOf[v4 'Channel::Member'], lazy => 1, builder => 1);
72             has channels => (is => 'ro', isa => InstanceOf[v4 'Channels'], lazy => 1, builder => 1);
73             has cluster => (is => 'ro', isa => InstanceOf[v4 'Cluster'], lazy => 1, builder => 1);
74             has compliance => (is => 'ro', isa => InstanceOf[v4 'Compliance'], lazy => 1, builder => 1);
75             has compliance_report => (is => 'ro', isa => InstanceOf[v4 'Compliance::Report'], lazy => 1, builder => 1);
76             has data_retention => (is => 'ro', isa => InstanceOf[v4 'DataRetention'], lazy => 1, builder => 1);
77             has database => (is => 'ro', isa => InstanceOf[v4 'Database'], lazy => 1, builder => 1);
78             has elasticsearch => (is => 'ro', isa => InstanceOf[v4 'ElasticSearch'], lazy => 1, builder => 1);
79             has email => (is => 'ro', isa => InstanceOf[v4 'Email'], lazy => 1, builder => 1);
80             has emoji => (is => 'ro', isa => InstanceOf[v4 'Emoji'], lazy => 1, builder => 1);
81             has file => (is => 'ro', isa => InstanceOf[v4 'File'], lazy => 1, builder => 1);
82             has files => (is => 'ro', isa => InstanceOf[v4 'Files'], lazy => 1, builder => 1);
83             has job => (is => 'ro', isa => InstanceOf[v4 'Job'], lazy => 1, builder => 1);
84             has jobs => (is => 'ro', isa => InstanceOf[v4 'Jobs'], lazy => 1, builder => 1);
85             has ldap => (is => 'ro', isa => InstanceOf[v4 'LDAP'], lazy => 1, builder => 1);
86             has logs => (is => 'ro', isa => InstanceOf[v4 'Logs'], lazy => 1, builder => 1);
87             has oauth => (is => 'ro', isa => InstanceOf[v4 'OAuth'], lazy => 1, builder => 1);
88             has plugin => (is => 'ro', isa => InstanceOf[v4 'Plugin'], lazy => 1, builder => 1);
89             has plugins => (is => 'ro', isa => InstanceOf[v4 'Plugins'], lazy => 1, builder => 1);
90             has post => (is => 'ro', isa => InstanceOf[v4 'Post'], lazy => 1, builder => 1);
91             has posts => (is => 'ro', isa => InstanceOf[v4 'Posts'], lazy => 1, builder => 1);
92             has reactions => (is => 'ro', isa => InstanceOf[v4 'Reactions'], lazy => 1, builder => 1);
93             has roles => (is => 'ro', isa => InstanceOf[v4 'Roles'], lazy => 1, builder => 1);
94             has s3 => (is => 'ro', isa => InstanceOf[v4 'S3'], lazy => 1, builder => 1);
95             has saml => (is => 'ro', isa => InstanceOf[v4 'SAML'], lazy => 1, builder => 1);
96             has schemes => (is => 'ro', isa => InstanceOf[v4 'Schemes'], lazy => 1, builder => 1);
97             has system => (is => 'ro', isa => InstanceOf[v4 'System'], lazy => 1, builder => 1);
98             has team => (is => 'ro', isa => InstanceOf[v4 'Team'], lazy => 1, builder => 1);
99             has teams => (is => 'ro', isa => InstanceOf[v4 'Teams'], lazy => 1, builder => 1);
100             has user => (is => 'ro', isa => InstanceOf[v4 'User'], lazy => 1, builder => 1);
101             has users => (is => 'ro', isa => InstanceOf[v4 'Users'], lazy => 1, builder => 1);
102             has webhooks => (is => 'ro', isa => InstanceOf[v4 'Webhook'], lazy => 1, builder => 1);
103             has webrtc => (is => 'ro', isa => InstanceOf[v4 'WebRTC'], lazy => 1, builder => 1);
104              
105             ################################################################################
106              
107             sub BUILD {
108 34     34 0 1251     my $self = shift;
109              
110 34         218     foreach my $name (sort $self->meta->get_attribute_list) {
111 1530         6182183         my $attr = $self->meta->get_attribute($name);
112              
113 1530 100       69419         if ($attr->has_builder) {
114 1360         9732             my $cref = $self->can($name);
115              
116 1360         27253             $self->$cref;
117                     }
118                 }
119              
120 34         2124     return 1;
121             }
122              
123             ################################################################################
124              
125             sub _new_resource {
126 1360     1360   2257     my $self = shift;
127 1360         2337     my $name = shift;
128 1360   66     4784     my $alt_name = shift || lc $name;
129              
130 1360         4693     my $resource = v4($name)->new({
131                     api => $self,
132                     auth_token => $self->auth_token,
133                     base_url => $self->base_url,
134                     resource => $alt_name,
135                     debug => $self->debug,
136                 });
137              
138 1360         108771     $self->add_resource($resource);
139              
140 1360         84067     return $resource;
141             }
142              
143             ################################################################################
144              
145             # The optional second parameter in some of these builders sets the "resource
146             # name", i.e. DataRetention's base resource is "data_retention", not
147             # "dataretention".
148              
149 34     34   481 sub _build_analytics { shift->_new_resource('Analytics') }
150 34     34   482 sub _build_application { shift->_new_resource('OAuth::Application', 'oauth') }
151 34     34   438 sub _build_audits { shift->_new_resource('Audits') }
152 34     34   458 sub _build_bots { shift->_new_resource('Bots') }
153 34     34   465 sub _build_brand { shift->_new_resource('Brand') }
154 34     34   439 sub _build_cache { shift->_new_resource('Cache', 'caches') }
155 34     34   431 sub _build_channel { shift->_new_resource('Channel', 'channels') }
156 34     34   458 sub _build_channel_member { shift->_new_resource('Channel::Member', 'channels') }
157 34     34   439 sub _build_channels { shift->_new_resource('Channels') }
158 34     34   456 sub _build_cluster { shift->_new_resource('Cluster') }
159 34     34   440 sub _build_compliance { shift->_new_resource('Compliance') }
160 34     34   463 sub _build_compliance_report { shift->_new_resource('Compliance::Report', 'compliance') }
161 0     0   0 sub _build_config { shift->_new_resource('Config') }
162 34     34   445 sub _build_data_retention { shift->_new_resource('DataRetention', 'data_retention') }
163 34     34   456 sub _build_database { shift->_new_resource('Database') }
164 34     34   440 sub _build_elasticsearch { shift->_new_resource('ElasticSearch') }
165 34     34   495 sub _build_email { shift->_new_resource('Email') }
166 34     34   439 sub _build_emoji { shift->_new_resource('Emoji') }
167 34     34   459 sub _build_files { shift->_new_resource('Files') }
168 34     34   452 sub _build_file { shift->_new_resource('File', 'files') }
169 34     34   461 sub _build_job { shift->_new_resource('Job', 'jobs') }
170 34     34   468 sub _build_jobs { shift->_new_resource('Jobs') }
171 34     34   459 sub _build_ldap { shift->_new_resource('LDAP') }
172 34     34   435 sub _build_logs { shift->_new_resource('Logs') }
173 34     34   443 sub _build_oauth { shift->_new_resource('OAuth') }
174 34     34   494 sub _build_plugin { shift->_new_resource('Plugin', 'plugins') }
175 34     34   806 sub _build_plugins { shift->_new_resource('Plugins') }
176 34     34   473 sub _build_post { shift->_new_resource('Post', 'posts') }
177 34     34   424 sub _build_posts { shift->_new_resource('Posts') }
178 34     34   464 sub _build_reactions { shift->_new_resource('Reactions') }
179 34     34   446 sub _build_roles { shift->_new_resource('Roles') }
180 34     34   468 sub _build_s3 { shift->_new_resource('S3', 'file') }
181 34     34   479 sub _build_saml { shift->_new_resource('SAML') }
182 34     34   453 sub _build_schemes { shift->_new_resource('Schemes') }
183 34     34   446 sub _build_system { shift->_new_resource('System') }
184 34     34   423 sub _build_team { shift->_new_resource('Team', 'teams') }
185 34     34   450 sub _build_teams { shift->_new_resource('Teams') }
186 34     34   444 sub _build_user { shift->_new_resource('User', 'users') }
187 34     34   505 sub _build_users { shift->_new_resource('Users') }
188 34     34   435 sub _build_webhooks { shift->_new_resource('Webhook', 'hooks') }
189 34     34   444 sub _build_webrtc { shift->_new_resource('WebRTC') }
190              
191             ################################################################################
192              
193             1;
194              
195             __END__
196            
197             =pod
198            
199             =encoding UTF-8
200            
201             =head1 NAME
202            
203             WebService::Mattermost::V4::API - Mattermost API v4 wrapper.
204            
205             =head1 VERSION
206            
207             version 0.26
208            
209             =head1 DESCRIPTION
210            
211             Container for API resources.
212            
213             =head2 ATTRIBUTES
214            
215             =over 4
216            
217             =item * C<analytics>
218            
219             See L<WebService::Mattermost::V4::API::Resource::Analytics>
220            
221             =item * C<application>
222            
223             See L<WebService::Mattermost::V4::API::Resource::OAuth::Application>
224            
225             =item * C<audits>
226            
227             See L<WebService::Mattermost::V4::API::Resource::Audits>
228            
229             =item * C<brand>
230            
231             See L<WebService::Mattermost::V4::API::Resource::Brand>.
232            
233             =item * C<bots>
234            
235             See L<WebService::Mattermost::V4::API::Resource::Bots>.
236            
237             =item * C<channels>
238            
239             See L<WebService::Mattermost::V4::API::Resource::Channels>.
240            
241             =item * C<channel>
242            
243             See L<WebService::Mattermost::V4::API::Resource::Channel>.
244            
245             =item * C<channel_member>
246            
247             See L<WebService::Mattermost::V4::API::Resource::Channel::Member>.
248            
249             =item * C<cluster>
250            
251             See L<WebService::Mattermost::V4::API::Resource::Cluster>.
252            
253             =item * C<config>
254            
255             See L<WebService::Mattermost::V4::API::Resource::Config>.
256            
257             =item * C<compliance>
258            
259             See L<WebService::Mattermost::V4::API::Resource::Compliance>.
260            
261             =item * C<compliance_report>
262            
263             See L<WebService::Mattermost::V4::API::Resource::Compliance::Report>.
264            
265             =item * C<data_retention>
266            
267             See L<WebService::Mattermost::V4::API::Resource::DataRetention>.
268            
269             =item * C<database>
270            
271             See L<WebService::Mattermost::V4::API::Resource::Database>.
272            
273             =item * C<elasticsearch>
274            
275             See L<WebService::Mattermost::V4::API::Resource::ElasticSearch>.
276            
277             =item * C<email>
278            
279             See L<WebService::Mattermost::V4::API::Resource::Email>.
280            
281             =item * C<emoji>
282            
283             See L<WebService::Mattermost::V4::API::Resource::Emoji>.
284            
285             =item * C<file>
286            
287             See L<WebService::Mattermost::V4::API::Resource::File>.
288            
289             =item * C<files>
290            
291             See L<WebService::Mattermost::V4::API::Resource::Files>.
292            
293             =item * C<job>
294            
295             See L<WebService::Mattermost::V4::API::Resource::Job>.
296            
297             =item * C<jobs>
298            
299             See L<WebService::Mattermost::V4::API::Resource::Jobs>.
300            
301             =item * C<ldap>
302            
303             See L<WebService::Mattermost::V4::API::Resource::LDAP>.
304            
305             =item * C<logs>
306            
307             See L<WebService::Mattermost::V4::API::Resource::Logs>.
308            
309             =item * C<oauth>
310            
311             See L<WebService::Mattermost::V4::API::Resource::OAuth>.
312            
313             =item * C<plugin>
314            
315             See L<WebService::Mattermost::V4::API::Resource::Plugin>.
316            
317             =item * C<plugins>
318            
319             See L<WebService::Mattermost::V4::API::Resource::Plugins>.
320            
321             =item * C<post>
322            
323             See L<WebService::Mattermost::V4::API::Resource::Post>.
324            
325             =item * C<posts>
326            
327             See L<WebService::Mattermost::V4::API::Resource::Posts>.
328            
329             =item * C<reactions>
330            
331             See L<WebService::Mattermost::V4::API::Resource::Reactions>.
332            
333             =item * C<roles>
334            
335             See L<WebService::Mattermost::V4::API::Resource::Roles>.
336            
337             =item * C<s3>
338            
339             See L<WebService::Mattermost::V4::API::Resource::S3>.
340            
341             =item * C<saml>
342            
343             See L<WebService::Mattermost::V4::API::Resource::SAML>.
344            
345             =item * C<schemes>
346            
347             See L<WebService::Mattermost::V4::API::Resource::Schemes>.
348            
349             =item * C<system>
350            
351             See L<WebService::Mattermost::V4::API::Resource::System>.
352            
353             =item * C<team>
354            
355             See L<WebService::Mattermost::V4::API::Resource::Team>.
356            
357             =item * C<teams>
358            
359             See L<WebService::Mattermost::V4::API::Resource::Teams>.
360            
361             =item * C<user>
362            
363             See L<WebService::Mattermost::V4::API::Resource::User>.
364            
365             =item * C<users>
366            
367             See L<WebService::Mattermost::V4::API::Resource::Users>.
368            
369             =item * C<webhooks>
370            
371             See L<WebService::Mattermost::V4::API::Resource::Webhook>.
372            
373             =item * C<webrtc>
374            
375             See L<WebService::Mattermost::V4::API::Resource::WebRTC>.
376            
377             =back
378            
379             =head1 AUTHOR
380            
381             Mike Jones <mike@netsplit.org.uk>
382            
383             =head1 COPYRIGHT AND LICENSE
384            
385             This software is Copyright (c) 2020 by Mike Jones.
386            
387             This is free software, licensed under:
388            
389             The MIT (X11) License
390            
391             =cut
392