From 216d286dffb65b298f39c6b15512613c01aee41d Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Mon, 7 Oct 2019 15:55:09 -0300 Subject: [PATCH] Bug 23770: Add Koha::Object(s)->to_api method Generic method that changes the attribute names of an object in the presence of the to_api_mapping method. It otherwise falls back to returning the TO_JSON output. This is WIP submitted early for scrutiny. Tests and example usage in an API controller coming. --- Koha/Object.pm | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/Koha/Object.pm b/Koha/Object.pm index 04d34c49e3..706a9e4a93 100644 --- a/Koha/Object.pm +++ b/Koha/Object.pm @@ -356,6 +356,38 @@ sub _numeric_column_type { return ( grep { $column_type eq $_ } @numeric_types) ? 1 : 0; } +=head3 to_api + + my $object_for_api = $object->to_api; + +=cut + +sub to_api { + my ( $self ) = @_; + my $json_object = $self->TO_JSON; + + # Rename attributes if there's a mapping + if ( $self->can('to_api_mapping') ) { + foreach my $column ( keys %{$self->to_api_mapping} ) { + my $mapped_column = $self->to_api_mapping->{$column}; + if ( exists $json_object->{$column} + && defined $mapped_column ) + { + # key != undef + $json_object->{$mapped_column} = delete $json_object->{$column}; + } + elsif ( exists $json_object->{$column} + && !defined $mapped_column ) + { + # key == undef + delete $json_object->{$column}; + } + } + } + + return $json_object; +} + =head3 $object->unblessed_all_relateds my $everything_into_one_hashref = $object->unblessed_all_relateds -- 2.23.0