The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
# From http://contourline.wordpress.com/2010/01/27/better-post-on-moosexdeclare-method-signatures/

use strict;
use warnings;
use MooseX::Declare;
class Holiday::California {
    use DateTime;
    use Carp;
    has '_ca_state_holidays' => (
        'is'      => 'ro',
        'isa'     => 'HashRef',
        'builder' => '_build__ca_state_holidays'
    );
    method _build__ca_state_holidays {
        return {
            '2007/01/01' => q{New Year's Day},
            '2007/01/15' => q{Martin Luther King Jr. Day},
            '2007/02/12' => q{Lincoln's Birthday},
            '2007/02/19' => q{Washington's Birthday},
            '2007/05/28' => q{Memorial Day},
            '2007/07/04' => q{Independence Day},
            '2007/09/03' => q{Labor Day},
            '2007/10/08' => q{Columbus Day},
            '2007/11/12' => q{Veteran's Day (observed)},
            '2007/11/22' => q{Thanksgiving Day},
            '2007/11/23' => q{Day after Thanksgiving},
            '2007/12/24' => q{Christmas Eve},
            '2007/12/25' => q{Christmas Day},
        };
    }
    method is_holiday_or_weekend  ( $dt ) {
        confess if (! $dt->isa('DateTime') );
        if ( $dt->day_abbr =~ /sun|sat/isxm ) {
            return 1;
        }
        elsif (
            defined $self->_ca_state_holidays->{ $dt->ymd('/') } )
        {
            return 1;
        }
        return 0;
    }
}
1;