Business-Fixflo
view release on metacpan or search on metacpan
lib/Business/Fixflo/Client.pm view on Meta::CPAN
$path = $self->_add_query_params( $path,$params )
if $method eq 'GET';
my $req = $self->_build_request( $method,$path );
if ( $method =~ /POST|PUT|DELETE/ ) {
if ( $params ) {
$req->content_type( 'application/json' );
$req->content( JSON->new->encode( $params ) );
carp( $req->content )
if $ENV{FIXFLO_DEBUG};
}
}
if ( @{ $self->ua_proxy_settings } ) {
$ua->proxy( $self->ua_proxy_settings );
}
my $res = $ua->request( $req );
# work around the fact that a 200 status code can still mean a problem
# with the request, which we don't discover *until* we parse envelope
# data, at which point we have lost the request data. i can't return a
# list from this function as that will break backwards compatibility
# so instead i use a potentially evil global variable
$Business::Fixflo::Client::request_data = {
path => $path,
params => $params,
headers => $req->headers_as_string,
content => $req->content,
};
if ( $res->is_success ) {
my $data = $res->content;
if ( $res->headers->header( 'content-type' ) =~ m!application/json! ) {
$data = JSON->new->decode( $data );
}
return $data;
}
else {
carp( "RES: @{[ $res->code ]}" )
if $ENV{FIXFLO_DEBUG};
Business::Fixflo::Exception->throw({
message => $res->content,
code => $res->code,
response => $res->status_line,
request => $Business::Fixflo::Client::request_data,
});
}
}
sub _build_request {
my ( $self,$method,$path ) = @_;
my $req = HTTP::Request->new(
# passing through the absolute URL means we don't build it
$method => $path =~ /^http/
? $path : join( '/',$self->base_url . $self->api_path,$path ),
);
carp(
$method => $path =~ /^http/
? $path : join( '/',$self->base_url . $self->api_path,$path ),
) if $ENV{FIXFLO_DEBUG};
$self->_set_request_headers( $req );
return $req;
}
sub _set_request_headers {
my ( $self,$req ) = @_;
my $auth_string;
if ( $self->api_key ) {
$auth_string = "Bearer " . $self->api_key;
} else {
my $username = $self->username // '';
my $password = $self->password // '';
$auth_string = "basic " . encode_base64( join( ":",$username,$password ) );
}
$req->header( 'Authorization' => $auth_string );
carp( "Authorization: $auth_string" )
if $ENV{FIXFLO_DEBUG};
$req->header( 'Accept' => 'application/json' );
}
sub _add_query_params {
my ( $self,$path,$params ) = @_;
if ( my $query_params = $self->normalize_params( $params ) ) {
return "$path?$query_params";
}
return $path;
}
=head1 AUTHOR
Lee Johnson - C<leejo@cpan.org>
This library is free software; you can redistribute it and/or modify it under
the same terms as Perl itself. If you would like to contribute documentation,
features, bug fixes, or anything else then please raise an issue / pull request:
https://github.com/Humanstate/business-fixflo
=cut
1;
( run in 1.668 second using v1.01-cache-2.11-cpan-39bf76dae61 )