[Catalyst] Global 'helper' methods

Lukas Thiemeier spamcatcher at thiemeier.net
Tue Oct 30 15:24:00 GMT 2012


Hm... how to measure the overhead of a module?

There is a XS version of the module which is used if you have a C
compiler. I don't know the exact overhead, but I know that it is fast.

I have no experience with the pure perl version of that module.

If all you have to do with the dates is the simple string transformation
you are right. As I said before: I recommend to use DT if you are
working with dates a lot. Doing math on dates and times is annoying,
because of leap years, epochs, timezones and so on. If you need this:
Using DateTime is recommended. If not: Its not :)

If you are ONLY using pure perl modules:
You can include all required modules in your distribution. It should run
on any perl installation, even in a shared host environment.

App::FatPacker helps you doing this...

But this doesn't work as soon as you use XS modules.

On 10/30/2012 04:03 PM, Craig Chant wrote:
> Thanks Lukas,
> 
> I appreciate there is DateTime , though I have so much legacy code that uses my helper class re-writing everything will be a mammoth task.
> 
> I hand rolled a lot when I first started out with Perl, didn't know much about CPAN or PPM, and couldn't load any modules that weren't part of the core install on the original 'shared' hosting I was using.
> 
> Plus I always felt loading an entire module to re-arrange a tiny string seems a bit OTT?
> 
> Dunno, what's the overhead of DateTime?
> 
> Craig.
> 
> -----Original Message-----
> From: Lukas Thiemeier [mailto:spamcatcher at thiemeier.net]
> Sent: 30 October 2012 14:52
> To: catalyst at lists.scsys.co.uk
> Subject: Re: [Catalyst] Global 'helper' methods
> 
> You can also define your constants in "YourApp/Constants.pl", and "use"
> YourApp::Constants wherever you need them.
> 
> YourApp/Constants.pm:
>   use constant { FOO => 1 };
>   1;
> 
> Controller.pm:
> 
>   use YourApp::Constants;
> 
>   # and in some method
>   ...
>   my $global_foo = FOO;
> 
> There might be a better way, but this works...
> 
> For handling dates, I recommend "DateTime", available on cpan:
> 
> Another reason to use DBIC:
> DBIx::Class::Inflatecolumn::DateTime automatically transforms dates stored in a database into a DateTime object, which can be used like this:
> 
> my $uk_string = $datetime->dmy('/');
> my $us_string = $datetime->ymd('-');
> 
> But DateTime is not related to DBIC, DBIC just makes using it easy.
> 
> Use it if you have to work with dates a lot. It has lots of methods for outputting dates, times or both in different formats, and it allows datetime-math...
> 
> 
> On 10/30/2012 03:39 PM, Craig Chant wrote:
>> Well I opted for putting my globals (methods and constants) in
>> MyApp.pm
>>
>> It's working grand with $c->myMethod or $c->MY_CONSTANT
>>
>> I use to have them working as a bareword within my application , but $c->MY_CONSTANT is just as easy!
>>
>> Many thanks for all the input and help, it really is appreciated.
>>
>> -----Original Message-----
>> From: Lukas Thiemeier [mailto:spamcatcher at thiemeier.net]
>> Sent: 30 October 2012 13:56
>> To: catalyst at lists.scsys.co.uk
>> Subject: Re: [Catalyst] Global 'helper' methods
>>
>> Hi Craig,
>>
>> Writing helpers in your main App.pm and using roles is not either-or.
>>
>> Roles are one possibility to modify your classes in a reusable way.
>>
>> If your helpers are really global, which means that they are used by all, or almost all your controllers, I would put them into your main application class.
>>
>> If you have more than one application which make use of the same
>> helpers: Put them into a role:
>>
>> YourHelperRole.pm:
>>
>>   package YourHelperRole;
>>   use Moose::Role;
>>
>>   has "some_attribute" => ( ... ); # if you need attributes
>>
>>   sub helpermethod1{
>>         my ($self, $other, $args) = @_;
>>         do_something();
>>   }
>>
>>   sub helpermethod2{
>>         my ($self, $other, $args) = @_;
>>         do_something_different();
>>   }
>>
>>   no Moose::Role; # or use namespace::autoclean or MooseX::MarkAsMethod
>>   1;
>>
>> App.pm:
>>
>>   use Catalyst qw( ... );
>>   extends "Catalyst";
>>   with qw/YourHelperRole/;
>>
>>   ...
>>
>> In my opinion, extending your main App.pm with roles is only useful if you need the same helpers in different locations, too.
>> If you only need them for that single application,  avoid the overhead related to using roles.
>>
>> If you have helpers which are only needed by some controllers, create a role for your controllers. You can not only implement helpers in you roles, you can also create method-modifiers, which change the way your methods behave.
>>
>> Here is an example, which writes sth to the log, after the "delete"
>> method was called:
>>
>> YourLogRole.pm:
>>
>>   package YourLogRole;
>>
>>   use Moose::Role;
>>   requires qw/delete/; #die if the consuming class has no "delete"
>>
>>   after "delete" => sub{
>>         my ($self, $c) = @_;
>>         $c->log->debug("DELETE called");
>>   };
>>
>>   no Moose::Role;
>>   1;
>>
>> Controller1.pm: (has the helpers, but no logging)
>>
>>   package Controller1;
>>   use Moose;
>>   extends "Catalyst::Controller";
>>   with qw/
>>         YourHelperRole
>>   /;
>>
>>   sub someaction :Local {
>>         my ($self, $c) =@_;
>>         $self->helpermethod1();
>>   }
>>
>>   ...
>>
>> Controller2.pm: (has helpers AND logging)
>>
>>   package Controller2;
>>   use Moose;
>>   extends "Catalyst::Controller";
>>   with qw/
>>         YourLogRole
>>         YourHelperRole
>>   /;
>>
>>   sub delete :Local :Args(1) { ... }
>>
>> Controller3.pm (has logging, but no helpers)
>>
>>   package Controller3;
>>   use Moose;
>>   extends "Catalyst::Controller";
>>   with qw/
>>         YourLogRole
>>   /;
>>
>>   sub delete :Local :Args(1) { ... }
>>
>> Roles are very powerful tools. I use them a lot.
>> Read the Moose docs for more information.
>>
>> If you don't want to learn Moose, roles and so on now, just remember:
>>
>> 1. write sth in a role
>> 2. consume the role in a moose class, using "with"
>> 3. your roles methods and attributes will be available in the
>> consuming class
>>
>> Lukas
>>
>> On 10/30/2012 02:03 PM, Craig Chant wrote:
>>> Hi,
>>>
>>>
>>>
>>> Please could you advise the best way of having a global 'helper'
>>> class that has all commonly used methods in it accessible for any
>>> part of the catalyst app.
>>>
>>>
>>>
>>> I found this thread
>>> http://stackoverflow.com/questions/11941836/catalyst-global-subroutin
>>> e
>>> s
>>>
>>>
>>>
>>> With one indicating it's ok to put them in the main MyApp.pm and
>>> another saying to use Moose & Roles.
>>>
>>>
>>>
>>> What is considered the correct way and could you provide an example
>>> of how I create this helper class and bolt it to the Catalyst application.
>>>
>>>
>>>
>>> Many thanks,
>>>
>>>
>>>
>>> */Craig Chant/*
>>>
>>> I.T. Manager
>>>
>>> Description: cid:image001.png at 01CD5F4A.17E848D0
>>>
>>> Main Line            01903 602664
>>>
>>> Direct Line           01903 227753
>>>
>>> Visit our website http://www.homeloanpartnership.com
>>>
>>> *HomeLoan Partnership have been named the Best Mortgage Network,
>>> 2012, at the myintroducer.com Industry Awards*
>>>
>>>
>>>
>>> This Email and any attachments contain confidential information and
>>> is intended solely for the individual to whom it is addressed. If
>>> this Email has been misdirected, please notify the author as soon as
>>> possible. If you are not the intended recipient you must not
>>> disclose, distribute, copy, print or rely on any of the information
>>> contained, and all copies must be deleted immediately. Whilst we take
>>> reasonable steps to try to identify any software viruses, any
>>> attachments to this e-mail may nevertheless contain viruses, which
>>> our anti-virus software has failed to identify. You should therefore
>>> carry out your own anti-virus checks before opening any documents.
>>> HomeLoan Partnership will not accept any liability for damage caused
>>> by computer viruses emanating from any attachment or other document supplied with this e-mail.
>>> HomeLoan Partnership reserves the right to monitor and archive all
>>> e-mail communications through its network. No representative or
>>> employee of HomeLoan Partnership has the authority to enter into any
>>> contract on behalf of HomeLoan Partnership by email. HomeLoan
>>> Partnership is a trading name of H L Partnership Limited, registered
>>> in England and Wales with Registration Number 5011722. Registered
>>> office: 26-34 Old Street, London, EC1V 9QQ. H L Partnership Limited
>>> is authorised and regulated by the Financial Services Authority.
>>>
>>>
>>> _______________________________________________
>>> List: Catalyst at lists.scsys.co.uk
>>> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
>>> Searchable archive:
>>> http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
>>> Dev site: http://dev.catalyst.perl.org/
>>
>>
>> _______________________________________________
>> List: Catalyst at lists.scsys.co.uk
>> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
>> Searchable archive:
>> http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
>> Dev site: http://dev.catalyst.perl.org/ This Email and any attachments
>> contain confidential information and is intended solely for the
>> individual to whom it is addressed. If this Email has been
>> misdirected, please notify the author as soon as possible. If you are
>> not the intended recipient you must not disclose, distribute, copy,
>> print or rely on any of the information contained, and all copies must
>> be deleted immediately. Whilst we take reasonable steps to try to
>> identify any software viruses, any attachments to this e-mail may
>> nevertheless contain viruses, which our anti-virus software has failed
>> to identify. You should therefore carry out your own anti-virus checks
>> before opening any documents. HomeLoan Partnership will not accept any
>> liability for damage caused by computer viruses emanating from any
>> attachment or other document supplied with this e-mail. HomeLoan
>> Partnership reserves the right to monitor and archive all e-mail
>> communications through its network. No representative or employee of
>> HomeLoan Partn
>  ership ha
> s the authority to enter into any contract on behalf of HomeLoan Partnership by email. HomeLoan Partnership is a trading name of H L Partnership Limited, registered in England and Wales with Registration Number 5011722. Registered office: 26-34 Old Street, London, EC1V 9QQ. H L Partnership Limited is authorised and regulated by the Financial Services Authority.
>>
>> _______________________________________________
>> List: Catalyst at lists.scsys.co.uk
>> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
>> Searchable archive:
>> http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
>> Dev site: http://dev.catalyst.perl.org/
> 
> 
> _______________________________________________
> List: Catalyst at lists.scsys.co.uk
> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
> Dev site: http://dev.catalyst.perl.org/
> This Email and any attachments contain confidential information and is intended solely for the individual to whom it is addressed. If this Email has been misdirected, please notify the author as soon as possible. If you are not the intended recipient you must not disclose, distribute, copy, print or rely on any of the information contained, and all copies must be deleted immediately. Whilst we take reasonable steps to try to identify any software viruses, any attachments to this e-mail may nevertheless contain viruses, which our anti-virus software has failed to identify. You should therefore carry out your own anti-virus checks before opening any documents. HomeLoan Partnership will not accept any liability for damage caused by computer viruses emanating from any attachment or other document supplied with this e-mail. HomeLoan Partnership reserves the right to monitor and archive all e-mail communications through its network. No representative or employee of HomeLoan Partn
 ership ha
s the authority to enter into any contract on behalf of HomeLoan Partnership by email. HomeLoan Partnership is a trading name of H L Partnership Limited, registered in England and Wales with Registration Number 5011722. Registered office: 26-34 Old Street, London, EC1V 9QQ. H L Partnership Limited is authorised and regulated by the Financial Services Authority.
> 
> _______________________________________________
> List: Catalyst at lists.scsys.co.uk
> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
> Dev site: http://dev.catalyst.perl.org/




More information about the Catalyst mailing list