Calendar-Model
view release on metacpan or search on metacpan
lib/Calendar/Model.pm view on Meta::CPAN
package Calendar::Model;
use strict;
=head1 NAME
Calendar::Model - Simple class modelling Calendars
=head1 VERSION
Version 0.04
=cut
our $VERSION = '0.04';
=head1 SYNOPSIS
use Calendar::Model;
my $cal = Calendar::Model->new();
my $columns = $cal->columns;
my $rows = $cal->rows;
my $dates = $cal->as_list;
my $start_date = $cal->start_date;
my $selected_date = $cal->selected_date
my $month = $cal->month; # 3
my $year = $cal->year; # 1992
my $next_month = $cal->next_month; # 4
my $prev_month = $cal->previous_month; # 2
my $month_name = $cal->month_name; # March
my $next_month_name = $cal->month_name('next'); # April
my $day = $cal->get_day($dt);
my $events = $schema->resultset('events')->search( date => { between => [$cal->start_date->dmy,$cal->last_entry_day->dmy] });
=head1 DESCRIPTION
A simple Model layer providing Classes representing A Calendar containing rows and days
=cut
use POSIX qw(locale_h);
use I18N::Langinfo qw(langinfo DAY_1 DAY_2 DAY_3 DAY_4 DAY_5 DAY_6 DAY_7
MON_1 MON_2 MON_3 MON_4 MON_5 MON_6
MON_7 MON_8 MON_9 MON_10 MON_11 MON_12);
use DateTime;
use DateTime::Duration;
use Calendar::List;
use Calendar::Model::Day;
use Data::Dumper;
use Moose;
with 'MooseX::Role::Pluggable';
use namespace::autoclean;
=head1 ATTRIBUTES
=over 4
=item columns
=item rows
=item month
=item LANG
=item next_month
=item previous_month
=item year
=item next_year
=item previous_year
=item seleted_date
=item days_of_week
=item months_of_year
=back
=cut
has 'columns' => (
is => 'ro',
isa => 'ArrayRef',
init_arg => undef,
writer => '_columns'
);
has 'rows' => (
is => 'ro',
isa => 'ArrayRef',
init_arg => undef,
writer => '_rows',
lib/Calendar/Model.pm view on Meta::CPAN
my $next_month_name = $cal->month_name('next'); # April
=cut
sub month_name {
my ($self, $delta) = @_;
my $monthname;
if ($delta) {
if ($delta eq 'next') {
$monthname = $self->months_of_year()->[$self->next_month];
} elsif ($delta eq 'previous') {
$monthname = $self->months_of_year()->[$self->previous_month];
} else {
die 'unrecognised month delta - needs to be undef, next or previous';
}
} else {
$monthname = $self->months_of_year()->[$self->month];
}
return $monthname;
}
=head2 last_entry_day
Get last day in calendar as a DateTime object
=cut
sub last_entry_day {
my $self = shift;
my $last_day = $self->weeks->[-1][-1];
$self->_set_last_entry_day($last_day->to_DateTime);
return $self->_last_entry_day;
}
=head2 get_day
Get given day from Calendar, takes a DateTime object, returns a Calendar::Modal::Day object
=cut
sub get_day {
my ($self, $match) = @_;
# get delta to start date in days
my $delta = $self->first_entry_day->delta_days( $match );
my ($w, $d) = $delta->in_units( 'weeks', 'days' );
# get delta-nth day from appropriate list
my $last_day = $self->weeks->[$w][$d];
}
###
sub _translate_days_months {
my $self = shift;
# query and save the old locale
my $old_locale = POSIX::setlocale( &POSIX::LC_ALL);
# set local from obj language
POSIX::setlocale( &POSIX::LC_ALL,$self->{LANG});
$self->_days_of_week([ undef, map { langinfo($_) } (DAY_1, DAY_2, DAY_3, DAY_4, DAY_5, DAY_6, DAY_7) ]);
$self->_months_of_year([ undef, map { langinfo($_) } (MON_1, MON_2, MON_3, MON_4, MON_5, MON_6,
MON_7, MON_8, MON_9, MON_10, MON_11, MON_12) ]);
$self->_columns([@{$self->days_of_week}[1,2,3,4,5,6,7]]);
# restore the old locale
setlocale(LC_CTYPE, $old_locale);
return;
}
no Moose;
__PACKAGE__->meta->make_immutable;
=head1 AUTHOR
Aaron Trevena, C<< <teejay at cpan.org> >>
=head1 BUGS
Please report any bugs or feature requests to C<bug-calendar-model at rt.cpan.org>, or through
the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Calendar-Model>. I will be notified, and then you'll
automatically be notified of progress on your bug as I make changes.
=head1 SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Calendar::Model
You can also look for information at:
=over 4
=item * RT: CPAN's request tracker (report bugs here)
L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Calendar-Model>
=item * AnnoCPAN: Annotated CPAN documentation
L<http://annocpan.org/dist/Calendar-Model>
=item * CPAN Ratings
L<http://cpanratings.perl.org/d/Calendar-Model>
=item * Search CPAN
L<http://search.cpan.org/dist/Calendar-Model/>
=back
=head1 ACKNOWLEDGEMENTS
=head1 LICENSE AND COPYRIGHT
Copyright 2012 Aaron Trevena.
This program is free software; you can redistribute it and/or modify it
under the terms of either: the GNU General Public License as published
by the Free Software Foundation; or the Artistic License.
See L<http://dev.perl.org/licenses/> for more information.
=cut
( run in 0.890 second using v1.01-cache-2.11-cpan-ceb78f64989 )