Date::Holidays::Adapter::JP - an adapter class for Date::Japanese::Holiday


Date-Holidays documentation Contained in the Date-Holidays distribution.

Index


Code Index:

NAME

Top

Date::Holidays::Adapter::JP - an adapter class for Date::Japanese::Holiday

VERSION

Top

This POD describes version 0.01 of Date::Holidays::Adapter::JP

DESCRIPTION

Top

The is the adapter class for Date::Japanese::Holiday.

SUBROUTINES/METHODS

Top

new

The constructor, takes a single named argument, countrycode

The constructor is inherited from Date::Holidays::Adapter

is_holiday

The holidays method, takes 3 named arguments, year, month and day

returns an indication of whether the day is a holiday in the calendar of the country referenced by countrycode in the call to the constructor new.

holidays

Not implemented in Date::Japanese::Holiday, calls to this throw the Date::Holidays::Exception::UnsupportedMethod

DIAGNOSTICS

Top

* Date::Holidays::Exception::AdapterLoad

This exception is thrown when Date::Holidays::Adapter attempts to load an actual adapter implementation. This exception is recoverable to the extend that is caught and handled internally.

When caught the SUPER adapter is attempted loaded, Date::Holidays::Adapter if this however fails Date::Holidays::Exception::SuperAdapterLoad it thrown see below.

* Date::Holidays::Exception::AdapterInitialization

This exception is thrown when in was not possible to load either a implementation of a given adapter, or the SUPER adapter Date::Holidays::Adapter.

* Date::Holidays::Exception::NoCountrySpecified

The exception is thrown if a country code is provided, which is not listed in Locale::Country, which lists ISO 3166 codes, which is the unique 2 character strings assigned to each country in the world.

* Date::Holidays::Exception::UnsupportedMethod

Exception thrown in the case where the loaded and initialized module does not support the called method. (SEE: METHODS/SUBROUTINES).

DEPENDENCIES

Top

* Date::Japanese::Holiday
* Date::Holidays::Adapter
* Date::Holidays::Exception::UnsupportedMethod
* Date::Holidays::Exception::InvalidCountryCode
* Date::Holidays::Exception::NoCountrySpecified
* Date::Holidays::Exception::UnsupportedMethod
* Error
* UNIVERSAL

INCOMPATIBILITIES

Top

Please refer to INCOMPATIBILITIES in Date::Holidays

BUGS AND LIMITATIONS

Top

The adaptee module for this class is named: Date::Japanese::Holiday, but the adapter class is following the general adapter naming of Date::Holidays::Adapter::<countrycode>.

holidays method or similar isnot implemented in Date::Japanese::Holiday as of version 0.05.

The adapter does currently not support the object-oriented API of Date::Japanese::Holiday.

Please refer to BUGS AND LIMITATIONS in Date::Holidays

BUG REPORTING

Top

Please report issues via CPAN RT:

  http://rt.cpan.org/NoAuth/Bugs.html?Dist=Date-Holidays

or by sending mail to

  bug-Date-Holidays@rt.cpan.org

SEE ALSO

Top

* Date::Holidays

AUTHOR

Top

Jonas B. Nielsen, (jonasbn) - <jonasbn@cpan.org>

LICENSE AND COPYRIGHT

Top


Date-Holidays documentation Contained in the Date-Holidays distribution.

package Date::Holidays::Adapter::JP;

# $Id: JP.pm 1742 2007-02-22 19:47:55Z jonasbn $

use strict;
use warnings;
use vars qw($VERSION);
use Locale::Country;
use Error qw(:try);
use UNIVERSAL qw(can);

use base 'Date::Holidays::Adapter';
use Date::Holidays::Exception::UnsupportedMethod;
use Date::Holidays::Exception::InvalidCountryCode;
use Date::Holidays::Exception::NoCountrySpecified;

$VERSION = '0.01';

sub holidays {
    throw Date::Holidays::Exception::UnsupportedMethod('is_holiday');
    return;
}

sub is_holiday {
    my ($self, %params) = @_;
    
    my $sub = $self->{_adaptee}->can('is_japanese_holiday');

    return &{$sub}($params{'year'}, $params{'month'}, $params{'day'});
}

sub _fetch {
    my ( $self, $params ) = @_;

    if ( !$self->{_countrycode} ) {
        throw Date::Holidays::Exception::NoCountrySpecified("No country code specified");
    }

    my $module = 'Date::Japanese::Holiday';

    if ( !$params->{nocheck} ) {
        if ( !code2country($self->{_countrycode}) ) { #from Locale::Country
            throw Date::Holidays::Exception::InvalidCountryCode("$self->{_countrycode} is not a valid country code"); 
        }
    }

    try {
        $self->_load($module);
    }
    catch Date::Holidays::Exception::AdapterLoad with {
        my $E = shift;
        $E->throw;    
    };

    return $module;
}

1;

__END__