NAME
    Calendar::Indonesia::Holiday - List Indonesian public holidays

VERSION
    version 0.01

SYNOPSIS
     use Calendar::Indonesia::Holiday qw(list_id_holidays);

     # list Indonesian holidays for the year 2011, without the joint leave days
     # ("cuti bersama"), show only the dates

     my $res = list_id_holidays(year => 2011, is_joint_leave=>0);
     # sample result
     [200, "OK", [
       '2011-01-01',
       '2011-02-03',
       '2011-02-16',
       '2011-03-05',
       '2011-04-22',
       '2011-05-17',
       '2011-06-02',
       '2011-06-29',
       '2011-08-17',
       '2011-08-31',
       '2011-09-01',
       '2011-11-07',
       '2011-11-27',
       '2011-12-25',
     ]];

     # list religious Indonesian holidays, show full details
     my $res = list_id_holidays(year => 2011,
                                has_tags => ['religious'], detail=>1);

     # sample result
     [200, "OK", [
       {date       => '2011-02-16',
        day        => 16,
        month      => 2,
        year       => 2011,
        id_name    => 'Maulid Nabi Muhammad',
        en_name    => 'Mawlid',
        en_aliases => ['Mawlid An-Nabi'],
        id_aliases => ['Maulud'],
        is_holiday => 1,
        tags       => [qw/religious religion=islam calendar=lunar/],
       },
       ...
     ]];

     # check whether 2011-02-16 is a holiday
     my $res = list_id_holidays(date => '2011-02-16');
     print "2011-02-16 is a holiday\n" if @{$res->[2]};

DESCRIPTION
    This module provides two functions: list_id_holidays.

    This module uses Log::Any logging framework.

    This module's functions has Sub::Spec specs.

FUNCTIONS
    None are exported by default, but they are exportable.

  list_id_holidays(%args) -> [STATUS_CODE, ERR_MSG, RESULT]
    List Indonesian holidays in calendar.

    List holidays and joint leave days ("cuti bersama").

    Contains data from years 2008 to 2012 (joint leave days until 2012).

    Returns a 3-element arrayref. STATUS_CODE is 200 on success, or an error
    code between 3xx-5xx (just like in HTTP). ERR_MSG is a string containing
    error message, RESULT is the actual result.

    Field selection arguments ("*" denotes required arguments):

    *   detail => *bool* (default 0)

        Return detailed data (all fields).

    *   fields => *array*

        Select fields to return.

        When off, will return an array of values without field names
        (array/list).

        Default is off, will be turned on by default when 'fields' or
        'detail' options are specified.

    *   show_field_names => *bool*

        Show field names in result (as hash/assoc).

        When off, will return an array of values without field names
        (array/list). When on, will return an array of field names and
        values (hash/associative array).

    Filter arguments:

    *   q => *str*

        Search.

    Filter for date arguments:

    *   date => *str*

        Only return results having certain value of date.

    *   date_contain => *str*

        Only return results with date containing certain text.

    *   date_match => *str*

        Only return results with date matching specified regex.

    *   date_not_contain => *str*

        Only return results with date not containing certain text.

    *   date_not_match => *str*

        Only return results with date matching specified regex.

    *   max_date => *str*

        Only return results having a certain maximum value of date.

    *   min_date => *str*

        Only return results having a certain minimum value of date.

    Filter for day arguments:

    *   day => *int*

        Only return results having certain value of day.

    *   max_day => *int*

        Only return results having a certain maximum value of day.

    *   min_day => *int*

        Only return results having a certain minimum value of day.

    Filter for dow arguments:

    *   dow => *int*

        Only return results having certain value of dow.

    *   max_dow => *int*

        Only return results having a certain maximum value of dow.

    *   min_dow => *int*

        Only return results having a certain minimum value of dow.

    Filter for is_holiday arguments:

    *   is_holiday => *bool* (default 0)

        Only return results having a true is_holiday value.

    Filter for is_joint_leave arguments:

    *   is_joint_leave => *bool* (default 0)

        Only return results having a true is_joint_leave value.

    Filter for month arguments:

    *   max_month => *int*

        Only return results having a certain maximum value of month.

    *   min_month => *int*

        Only return results having a certain minimum value of month.

    *   month => *int*

        Only return results having certain value of month.

    Filter for tags arguments:

    *   has_tags => *array*

        Only return results having specified values in tags.

    *   lacks_tags => *array*

        Only return results not having specified values in tags.

    Filter for year arguments:

    *   max_year => *int*

        Only return results having a certain maximum value of year.

    *   min_year => *int*

        Only return results having a certain minimum value of year.

    *   year => *int*

        Only return results having certain value of year.

    Order arguments:

    *   random => *bool* (default 0)

        If on, return result in random order.

    *   sort => *str*

        Order data according to certain fields.

        A list of field names separated by comma. Each field can be prefixed
        with '-' to specify descending order instead of the default
        ascending.

    Paging arguments:

    *   result_limit => *int*

        Only return a certain number of results.

    *   result_start => *int* (default 1)

        Only return results from a certain position.

FAQ
SEE ALSO
    This API is available on GudangAPI, http://www.gudangapi.com/ , under
    "calendar/id" module. To use GudangAPI, you can use WWW::GudangAPI.

AUTHOR
    Steven Haryanto <stevenharyanto@gmail.com>

COPYRIGHT AND LICENSE
    This software is copyright (c) 2011 by Steven Haryanto.

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

