ICal-Format-Natural
view release on metacpan or search on metacpan
lib/ICal/Format/Natural.pm view on Meta::CPAN
use strict;
use warnings;
package ICal::Format::Natural;
{
$ICal::Format::Natural::VERSION = '1.121310';
}
# ABSTRACT: Create an Data::ICal object with natural parsing logic.
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(ical_format_natural);
use Data::ICal;
use Data::ICal::Entry::Event;
use DateTime::Format::Natural;
use DateTime::Format::ICal;
sub ical_format_natural {
my $in = shift;
my ( $date, $summary ) = split '\.', $in;
$date ||= '';
$summary ||= '';
chomp $date;
chomp $summary;
# trim leading and trailing whitespace
$summary =~ s/^\s+|\s+$//g;
return 'error: no summary' unless $summary;
# parse date
my $parser = DateTime::Format::Natural->new;
my $dt = $parser->parse_datetime($date);
if ( $parser->success ) {
my $calendar = Data::ICal->new;
my $vevent = Data::ICal::Entry::Event->new;
$vevent->add_properties(
summary => $summary,
dtstart => DateTime::Format::ICal->format_datetime($dt),
dtend =>
DateTime::Format::ICal->format_datetime( $dt->add( hours => 1 ) ),
);
$calendar->add_entry($vevent);
$calendar->add_properties( method => 'PUBLISH' );
return $calendar;
}
return
sprintf( "error parsing date (%s). error was: %s", $date,
$parser->error );
}
1;
__END__
=pod
=head1 NAME
ICal::Format::Natural - Create an Data::ICal object with natural parsing logic.
=head1 VERSION
version 1.121310
=head1 SYNOPSIS
# only exported on demand
use ICal::Format::Natural qw(ical_format_natural);
my $ical = ical_format_natural('Tomorrow at noon. Lunch with Bob');
# creates an Data::ICal object with:
# dtstart tomorrow 12:00
# dtend tomorrow 13:00
# summary Lunch with Bob
=head1 DESCRIPTION
C<ICal::Format::Natural> will (one day) take a human readable string and create an L<Data::ICal> object.
NOTE: Currently this is pretty dumb and simply splits the sting on a fullstop, taking the first part as the date and the second part as the summary.
I would love to improve this one day, but as always it's about finding the time. Any contributions and/or ideas are most welcome.
=head1 METHODS
=head2 ical_format_natural( $string )
Parses the string and returns an L<Data::ICal> object.
=head1 CREDITS
Thanks to Mark Stosberg who wrote L<ICal::QuickAdd>. It contained a simple version of the parser and was the basis for this module.
=head1 AUTHOR
Andrew Jones <andrew@arjones.co.uk>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2012 by Andrew Jones.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
( run in 0.881 second using v1.01-cache-2.11-cpan-5b529ec07f3 )