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 )