File Coverage

blib/lib/Data/Record/Serialize/Util.pm
Criterion Covered Total %
statement 32 32 100.0
branch n/a
condition n/a
subroutine 10 10 100.0
pod 0 2 0.0
total 42 44 95.4


line stmt bran cond sub pod time code
1             package Data::Record::Serialize::Util;
2              
3             # ABSTRACT: Useful things
4              
5 21     21   263240 use v5.12;
  21         107  
6 21     21   164 use strict;
  21         72  
  21         708  
7 21     21   153 use warnings;
  21         86  
  21         1882  
8             our $VERSION = '2.02';
9              
10 21     21   147 use parent 'Exporter::Tiny';
  21         41  
  21         168  
11              
12             my @TYPE_CATEGORY_NAMES;
13             my %TYPES;
14             BEGIN {
15 21     21   8146 @TYPE_CATEGORY_NAMES = qw(
16             ANY
17             INTEGER
18             FLOAT
19             NUMBER
20             STRING
21             NOT_STRING
22             BOOLEAN
23             );
24              
25 21         796 %TYPES = (
26             T_INTEGER => 'I',
27             T_NUMBER => 'N',
28             T_STRING => 'S',
29             T_BOOLEAN => 'B',
30             );
31             }
32              
33 21     21   12008 use enum @TYPE_CATEGORY_NAMES;
  21         35462  
  21         256  
34 21     21   17718 use constant \%TYPES;
  21         77  
  21         2924  
35              
36             ## no critic(BuiltinFunctions::ProhibitComplexMappings)
37             our @TYPE_CATEGORIES = map {
38             ; # add a ; to help 5.10
39 21     21   172 no strict 'refs'; ## no critic(ProhibitNoStrict)
  21         44  
  21         10520  
40             $_->();
41             } @TYPE_CATEGORY_NAMES;
42              
43             our %EXPORT_TAGS = (
44             types => [ keys %TYPES ],
45             categories => \@TYPE_CATEGORY_NAMES,
46             subs => [qw( is_type index_types )],
47             );
48              
49             our @EXPORT_OK = map { @{$_} } values %EXPORT_TAGS;
50              
51             my @TypeRE;
52             $TypeRE[ $_->[0] ] = $_->[1]
53             for [ +( ANY ) => qr/.*/ ],
54             [ +( STRING ) => qr/^S/i ],
55             [ +( FLOAT ) => qr/^N/i ],
56             [ +( INTEGER ) => qr/^I/i ],
57             [ +( BOOLEAN ) => qr/^B/i ],
58             [ +( NUMBER ) => qr/^[NI]/i ],
59             [ +( NOT_STRING ) => qr/^[^S]+/ ];
60              
61             sub is_type {
62 96     96 0 183 my ( $type, $type_enum ) = @_;
63 96         678 $type =~ $TypeRE[$type_enum];
64             }
65              
66             sub index_types {
67 60     60 0 1740 my ( $types ) = @_;
68              
69 60         232 my @fields = keys %$types;
70 60         163 my @type_index;
71              
72 60         325 for my $category ( @TYPE_CATEGORIES ) {
73 420         835 my $re = $TypeRE[$category];
74 420         816 $type_index[$category] = [ grep { $types->{$_} =~ $re } @fields ];
  1001         5671  
75             }
76              
77 60         529 return \@type_index;
78             }
79              
80             1;
81              
82             #
83             # This file is part of Data-Record-Serialize
84             #
85             # This software is Copyright (c) 2017 by Smithsonian Astrophysical Observatory.
86             #
87             # This is free software, licensed under:
88             #
89             # The GNU General Public License, Version 3, June 2007
90             #
91              
92             __END__