Actually there are two bugs (yes my sandbox is current).
The first is fixed by the patch below (it creates an unused $tmp
DateTime::Span object without the required args).
The second is more tricky... DT::Span tries to create a DT::Set
object, but doesn't use DT::Set. This is nasty to fix since DT::Set
uses DT::Span, so you don't want to make a circular dependency. I am
not sure how best to fix this.
A script to catch this is:
---
use DateTime;
use DateTime::Span;
my $low_date = DateTime->new(year => 2002, month => 3, day => 1);
my $high_date = DateTime->new(year => 2002, month => 2, day => 11);
my $test_date = DateTime->new(year => 2002, month => 2, day => 23);
# Make sure the high is higher than the low
($low_date, $high_date) = ($high_date, $low_date)
if $low_date > $high_date;
# Make the span (note that we don't need to flip the dates)
my $span = DateTime::Span->from_datetimes(start => $low_date,
end => $high_date);
if ($span->contains($test_date)) {
print '$test_date is between the given dates';
}
---
-ben
Index: lib/DateTime/Span.pm
===================================================================
RCS file: /cvsroot/perl-date-time/modules/DateTime-Set/lib/DateTime/Span.pm,v
retrieving revision 1.20
diff -u -r1.20 Span.pm
--- lib/DateTime/Span.pm 8 May 2003 00:35:32 -0000 1.20
+++ lib/DateTime/Span.pm 30 May 2003 02:36:20 -0000
@@ -159,7 +159,7 @@
sub intersects {
my ($set1, $set2) = @_;
my $class = ref($set1);
- my $tmp = $class->new();
+ my $tmp = {}; # $class->new();
$set2 = DateTime::Set->new( dates => [ $set2 ] ) unless $set2->can( 'union' );
return $set1->{set}->intersects( $set2->{set} );
}
@@ -167,7 +167,7 @@
sub contains {
my ($set1, $set2) = @_;
my $class = ref($set1);
- my $tmp = $class->new();
+ my $tmp = {}; # $class->new();
$set2 = DateTime::Set->new( dates => [ $set2 ] ) unless $set2->can( 'union' );
return $set1->{set}->contains( $set2->{set} );
}