NAME

WebService::NationBuilder - NationBuilder API bindings

VERSION

version 0.0107

SYNOPSIS

use WebService::NationBuilder;

my $nb = WebService::NationBuilder->new(
    access_token    => 'abc123',
    subdomain       => 'testing',
);

$nb->get_sites();

DESCRIPTION

This module provides bindings for the NationBuilder API.

METHODS

new

Instantiates a new WebService::NationBuilder client object.

my $nb = WebService::NationBuilder->new(
    access_token    => $access_token,
    subdomain       => $subdomain,
    domain          => $domain,     # optional
    version         => $version,    # optional
    retries         => $retries,    # optional
);

Parameters

- access_token

Required 

A valid NationBuilder OAuth 2.0 access token for your nation.

- subdomain

Required 

The NationBuilder subdomain (slug) for your nation.

- domain

Optional 

The NationBuilder top-level domain to make API calls against. Defaults to nationbuilder.com.

- version

Optional

The NationBuilder API version to use. Defaults to v1.

- retries

Optional 

The number of times to retry requests in cases when Balanced returns a 5xx response. Defaults to 0.

get_sites

Get information about the sites hosted by a nation.

Request:

get_sites({
    page        =>  1,
    per_page    =>  10,
});

Response:

[{
    id          => 1,
    name        => 'Foobar',
    slug        => 'foobar',
    domain      => 'foobarsoftwares.com',
},
{
    id          => 2,
    name        => 'Test Site',
    slug        => 'test',
    domain      => undef,
}]

get_people

Get a list of the people in a nation.

Request:

get_people({
    page        => 1,
    per_page    => 10,
});

Response:

[{
    id          => 1,
    email       => 'test@gmail.com'
    phone       => '415-123-4567',
    mobile      => '555-123-4567',
    first_name  => 'Firstname',
    last_name   => 'Lastname',
    created_at  => '2013-12-08T04:27:12-08:00',
    updated_at  => '2013-12-24T12:03:51-08:00',
    sex         => undef,
    twitter_id  => '123456789',
    primary_address => {
        address1        => undef,
        address2        => undef,
        zip             => undef,
        city            => 'San Francisco',
        state           => 'CA',
        country_code    => 'US',
        lat             => '37.7749295',
        lng             => '-122.4194155',
    }
}]

get_person

Get a full representation of the person with the provided id.

Request:

get_person(1);

Response:

{
    id          => 1,
    email       => 'test@gmail.com'
    phone       => '415-123-4567',
    mobile      => '555-123-4578',
    first_name  => 'Firstname',
    last_name   => 'Lastname',
    created_at  => '2013-12-08T04:27:12-08:00',
    updated_at  => '2013-12-24T12:03:51-08:00',
    sex         => undef,
    twitter_id  => '123456789',
    primary_address => {
        address1        => undef,
        address2        => undef,
        zip             => undef,
        city            => 'San Francisco',
        state           => 'CA',
        country_code    => 'US',
        lat             => '37.7749295',
        lng             => '-122.4194155',
    }
}

match_person

Get a full representation of the person with certain attributes.

Request:

match_person({
    email       => 'test@gmail.com',
    phone       => '415-123-4567',
    mobile      => '555-123-4567',
    first_name  => 'Firstname',
    last_name   => 'Lastname',
});

Response:

{
    id          => 1,
    email       => 'test@gmail.com'
    phone       => '415-123-4567',
    mobile      => '555-123-4578',
    first_name  => 'Firstname',
    last_name   => 'Lastname',
    created_at  => '2013-12-08T04:27:12-08:00',
    updated_at  => '2013-12-24T12:03:51-08:00',
    sex         => undef,
    twitter_id  => '123456789',
    primary_address => {
        address1        => undef,
        address2        => undef,
        zip             => undef,
        city            => 'San Francisco',
        state           => 'CA',
        country_code    => 'US',
        lat             => '37.7749295',
        lng             => '-122.4194155',
    }
}

create_person

Create a person with the provided data, and return a full representation of the person who was created.

Request:

create_person({
    email       => 'test@gmail.com',
    phone       => '415-123-4567',
    mobile      => '555-123-4567',
    first_name  => 'Firstname',
    last_name   => 'Lastname',
});

Response:

{
    id          => 1,
    email       => 'test@gmail.com'
    phone       => '415-123-4567',
    mobile      => '555-123-4578',
    first_name  => 'Firstname',
    last_name   => 'Lastname',
    created_at  => '2013-12-08T04:27:12-08:00',
    updated_at  => '2013-12-24T12:03:51-08:00',
    sex         => undef,
    twitter_id  => undef,
    primary_address => undef,
}

update_person

Update the person with the provided id to have the provided data, and return a full representation of the person who was updated.

Request:

update_person(1, {
    email       => 'test2@gmail.com',
    phone       => '123-456-7890',
    mobile      => '999-876-5432',
    first_name  => 'Firstname2',
    last_name   => 'Lastname2',
});

Response:

{
    id          => 1,
    email       => 'test2@gmail.com'
    phone       => '123-456-7890',
    mobile      => '999-876-5432',
    first_name  => 'Firstname2',
    last_name   => 'Lastname2',
    created_at  => '2013-12-08T04:27:12-08:00',
    updated_at  => '2013-12-24T12:03:51-08:00',
    sex         => undef,
    twitter_id  => undef,
    primary_address => undef,
}

push_person

Update a person matched by email address, or create a new person if no match is found, then return a full representation of the person who was created or updated.

Request:

push_person({
    email       => 'test2@gmail.com',
    sex         => 'M',
    first_name  => 'Firstname3',
    last_name   => 'Lastname3',
});

Response:

{
    id          => 1,
    email       => 'test2@gmail.com'
    phone       => '123-456-7890',
    mobile      => '999-876-5432',
    first_name  => 'Firstname3',
    last_name   => 'Lastname3',
    created_at  => '2013-12-08T04:27:12-08:00',
    updated_at  => '2013-12-24T12:03:51-08:00',
    sex         => 'M',
    twitter_id  => undef,
    primary_address => undef,
}

delete_person

Removes the person with the provided id from the nation.

Request:

delete_person(1);

Response:

1

get_tags

Get the tags that have been used before in a nation.

Request:

get_tags({
    page        => 1,
    per_page    => 10,
});

Response:

[{
    name    =>  'tag1',
},
{
    name    =>  'tag2',
}]

get_person_tags

Gets a list of the tags for a given person with the provided id.

Request:

get_person_tags(1);

Response:

[{
    person_id   => 1,
    tag         => 'tag1',
},
{
    person_id   => 1,
    tag         => 'tag2',
}]

set_tag

Associates a tag to a given person with the provided id.

Request:

set_tag(1, 'tag3');

Response:

{
    person_id   => 1,
    tag         => 'tag3',
}

delete_tag

Removes a tag from a given person with the provided id.

Request:

delete_tag(1, 'tag3');

Response:

1

AUTHOR

Ali Anari <ali@anari.me>

COPYRIGHT AND LICENSE

This software is copyright (c) 2014 by Crowdtilt, Inc..

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