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 22     22   174896 use v5.12;
  22         71  
6 22     22   105 use strict;
  22         37  
  22         504  
7 22     22   82 use warnings;
  22         31  
  22         1459  
8             our $VERSION = '2.03';
9              
10 22     22   101 use parent 'Exporter::Tiny';
  22         44  
  22         133  
11              
12             my @TYPE_CATEGORY_NAMES;
13             my %TYPES;
14             BEGIN {
15 22     22   6424 @TYPE_CATEGORY_NAMES = qw(
16             ANY
17             INTEGER
18             FLOAT
19             NUMBER
20             STRING
21             NOT_STRING
22             BOOLEAN
23             );
24              
25 22         620 %TYPES = (
26             T_INTEGER => 'I',
27             T_NUMBER => 'N',
28             T_STRING => 'S',
29             T_BOOLEAN => 'B',
30             );
31             }
32              
33 22     22   9146 use enum @TYPE_CATEGORY_NAMES;
  22         25016  
  22         205  
34 22     22   12698 use constant \%TYPES;
  22         82  
  22         2441  
35              
36             ## no critic(BuiltinFunctions::ProhibitComplexMappings)
37             our @TYPE_CATEGORIES = map {
38             ; # add a ; to help 5.10
39 22     22   142 no strict 'refs'; ## no critic(ProhibitNoStrict)
  22         32  
  22         7386  
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 98     98 0 147 my ( $type, $type_enum ) = @_;
63 98         521 $type =~ $TypeRE[$type_enum];
64             }
65              
66             sub index_types {
67 61     61 0 139 my ( $types ) = @_;
68              
69 61         175 my @fields = keys %$types;
70 61         154 my @type_index;
71              
72 61         195 for my $category ( @TYPE_CATEGORIES ) {
73 427         634 my $re = $TypeRE[$category];
74 427         595 $type_index[$category] = [ grep { $types->{$_} =~ $re } @fields ];
  1022         3021  
75             }
76              
77 61         394 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__