Sorry to reply to myself, but the problem is even more interesting,
DateTime::Set doesn't have a constructor named new.  Perhaps the right
thing to do is call DateTime::Span->new(), but I leave that to less
tired people to work out.

          -ben

On Thu, May 29, 2003 at 10:41:12PM -0400, Ben Bennett wrote:
> 
> 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} );
>  }

Reply via email to