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/

Reply via email to