File Coverage

blib/lib/Mail/SNCF/ICal.pm
Criterion Covered Total %
statement 40 40 100.0
branch n/a
condition n/a
subroutine 8 8 100.0
pod 2 2 100.0
total 50 50 100.0


line stmt bran cond sub pod time code
1             package Mail::SNCF::ICal;
2              
3 2     2   23135 use warnings;
  2         4  
  2         76  
4 2     2   10 use strict;
  2         5  
  2         67  
5              
6 2     2   2041 use Date::ICal;
  2         45187  
  2         80  
7 2     2   1819 use Data::ICal;
  2         74715  
  2         26  
8 2     2   1883 use Data::ICal::Entry::Event;
  2         683  
  2         18  
9              
10 2     2   57 use base qw/Mail::SNCF/;
  2         4  
  2         915  
11              
12             =head1 NAME
13              
14             Mail::SNCF::Text - ICal output for SNCF
15              
16             =head1 VERSION
17              
18             Version 0.01
19              
20             =cut
21              
22             our $VERSION = '0.01';
23              
24              
25             =head1 SYNOPSIS
26              
27             This backend produces an output suitable for ICal based programs.
28              
29             use Mail::SNCF;
30              
31             my $foo = Mail::SNCF::Text->parse("Mail/sncf");
32             my $s = $foo->as_string;
33             $foo->print;
34              
35             =head1 FUNCTIONS
36              
37             =head2 as_string
38              
39             =cut
40              
41             sub as_string {
42 1     1 1 6191 my ($self) = @_;
43 1         13 return $$self->as_string;
44             }
45              
46             =head2 parse
47              
48             Parses the mailbox and returns and Ical object.
49              
50             =cut
51              
52             sub parse {
53 1     1 1 42084 my ($class, $folder_path) = @_;
54              
55 1         6 my $ical = Data::ICal->new();
56 1         349 my $self = \$ical;
57 1         4 bless($self, $class);
58              
59 1         8 my $raw = Mail::SNCF->parse($folder_path);
60             # I didn't manage to use SUPER here
61              
62 1         3 for my $trip (@{$raw}) {
  1         5  
63 20         572 my @date = @{$trip->{date}};
  20         89  
64 20         28 my @start = @{$trip->{start}};
  20         58  
65 20         27 my @end = @{$trip->{end}};
  20         65  
66              
67 20         100 my $start = Date::ICal->new(year => $date[2],
68             month => $date[1],
69             day => $date[0],
70             hour => $start[0],
71             min => $start[1],
72             );
73 20         2152 my $end = Date::ICal->new(year => $date[2],
74             month => $date[1],
75             day => $date[0],
76             hour => $end[0],
77             min => $end[1],
78             );
79 20         1879 my $duration = $end - $start;
80              
81 20         2053 my $event = Data::ICal::Entry::Event->new();
82 20         708 $event->add_properties(summary => $trip->{from} . " -> " . $trip->{to},
83             description => "",
84             dtstart => $start->ical,
85             dtend => $end->ical,
86             );
87 20         23739 $$self->add_entry($event);
88             }
89 1         85 return $self;
90             }
91              
92             =head1 AUTHOR
93              
94             Olivier Schwander, C<< >>
95              
96             =head1 BUGS
97              
98             Please report any bugs or feature requests to C, or through
99             the web interface at
100             L. I will be notified, and then you'll
101             automatically be notified of progress on your bug as I make changes.
102              
103             =head1 SUPPORT
104              
105             You can find documentation for this module with the perldoc command.
106              
107             perldoc Mail::SNCF::Ical
108              
109             You can also look for information at:
110              
111             =over 4
112              
113             =item * RT: CPAN's request tracker
114              
115             L
116              
117             =item * AnnoCPAN: Annotated CPAN documentation
118              
119             L
120              
121             =item * CPAN Ratings
122              
123             L
124              
125             =item * Search CPAN
126              
127             L
128              
129             =back
130              
131              
132             =head1 ACKNOWLEDGEMENTS
133              
134              
135             =head1 COPYRIGHT & LICENSE
136              
137             Copyright 2009 Olivier Schwander, all rights reserved.
138              
139             This program is free software; you can redistribute it and/or modify it
140             under the same terms as Perl itself.
141              
142              
143             =cut
144              
145             1; # End of Mail::SNCF::ICal