File Coverage

blib/lib/Filename/Type/Media.pm
Criterion Covered Total %
statement 11 13 84.6
branch 0 2 0.0
condition n/a
subroutine 4 5 80.0
pod 1 1 100.0
total 16 21 76.1


line stmt bran cond sub pod time code
1             package Filename::Type::Media;
2              
3 1     1   527528 use 5.010001;
  1         5  
4 1     1   6 use strict;
  1         2  
  1         32  
5 1     1   7 use warnings;
  1         1  
  1         89  
6              
7 1     1   7 use Exporter qw(import);
  1         2  
  1         396  
8              
9             our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
10             our $DATE = '2024-12-21'; # DATE
11             our $DIST = 'Filename-Type-Media'; # DIST
12             our $VERSION = '0.004'; # VERSION
13              
14             our @EXPORT_OK = qw(check_media_filename);
15              
16             our $STR_RE = "movie|mpega|aifc|aiff|djvu|flac|jpeg|jpg2|midi|mpeg|mpga|opus|svgz|tiff|wbmp|webm|3gp|aif|amr|art|asf|asx|avi|awb|axa|axv|bmp|cdr|cdt|cpt|cr2|crw|csd|dif|djv|erf|fli|flv|gif|gsm|ico|ief|jng|jp2|jpe|jpf|jpg|jpm|jpx|kar|lsf|lsx|m3u|m4a|mid|mkv|mng|mov|mp2|mp3|mp4|mpe|mpg|mpv|mxu|nef|oga|ogg|ogv|orc|orf|pat|pbm|pcx|pgm|pls|png|pnm|ppm|psd|ram|ras|rgb|sco|sd2|sid|snd|spx|svg|tif|wav|wax|wma|wmv|wmx|wvx|xbm|xpm|xwd|au|dl|dv|gl|qt|ra|rm|ts|wm"; # STR_RE
17             our $RE = qr(\.(?:$STR_RE)\z)i;
18              
19             our %SPEC;
20              
21             $SPEC{check_media_filename} = {
22             v => 1.1,
23             summary => 'Check whether filename indicates being a media (audio/video/image) file',
24             description => <<'MARKDOWN',
25              
26              
27             MARKDOWN
28             args => {
29             filename => {
30             schema => 'filename*',
31             req => 1,
32             pos => 0,
33             },
34             # XXX recurse?
35             #ci => {
36             # summary => 'Whether to match case-insensitively',
37             # schema => 'bool',
38             # default => 1,
39             #},
40             },
41             result_naked => 1,
42             result => {
43             schema => ['any*', of=>['bool*', 'hash*']],
44             description => <<'MARKDOWN',
45              
46             Return false if no archive suffixes detected. Otherwise return a hash of
47             information.
48              
49             MARKDOWN
50             },
51             examples => [
52             {
53             args => {filename => 'foo.txt'},
54             naked_result => 0,
55             },
56             {
57             args => {filename => 'foo.DOC'},
58             naked_result => 0,
59             },
60             {
61             args => {filename => 'foo.webm'},
62             naked_result => {},
63             },
64             {
65             args => {filename => 'foo.MP3'},
66             naked_result => {},
67             },
68             {
69             args => {filename => 'foo.Jpeg'},
70             naked_result => {},
71             },
72             ],
73             };
74             sub check_media_filename {
75 0     0 1   my %args = @_;
76              
77 0 0         $args{filename} =~ $RE ? {} : 0;
78             }
79              
80             1;
81             # ABSTRACT: Check whether filename indicates being a media (audio/video/image) file
82              
83             __END__