blib/lib/WebService/Mattermost/Helper/Table.pm | |||
---|---|---|---|
Criterion | Covered | Total | % |
statement | 27 | 27 | 100.0 |
branch | n/a | ||
condition | 2 | 2 | 100.0 |
subroutine | 4 | 4 | 100.0 |
pod | n/a | ||
total | 33 | 33 | 100.0 |
line | stmt | bran | cond | sub | pod | time | code |
---|---|---|---|---|---|---|---|
1 | package WebService::Mattermost::Helper::Table; 2: 3: # ABSTRACT: Markdown table generator. 4: 5: use Moo; 6: use Types::Standard qw(ArrayRef Enum Str); 7: 8: ################################################################################ 9: 10: has alignment => (is => 'ro', isa => ArrayRef[Enum[ qw(l r c) ]], required => 0); 11: has values => (is => 'ro', isa => ArrayRef, required => 1); 12: has headers => (is => 'ro', isa => ArrayRef, required => 1); 13: 14: has _headers => (is => 'ro', isa => Str, lazy => 1, builder => '_build__headers'); 15: has table => (is => 'ro', isa => Str, lazy => 1, builder => '_build_table'); 16: 17: has divider => (is => 'ro', isa => Str, default => q{|}); 18: has align_l => (is => 'ro', isa => Str, default => ':----|'); 19: has align_r => (is => 'ro', isa => Str, default => '----:|'); 20: has align_c => (is => 'ro', isa => Str, default => ':---:|'); 21: 22: ################################################################################ 23: 24: sub _build__headers { 25: my $self = shift; 26: 27: my $headers = q{}; 28: 29: foreach my $h (@{$self->headers}) { 30: $headers .= sprintf '%s %s', $self->divider, $h; 31: } 32: 33: $headers .= $self->divider."\n".$self->divider; 34: 35: for (my $i = 0; $i < scalar @{$self->headers}; $i++) { 36: my $al = $self->alignment && $self->alignment->[$i] || 'l'; 37: my $attr = "align_${al}"; 38: 39: $headers .= $self->$attr; 40: } 41: 42: return $headers; 43: } 44: 45: sub _build_table { 46: my $self = shift; 47: 48: my $table = $self->_headers."\n"; 49: 50: foreach my $v (@{$self->values}) { 51: $table .= $self->divider; 52: $table .= join $self->divider, @{$v}; 53: $table .= $self->divider."\n"; 54: } 55: 56: return $table; 57: } 58: 59: ################################################################################ 60: 61: 1; 62: 63: __END__ 64: 65: =pod 66: 67: =encoding UTF-8 68: 69: =head1 NAME 70: 71: WebService::Mattermost::Helper::Table - Markdown table generator. 72: 73: =head1 VERSION 74: 75: version 0.28 76: 77: =head1 DESCRIPTION 78: 79: Format text as tables for Mattermost. 80: 81: =head2 USAGE 82: 83: use WebService::Mattermost::Helper::Table; 84: 85: my $helper = WebService::Mattermost::Helper::Table->new({ 86: alignment => [ qw(r l l) ], 87: headers => [ 'ID', 'Title', 'Date Created' ], 88: values => [ 89: [ 1, 'First row', '2018-09-16' ], 90: [ 2, 'Second row', '2018-09-17' ], 91: [ 3, 'Third row', '2018-09-17' ], 92: ], 93: }); 94: 95: print $helper->table; 96: 97: =head1 SEE ALSO 98: 99: =over 4 100: 101: =item L<Mattermost Markdown|https://docs.mattermost.com/help/messaging/formatting-text.html#tables> 102: 103: =back 104: 105: =head1 AUTHOR 106: 107: Mike Jones <mike@netsplit.org.uk> 108: 109: =head1 COPYRIGHT AND LICENSE 110: 111: This software is Copyright (c) 2020 by Mike Jones. 112: 113: This is free software, licensed under: 114: 115: The MIT (X11) License 116: 117: =cut 118: |