File Coverage

blib/lib/WebService/Mattermost/V4/API/Resource/Post.pm
Criterion Covered Total %
statement 3 3 100.0
branch n/a
condition n/a
subroutine 1 1 100.0
pod n/a
total 4 4 100.0


line stmt bran cond sub pod time code
1             package WebService::Mattermost::V4::API::Resource::Post;
2:

3: # ABSTRACT: Wrapped API methods for the post API endpoints. 4:
5: use Moo;
6:
7: extends 'WebService::Mattermost::V4::API::Resource';
8: with 'WebService::Mattermost::V4::API::Resource::Role::View::Post';
9:
10: ################################################################################
11:
12: around [ qw(
13: get
14: delete
15: update
16: patch
17:
18: thread
19: files
20:
21: pin
22: unpin
23:
24: reactions
25:
26: perform_action
27: ) ] => sub {
28: my $orig = shift;
29: my $self = shift;
30: my $id = shift;
31:
32: return $self->validate_id($orig, $id, @_);
33: };
34:
35: sub get {
36: my $self = shift;
37: my $id = shift;
38:
39: return $self->_single_view_get({
40: endpoint => '%s',
41: ids => [ $id ],
42: });
43: }
44:
45: sub delete {
46: my $self = shift;
47: my $id = shift;
48:
49: return $self->_single_view_delete({
50: endpoint => '%s',
51: ids => [ $id ],
52: view => 'Status',
53: });
54: }
55:
56: sub update {
57: my $self = shift;
58: my $id = shift;
59: my $args = shift;
60:
61: return $self->_single_view_put({
62: endpoint => '%s',
63: ids => [ $id ],
64: parameters => $args,
65: });
66: }
67:
68: sub patch {
69: my $self = shift;
70: my $id = shift;
71: my $args = shift;
72:
73: return $self->_single_view_put({
74: endpoint => '%s/patch',
75: ids => [ $id ],
76: parameters => $args,
77: });
78: }
79:
80: sub thread {
81: my $self = shift;
82: my $id = shift;
83:
84: return $self->_single_view_get({
85: endpoint => '%s/thread',
86: ids => [ $id ],
87: view => 'Thread',
88: });
89: }
90:
91: sub files {
92: my $self = shift;
93: my $id = shift;
94:
95: return $self->_get({
96: endpoint => '%s/files/info',
97: ids => [ $id ],
98: view => 'File',
99: });
100: }
101:
102: sub pin {
103: my $self = shift;
104: my $id = shift;
105:
106: return $self->_single_view_post({
107: endpoint => '%s/pin',
108: ids => [ $id ],
109: view => 'Status',
110: });
111: }
112:
113: sub unpin {
114: my $self = shift;
115: my $id = shift;
116:
117: return $self->_single_view_post({
118: endpoint => '%s/unpin',
119: ids => [ $id ],
120: view => 'Status',
121: });
122: }
123:
124: sub reactions {
125: my $self = shift;
126: my $id = shift;
127:
128: return $self->_get({
129: endpoint => '%s/reactions',
130: ids => [ $id ],
131: view => 'Reaction',
132: });
133: }
134:
135: sub perform_action {
136: my $self = shift;
137: my $post_id = shift;
138: my $action_id = shift;
139:
140: unless ($action_id) {
141: return $self->error_return('An action ID is required');
142: }
143:
144: return $self->_single_view_post({
145: endpoint => '%s/actions/%s',
146: ids => [ $post_id, $action_id ],
147: view => 'Status',
148: });
149: }
150:
151: ################################################################################
152:
153: 1;
154:
155: __END__
156:
157: =pod
158:
159: =encoding UTF-8
160:
161: =head1 NAME
162:
163: WebService::Mattermost::V4::API::Resource::Post - Wrapped API methods for the post API endpoints.
164:
165: =head1 VERSION
166:
167: version 0.28
168:
169: =head1 DESCRIPTION
170:
171: =head2 USAGE
172:
173: use WebService::Mattermost;
174:
175: my $mm = WebService::Mattermost->new({
176: authenticate => 1,
177: username => 'email@address.com',
178: password => 'passwordhere',
179: base_url => 'https://my.mattermost.server.com/api/v4/',
180: });
181:
182: my $resource = $mm->api->post;
183:
184: =head2 METHODS
185:
186: =over 4
187:
188: =item C<get()>
189:
190: L<Get a post|https://api.mattermost.com/#tag/posts%2Fpaths%2F~1posts~1%7Bpost_id%7D%2Fget>
191:
192: my $response = $resource->get('ID-HERE');
193:
194: =item C<delete()>
195:
196: L<Delete a post|https://api.mattermost.com/#tag/posts%2Fpaths%2F~1posts~1%7Bpost_id%7D%2Fdelete>
197:
198: my $response = $resource->delete('ID-HERE');
199:
200: =item C<update()>
201:
202: L<Update a post|https://api.mattermost.com/#tag/posts%2Fpaths%2F~1posts~1%7Bpost_id%7D%2Fput>
203:
204: Fields not sent will be treated as blank (and unset). Use C<patch()> for
205: updating individual fields.
206:
207: my $response = $resource->update('ID-HERE', {
208: # Optional parameters:
209: is_pinned => \0, # or \1 for true
210: message => '...',
211: file_ids => [ '...' ],
212: has_reactions => \0, # or \1 for true
213: props => {},
214: });
215:
216: =item C<patch()>
217:
218: L<Patch a post|https://api.mattermost.com/#tag/posts%2Fpaths%2F~1posts~1%7Bpost_id%7D~1patch%2Fput>
219:
220: my $response = $resource->patch('ID-HERE', {
221: # Optional parameters:
222: is_pinned => \0, # or \1 for true
223: message => '...',
224: file_ids => [ '...' ],
225: has_reactions => \0, # or \1 for true
226: props => {},
227: });
228:
229: =item C<thread()>
230:
231: L<Get a thread|https://api.mattermost.com/#tag/posts%2Fpaths%2F~1posts~1%7Bpost_id%7D~1thread%2Fget>
232:
233: my $response = $resource->thread('ID-HERE');
234:
235: =item C<files()>
236:
237: L<Get file info for post|https://api.mattermost.com/#tag/posts%2Fpaths%2F~1posts~1%7Bpost_id%7D~1files~1info%2Fget>
238:
239: my $response = $resource->files('ID-HERE');
240:
241: =item C<pin()>
242:
243: L<Pin a post to the channel|https://api.mattermost.com/#tag/posts%2Fpaths%2F~1posts~1%7Bpost_id%7D~1pin%2Fpost>
244:
245: my $response = $resource->pin('ID-HERE');
246:
247: =item C<unpin()>
248:
249: L<Unpin a post from the channel|https://api.mattermost.com/#tag/posts%2Fpaths%2F~1posts~1%7Bpost_id%7D~1unpin%2Fpost>
250:
251: my $response = $resource->unpin('ID-HERE');
252:
253: =item C<reactions()>
254:
255: L<Get a list of reactions to a post|https://api.mattermost.com/#tag/reactions%2Fpaths%2F~1posts~1%7Bpost_id%7D~1reactions%2Fget>
256:
257: my $response = $resource->reactions('ID-HERE');
258:
259: =item C<perform_action()>
260:
261: L<Perform a post action|https://api.mattermost.com/#tag/posts%2Fpaths%2F~1posts~1%7Bpost_id%7D~1actions~1%7Baction_id%7D%2Fpost>
262:
263: my $response = $resource->perform_action('POST-ID-HERE', 'REACTION-ID-HERE');
264:
265: =back
266:
267: =head1 AUTHOR
268:
269: Mike Jones <mike@netsplit.org.uk>
270:
271: =head1 COPYRIGHT AND LICENSE
272:
273: This software is Copyright (c) 2020 by Mike Jones.
274:
275: This is free software, licensed under:
276:
277: The MIT (X11) License
278:
279: =cut
280: