> > There must be a way to express the same semantic
> > meaning with fewer lines of code
>
> A slightly smaller version - specify days and hours
> in the same constructor.

That is a bit clearer - although it's alot more code then I'd want to inline in a 
program.  It's something I would push off into a module.  So perhaps something like 
DT::W::Validator should just be a very simple base class.

So you would end up with something like:

--
#!/usr/bin/env perl

use strict;
use Myproject::TimeValidator;

my $dt = Myproject::TimeValidator->new( %hashofdtparams );

> ---
package Myproject::TimeValidator
>
> use strict;

use base qw( DateTime::Wrapper::Validator );

> use DateTime;
> use DateTime::Span;
> use DateTime::SpanSet;
> use DateTime::Event::Recurrence;
> use Carp;
>
> # Make a set representing mondays to fridays, with
> # the working hour restriction
> my $working_days =
>     DateTime::SpanSet->from_sets
>       (start_set => DateTime::Event::Recurrence->
>            weekly( days => [1..6],hours => [9,  1]),
>        end_set => DateTime::Event::Recurrence->
>            weekly( days => [1..6],hours => [12, 5]),
>       );
>
> # Make the date range
> my $date_range = DateTime::Span->from_datetimes
>     (start => DateTime->new(
>         year => 2003, month => 7, day => 1),
>      end   => DateTime->new(
>         year => 2003, month => 7, day => 18));
>
> # Build the spanset of legal times

# probably something a bit more complex here
# but the idea is to pass an iterator

Setup( $working_days->intersection($date_range)->iterator() );

1;

__END__


Reply via email to