The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

WebService::RESTCountries - A Perl module to interface with the REST Countries (restcountries.eu) webservice.

SYNOPSIS

  use WebService::RESTCountries;

  my $api = WebService::RESTCountries->new;
  $api->search_all();

DESCRIPTION

WebService::RESTCountries is a Perl client helper library for the REST Countries API (restcountries.eu).

DEVELOPMENT

Source repo at https://github.com/kianmeng/webservice-restcountries.

Docker

If you have Docker installed, you can build your Docker container for this project.

    $ docker build -t webservice-restcountries .
    $ docker run -it -v $(pwd):/root webservice-restcountries bash
    # cpanm --installdeps --notest .

Milla

Setting up the required packages.

    $ milla authordeps --missing | cpanm
    $ milla listdeps --missing | cpanm

Check you code coverage.

    $ milla cover

Several ways to run the test.

    $ milla test
    $ milla test --author --release
    $ AUTHOR_TESTING=1 RELEASE_TESTING=1 milla test
    $ AUTHOR_TESTING=1 RELEASE_TESTING=1 milla run prove t/01_instantiation.t
    $ LOGGING=1 milla run prove t/t/02_request.t

Release the module.

    $ milla build
    $ milla release

METHODS

new([%$args])

Construct a new WebService::RESTCountries instance. Optionally takes a hash or hash reference.

    # Instantiate the class.
    my $api = WebService::RESTCountries->new;

api_url

The URL of the API resource.

    # Instantiate the class by setting the URL of the API endpoints.
    my $api = WebService::RESTCountries->new(api_url => 'https://example.com/v2/');

    # Set through method.
    $api->api_url('https://example.com/v2/');

cache

The cache engine used to cache the web service API calls. By default, it uses file-based caching.

    # Instantiate the class by setting the cache engine.
    my $api = WebService::RESTCountries->new(
        CHI->new(
            driver => 'File',
            namespace => 'restcountries',
            root_dir => $ENV{PWD} . '/tmp/cache/'
        )
    );

    # Set through method.
    $api->cache(CHI->new(
        driver => 'File',
        namespace => 'restcountries',
        root_dir => $ENV{PWD} . '/tmp/cache/'
    ));

fields

Show the country data in specified fields. Do this before making any webservice calls.

    # Instantiate the class by setting the selected fields.
    my $api = WebService::RESTCountries->new(fields => ['capital', 'currencies', 'name']);

    # Set through method.
    $api->fields(['capital', 'currencies', 'name']);
    my $counties = $api->search_all();

ping()

Check whether the API endpoint is currently up.

    # Returns 1 if up and 0 otherwise.
    $api->ping();

download([$file_name])

Download the whole countries data as JSON file. Optional path and file name.

    # Using default path and file name.
    $api->download();

    # Using specific path and file name.
    $api->download('/tmp/countries.json');

Check whether the API endpoint is currently up.

    # Returns 1 if up and 0 otherwise.
    $api->ping();

search_all()

Get all the countries. Basically just pull the whole data in JSON format.

    $api->search_all();

search_by_calling_code($calling_code)

Get the details of a country by its calling code, the prefixes for the country phone numbers.

    $api->search_by_calling_code('60');

search_by_capital_city($capital_city)

Get the details of a country by its capital city.

    # Full name.
    $api->search_by_capital_city("Kuala Lumpur");

    # Partial name.
    $api->search_by_capital_city("Kuala");

search_by_country_code($country_code)

Get the details of a country by its ISO 3166 two-letters or three-letters country code.

    # Two-letters.
    $api->search_by_country_code("MY");

    # Three-letters.
    $api->search_by_country_code("MYS");

search_by_country_codes($country_codes)

Get the list of country by multiple ISO 3166 two-letters or three-letters country codes.

    # Two-letters.
    $api->search_by_country_codes(['MY', 'SG']);

    # Three-letters.
    $api->search_by_country_codes(['MYS', 'SGP']);

search_by_country_full_name($full_name)

Get the details of a country by its full name.

    $api->search_by_country_full_name("São Tomé and Príncipe");

search_by_country_name($name)

Get the details of a country by name, either by native or partial name.

    # Native name.
    $api->search_by_country_name("Malaysia");

    # Partial name.
    $api->search_by_country_name("Malays");

search_by_currency($currency)

Get the details of a country by ISO 4217 currency code.

    $api->search_by_currency("MYR");

search_by_language_code($language_code)

Get the details of the a country by ISO 639-1 language code.

    $api->search_by_language_code("ms");

search_by_region($region)

Get list of country by region: Africa, Americas, Asia, Europe, Oceania. Region name is case insensitive.

    $api->search_by_region("Asia");
    $api->search_by_region("asia");

search_by_regional_bloc($regional_bloc)

Get list of country by regional bloc: EU, EFTA, CARICOM, PA, AU, USAN, EEU, AL, ASEAN, CAIS, CEFTA, NAFTA, SAARC. Regional bloc name is case insensitive.

    $api->search_by_region_bloc("EU");
    $api->search_by_regional_bloc("asean");

COPYRIGHT AND LICENSE

This software is Copyright (c) 2018 by Kian Meng, Ang.

This is free software, licensed under:

    The Artistic License 2.0 (GPL Compatible)

AUTHOR

Kian Meng, Ang <kianmeng@users.noreply.github.com>