Show
Ignore:
Timestamp:
08/29/08 18:53:48 (4 months ago)
Author:
ogawa
Message:

make use of Factory pattern for CalendarDriver?.

Location:
cybozu2ical/trunk/lib/WWW/CybozuOffice6
Files:
1 added
3 modified

Legend:

Unmodified
Added
Removed
  • cybozu2ical/trunk/lib/WWW/CybozuOffice6/Calendar.pm

    r510 r512  
    1919    my $cal     = bless \%param, $class; 
    2020    $cal->{url} ||= delete $cal->{cybozu_url}; 
    21     $cal->driver_init; 
    22     $cal; 
    23 } 
    24  
    25 sub driver_init { 
    26     my $cal = shift; 
    27     my $driver = $cal->{calendar_driver} || 'ApiCalendar'; 
    28     $driver = 'WWW::CybozuOffice6::CalendarDriver::' . $driver 
    29       if $driver !~ m/^WWW::CybozuOffice6::CalendarDriver::/; 
    30     eval "use $driver;"; 
    31     $cal->{calendar_driver} = $driver; 
     21    $cal->{calendar_driver} = 
     22      WWW::CybozuOffice6::CalendarDriverFactory->get_driver( 
     23        $cal->{calendar_driver} ) 
     24      unless ref $cal->{calendar_driver}; 
    3225    $cal; 
    3326} 
     
    6659} 
    6760 
     61package WWW::CybozuOffice6::CalendarDriverFactory; 
     62 
     63sub get_driver { 
     64    my $class = shift; 
     65    my ($driver_name) = @_; 
     66    $driver_name ||= 'ApiCalendar'; 
     67    $driver_name = 'WWW::CybozuOffice6::CalendarDriver::' . $driver_name 
     68      if $driver_name !~ m/^WWW::CybozuOffice6::CalendarDriver::/; 
     69    eval "use $driver_name;"; 
     70    $driver_name->new; 
     71} 
     72 
    68731; 
    6974__END__ 
  • cybozu2ical/trunk/lib/WWW/CybozuOffice6/CalendarDriver/ApiCalendar.pm

    r507 r512  
    55use warnings; 
    66 
     7use base qw( WWW::CybozuOffice6::CalendarDriver ); 
    78use Carp; 
    89use Encode qw( from_to ); 
     
    1314 
    1415sub request { 
    15     my $class      = shift; 
     16    my $driver     = shift; 
    1617    my ($cal)      = @_; 
    1718    my $date_range = $cal->{date_range} || 30; 
     
    7677 
    7778sub get_items { 
    78     my $class = shift; 
     79    my $driver = shift; 
    7980    my ($cal) = @_; 
    8081 
    81     my $csv; 
    82     if ( eval('require Text::CSV_XS') ) { 
    83         $csv = Text::CSV_XS->new( { binary => 1 } ); 
    84     } 
    85     elsif ( eval('require Text::CSV') ) { 
    86         $csv = Text::CSV->new(); 
    87     } 
    88     confess 'Text::CSV_XS or Text::CSV package is required' unless $csv; 
    89  
    9082    my @items; 
     83    my $csv = $driver->{csv}; 
    9184    for my $line ( $cal->response ) { 
    9285        $csv->parse($line) 
     
    10093        # [ 0] $Item.ID 
    10194        # [ 1] $TimeStamp 
    102         # [ 2] $s 
     95        # [ 2] $s (Shared) 
    10396        # [ 3] $Date 
    10497        # [ 4] $Item.TypeOmit 
  • cybozu2ical/trunk/lib/WWW/CybozuOffice6/CalendarDriver/SyncCalendar.pm

    r507 r512  
    55use warnings; 
    66 
     7use base qw( WWW::CybozuOffice6::CalendarDriver ); 
    78use Carp; 
    89use Encode qw( from_to ); 
    910use LWP::UserAgent; 
    10 use DateTime; 
    1111use WWW::CybozuOffice6::Calendar::Event; 
    1212use WWW::CybozuOffice6::Calendar::RecurrentEvent; 
    1313 
    1414sub request { 
    15     my $class      = shift; 
     15    my $driver     = shift; 
    1616    my ($cal)      = @_; 
    1717    my $date_range = $cal->{date_range} || 30; 
     
    3939 
    4040sub get_items { 
    41     my $class = shift; 
     41    my $driver = shift; 
    4242    my ($cal) = @_; 
    4343 
    44     my $csv; 
    45     if ( eval('require Text::CSV_XS') ) { 
    46         $csv = Text::CSV_XS->new( { binary => 1 } ); 
    47     } 
    48     elsif ( eval('require Text::CSV') ) { 
    49         $csv = Text::CSV->new; 
    50     } 
    51     confess 'Text::CSV_XS or Text::CSV package is required' unless $csv; 
    52  
    5344    my @items; 
     45    my $csv = $driver->{csv}; 
    5446    for my $line ( $cal->response ) { 
    5547        $csv->parse($line)