API-Handle
view release on metacpan or search on metacpan
lib/API/Handle.pm view on Meta::CPAN
return $data;
}
sub _bytes {
my ( $self, $data ) = @_;
return length $data;
}
# A method that will let us write readable requests insteadOfCamelCase.
# Helpful for Google SOAP APIs. See ./t/02-google-dfp.t for example.
sub _camelize {
my $self = shift;
my $data = shift;
$data->{ lcfirst camelize $_ } = delete $data->{ $_ } for keys %{ $data };
for my $data ( values %{ $data } ) {
for ( ref $data ) {
when ( 'ARRAY' ) {
for my $data ( @{ $data } ) {
$self->_camelize( $data ) if ref $data eq 'HASH';
}
}
when ( 'HASH' ) {
$self->_camelize( $data );
}
}
}
}
sub _decamelize {
my $self = shift;
my $data = shift;
my %args = @_;
delete $data->{ $_ } # delete -xmlns and other attrs... why not?
for grep { $_ =~ /^-/ } keys %{ $data };
for ( keys %{ $data } ) {
$data->{ decamelize $_ } = delete $data->{ $_ };
}
for my $data ( values %{ $data } ) {
for ( ref $data ) {
when ( 'ARRAY' ) {
for my $data ( @{ $data } ) {
$self->_decamelize( $data, %args ) if ref $data eq 'HASH';
}
}
when ( 'HASH' ) {
$self->_decamelize( $data, %args );
}
}
}
}
sub _join_uri {
my ( $self, @path ) = @_;
my ( $base ) = ( $self->uri );
@path = map { $_ =~ s/^\///; $_ =~ s/\/$//; $_ } @path;
$base =~ s/\/$//;
return join '/', $base, @path;
}
sub _tied {
my ( $self, %args ) = @_;
my ( @array, %hash, $ref, $tied );
$ref = $args{ref}->{ $args{key} } if ref $args{ref} eq 'HASH';
$ref = $args{ref}->[ $args{index} ] if ref $args{ref} eq 'ARRAY';
$ref = ${ $args{ref} }->[ $args{index} ] if ref $args{ref} eq 'REF' and ref ${ $args{ref} } eq 'ARRAY';
for ( ref $ref ) { # Recursion
when ( 'REF' ) {
if ( ref ${ $ref } eq 'ARRAY' ) { # \[]
for my $index ( 0 .. $#{ ${ $ref } } ) {
my $val = $$ref->[ $index ];
$self->_tied( ref => $ref, index => $index ) if grep { ref $val eq $_ } qw/ARRAY HASH REF/;
}
$tied = 1;
}
}
when ( 'ARRAY' ) {
for my $index ( 0 .. $#{ $ref } ) {
my $val = $ref->[ $index ];
$self->_tied( ref => $ref, index => $index ) if grep { ref $val eq $_ } qw/ARRAY HASH REF/;
}
$tied = 1 if $args{tied}; # i.e. $args{content} from $self->req routine
}
when ( 'HASH' ) {
for my $key ( keys %{ $ref } ) {
my $val = $ref->{ $key };
$self->_tied( ref => $ref, key => $key ) if grep { ref $val eq $_ } qw/ARRAY HASH REF/;
}
}
}
if ( $tied ) {
tie my %hash, 'Tie::Hash::Indexed';
for ( ref $ref ) {
when ( 'ARRAY' ) {
@array = @{ $ref };
}
when ( 'REF' ) {
@array = @{ ${ $ref } };
}
}
%hash = @array;
for ( ref $args{ref} ) {
when ( 'HASH' ) {
$args{ref}->{ $args{key} } = \%hash;
}
when ( 'ARRAY' ) {
( run in 0.544 second using v1.01-cache-2.11-cpan-140bd7fdf52 )