File Coverage

blib/lib/Gedcom/Date/Approximated.pm
Criterion Covered Total %
statement 31 38 81.5
branch 7 10 70.0
condition n/a
subroutine 8 11 72.7
pod 5 7 71.4
total 51 66 77.2


line stmt bran cond sub pod time code
1             package Gedcom::Date::Approximated;
2              
3 7     7   39 use strict;
  7         17  
  7         265  
4              
5 7     7   35 use vars qw($VERSION @ISA);
  7         13  
  7         473  
6              
7             our $VERSION = '0.06';
8             @ISA = qw/Gedcom::Date/;
9              
10 7     7   38 use Gedcom::Date;
  7         14  
  7         164  
11 7     7   38 use Params::Validate qw/validate OBJECT SCALAR/;
  7         12  
  7         4861  
12              
13             sub new {
14 11     11 0 18 my $class = shift;
15 11         361 my %p = validate( @_,
16             { date => {type => OBJECT,
17             isa => 'Gedcom::Date::Simple',
18             },
19             type => {type => SCALAR,
20             regex => qr/(?ix)(?: ab(?:ou)?t |
21             cal(?:culated)? |
22             est(?:imated)? )/,
23             default => 'ABT',
24             },
25             } );
26              
27 11         321 my $type = uc $p{type};
28 11 50       52 if ($type eq 'ABOUT') {
    100          
29 0         0 $type = 'ABT';
30             } elsif (length $type > 3) {
31 10         27 $type = substr $type, 0, 3;
32             }
33              
34 11         54 my $self = {
35             date => $p{date}->clone,
36             abt => $type,
37             };
38 11         159 return bless $self, $class;
39             }
40              
41             sub parse {
42 32     32 1 52 my $class = shift;
43 32         56 my ($str) = @_;
44              
45 32 100       346 my ($abt, $date) = $str =~ /^(ABT|CAL|EST) (.*)$/
46             or return;
47              
48 9 50       42 my $date_s = Gedcom::Date::Simple->parse($date)
49             or return;
50              
51 9         39 my $self = bless {
52             date => $date_s,
53             abt => $abt
54             }, $class;
55              
56 9         196 return $self;
57             }
58              
59             sub gedcom {
60 14     14 1 1603 my $self = shift;
61              
62 14 50       116 if (!defined $self->{gedcom}) {
63 14         68 $self->{gedcom} = $self->{abt} . ' ' . $self->{date}->gedcom();
64             }
65 14         82 $self->{gedcom};
66             }
67              
68             sub latest {
69 0     0 1 0 my ($self) = @_;
70              
71 0         0 return $self->{date}->latest;
72             }
73              
74             sub earliest {
75 0     0 1 0 my ($self) = @_;
76              
77 0         0 return $self->{date}->earliest;
78             }
79              
80             sub sort_date {
81 0     0 1 0 my ($self) = @_;
82              
83 0         0 return $self->{date}->sort_date;
84             }
85              
86             my %text = (
87             en => 'about %0',
88             nl => 'rond %0',
89             );
90              
91             sub text_format {
92 9     9 0 19 my ($self, $lang) = @_;
93              
94 9         36 return ($text{$lang}, $self->{date});
95             }
96              
97             1;
98              
99             __END__