package YellowBot::API::Request::JSON; $YellowBot::API::Request::JSON::VERSION = '0.97'; use Moose; use HTTP::Request; use JSON qw(encode_json); use namespace::clean -except => 'meta'; extends 'YellowBot::API::Request'; has '+args' => ( isa => 'HashRef[Any]', ); sub _signed_args { my $self = shift; my $all_args = $self->args; my %args; for my $p (qw(api_ts api_user_identifier)) { $args{$p} = $all_args->{$p} if exists $all_args->{$p}; } return \%args; } sub _more_args { my $self = shift; my %args = %{ $self->args }; delete @args{qw(api_ts api_key api_user_identifier api_sig api_secret auth_token)}; return %args; } sub _build_request { my $self = shift; my $uri = $self->_build_uri; my %query = $self->_signed_query_form; $uri->query_form(%query); my %extra = $self->_more_args; # JSON POST request my $req = HTTP::Request->new('POST', $uri, ['Content-Type' => 'application/json; charset=utf-8']); my $req_content = encode_json(\%extra); $req->content($req_content); return $req; } __PACKAGE__->meta->make_immutable; 1; __END__ =pod =encoding utf8 =head1 NAME YellowBot::API::Request::JSON - Request object for YellowBot::API (JSON POST) =head1 SYNOPSIS This class manages setting up JSON POST requests for the YellowBot::API. No user servicable parts inside. This part of the API is subject to change. my $req = YellowBot::API::Request::JSON->new (api => $yellowbot_api, method => 'location/detail', args => { foo => 'bar', fob => 123, }, ); my $http_request = $req->http_request; =head1 METHODS =head2 api =head2 http_request Returns a HTTP::Request version of the request. =head1 AUTHOR Ask Bjørn Hansen, C<< >> =head1 COPYRIGHT & LICENSE Copyright 2009–2011 Solfo Inc, all rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut