Add accessor for the list of (re)generated classes
Dagfinn Ilmari Mannsåker [Tue, 26 Nov 2013 17:28:05 +0000 (17:28 +0000)]
Changes
lib/DBIx/Class/Schema/Loader/Base.pm
t/22dump.t

diff --git a/Changes b/Changes
index 8c05f85..d66a9d1 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,6 +1,7 @@
 Revision history for Perl extension DBIx::Class::Schema::Loader
 
         - Fix table listing with DBD::DB2 >= 1.85 (RT#91764)
+        - Add accessor for the list of (re)generated classes
 
 0.07038  2013-11-20
         - Allow coderef maps to call back into the hashref mapping code
index 0e5cea3..2c7cfb0 100644 (file)
@@ -61,6 +61,7 @@ __PACKAGE__->mk_group_ro_accessors('simple', qw/
                                 use_moose
                                 only_autoclean
                                 overwrite_modifications
+                                generated_classes
 
                                 relationship_attrs
 
@@ -1123,6 +1124,7 @@ sub new {
     $self->{class_to_table} = {};
     $self->{classes}  = {};
     $self->{_upgrading_classes} = {};
+    $self->{generated_classes} = [];
 
     $self->{schema_class} ||= ( ref $self->{schema} || $self->{schema} );
     $self->{schema} ||= $self->{schema_class};
@@ -1747,6 +1749,7 @@ sub _load_tables {
         # The relationship loader needs a working schema
         local $self->{quiet} = 1;
         local $self->{dump_directory} = $self->{temp_directory};
+        local $self->{generated_classes} = [];
         $self->_reload_classes(\@tables);
         $self->_load_relationships(\@tables);
 
@@ -2131,6 +2134,8 @@ sub _write_classfile {
       }
     }
 
+    push @{$self->generated_classes}, $class;
+
     $text .= $self->_sig_comment(
       $self->version_to_dump,
       POSIX::strftime('%Y-%m-%d %H:%M:%S', localtime)
@@ -3104,6 +3109,11 @@ Returns a hashref of table to class mappings.  In some cases it will
 contain multiple entries per table for the original and normalized table
 names, as above in L</monikers>.
 
+=head2 generated_classes
+
+Returns an arrayref of classes that were actually generated (i.e. not
+skipped because there were no changes).
+
 =head1 NON-ENGLISH DATABASES
 
 If you use the loader on a database with table and column names in a language
index 6e55839..50a124c 100644 (file)
@@ -34,6 +34,12 @@ lives_ok {
     [ qr|^Dumping manual schema|, qr|^Schema dump completed| ];
 } 'no death with dump_directory set' or diag "Dump failed: $@";
 
+is_deeply(
+    [ sort @{ DBICTest::Schema::1->loader->generated_classes } ],
+    [ sort 'DBICTest::Schema::1', map "DBICTest::Schema::1::Result::$_", qw(Foo Bar) ],
+    'generated_classes has schema and result classes'
+);
+
 DBICTest::Schema::1->_loader_invoked(undef);
 
 SKIP: {
@@ -43,6 +49,12 @@ SKIP: {
   warnings_exist { DBICTest::Schema::1->connect($make_dbictest_db::dsn) }
     [ qr|^Dumping manual schema|, qr|^Schema dump completed| ];
 
+  is_deeply(
+      [ sort @{ DBICTest::Schema::1->loader->generated_classes } ],
+      [ ],
+      'no classes generated on second dump'
+  );
+
   rmtree($dump_path, 1, 1);
 }
 
@@ -51,6 +63,12 @@ lives_ok {
     [ qr|^Dumping manual schema|, qr|^Schema dump completed| ];
 } 'no death with dump_directory set (overwrite1)' or diag "Dump failed: $@";
 
+is_deeply(
+    [ sort @{ DBICTest::Schema::2->loader->generated_classes } ],
+    [ sort 'DBICTest::Schema::2', map "DBICTest::Schema::2::Result::$_", qw(Foo Bar) ],
+    'generated_classes has schema and result classes'
+);
+
 DBICTest::Schema::2->_loader_invoked(undef);
 
 lives_ok {
@@ -64,6 +82,12 @@ lives_ok {
   ];
 } 'no death with dump_directory set (overwrite2)' or diag "Dump failed: $@";
 
+is_deeply(
+    [ sort @{ DBICTest::Schema::2->loader->generated_classes } ],
+    [ sort 'DBICTest::Schema::2', map "DBICTest::Schema::2::Result::$_", qw(Foo Bar) ],
+    'all classes regenerated with really_erase_my_files',
+);
+
 done_testing();
 
 END { rmtree($dump_path, 1, 1); }