Changeset 1206

Show
Ignore:
Timestamp:
08/03/06 12:19:26
Author:
miyagawa
Message:
  • Now plugin dependencies are written in deps/Module-Name.yaml for DRY. Fixes #349
  • Updated Makefile.PL to read dependencies from deps/*.yaml
  • Added $t::TestPlagger?::BaseDir? and test_plugin_deps()
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/plagger/Makefile.PL

    r1197 r1206  
    3434requires('Term::Encoding'); 
    3535 
     36build_requires('YAML'); 
    3637build_requires('Test::More', 0.42); 
    3738build_requires('Test::Base', 0.52); 
     
    6263); 
    6364 
    64 features( 
    65     'Subscription::Bloglines' => [ 
    66         -default => 1, 
    67         recommends('WebService::Bloglines', 0.11), 
    68     ], 
    69     'Subscription::OPML' => [ 
    70         -default => 1, 
    71         recommends('XML::OPML'), 
    72     ], 
    73     'Publish::Gmail' => [ 
    74         -default => 1, 
    75         recommends('Mail::Address'), 
    76         recommends('MIME::Lite'), 
    77         recommends('Net::SMTP::TLS'), 
    78     ], 
    79     'Aggregator::Xango' => [ 
    80         -default => 0, 
    81         recommends('POE'), 
    82         recommends('Xango', 1.04), # protect ourselves from my stupidity 
    83         recommends('Cache::FastMmap'), 
    84         recommends('POE::Component::Client::DNS'), 
    85         recommends('POE::Component::Client::HTTP'), 
    86     ], 
    87     'CustomFeed::Mixi' => [ 
    88         -default => 0, 
    89         recommends('WWW::Mixi', 0.46), 
    90     ], 
    91     'Publish::PDF' => [ 
    92         -default => 0, 
    93         recommends('PDF::FromHTML'), 
    94     ], 
    95     'Publish::Delicious' => [ 
    96         -default => 0, 
    97         recommends('Net::Delicious'), 
    98     ], 
    99     'Notify::IRC' => [ 
    100         -default => 0, 
    101         recommends('POE::Component::IRC'), 
    102         recommends('POE::Component::IKC::Client'), 
    103     ], 
    104     'Publish::JavaScript' => [ 
    105         -default => 0, 
    106         recommends('Template::Plugin::JavaScript'), 
    107     ], 
    108     'Subscription::HatenaRSS' => [ 
    109         -default => 0, 
    110         recommends('WWW::Mechanize'), 
    111     ], 
    112     'Filter::HatenaBookmarkUsersCount' => [ 
    113         -default => 0, 
    114         recommends('XMLRPC::Lite'), 
    115     ], 
    116     'Filter::HatenaDiaryKeywordLink' => [ 
    117         -default => 0, 
    118         recommends('XMLRPC::Lite'), 
    119     ], 
    120     'Filter::ResolveRelativeLink' => [ 
    121         -default => 0, 
    122         recommends('HTML::ResolveLink', 0.02), 
    123     ], 
    124     'Publish::Planet' => [ 
    125         -default => 1, 
    126         recommends('HTML::Scrubber'), 
    127         recommends('File::Copy::Recursive'), 
    128     ], 
    129     'Publish::CSV' => [ 
    130         -default => 0, 
    131         recommends('Text::CSV_PP'), 
    132     ], 
    133     'Filter::HatenaFormat' => [ 
    134         -default => 0, 
    135         recommends('Text::Hatena'), 
    136     ], 
    137     'Publish::MT' => [ 
    138         -default => 0, 
    139         recommends('Net::MovableType'), 
    140     ], 
    141     'CustomFeed::FlickrSearch' => [ 
    142         -default => 0, 
    143         recommends('Flickr::API'), 
    144         recommends('DateTime::Format::Epoch'), 
    145     ], 
    146     'Filter::ImageInfo' => [ 
    147         -default => 0, 
    148         recommends('Image::Info'), 
    149     ], 
    150     'Filter::Pipe' => [ 
    151         -default => 0, 
    152         recommends('IPC::Run'), 
    153     ], 
    154     'Filter::RSSLiberalDateTime' => [ 
    155         -default => 0, 
    156         recommends('Date::Parse'), 
    157     ], 
    158     'Filter::Emoticon' => [ 
    159         -default => 0, 
    160         recommends('Text::Emoticon'), 
    161     ], 
    162     'Publish::Maildir' => [ 
    163         -default => 0, 
    164         recommends('MIME::Lite'), 
    165     ], 
    166     'Publish::IMAP' => [ 
    167         -default => 0, 
    168         recommends('Mail::IMAPClient'), 
    169     ], 
    170     'Filter::Profanity' => [ 
    171         -default => 0, 
    172         recommends('Regexp::Common::profanity_us'), 
    173     ], 
    174     'Subscription::DBI' => [ 
    175         -default => 0, 
    176         recommends('DBIx::Class::Schema'), 
    177     ], 
    178     'CustomFeed::SVNLog' => [ 
    179         -default => 0, 
    180         recommends('SVN::Core'), 
    181         recommends('SVN::Client'), 
    182     ], 
    183     'Filter::TTP' => [ 
    184         -default => 0, 
    185         recommends('URI::Find'), 
    186     ], 
    187     'Filter::Romanize' => [ 
    188         -default => 0, 
    189         recommends('Text::Kakasi'), 
    190     ], 
    191     'Subscription::LivedoorReader' => [ 
    192         -default => 0, 
    193         recommends('JSON::Syck', 0.10), 
    194         recommends('WWW::Mechanize'), 
    195     ], 
    196     'Search::Estraier' => [ 
    197         -default => 0, 
    198         recommends('Search::Estraier'), 
    199     ], 
    200     'Publish::2chdat' => [ 
    201         -default => 0, 
    202         recommends('DateTime::Locale'), 
    203     ], 
    204     'Subscription::PlanetINI' => [ 
    205         -default => 0, 
    206         recommends('Config::INI::Simple'), 
    207     ], 
    208     'Notify::UpdatePing' => [ 
    209         -default => 0, 
    210         recommends('XMLRPC::Lite'), 
    211     ], 
    212     'Publish::PalmDoc' => [ 
    213         -default => 0, 
    214         recommends('Palm::PalmDoc'), 
    215     ], 
    216     'Subscription::FOAF' => [ 
    217         -default => 0, 
    218         recommends('XML::FOAF'), 
    219     ], 
    220     'Notify::Beep' => [ 
    221         -default => 0, 
    222         recommends('Audio::Beep'), 
    223     ], 
    224     'Bundle::Planet' => [ 
    225         -default => 1, 
    226         recommends('Time::Duration::Parse'), 
    227     ], 
    228     'Publish::SWF' => [ 
    229         -default => 0, 
    230         recommends('SWF::Builder'), 
    231         recommends('Text::WrapI18N'), 
    232     ], 
    233     'Search::KinoSearch' => [ 
    234         -default => 0, 
    235         recommends('KinoSearch'), 
    236     ], 
    237     'Filter::Babelfish' => [ 
    238         -default => 0, 
    239         recommends('WWW::Babelfish'), 
    240     ], 
    241     'Notify::NetSend' => [ 
    242         -default => 0, 
    243         recommends('Net::NetSend'), 
    244     ], 
    245     'Publish::Excel' => [ 
    246         -default => 0, 
    247         recommends('Spreadsheet::WriteExcel'), 
    248     ], 
    249 ); 
     65require YAML; 
     66require DirHandle; 
     67require File::Spec; 
    25068 
    251 if ($^O eq 'darwin') { 
    252     features( 
    253         'Cookie sharing with Safari' => [ 
    254             -default => 0, 
    255             recommends('HTTP::Cookies::Safari'), 
    256         ], 
    257         'Search::Spotlight' => [ 
    258             -default => 1, 
    259             recommends('Mac::Glue'), 
    260         ], 
    261         'Publish::Speech' => [ 
    262             -default => 0, 
    263             recommends('Mac::Carbon'), 
    264         ], 
    265         'Notify::Growl' => [ 
    266             -default => 0, 
    267             recommends('Mac::Growl'), 
    268         ], 
    269         'Subscription::Bookmarks' => [ 
    270             -default => 0, 
    271             recommends('Mac::Tie::PList'), 
    272         ], 
    273     ); 
     69my $dh = DirHandle->new("deps"); 
     70while (my $f = $dh->read) { 
     71    next unless $f =~ /\.yaml$/; 
     72    my $meta = YAML::LoadFile( File::Spec->catfile("deps", $f) ); 
    27473 
    275     install_script('bin/spotlight_comment.scpt'); 
    276  
    277 } elsif ($^O eq 'MSWin32') { 
    278     features( 
    279         'Cookie sharing with MSIE' => [ 
    280             -default => 0, 
    281             recommends('HTTP::Cookies::Microsoft'), 
    282         ], 
    283         'Publish::Speech' => [ 
    284             -default => 0, 
    285             recommends('Win32::OLE'), 
    286             recommends('Win32::SAPI4'), 
    287             recommends('Locale::Country'), 
    288             recommends('Locale::Language'), 
    289         ], 
    290         'Notify::Eject' => [ 
    291             -default => 0, 
    292             recommends('Win32::MCI::Basic'), 
    293         ], 
    294         'Subscription::Bookmarks' => [ 
    295             -default => 0, 
    296             recommends('Win32::IEFavorites', 0.03), 
    297             recommends('Win32::Locale'), 
    298         ], 
    299         'Notify::Balloon' => [ 
    300             -default => 0, 
    301             recommends('Win32::Console'), 
    302         ], 
    303         'Publish::PowerPoint' => [ 
    304             -default => 0, 
    305             recommends('Win32::PowerPoint'), 
    306         ], 
    307     ); 
     74    if (!$meta->{platform} || $meta->{platform} eq $^O) { 
     75        features( 
     76            $meta->{name}, [ 
     77                -default => $meta->{default}, 
     78                map recommends($_ => $meta->{depends}->{$_}), keys %{$meta->{depends}}, 
     79            ], 
     80        ); 
     81    } 
    30882} 
    30983 
  • trunk/plagger/t/TestPlagger.pm

    r1204 r1206  
    11package t::TestPlagger; 
     2use FindBin; 
     3use File::Basename; 
     4use File::Spec; 
    25use Test::Base -Base; 
    36use Plagger; 
    47 
    5 our @EXPORT = qw(test_requires test_requires_network test_requires_command 
     8our @EXPORT = qw(test_requires test_requires_network test_requires_command test_plugin_deps 
    69                 run_eval_expected slurp_file file_contains file_doesnt_contain); 
     10 
     11our $BaseDir; 
     12{ 
     13    my @path = File::Spec->splitdir($FindBin::Bin); 
     14    while (my $dir = pop @path) { 
     15        if ($dir eq 't') { 
     16            $BaseDir = File::Spec->catfile(@path); 
     17            last; 
     18        } 
     19    } 
     20} 
    721 
    822sub test_requires() { 
     
    4256    } 
    4357    plan skip_all => "Test requires '$command' command but it's not found"; 
     58} 
     59 
     60sub test_plugin_deps() { 
     61    my $mod = shift || File::Basename::basename($FindBin::Bin); 
     62    $mod =~ s!::!-!g; 
     63 
     64    my $file = File::Spec->catfile( $BaseDir, "deps", "$mod.yaml" ); 
     65    unless (-e $file) { 
     66        warn "Can't find deps file for $mod"; 
     67        return; 
     68    } 
     69 
     70    my $meta = YAML::LoadFile($file); 
     71    while (my($mod, $ver) = each %{$meta->{depends}}) { 
     72        test_requires($mod, $ver); 
     73    } 
    4474} 
    4575 
  • trunk/plagger/t/plugins/Bundle-Planet/bundle.t

    r1173 r1206  
    55 
    66test_requires_network; 
    7 test_requires('Time::Duration::Parse')
     7test_plugin_deps
    88 
    99plan 'no_plan'; 
  • trunk/plagger/t/plugins/Bundle-Planet/duration.t

    r1173 r1206  
    44use t::TestPlagger; 
    55 
    6 test_requires('Time::Duration::Parse'); 
    7  
     6test_plugin_deps; 
    87plan 'no_plan'; 
    98 
  • trunk/plagger/t/plugins/Bundle-Planet/scrubber.t

    r1173 r1206  
    44use t::TestPlagger; 
    55 
    6 test_requires('Time::Duration::Parse'); 
    7  
     6test_plugin_deps; 
    87plan 'no_plan'; 
    98 
  • trunk/plagger/t/plugins/Filter-Babelfish/babelfish.t

    r1189 r1206  
    44use utf8; 
    55 
    6 test_requires('WWW::Babelfish')
     6test_plugin_deps
    77test_requires_network; 
    88 
  • trunk/plagger/t/plugins/Filter-FetchEnclosure/fetch.t

    r1173 r1206  
    33use File::Path qw(rmtree); 
    44 
    5 use t::TestPlagger; 
    6  
    75BEGIN { 
     6    use t::TestPlagger; 
     7    test_plugin_deps('Publish-Gmail'); 
    88    test_requires('MIME::Parser'); 
    9     test_requires('MIME::Lite'); 
    109    test_requires_network; 
    1110} 
  • trunk/plagger/t/plugins/Notify-UpdatePing/ping.t

    r1173 r1206  
    44use t::TestPlagger; 
    55 
    6 test_requires('XMLRPC::Lite')
     6test_plugin_deps
    77test_requires_network; 
    88 
  • trunk/plagger/t/plugins/Publish-Feed/atom1.t

    r1173 r1206  
    55use XML::Feed; 
    66 
    7 test_requires('XML::Feed', 0.09); 
    8 test_requires('XML::Atom', 0.20); 
     7test_plugin_deps; 
    98 
    109our $output = "$FindBin::Bin/atom.xml"; 
  • trunk/plagger/t/plugins/Publish-Feed/fullcontent.t

    r1173 r1206  
    55use XML::Feed; 
    66 
    7 test_requires('XML::Feed', 0.09)
     7test_plugin_deps
    88 
    99our $output = "$FindBin::Bin/rss.xml"; 
  • trunk/plagger/t/plugins/Publish-Feed/rss2-content.t

    r1173 r1206  
    55use XML::Feed; 
    66 
    7 test_requires('XML::Feed', 0.09)
     7test_plugin_deps
    88 
    99our $output = "$FindBin::Bin/rss.xml"; 
  • trunk/plagger/t/plugins/Search-Estraier/search.t

    r1186 r1206  
    99use t::TestPlagger; 
    1010 
    11 test_requires('Search::Estraier')
     11test_plugin_deps
    1212test_requires('Tie::File'); 
    1313test_requires_command('estmaster'); 
  • trunk/plagger/t/plugins/Search-KinoSearch/search.t

    r1183 r1206  
    55use t::TestPlagger; 
    66 
    7 test_requires('KinoSearch')
     7test_plugin_deps
    88 
    99our $dir = File::Spec->catfile($FindBin::Bin, 'invindex'); 
  • trunk/plagger/t/plugins/Subscription-FOAF/subscription.t

    r1173 r1206  
    33use t::TestPlagger; 
    44 
    5 test_requires('XML::FOAF')
     5test_plugin_deps
    66plan tests => 1; 
    77run_eval_expected; 
  • trunk/plagger/t/plugins/Subscription-PlanetINI/subscription.t

    r1173 r1206  
    22use t::TestPlagger; 
    33 
    4 test_requires('Config::INI::Simple')
     4test_plugin_deps
    55 
    66plan tests => 1;