From: Tomas Doran (t0m) Date: Thu, 11 Jun 2009 09:34:10 +0000 (+0100) Subject: Tweaks X-Git-Tag: 0.07 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Component-ACCEPT_CONTEXT.git;a=commitdiff_plain;h=refs%2Fheads%2Fmaster Tweaks --- diff --git a/.gitignore b/.gitignore index bfd20cf..c40818e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +MANIFEST.bak cover_db META.yml Makefile diff --git a/MANIFEST.SKIP b/MANIFEST.SKIP index 8fb2024..e11782e 100644 --- a/MANIFEST.SKIP +++ b/MANIFEST.SKIP @@ -1,3 +1,4 @@ +.gitignore .git/ blib pm_to_blib diff --git a/README b/README index ce6155f..ceb1436 100644 --- a/README +++ b/README @@ -1,40 +1,143 @@ -Catalyst-Component-ACCEPT_CONTEXT +NAME + Catalyst::Component::ACCEPT_CONTEXT - Make the current Catalyst request + context available in Models and Views. -Make accessing the Catalyst context from a Model/View even easier. +VERSION + Version 0.07 -INSTALLATION +SYNOPSIS + Models and Views don't usually have access to the request object, since + they probably don't really need it. Sometimes, however, having the + request context available outside of Controllers makes your application + cleaner. If that's the case, just use this module as a base class: -To install this module, run the following commands: + package MyApp::Model::Foobar; + use base qw|Catalyst::Component::ACCEPT_CONTEXT Catalyst::Model|; - perl Makefile.PL - make - make test - make install + Then, you'll be able to get the current request object from within your + model: + sub do_something { + my $self = shift; + print "The current URL is ". $self->context->req->uri->as_string; + } -SUPPORT AND DOCUMENTATION +WARNING WARNING WARNING + Using this module is somewhat of a hack. Changing the state of your + objects on every request is a pretty braindead way of doing OO. If you + want your application to be brain-live, then you should use + Catalyst::Component::InstancePerContext. -After installing, you can find documentation for this module with the perldoc command. + Instead of doing this on every request (which is basically what this + module does): - perldoc Catalyst::Component::ACCEPT_CONTEXT + $my_component->context($c); -You can also look for information at: + It's better to do something like this: - Search CPAN - http://search.cpan.org/dist/Catalyst-Component-ACCEPT_CONTEXT + package FooApp::Controller::Root; + use base 'Catalyst::Controller'; + use Moose; - CPAN Request Tracker: - http://rt.cpan.org/NoAuth/Bugs.html?Dist=Catalyst-Component-ACCEPT_CONTEXT + with 'Catalyst::Component::InstancePerContext'; + has 'context' => (is => 'ro'); - AnnoCPAN, annotated CPAN documentation: - http://annocpan.org/dist/Catalyst-Component-ACCEPT_CONTEXT + sub build_per_context_instance { + my ($self, $c, @args) = @_; + return $self->new({ context => $c, %$self, @args }); + } - CPAN Ratings: - http://cpanratings.perl.org/d/Catalyst-Component-ACCEPT_CONTEXT + sub actions :Whatever { + my $self = shift; + my $c = $self->context; # this works now + } -COPYRIGHT AND LICENCE + 1; -Copyright (C) 2007 Jonathan Rockway + Now you get a brand new object that lasts for a single request instead + of changing the state of an existing one on each request. This is much + cleaner OO design. + + The best strategy, though, is not to use the context inside your model. + It's best for your Controller to pull the necessary data from the + context, and pass it as arguments: + + sub action :Local { + my ($self, $c) = @_; + my $foo = $c->model('Foo'); + my $quux = $foo->frobnicate(baz => $c->request->params->{baz}); + $c->stash->{quux} = $quux; + } + + This will make it Really Easy to test your components outside of + Catalyst, which is always good. + +METHODS + context + Returns the current request context. + + ACCEPT_CONTEXT + Catalyst calls this method to give the current context to your model. + You should never call it directly. + + Note that a new instance of your component isn't created. All we do here + is shove $c into your component. ACCEPT_CONTEXT allows for other + behavior that may be more useful; if you want something else to happen + just implement it yourself. + + See Catalyst::Component for details. + + COMPONENT + Overridden to use initial application object as context before a + request. + +AUTHOR + Jonathan Rockway, "" + + Patches contributed and maintained by: + + Rafael Kitover (Caelum) + Tomas Doran (t0m) "" + +BUGS + Please report any bugs or feature requests to + "bug-catalyst-component-accept_context at rt.cpan.org", or through the + web interface at + . I will be notified, and then you'll automatically be + notified of progress on your bug as I make changes. + +SUPPORT + You can find documentation for this module with the perldoc command. + + perldoc Catalyst::Component::ACCEPT_CONTEXT + + You can also look for information at: + + * Catalyst Website + + + * AnnoCPAN: Annotated CPAN documentation + + + * CPAN Ratings + + + * RT: CPAN's request tracker + + + * Search CPAN + + +Source code + The source code for this project can be found at: + + git://git.shadowcat.co.uk/catagits/Catalyst-Component-ACCEPT_CONTEXT + +COPYRIGHT & LICENSE + Copyright 2007 Jonathan Rockway. + + This program is free software; you can redistribute it and/or modify it + under the same terms as Perl itself. -This program is free software; you can redistribute it and/or modify it -under the same terms as Perl itself.