line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package Etcd::Node; |
2
|
|
|
|
|
|
|
$Etcd::Node::VERSION = '0.004'; |
3
|
5
|
|
|
5
|
|
15584
|
use namespace::autoclean; |
|
5
|
|
|
|
|
14216
|
|
|
5
|
|
|
|
|
27
|
|
4
|
|
|
|
|
|
|
|
5
|
5
|
|
|
5
|
|
840
|
use Moo; |
|
5
|
|
|
|
|
7545
|
|
|
5
|
|
|
|
|
26
|
|
6
|
5
|
|
|
5
|
|
2696
|
use Type::Tiny; |
|
5
|
|
|
|
|
15635
|
|
|
5
|
|
|
|
|
127
|
|
7
|
5
|
|
|
5
|
|
710
|
use Types::Standard qw(Int Str Bool ArrayRef); |
|
5
|
|
|
|
|
38453
|
|
|
5
|
|
|
|
|
38
|
|
8
|
5
|
|
|
5
|
|
4256
|
use Type::Utils qw(class_type); |
|
5
|
|
|
|
|
4054
|
|
|
5
|
|
|
|
|
42
|
|
9
|
|
|
|
|
|
|
|
10
|
|
|
|
|
|
|
# http://www.pelagodesign.com/blog/2009/05/20/iso-8601-date-validation-that-doesnt-suck/ |
11
|
|
|
|
|
|
|
my $ISO8601 = do { |
12
|
|
|
|
|
|
|
my $iso8601_re = qr{^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24\:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$}; |
13
|
|
|
|
|
|
|
Type::Tiny->new( |
14
|
|
|
|
|
|
|
name => "ISO8601", |
15
|
|
|
|
|
|
|
constraint => sub { m/$iso8601_re/ }, |
16
|
|
|
|
|
|
|
inlined => sub { "$_[1] =~ m/$iso8601_re/" }, |
17
|
|
|
|
|
|
|
); |
18
|
|
|
|
|
|
|
}; |
19
|
|
|
|
|
|
|
|
20
|
|
|
|
|
|
|
has key => ( is => 'ro', isa => Str, required => 1 ); |
21
|
|
|
|
|
|
|
has value => ( is => 'ro', isa => Str ); |
22
|
|
|
|
|
|
|
has created_index => ( is => 'ro', isa => Int, init_arg => 'createdIndex' ); |
23
|
|
|
|
|
|
|
has modified_index => ( is => 'ro', isa => Int, init_arg => 'modifiedIndex' ); |
24
|
|
|
|
|
|
|
has ttl => ( is => 'ro', isa => Int ); |
25
|
|
|
|
|
|
|
has expiration => ( is => 'ro', isa => $ISO8601 ); |
26
|
|
|
|
|
|
|
has dir => ( is => 'ro', isa => Bool, coerce => sub { !! $_[0] } ); |
27
|
|
|
|
|
|
|
|
28
|
|
|
|
|
|
|
has nodes => ( |
29
|
|
|
|
|
|
|
is => 'ro', |
30
|
|
|
|
|
|
|
isa => ArrayRef[class_type('Etcd::Node')], |
31
|
|
|
|
|
|
|
coerce => sub { ref $_[0] eq "ARRAY" ? [ map { Etcd::Node->new(%$_) } @{$_[0]} ] : $_[0] } |
32
|
|
|
|
|
|
|
); |
33
|
|
|
|
|
|
|
|
34
|
|
|
|
|
|
|
1; |
35
|
|
|
|
|
|
|
|
36
|
|
|
|
|
|
|
__END__ |