File Coverage

blib/lib/Mojo/InfluxDB/Point.pm
Criterion Covered Total %
statement 9 17 52.9
branch n/a
condition 0 2 0.0
subroutine 3 4 75.0
pod 1 1 100.0
total 13 24 54.1


line stmt bran cond sub pod time code
1             package Mojo::InfluxDB::Point;
2             # ABSTRACT: Data point dynamic container
3             $Mojo::InfluxDB::Point::VERSION = '0.1';
4 1     1   10 use Mojo::Base -base, -signatures;
  1         2  
  1         6  
5 1     1   1171 use DateTime;
  1         490483  
  1         64  
6 1     1   828 use DateTime::Format::Strptime;
  1         56992  
  1         5  
7              
8             has [qw/ time_zone fields /];
9             has time => sub { die "A point without time is pointless!" };
10             has at => sub($self) {
11             state $strp = DateTime::Format::Strptime->new( pattern => '%FT%T%Z' );
12              
13             my $dt = $strp->parse_datetime( $self->time );
14             $dt->set_time_zone( $self->time_zone ) if $self->time_zone;
15             $dt;
16             };
17              
18 0     0 1   sub inflate($class, $src) {
  0            
  0            
  0            
19 0   0       my $time = delete $src->{time} || die "A point without time is pointless!";
20 0           my @fields = keys %$src;
21 0           has($_) for @fields;
22 0           $class->new( time => $time, fields => \@fields, %$src );
23             }
24              
25             1;
26              
27             __END__
28              
29             =pod
30              
31             =encoding UTF-8
32              
33             =head1 NAME
34              
35             Mojo::InfluxDB::Point - Data point dynamic container
36              
37             =head1 VERSION
38              
39             version 0.1
40              
41             =head1 SYNOPSIS
42              
43             You won't usually deal with this objects, but get it from L<InfluxDB::Row> or L<InfluxDB::Result> points() methods.
44              
45             Anyway, given the dynamical nature of this object, if you need to manually contruct one, you need to use the inflate() method:
46              
47             use Mojo::InfluxDB::Point;
48              
49             my $point = Mojo::InfluxDB::Point->inflate({
50             time => '2020-09-19T07:00:00Z', # required!
51             tags => [qw/ one two seven /],
52             status => "SECONDARY"
53             });
54              
55             =head1 DESCRIPTION
56              
57             This class is a dynamic container of data points coming from L<InfluxDB::Row>. It only requires to have a time and will dinamically create object attributes for the rest of the retrieved columns.
58              
59             =head1 ATTRIBUTES
60              
61             =head2 time
62              
63             this is the string as it comes from InfluxDB and is the only required one.
64              
65             =head2 time_zone
66              
67             an optional time zone. See at().
68              
69             =head2 at
70              
71             A L<DateTime> object representing the time() on the optionally given time_zone().
72              
73             =head2 fields
74              
75             Fields will be filled by inflate() at build time and will contain an array of dynamically added attributes.
76              
77             =head1 METHODS
78              
79             =head2 inflate
80              
81             this is the constructor for this class. Internally it will call new(). This class method handles the "magic" of dinamically detecting fields and adding an attribute for those.
82              
83             =head1 Methods
84              
85             =head1 AUTHOR
86              
87             Gonzalo Radio <gonzalo@gnzl.net>
88              
89             =head1 COPYRIGHT AND LICENSE
90              
91             This software is copyright (c) 2020 by Gonzalo Radio.
92              
93             This is free software; you can redistribute it and/or modify it under
94             the same terms as the Perl 5 programming language system itself.
95              
96             =cut