Smoke all branches on travis except for blocked* and wip/*
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Optional / Dependencies.pm
CommitLineData
8057ed01 1package DBIx::Class::Optional::Dependencies;
2
3use warnings;
4use strict;
5
9c1700e3 6use Carp ();
fb39747c 7
8# NO EXTERNAL NON-5.8.1 CORE DEPENDENCIES EVER (e.g. C::A::G)
8057ed01 9# This module is to be loaded by Makefile.PM on a pristine system
10
f6b26571 11# POD is generated automatically by calling _gen_pod from the
12# Makefile.PL in $AUTHOR mode
13
2a2a7b23 14my $json_any = {
15 'JSON::Any' => '1.22',
16};
17
2b48ebff 18my $moose_basic = {
68de9438 19 'Moose' => '0.98',
20 'MooseX::Types' => '0.21',
21};
22
23my $replicated = {
24 %$moose_basic,
2b48ebff 25};
26
ebcd0e4f 27my $admin_basic = {
28 %$moose_basic,
2a2a7b23 29 %$json_any,
68de9438 30 'MooseX::Types::Path::Class' => '0.05',
31 'MooseX::Types::JSON' => '0.02',
68de9438 32 'namespace::autoclean' => '0.09',
33};
34
a0361822 35my $admin_script = {
36 %$moose_basic,
37 %$admin_basic,
38 'Getopt::Long::Descriptive' => '0.081',
39 'Text::CSV' => '1.16',
40};
41
68de9438 42my $datetime_basic = {
43 'DateTime' => '0.55',
44 'DateTime::Format::Strptime' => '1.2',
ebcd0e4f 45};
46
c7d50a7d 47my $id_shortener = {
26022fb5 48 'Math::BigInt' => '1.80',
c7d50a7d 49 'Math::Base36' => '0.07',
50};
51
be68095d 52my $rdbms_sqlite = {
53 'DBD::SQLite' => '0',
54};
55my $rdbms_pg = {
56 'DBD::Pg' => '0',
57};
58my $rdbms_mssql_odbc = {
59 'DBD::ODBC' => '0',
60};
61my $rdbms_mssql_sybase = {
62 'DBD::Sybase' => '0',
63};
56dca25f 64my $rdbms_mssql_ado = {
65 'DBD::ADO' => '0',
66};
726c8f65 67my $rdbms_msaccess_odbc = {
68 'DBD::ODBC' => '0',
69};
70my $rdbms_msaccess_ado = {
71 'DBD::ADO' => '0',
72};
be68095d 73my $rdbms_mysql = {
74 'DBD::mysql' => '0',
75};
76my $rdbms_oracle = {
77 'DBD::Oracle' => '0',
78 %$id_shortener,
79};
80my $rdbms_ase = {
81 'DBD::Sybase' => '0',
82};
83my $rdbms_db2 = {
84 'DBD::DB2' => '0',
85};
199fbc45 86my $rdbms_db2_400 = {
87 'DBD::ODBC' => '0',
88};
89my $rdbms_informix = {
90 'DBD::Informix' => '0',
91};
92my $rdbms_sqlanywhere = {
93 'DBD::SQLAnywhere' => '0',
94};
95my $rdbms_sqlanywhere_odbc = {
96 'DBD::ODBC' => '0',
97};
98my $rdbms_firebird = {
99 'DBD::Firebird' => '0',
100};
101my $rdbms_firebird_interbase = {
102 'DBD::InterBase' => '0',
103};
e02b39b4 104my $rdbms_firebird_odbc = {
105 'DBD::ODBC' => '0',
106};
be68095d 107
8057ed01 108my $reqs = {
ee6e8c79 109 dist_upload => {
110 req => {
111 'CPAN::Uploader' => '0.103001',
112 },
113 },
114
bc4b0c04 115 dist_podinherit => {
116 req => {
117 'Pod::Inherit' => '0.90',
3d4c5a84 118 'Pod::Tree' => '0',
bc4b0c04 119 }
8057ed01 120 },
121
122 replicated => {
68de9438 123 req => $replicated,
f6b26571 124 pod => {
125 title => 'Storage::Replicated',
126 desc => 'Modules required for L<DBIx::Class::Storage::DBI::Replicated>',
127 },
8057ed01 128 },
129
68de9438 130 test_replicated => {
131 req => {
132 %$replicated,
133 'Test::Moose' => '0',
134 },
135 },
136
137
8057ed01 138 admin => {
2b48ebff 139 req => {
ebcd0e4f 140 %$admin_basic,
141 },
142 pod => {
143 title => 'DBIx::Class::Admin',
144 desc => 'Modules required for the DBIx::Class administrative library',
145 },
146 },
147
a4a02f15 148 admin_script => {
ebcd0e4f 149 req => {
a0361822 150 %$admin_script,
2b48ebff 151 },
e144415f 152 pod => {
153 title => 'dbicadmin',
154 desc => 'Modules required for the CLI DBIx::Class interface dbicadmin',
155 },
8057ed01 156 },
157
158 deploy => {
f6b26571 159 req => {
7536c92b 160 'SQL::Translator' => '0.11016',
f6b26571 161 },
162 pod => {
163 title => 'Storage::DBI::deploy()',
c7d50a7d 164 desc => 'Modules required for L<DBIx::Class::Storage::DBI/deploy> and L<DBIx::Class::Storage::DBI/deployment_statements>',
f6b26571 165 },
8057ed01 166 },
167
c7d50a7d 168 id_shortener => {
169 req => $id_shortener,
170 },
171
0d374214 172 test_component_accessor => {
173 req => {
174 'Class::Unload' => '0.07',
175 },
176 },
177
a109c954 178 test_pod => {
f6b26571 179 req => {
14d17d71 180 'Test::Pod' => '1.41',
a109c954 181 },
182 },
183
184 test_podcoverage => {
185 req => {
f6b26571 186 'Test::Pod::Coverage' => '1.08',
187 'Pod::Coverage' => '0.20',
a109c954 188 },
189 },
190
ffce4b65 191 test_whitespace => {
a109c954 192 req => {
8273e845 193 'Test::EOL' => '1.0',
ffce4b65 194 'Test::NoTabs' => '0.9',
f6b26571 195 },
8057ed01 196 },
197
4a233f30 198 test_strictures => {
199 req => {
b2c1212f 200 'Test::Strict' => '0.20',
4a233f30 201 },
202 },
203
2a2a7b23 204 test_prettydebug => {
205 req => $json_any,
206 },
207
99503754 208 test_admin_script => {
209 req => {
210 %$admin_script,
211 'JSON' => 0,
212 'JSON::XS' => 0,
213 $^O eq 'MSWin32'
214 # for t/admin/10script.t
215 ? ('Win32::ShellQuote' => 0)
216 # DWIW does not compile (./configure even) on win32
217 : ('JSON::DWIW' => 0 )
218 ,
219 }
220 },
221
226d1c35 222 test_leaks => {
f6b26571 223 req => {
f6b26571 224 'Test::Memory::Cycle' => '0',
225 'Devel::Cycle' => '1.10',
a109c954 226 },
227 },
f6b26571 228
68de9438 229 test_dt => {
230 req => $datetime_basic,
231 },
232
233 test_dt_sqlite => {
a109c954 234 req => {
68de9438 235 %$datetime_basic,
f6b26571 236 # t/36datetime.t
237 # t/60core.t
238 'DateTime::Format::SQLite' => '0',
68de9438 239 },
240 },
f6b26571 241
68de9438 242 test_dt_mysql => {
243 req => {
244 %$datetime_basic,
9c92bb1c 245 # t/inflate/datetime_mysql.t
246 # (doesn't need Mysql itself)
68de9438 247 'DateTime::Format::MySQL' => '0',
248 },
249 },
9c92bb1c 250
68de9438 251 test_dt_pg => {
252 req => {
253 %$datetime_basic,
9c92bb1c 254 # t/inflate/datetime_pg.t
255 # (doesn't need PG itself)
ab35aeab 256 'DateTime::Format::Pg' => '0.16004',
f6b26571 257 },
8057ed01 258 },
259
68de9438 260 test_cdbicompat => {
f6b26571 261 req => {
f6b26571 262 'Class::DBI::Plugin::DeepAbstractSearch' => '0',
d9bd5195 263 %$datetime_basic,
f6b26571 264 'Time::Piece::MySQL' => '0',
f6b26571 265 'Date::Simple' => '3.03',
266 },
8057ed01 267 },
268
be68095d 269 # this is just for completeness as SQLite
270 # is a core dep of DBIC for testing
271 rdbms_sqlite => {
272 req => {
273 %$rdbms_sqlite,
274 },
275 pod => {
276 title => 'SQLite support',
277 desc => 'Modules required to connect to SQLite',
278 },
279 },
280
281 rdbms_pg => {
282 req => {
a4fc1239 283 # when changing this list make sure to adjust xt/optional_deps.t
be68095d 284 %$rdbms_pg,
285 },
286 pod => {
287 title => 'PostgreSQL support',
288 desc => 'Modules required to connect to PostgreSQL',
289 },
290 },
291
292 rdbms_mssql_odbc => {
293 req => {
294 %$rdbms_mssql_odbc,
295 },
296 pod => {
297 title => 'MSSQL support via DBD::ODBC',
298 desc => 'Modules required to connect to MSSQL via DBD::ODBC',
299 },
300 },
301
302 rdbms_mssql_sybase => {
303 req => {
304 %$rdbms_mssql_sybase,
305 },
306 pod => {
307 title => 'MSSQL support via DBD::Sybase',
56dca25f 308 desc => 'Modules required to connect to MSSQL via DBD::Sybase',
309 },
310 },
311
312 rdbms_mssql_ado => {
313 req => {
314 %$rdbms_mssql_ado,
315 },
316 pod => {
317 title => 'MSSQL support via DBD::ADO (Windows only)',
318 desc => 'Modules required to connect to MSSQL via DBD::ADO. This particular DBD is available on Windows only',
be68095d 319 },
320 },
321
726c8f65 322 rdbms_msaccess_odbc => {
323 req => {
324 %$rdbms_msaccess_odbc,
325 },
326 pod => {
327 title => 'MS Access support via DBD::ODBC',
328 desc => 'Modules required to connect to MS Access via DBD::ODBC',
329 },
330 },
331
332 rdbms_msaccess_ado => {
333 req => {
334 %$rdbms_msaccess_ado,
335 },
336 pod => {
337 title => 'MS Access support via DBD::ADO (Windows only)',
338 desc => 'Modules required to connect to MS Access via DBD::ADO. This particular DBD is available on Windows only',
339 },
340 },
341
be68095d 342 rdbms_mysql => {
343 req => {
344 %$rdbms_mysql,
345 },
346 pod => {
347 title => 'MySQL support',
348 desc => 'Modules required to connect to MySQL',
349 },
350 },
351
352 rdbms_oracle => {
353 req => {
354 %$rdbms_oracle,
355 },
356 pod => {
357 title => 'Oracle support',
358 desc => 'Modules required to connect to Oracle',
359 },
360 },
361
362 rdbms_ase => {
363 req => {
364 %$rdbms_ase,
365 },
366 pod => {
367 title => 'Sybase ASE support',
368 desc => 'Modules required to connect to Sybase ASE',
369 },
370 },
371
372 rdbms_db2 => {
373 req => {
374 %$rdbms_db2,
375 },
376 pod => {
377 title => 'DB2 support',
378 desc => 'Modules required to connect to DB2',
379 },
380 },
381
199fbc45 382 rdbms_db2_400 => {
383 req => {
384 %$rdbms_db2_400,
385 },
386 pod => {
387 title => 'DB2 on AS/400 support',
388 desc => 'Modules required to connect to DB2 on AS/400',
389 },
390 },
391
392 rdbms_informix => {
393 req => {
394 %$rdbms_informix,
395 },
396 pod => {
397 title => 'Informix support',
398 desc => 'Modules required to connect to Informix',
399 },
8273e845 400 },
199fbc45 401
402 rdbms_sqlanywhere => {
403 req => {
404 %$rdbms_sqlanywhere,
405 },
406 pod => {
407 title => 'SQLAnywhere support',
408 desc => 'Modules required to connect to SQLAnywhere',
409 },
8273e845 410 },
199fbc45 411
412 rdbms_sqlanywhere_odbc => {
413 req => {
414 %$rdbms_sqlanywhere_odbc,
415 },
416 pod => {
417 title => 'SQLAnywhere support via DBD::ODBC',
418 desc => 'Modules required to connect to SQLAnywhere via DBD::ODBC',
419 },
8273e845 420 },
199fbc45 421
422 rdbms_firebird => {
423 req => {
424 %$rdbms_firebird,
425 },
426 pod => {
427 title => 'Firebird support',
428 desc => 'Modules required to connect to Firebird',
429 },
8273e845 430 },
199fbc45 431
432 rdbms_firebird_interbase => {
433 req => {
434 %$rdbms_firebird_interbase,
435 },
436 pod => {
437 title => 'Firebird support via DBD::InterBase',
438 desc => 'Modules required to connect to Firebird via DBD::InterBase',
439 },
8273e845 440 },
199fbc45 441
442 rdbms_firebird_odbc => {
443 req => {
444 %$rdbms_firebird_odbc,
445 },
446 pod => {
447 title => 'Firebird support via DBD::ODBC',
448 desc => 'Modules required to connect to Firebird via DBD::ODBC',
449 },
8273e845 450 },
199fbc45 451
be68095d 452# the order does matter because the rdbms support group might require
453# a different version that the test group
68de9438 454 test_rdbms_pg => {
f6b26571 455 req => {
456 $ENV{DBICTEST_PG_DSN}
457 ? (
a4fc1239 458 # when changing this list make sure to adjust xt/optional_deps.t
be68095d 459 %$rdbms_pg,
b9d84a2d 460 ($^O ne 'MSWin32' ? ('Sys::SigAction' => '0') : ()),
f6b26571 461 'DBD::Pg' => '2.009002',
f6b26571 462 ) : ()
463 },
8057ed01 464 },
465
afae8507 466 test_rdbms_mssql_odbc => {
467 req => {
468 $ENV{DBICTEST_MSSQL_ODBC_DSN}
469 ? (
be68095d 470 %$rdbms_mssql_odbc,
afae8507 471 ) : ()
472 },
473 },
474
56dca25f 475 test_rdbms_mssql_ado => {
476 req => {
477 $ENV{DBICTEST_MSSQL_ADO_DSN}
478 ? (
479 %$rdbms_mssql_ado,
480 ) : ()
481 },
482 },
483
afae8507 484 test_rdbms_mssql_sybase => {
485 req => {
486 $ENV{DBICTEST_MSSQL_DSN}
487 ? (
be68095d 488 %$rdbms_mssql_sybase,
afae8507 489 ) : ()
490 },
491 },
492
726c8f65 493 test_rdbms_msaccess_odbc => {
494 req => {
495 $ENV{DBICTEST_MSACCESS_ODBC_DSN}
496 ? (
497 %$rdbms_msaccess_odbc,
498 %$datetime_basic,
499 'Data::GUID' => '0',
500 ) : ()
501 },
502 },
503
504 test_rdbms_msaccess_ado => {
505 req => {
506 $ENV{DBICTEST_MSACCESS_ADO_DSN}
507 ? (
508 %$rdbms_msaccess_ado,
509 %$datetime_basic,
510 'Data::GUID' => 0,
511 ) : ()
512 },
513 },
514
68de9438 515 test_rdbms_mysql => {
f6b26571 516 req => {
517 $ENV{DBICTEST_MYSQL_DSN}
518 ? (
be68095d 519 %$rdbms_mysql,
f6b26571 520 ) : ()
521 },
8057ed01 522 },
523
68de9438 524 test_rdbms_oracle => {
f6b26571 525 req => {
526 $ENV{DBICTEST_ORA_DSN}
527 ? (
be68095d 528 %$rdbms_oracle,
f6b26571 529 'DateTime::Format::Oracle' => '0',
e1b7e9b4 530 'DBD::Oracle' => '1.24',
f6b26571 531 ) : ()
532 },
8057ed01 533 },
534
68de9438 535 test_rdbms_ase => {
f6b26571 536 req => {
537 $ENV{DBICTEST_SYBASE_DSN}
538 ? (
be68095d 539 %$rdbms_ase,
f6b26571 540 ) : ()
541 },
8057ed01 542 },
543
68de9438 544 test_rdbms_db2 => {
f58a165c 545 req => {
546 $ENV{DBICTEST_DB2_DSN}
547 ? (
be68095d 548 %$rdbms_db2,
f58a165c 549 ) : ()
550 },
551 },
552
199fbc45 553 test_rdbms_db2_400 => {
554 req => {
555 $ENV{DBICTEST_DB2_400_DSN}
556 ? (
557 %$rdbms_db2_400,
558 ) : ()
559 },
560 },
561
562 test_rdbms_informix => {
563 req => {
564 $ENV{DBICTEST_INFORMIX_DSN}
565 ? (
566 %$rdbms_informix,
567 ) : ()
568 },
569 },
570
571 test_rdbms_sqlanywhere => {
572 req => {
573 $ENV{DBICTEST_SQLANYWHERE_DSN}
574 ? (
575 %$rdbms_sqlanywhere,
576 ) : ()
577 },
578 },
579
580 test_rdbms_sqlanywhere_odbc => {
581 req => {
582 $ENV{DBICTEST_SQLANYWHERE_ODBC_DSN}
583 ? (
584 %$rdbms_sqlanywhere_odbc,
585 ) : ()
586 },
587 },
588
589 test_rdbms_firebird => {
590 req => {
591 $ENV{DBICTEST_FIREBIRD_DSN}
592 ? (
593 %$rdbms_firebird,
594 ) : ()
595 },
596 },
597
598 test_rdbms_firebird_interbase => {
599 req => {
600 $ENV{DBICTEST_FIREBIRD_INTERBASE_DSN}
601 ? (
602 %$rdbms_firebird_interbase,
603 ) : ()
604 },
605 },
606
e02b39b4 607 test_rdbms_firebird_odbc => {
608 req => {
609 $ENV{DBICTEST_FIREBIRD_ODBC_DSN}
610 ? (
611 %$rdbms_firebird_odbc,
612 ) : ()
613 },
614 },
615
42168332 616 test_memcached => {
617 req => {
618 $ENV{DBICTEST_MEMCACHED}
619 ? (
620 'Cache::Memcached' => 0,
621 ) : ()
622 },
623 },
624
8057ed01 625};
626
f6b26571 627
fb39747c 628sub req_list_for {
629 my ($class, $group) = @_;
630
9c1700e3 631 Carp::croak "req_list_for() expects a requirement group name"
fb39747c 632 unless $group;
633
f6b26571 634 my $deps = $reqs->{$group}{req}
9c1700e3 635 or Carp::croak "Requirement group '$group' does not exist";
fb39747c 636
637 return { %$deps };
638}
639
640
641our %req_availability_cache;
642sub req_ok_for {
643 my ($class, $group) = @_;
644
9c1700e3 645 Carp::croak "req_ok_for() expects a requirement group name"
fb39747c 646 unless $group;
647
d8799bab 648 return $class->_check_deps($group)->{status};
fb39747c 649}
650
651sub req_missing_for {
652 my ($class, $group) = @_;
653
9c1700e3 654 Carp::croak "req_missing_for() expects a requirement group name"
fb39747c 655 unless $group;
656
d8799bab 657 return $class->_check_deps($group)->{missing};
fb39747c 658}
659
660sub req_errorlist_for {
661 my ($class, $group) = @_;
662
9c1700e3 663 Carp::croak "req_errorlist_for() expects a requirement group name"
fb39747c 664 unless $group;
665
d8799bab 666 return $class->_check_deps($group)->{errorlist};
fb39747c 667}
668
669sub _check_deps {
670 my ($class, $group) = @_;
671
d8799bab 672 return $req_availability_cache{$group} ||= do {
673
674 my $deps = $class->req_list_for ($group);
675
676 my %errors;
677 for my $mod (keys %$deps) {
678 my $req_line = "require $mod;";
679 if (my $ver = $deps->{$mod}) {
680 $req_line .= "$mod->VERSION($ver);";
681 }
682
683 eval $req_line;
684
685 $errors{$mod} = $@ if $@;
686 }
687
688 my $res;
fb39747c 689
d8799bab 690 if (keys %errors) {
691 my $missing = join (', ', map { $deps->{$_} ? "$_ >= $deps->{$_}" : $_ } (sort keys %errors) );
692 $missing .= " (see $class for details)" if $reqs->{$group}{pod};
693 $res = {
694 status => 0,
695 errorlist => \%errors,
696 missing => $missing,
697 };
fb39747c 698 }
699 else {
d8799bab 700 $res = {
701 status => 1,
702 errorlist => {},
703 missing => '',
704 };
fb39747c 705 }
706
d8799bab 707 $res;
708 };
fb39747c 709}
710
e3fc11e1 711sub req_group_list {
712 return { map { $_ => { %{ $reqs->{$_}{req} || {} } } } (keys %$reqs) };
713}
714
715# This is to be called by the author only (automatically in Makefile.PL)
f6b26571 716sub _gen_pod {
47589465 717 my ($class, $distver, $pod_dir) = @_;
31fa1764 718
47589465 719 die "No POD root dir supplied" unless $pod_dir;
31fa1764 720
ccebe1f1 721 $distver ||=
31fa1764 722 eval { require DBIx::Class; DBIx::Class->VERSION; }
723 ||
ccebe1f1 724 die
31fa1764 725"\n\n---------------------------------------------------------------------\n" .
726'Unable to load core DBIx::Class module to determine current version, '.
727'possibly due to missing dependencies. Author-mode autodocumentation ' .
728"halted\n\n" . $@ .
729"\n\n---------------------------------------------------------------------\n"
31fa1764 730 ;
731
3d4c5a84 732 # do not ask for a recent version, use 1.x API calls
47589465 733 # this *may* execute on a smoker with old perl or whatnot
734 require File::Path;
735
736 (my $modfn = __PACKAGE__ . '.pm') =~ s|::|/|g;
737
738 (my $podfn = "$pod_dir/$modfn") =~ s/\.pm$/\.pod/;
739 (my $dir = $podfn) =~ s|/[^/]+$||;
740
741 File::Path::mkpath([$dir]);
742
e3fc11e1 743 my $sqltver = $class->req_list_for ('deploy')->{'SQL::Translator'}
744 or die "Hrmm? No sqlt dep?";
7e3dc46f 745
f6b26571 746 my @chunks = (
6343a203 747 <<"EOC",
af4ac504 748#########################################################################
749##################### A U T O G E N E R A T E D ########################
750#########################################################################
751#
752# The contents of this POD file are auto-generated. Any changes you make
753# will be lost. If you need to change the generated text edit _gen_pod()
754# at the end of $modfn
755#
756EOC
f6b26571 757 '=head1 NAME',
7e3dc46f 758 "$class - Optional module dependency specifications (for module authors)",
e3fc11e1 759 '=head1 SYNOPSIS',
d8799bab 760 <<"EOS",
7e3dc46f 761Somewhere in your build-file (e.g. L<Module::Install>'s Makefile.PL):
762
763 ...
764
765 configure_requires 'DBIx::Class' => '$distver';
766
767 require $class;
768
be68095d 769 my \$deploy_deps = $class->req_list_for('deploy');
7e3dc46f 770
771 for (keys %\$deploy_deps) {
772 requires \$_ => \$deploy_deps->{\$_};
773 }
774
775 ...
776
777Note that there are some caveats regarding C<configure_requires()>, more info
778can be found at L<Module::Install/configure_requires>
779EOS
f6b26571 780 '=head1 DESCRIPTION',
781 <<'EOD',
782Some of the less-frequently used features of L<DBIx::Class> have external
783module dependencies on their own. In order not to burden the average user
784with modules he will never use, these optional dependencies are not included
785in the base Makefile.PL. Instead an exception with a descriptive message is
786thrown when a specific feature is missing one or several modules required for
787its operation. This module is the central holding place for the current list
7e3dc46f 788of such dependencies, for DBIx::Class core authors, and DBIx::Class extension
789authors alike.
f6b26571 790EOD
791 '=head1 CURRENT REQUIREMENT GROUPS',
792 <<'EOD',
793Dependencies are organized in C<groups> and each group can list one or more
794required modules, with an optional minimum version (or 0 for any version).
ecb68746 795The group name can be used in the
f6b26571 796EOD
797 );
798
799 for my $group (sort keys %$reqs) {
800 my $p = $reqs->{$group}{pod}
801 or next;
802
803 my $modlist = $reqs->{$group}{req}
804 or next;
805
806 next unless keys %$modlist;
807
808 push @chunks, (
809 "=head2 $p->{title}",
810 "$p->{desc}",
811 '=over',
812 ( map { "=item * $_" . ($modlist->{$_} ? " >= $modlist->{$_}" : '') } (sort keys %$modlist) ),
813 '=back',
814 "Requirement group: B<$group>",
815 );
816 }
817
818 push @chunks, (
819 '=head1 METHODS',
e3fc11e1 820 '=head2 req_group_list',
821 '=over',
d8799bab 822 '=item Arguments: none',
fb13a49f 823 '=item Return Value: \%list_of_requirement_groups',
e3fc11e1 824 '=back',
d8799bab 825 <<'EOD',
e3fc11e1 826This method should be used by DBIx::Class packagers, to get a hashref of all
827dependencies keyed by dependency group. Each key (group name) can be supplied
828to one of the group-specific methods below.
829EOD
830
f6b26571 831 '=head2 req_list_for',
832 '=over',
833 '=item Arguments: $group_name',
fb13a49f 834 '=item Return Value: \%list_of_module_version_pairs',
f6b26571 835 '=back',
d8799bab 836 <<'EOD',
f6b26571 837This method should be used by DBIx::Class extension authors, to determine the
7e3dc46f 838version of modules a specific feature requires in the B<current> version of
e3fc11e1 839DBIx::Class. See the L</SYNOPSIS> for a real-world
7e3dc46f 840example.
f6b26571 841EOD
842
843 '=head2 req_ok_for',
844 '=over',
845 '=item Arguments: $group_name',
fb13a49f 846 '=item Return Value: 1|0',
f6b26571 847 '=back',
d8799bab 848 <<'EOD',
849Returns true or false depending on whether all modules required by
850C<$group_name> are present on the system and loadable.
851EOD
f6b26571 852
853 '=head2 req_missing_for',
854 '=over',
855 '=item Arguments: $group_name',
fb13a49f 856 '=item Return Value: $error_message_string',
f6b26571 857 '=back',
d8799bab 858 <<"EOD",
f6b26571 859Returns a single line string suitable for inclusion in larger error messages.
860This method would normally be used by DBIx::Class core-module author, to
861indicate to the user that he needs to install specific modules before he will
862be able to use a specific feature.
863
e3fc11e1 864For example if some of the requirements for C<deploy> are not available,
865the returned string could look like:
f6b26571 866
e3fc11e1 867 SQL::Translator >= $sqltver (see $class for details)
f6b26571 868
869The author is expected to prepend the necessary text to this message before
870returning the actual error seen by the user.
871EOD
872
873 '=head2 req_errorlist_for',
874 '=over',
875 '=item Arguments: $group_name',
fb13a49f 876 '=item Return Value: \%list_of_loaderrors_per_module',
f6b26571 877 '=back',
878 <<'EOD',
879Returns a hashref containing the actual errors that occured while attempting
880to load each module in the requirement group.
881EOD
fb8ae353 882 '=head1 AUTHOR',
883 'See L<DBIx::Class/CONTRIBUTORS>.',
884 '=head1 LICENSE',
885 'You may distribute this code under the same terms as Perl itself',
f6b26571 886 );
887
9c1700e3 888 open (my $fh, '>', $podfn) or Carp::croak "Unable to write to $podfn: $!";
f6b26571 889 print $fh join ("\n\n", @chunks);
47589465 890 print $fh "\n";
f6b26571 891 close ($fh);
892}
893
8057ed01 8941;