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