NAME

Twitter::API::Role::RequestArgs - API request method helpers

VERSION

version 0.0110

SYNOPSIS

package MyApiMethods;
use Moo::Role;

sub timeline {
    shift->request_with_id(get => 'statuses/user_timeline, @_);
}

Then, in your application code:

use Twitter::API;

my $client = Twitter::API->new_with_traits(
    traits => '+MyApiMethods',
    %othe_new_options,
);

my $statuses = $client->timeline('semifor');

# equvalent to:
my $statuses = $client->get('statuses/user_timeline', {
    screen_name => 'semifor',
});

DESCRIPTION

Helper methods for implementers of custom traits for creating concise Twitter API methods. Used in Twitter::API::Trait::ApiMethods.

METHODS

request_with_id

Transforms an argument list with a required screen_name or user_id, optionally passed as a leading, positional argument, a hashref argument.

If a hashref follows the optional plain scalar, the user_id or screen_name is added to it. Otherwise a new hashref is created and inserted into @_.

If the optional plain scalar argument is missing, and there is hashref of arguments, or if the hashref does not contain the key screen_name or user_id, request_with_id croaks.

Examples:

$self->request_with_id(get => 'some/endpoint', 'foo');
# is transformed to:
$self->request(get => 'some/endpoint', { screen_name => 'foo' });

$self->request_with_id(get => 'some/endpoint', 8575429);
# is transfromed to:
$self->request(get => 'some/endpoint', { user_id => 8675429 });

$self->request_with_id(get => 'some/endpoint', {
    screen_name => 'semifor',
});
# is transformed to:
$self->request(get => 'some/endpoint', { screen_name => 'semifor' });

$self->request_with_id(get => 'some/endpoint', {
    foo => 'bar',
}); ### croaks ###

request_with_pos_args

Transforms a list of required arguments, optionally provided positionally in a determined order, into a hashref of named arguments. If a hashref follows the positional arguments, the named arguments are added to it. Otherwise, a new hashref in inserted into @_.

Zero or more of the required arguments may be provided positionally, as long as the appear in the specified order. I any of the required arguments are not provided positionally, they must be provided in the hashref or request_with_pos_args croaks.

The positional name :ID is treated specially. It is transformed to user_id if the value it represents contains only digits. Otherwise, it is transformed to screen_name.

Examples:

$self->request_with_pos_args(
    [ 'id', 'name' ], get => 'some/endpoint',
    '007', 'Bond'
);
# is transformed to:
$self->request(get => 'some/endpoint', {
    id   => '007',
    name => 'Bond',
});

$self->request_with_pos_args(
    [ 'id', 'name' ], get => 'some/endpoint',
    '007', { name => 'Bond' }
);
# is also transformed to:
$self->request(get => 'some/endpoint', {
    id   => '007',
    name => 'Bond',
});

$self->request_with_pos_args(
    [ ':ID', 'status' ], get => 'some/endpoint',
    'alice', 'down the rabbit hole'
);
# is transformed to:
$self->request(get => 'some/endpoint', {
    sreen_name => 'alice',
    status     => 'down the rabbit hole',
});

AUTHOR

Marc Mims <marc@questright.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2015-2016 by Marc Mims.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.