On 23/02/07, Jonathan Rockway <[EMAIL PROTECTED]> wrote:
Dave Morriss wrote:
> Question 1: Will I need to build my own plugin to achieve what I want,
> or is there another way?
It's unlikely that you'll want to use a plugin. Plugins should be
reserved for things that modify Catalyst's usual request cycle.
Pagecache, Static::Simple, and ConfigLoader are good examples of
plugins; Prototype is a bad example.
I thought, based on the way C::P::DateTime is put together, that
plugins are also used as a way of making non-Catalyst modules
available in the Catalyst namespace. From the way I interpret the
documentation you referred to I reckon I _could_ do something like
that. You seem to be recommending against it.
I'm not exactly sure what you're trying to do, but it sounds like you
want a regular Perl module:
package MyOrg::Calendar;
use base 'Exporter';
my @EXPORT = qw(workdays_between_dates);
sub workdays_between_dates {
my ($from, $to) = @_;
return 42; # modify to taste
}
Yes, I'm doing something like this already.
In brief, I need to do some basic stuff such as:
- define the organisation's non-workday calendar, which
Date::Calendar can do
- manage a holiday allocation per person (different people have
different rates, and can
earn more by working overtime)
- record "bookings" which have a start date & am/pm, end date &
am/pm, and a duration
- compute duration such that the guy who takes the Friday before a
Monday holiday and
the Tuesday after is billed for only 2 days; decrement the allocation
- etc
I'm using Date::Calc date objects, delta times, and related stuff for
all of this, so I'd like constant data and
Date::Calc/Date::Calendar/DateTime methods as well as my own to be
available in several controllers.
Then in Catalyst, you'd do something like:
package MyOrg::Vacations::Controller::GiveMeADayOff;
use base 'Catalyst::Controller';
use MyOrg::Calendar;
sub get_a_day_off : Path {
my ($self, $c, $date) = @_;
$c->stash(template => 'day_off.tt');
my $last_day_off =
$c->model('Vacataions')->get_last_vacation_day_for($c->user);
if(workdays_between_dates($last_day_off, $date) > 5){
$c->stash(error =>
"Only one vacation day per week is allowed,
slacker!");
}
else {
$c->model('Vacations')->add_vacation($date, $c->user);
}
... # you get the idea
}
Hope this helps a bit.
Yes, thanks. It's broadly what I am doing now. Some of the basic
functionality is working using this technique.
Basically you should read up on writing Perl
modules; I think that's what you really want here. man perlmod should help.
Ow! I didn't realise I was so transparent. Yes, I'm an old-fashioned
programmer from the pre-OO days :-)
> Question 2: Is there a plugin writer's HOWTO?
There is; at:
http://search.cpan.org/~jrockway/Catalyst-Manual-5.700501/lib/Catalyst/Manual/WritingPlugins.pod
But I don't think you need a plugin.
OK, thanks.
--
Dave Morriss
_______________________________________________
List: [email protected]
Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/