Skip to content

Commit

Permalink
a few more tests for nested helpers
Browse files Browse the repository at this point in the history
  • Loading branch information
kraih committed Aug 10, 2014
1 parent 1d6c327 commit 9f3f7ba
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 7 deletions.
11 changes: 4 additions & 7 deletions lib/Mojolicious/Renderer.pm
Expand Up @@ -254,16 +254,12 @@ sub _render_template {
package Mojolicious::Renderer::_Proxy;
use Mojo::Base -base;

use Carp ();
use Scalar::Util ();
use Carp ();

sub AUTOLOAD {
my $self = shift;

my ($package, $method) = split /::(\w+)$/, our $AUTOLOAD;
Carp::croak "Undefined subroutine &${package}::$method called"
unless Scalar::Util::blessed $self && $self->isa(__PACKAGE__);

my $c = $self->{c};
Carp::croak qq{Can't locate object method "$method" via package "$package"}
unless my $helper = $c->app->renderer->get_helper("$self->{p}.$method");
Expand Down Expand Up @@ -407,8 +403,9 @@ Get a C<DATA> section template by name, usually used by handlers.
my $helper = $renderer->get_helper('url_for');
Get helper without prefix or generate a helper dynamically for a prefix,
generated helpers return a proxy object on which nested helpers can be called.
Get a helper by full name, generate a helper dynamically for a prefix or
return C<undef>. Generated helpers return a proxy object on which nested
helpers can be called.
=head2 render
Expand Down
16 changes: 16 additions & 0 deletions t/mojolicious/renderer.t
Expand Up @@ -61,4 +61,20 @@ $c->cookie(foo => 'x' x 4097);
like $log, qr/Cookie "foo" is bigger than 4096 bytes\./, 'right message';
$c->app->log->unsubscribe(message => $cb);

# Nested helpers
$c->app->helper('myapp.defaults' => sub { shift->app->defaults(@_) });
$c->myapp->defaults(foo => 'bar');
is $c->myapp->defaults('foo'), 'bar', 'right result';
is $c->app->myapp->defaults('foo'), 'bar', 'right result';

# Missing method (AUTOLOAD)
eval { $c->myapp->missing };
like $@,
qr/^Can't locate object method "missing" via package "@{[ref $c->myapp]}"/,
'right error';
eval { $c->app->myapp->missing };
like $@,
qr/^Can't locate object method "missing" via package "@{[ref $c->myapp]}"/,
'right error';

done_testing();

0 comments on commit 9f3f7ba

Please sign in to comment.