From 271e65d196d3306c417db5b6fed00b0ce2ac86fe Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Mon, 11 Nov 2019 16:07:03 -0300 Subject: [PATCH] Bug 23893: Add new_from_api and set_from_api to Koha::Object This patch introduces the following methods to the Koha::Object class: - set_from_api - new_from_api This methods are going to be used when writing API controllers that map to the attributes to the DB schema ones. To test: 1. Apply this patchset 2. Run: $ kshell k$ prove t/db_dependent/Koha/Object.t => SUCCESS: Tests pass! 3. Sign off :-D --- Koha/Object.pm | 56 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 15 deletions(-) diff --git a/Koha/Object.pm b/Koha/Object.pm index 92ac58ccac..6846a16cdf 100644 --- a/Koha/Object.pm +++ b/Koha/Object.pm @@ -430,6 +430,37 @@ sub from_api_mapping { return $self->{_from_api_mapping}; } +=head3 new_from_api + + my $object = Koha::Object->new_from_api; + my $object = Koha::Object->new_from_api( $attrs ); + +Creates a new object, mapping the API attribute names to the ones on the DB schema. + +=cut + +sub new_from_api { + my ( $class, $params ) = @_; + + my $self = $class->new; + return $self->set_from_api( $params ); +} + +=head3 set_from_api + + my $object = Koha::Object->new(...); + $object->set_from_api( $attrs ) + +Sets the object's attributes mapping API attribute names to the ones on the DB schema. + +=cut + +sub set_from_api { + my ( $self, $from_api_params ) = @_; + + return $self->set( $self->attributes_from_api( $from_api_params ) ); +} + =head3 $object->unblessed_all_relateds my $everything_into_one_hashref = $object->unblessed_all_relateds @@ -551,27 +582,22 @@ Returns the passed params, converted from API naming into the model. =cut sub attributes_from_api { - my ( $self, $attributes ) = @_; + my ( $self, $from_api_params ) = @_; - my $mapping = $self->from_api_mapping; + my $from_api_mapping = $self->from_api_mapping; - foreach my $attribute ( keys %{$mapping} ) { - my $mapped_attribute = $mapping->{$attribute}; - if ( exists $attributes->{$attribute} - && defined $mapped_attribute ) - { - # key => !undef - $attributes->{$mapped_attribute} = delete $attributes->{$attribute}; + my $params; + + while (my ($key, $value) = each %{ $from_api_params } ) { + if ( exists $from_api_mapping->{$key} ) { + $params->{$from_api_mapping->{$key}} = $value; } - elsif ( exists $attributes->{$attribute} - && !defined $mapped_attribute ) - { - # key => undef / to be deleted - delete $attributes->{$attribute}; + else { + $params->{$key} = $value; } } - return $attributes; + return $params; } =head3 _type -- 2.24.0