@@ -, +, @@ - set_from_api - new_from_api $ kshell k$ prove t/db_dependent/Koha/Object.t --- Koha/Object.pm | 56 +++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 41 insertions(+), 15 deletions(-) --- a/Koha/Object.pm +++ a/Koha/Object.pm @@ -434,6 +434,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 @@ -555,27 +586,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 --