Re: [Catalyst] Accessing action URIs outside of Catalyst app

2007-01-08 Thread Matt S Trout


On 3 Jan 2007, at 20:21, Brian Kirkbride wrote:


Hello all,

Is there a best practice way to maintain a map of URLs used in a  
Catalyst application.  To clarify, I need to map actions to URLs  
outside of Catalyst (CRON jobs, Emailers, etc) and won't have  
access to $c-uri_for or the $c-dispatcher.


If you need to do this, your design is broken.

Step back. Explain what you're trying to achieve.
--
Matt S Trout, Technical Director, Shadowcat Systems Ltd.
Offering custom development, consultancy and support contracts for  
Catalyst,
DBIx::Class and BAST. Contact mst (at) shadowcatsystems.co.uk for  
details.
+ Help us build a better perl ORM: http://dbix- 
class.shadowcatsystems.co.uk/ +




___
List: Catalyst@lists.rawmode.org
Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.rawmode.org/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] Accessing action URIs outside of Catalyst app

2007-01-08 Thread Brian Kirkbride

Matt S Trout wrote:


On 3 Jan 2007, at 20:21, Brian Kirkbride wrote:


Hello all,

Is there a best practice way to maintain a map of URLs used in a 
Catalyst application.  To clarify, I need to map actions to URLs 
outside of Catalyst (CRON jobs, Emailers, etc) and won't have access 
to $c-uri_for or the $c-dispatcher.


If you need to do this, your design is broken.


Perhaps, but I ascribe that to it being in transition :)



Step back. Explain what you're trying to achieve.


Automated emails sent out to users need to provide them with a list of different 
webapp URLs.  These actions are asynchronous from the webapp itself.  I have a 
number of scripts (a few are legacy dinosaurs) that need webapp URLs as well.


If I choose to change /cancel to /account/cancel later on, I'd like to do it in 
one place.  I realize that without parsing the controllers' actions I can't 
expect the outside code to get those URLs.  I would also rather not use 
MyApp.pm in simple scripts that only need my model logic and a URL, and in some 
cases I can't.


My hope was to configure the URL mapping in a config file, which could be 
accessed by my webapp and outside scripts.  Something like this:


sub cancel : Args(1) : Path($urlmap-{account_cancel}) {
# action
}

This, of course, does not work because attributes do not evaluate their 
arguments.  Perhaps my solution is to subclass the Dispatcher to allow for:


sub cancel : Args(1) : FromURLMap('account_cancel') {
# action
}

That wouldn't be too hard.  Thoughts?

Best,
Brian

___
List: Catalyst@lists.rawmode.org
Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.rawmode.org/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] Accessing action URIs outside of Catalyst app

2007-01-08 Thread Matt S Trout


On 8 Jan 2007, at 16:59, Brian Kirkbride wrote:


Matt S Trout wrote:

On 3 Jan 2007, at 20:21, Brian Kirkbride wrote:

Hello all,

Is there a best practice way to maintain a map of URLs used in a  
Catalyst application.  To clarify, I need to map actions to URLs  
outside of Catalyst (CRON jobs, Emailers, etc) and won't have  
access to $c-uri_for or the $c-dispatcher.

If you need to do this, your design is broken.


Perhaps, but I ascribe that to it being in transition :)


Step back. Explain what you're trying to achieve.


Automated emails sent out to users need to provide them with a list  
of different webapp URLs.  These actions are asynchronous from the  
webapp itself.  I have a number of scripts (a few are legacy  
dinosaurs) that need webapp URLs as well.


If I choose to change /cancel to /account/cancel later on, I'd like  
to do it in one place.  I realize that without parsing the  
controllers' actions I can't expect the outside code to get those  
URLs.  I would also rather not use MyApp.pm in simple scripts  
that only need my model logic and a URL, and in some cases I can't.


Explain can't in a form that doesn't make me feel you've just  
completely missed the point of achieve and told me what you're  
trying (failing) to implement :)




My hope was to configure the URL mapping in a config file, which  
could be accessed by my webapp and outside scripts.  Something like  
this:


sub cancel : Args(1) : Path($urlmap-{account_cancel}) {
# action
}

This, of course, does not work because attributes do not evaluate  
their arguments.  Perhaps my solution is to subclass the Dispatcher  
to allow for:


sub cancel : Args(1) : FromURLMap('account_cancel') {
# action
}

That wouldn't be too hard.  Thoughts?


Yeah, Catalyst already has an implementation for this -

package MyApp::Controller::Foo;

...

sub cancel :Action :Args(1) { ... }

then in myapp.conf

Controller Foo
  Action cancel
Path /cancel
  /Action
/Controller

You can apply any attribute like that, although setting Args or  
similar from the config file might be considered unwise.


--
Matt S Trout, Technical Director, Shadowcat Systems Ltd.
Offering custom development, consultancy and support contracts for  
Catalyst,
DBIx::Class and BAST. Contact mst (at) shadowcatsystems.co.uk for  
details.
+ Help us build a better perl ORM: http://dbix- 
class.shadowcatsystems.co.uk/ +




___
List: Catalyst@lists.rawmode.org
Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.rawmode.org/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] Accessing action URIs outside of Catalyst app

2007-01-08 Thread Matt S Trout


On 8 Jan 2007, at 18:12, Brian Kirkbride wrote:


Matt S Trout wrote:

On 8 Jan 2007, at 16:59, Brian Kirkbride wrote:

Matt S Trout wrote:

On 3 Jan 2007, at 20:21, Brian Kirkbride wrote:

Hello all,

Is there a best practice way to maintain a map of URLs used in  
a Catalyst application.  To clarify, I need to map actions to  
URLs outside of Catalyst (CRON jobs, Emailers, etc) and won't  
have access to $c-uri_for or the $c-dispatcher.

If you need to do this, your design is broken.


Perhaps, but I ascribe that to it being in transition :)


Step back. Explain what you're trying to achieve.


Automated emails sent out to users need to provide them with a  
list of different webapp URLs.  These actions are asynchronous  
from the webapp itself.  I have a number of scripts (a few are  
legacy dinosaurs) that need webapp URLs as well.


If I choose to change /cancel to /account/cancel later on, I'd  
like to do it in one place.  I realize that without parsing the  
controllers' actions I can't expect the outside code to get those  
URLs.  I would also rather not use MyApp.pm in simple scripts  
that only need my model logic and a URL, and in some cases I can't.
Explain can't in a form that doesn't make me feel you've just  
completely missed the point of achieve and told me what you're  
trying (failing) to implement :)


I'd like to routinely send an email to a user telling them to pay  
for something, including a link to a page in my webapp allowing  
them to do so.


I just use Catalyst::Engine::JobQueue::POE (or in older apps a script  
that's the moral equivalent) and uri_for for that.






My hope was to configure the URL mapping in a config file, which  
could be accessed by my webapp and outside scripts.  Something  
like this:


sub cancel : Args(1) : Path($urlmap-{account_cancel}) {
# action
}

This, of course, does not work because attributes do not evaluate  
their arguments.  Perhaps my solution is to subclass the  
Dispatcher to allow for:


sub cancel : Args(1) : FromURLMap('account_cancel') {
# action
}

That wouldn't be too hard.  Thoughts?

Yeah, Catalyst already has an implementation for this -
package MyApp::Controller::Foo;
...
sub cancel :Action :Args(1) { ... }
then in myapp.conf
Controller Foo
  Action cancel
Path /cancel
  /Action
/Controller
You can apply any attribute like that, although setting Args or  
similar from the config file might be considered unwise.


Perfect, I had missed that this type of URL to action mapping was  
possible with the :Action attribute.  I have no interest in placing  
Args or other attributes in the config.  This should work fine for me.


:Action isn't -required-, you just need at least one  
attribute. :Action is the long-standing traditional no-op attribute  
(:Private isn't valid with any other attrs) so I tend to add it to  
all of them so if I delete the :Args for whatever reason or don't  
have one in the first place things don't go batshit on me :)


--
Matt S Trout, Technical Director, Shadowcat Systems Ltd.
Offering custom development, consultancy and support contracts for  
Catalyst,
DBIx::Class and BAST. Contact mst (at) shadowcatsystems.co.uk for  
details.
+ Help us build a better perl ORM: http://dbix- 
class.shadowcatsystems.co.uk/ +




___
List: Catalyst@lists.rawmode.org
Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.rawmode.org/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] Accessing action URIs outside of Catalyst app

2007-01-08 Thread Bill Moseley
On Mon, Jan 08, 2007 at 12:12:07PM -0600, Brian Kirkbride wrote:
 I'd like to routinely send an email to a user telling them to pay for 
 something, including a link to a page in my webapp allowing them to do so.

C::P::Scheduler?  That's what I use so I can use c.uri_for() in my
email templates.


-- 
Bill Moseley
[EMAIL PROTECTED]


___
List: Catalyst@lists.rawmode.org
Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.rawmode.org/
Dev site: http://dev.catalyst.perl.org/