Bug 16965: [Follow-up] Adjust get_object_class
authorMarcel de Rooy <m.de.rooy@rijksmuseum.nl>
Thu, 28 Jul 2016 12:28:43 +0000 (14:28 +0200)
committerKyle M Hall <kyle@bywatersolutions.com>
Fri, 21 Oct 2016 17:31:14 +0000 (17:31 +0000)
In many cases it should be possible to derive the Koha::Objects class
name from the DBIx result class name in a trivial manner.
If not, the DBIx result class should have a class method called
koha_objects_class providing that non-trivial name, such as Libraries
for Branch.

Note: We are only interested in the plural form here (Koha::Objects).

Test plan:
Run t/db_dependent/Koha/Objects.t

Signed-off-by: Marc VĂ©ron <veron@veron.ch>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Koha/Objects.pm
Koha/Schema/Result/Borrower.pm
Koha/Schema/Result/Branch.pm

index 3f2f64b..73d3617 100644 (file)
@@ -142,19 +142,22 @@ Searches the specified relationship, optionally specifying a condition and attri
 sub search_related {
     my ( $self, $rel_name, @params ) = @_;
 
+    return if !$rel_name;
     if (wantarray) {
         my @dbic_rows = $self->_resultset()->search_related($rel_name, @params);
-        my $object_class = get_object_class( $dbic_rows[0]->result_class )->[1];
+        return if !@dbic_rows;
+        my $object_class = _get_objects_class( $dbic_rows[0]->result_class );
 
         eval "require $object_class";
-        return $object_class->_wrap(@dbic_rows);
+        return _wrap( $object_class, @dbic_rows );
 
     } else {
         my $rs = $self->_resultset()->search_related($rel_name, @params);
-        my $object_class = get_object_class( $rs->result_class )->[1];
+        return if !$rs;
+        my $object_class = _get_objects_class( $rs->result_class );
 
         eval "require $object_class";
-        return $object_class->_new_from_dbic($rs);
+        return _new_from_dbic( $object_class, $rs );
     }
 }
 
@@ -242,16 +245,15 @@ sub _resultset {
     }
 }
 
-sub get_object_class {
+sub _get_objects_class {
     my ( $type ) = @_;
     return unless $type;
-    $type =~ s|^Koha::Schema::Result::||;
-    my $mappings = {
-        Branch => [ qw( Koha::Library Koha::Libraries ) ],
-        Borrower => [ qw( Koha::Patron Koha::Patrons ) ],
-        OldIssue => [ qw( Koha::OldIssue Koha::OldIssues ) ],
-    };
-    return $mappings->{$type};
+
+    if( $type->can('koha_objects_class') ) {
+        return $type->koha_objects_class;
+    }
+    $type =~ s|Schema::Result::||;
+    return "${type}s";
 }
 
 =head3 columns
index 8512753..de70e74 100644 (file)
@@ -1253,4 +1253,8 @@ __PACKAGE__->belongs_to(
     { borrowernumber => "guarantorid" },
 );
 
+sub koha_objects_class {
+    'Koha::Patrons';
+}
+
 1;
index 9d84ab9..b3e9e42 100644 (file)
@@ -533,4 +533,9 @@ __PACKAGE__->many_to_many("categorycodes", "branchrelations", "categorycode");
 
 
 # You can replace this text with custom code or comments, and it will be preserved on regeneration
+
+sub koha_objects_class {
+    'Koha::Libraries';
+}
+
 1;