[Mojolicious] Re: Need help with stashing data and retrieving it in the template

2019-02-07 Thread Ron Bergin
Thank you Dan.  I will work on adjusting the error handling as suggested.

This is the first time I've done any async and for me it's a bit confusing 
and has a stepper learning curve than the Dancer apps that I've done.

-- 
You received this message because you are subscribed to the Google Groups 
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to mojolicious+unsubscr...@googlegroups.com.
To post to this group, send email to mojolicious@googlegroups.com.
Visit this group at https://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.


[Mojolicious] Re: Need help with stashing data and retrieving it in the template

2019-02-07 Thread Ron Bergin
Stefan, Thanks for the link.  I've previously read that post but will need 
to read it again.

Dan, I figured out what was causing that last error.  I forgot to load 
use Mojo::Util 'trim';

The script is now working correctly.  Now I need to work on adding error 
checking/handling for cases where the url is unreachable.

-- 
You received this message because you are subscribed to the Google Groups 
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to mojolicious+unsubscr...@googlegroups.com.
To post to this group, send email to mojolicious@googlegroups.com.
Visit this group at https://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.


[Mojolicious] Re: Need help with stashing data and retrieving it in the template

2019-02-07 Thread Ron Bergin
Dan, thank you for your input.  I haven't looked at promises much but I was 
under the impression (based on some of Joel Berger's examples as well as 
one or two other key mojolicious developers) that delays were supposed to 
be cleaner and more desirable.

I knew about the issue with the for loop initialization.  Using the correct 
loop gave me a 500 error so I temporarily "broke" that while 
troubleshooting the passing of the data via the dumper helper.  I corrected 
that loop and swapped in your code but it is giving a "Premature connection 
close" error.
$ morbo ./titles_promise.pl
Server available at http://127.0.0.1:3000

[Thu Feb  7 11:02:35 2019] [debug] GET "/titles" (604f6be1)
[Thu Feb  7 11:02:35 2019] [debug] Routing to a callback
[Thu Feb  7 11:02:35 2019] [error] Premature connection close
[Thu Feb  7 11:02:35 2019] [debug] Template "exception.development.html.ep" 
not found
[Thu Feb  7 11:02:35 2019] [debug] Template "exception.html.ep" not found
[Thu Feb  7 11:02:35 2019] [debug] Rendering template "mojo/debug.html.ep"
[Thu Feb  7 11:02:35 2019] [debug] Rendering template "mojo/menubar.html.ep"
[Thu Feb  7 11:02:35 2019] [debug] Your secret passphrase needs to be 
changed
[Thu Feb  7 11:02:35 2019] [debug] 500 Internal Server Error (0.028391s, 
35.222/s)


Thinking that it might be due to a scoping issue with $ua, I moved that out 
to have file scope, but then it produced this error:
Use of inherited AUTOLOAD for non-method Mojo::Server::Sandbox::
b205866ab9c46b3f8105929c8a269a25::trim() is deprecated. This will be fatal 
in Perl 5.28 at /home/rkb/test/titles_promise.pl line 23.
[Thu Feb  7 11:19:23 2019] [error] Undefined subroutine &Mojo::Server::
Sandbox::b205866ab9c46b3f8105929c8a269a25::trim called at /usr/local/share/
perl/5.26.1/Mojo/Promise.pm line 123.



On Thursday, February 7, 2019 at 9:48:20 AM UTC-8, Ron Bergin wrote:
>
> I'm brand new to Mojolicious and working on a lite script that goes to 75 
> urls and retrieves text in an h3 tag. I've worked up a working test script 
> that outputs to console and now I'm working on adjusting it to be a web app 
> but I can't seem to get the correct syntax to store/retrieve the data.  
> What am I doing wrong?
>
> #!/usr/bin/perl
>
> use Mojolicious::Lite;
>
> my @urls  = (
> 'https://mojolicious.org',
> 'https://metacpan.org',
> 'https://perlmonks.org',
> 'http://www.google.com',
> );
>
> get '/titles' => sub {
> my $ua= Mojo::UserAgent->new;
> my $async = Mojo::IOLoop::Delay->new;
>
> $async->steps(
> sub { 
> my $self = shift;
> $ua->get($_, $self->begin) for @urls;
> },
> sub {
> my ($self, @tx) = @_;
> my $titles  = [];
>
> foreach (@tx) {
> my $title  = '';
> my $status = $_->res->is_success ? 'Connected' : $_->error
> ->{message};
>
> if ( $_->res->is_success ) {
> $title = $_->res->dom->at('title')->text;
> $title =~ s/^\s+|\s+$//g; # couldn't get Mojo::Util 
> trim function to work
> }
>
> push @$titles, {host => $_->req->url->host, status => 
> $status, title => $title};
> }
> $self->stash(titles => $titles);
> }
> );
> } => 'titles';
>
> app->start;
>
> __DATA__
>
> @@ titles.html.ep
> % layout 'titles';
>
> %= dumper stash('titles')
>
> 
> 
>   Host
>   Status
>   Title
> 
>
> 
> % for my $server ( stash('titles') ) {
>   
> <%= $server->{host} %>
> <%= $server->{status} %>
> <%= $server->{title} =%>
>   
> % }
> 
>
> @@ layouts/titles.html.ep
> 
>
> 
>
> 
>   Titles
> 
>
> 
> Titles
> <%= content =%>
> 
>
> 
>
>
> Here's the output:
>
>> $ ./titles_web.pl get /titles
>> [Thu Feb  7 09:45:54 2019] [debug] GET "/titles" (fcf21ce8)
>> [Thu Feb  7 09:45:54 2019] [debug] Routing to a callback
>> [Thu Feb  7 09:45:54 2019] [debug] Rendering template "titles.html.ep" 
>> from DATA section
>> [Thu Feb  7 09:45:54 2019] [debug] Rendering template 
>> "layouts/titles.html.ep" from DATA section
>> [Thu Feb  7 09:45:54 2019] [debug] 200 OK (0.00267s, 374.532/s)
>> 
>>
>> 
>>
>> 
>>   Titles
>> 
>>
>> 
>> Titles
>>
>> undef
>>
>>
>> 
>> 
>>   Host
>>   Status
>>   Title
>> 
>>
>> 
>>   
>> 
>> 
>> 
>> 
>> 
>> 
>>
>> 
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to mojolicious+unsubscr...@googlegroups.com.
To post to this group, send email to mojolicious@googlegroups.com.
Visit this group at https://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.


[Mojolicious] Re: Need help with stashing data and retrieving it in the template

2019-02-07 Thread Ron Bergin
Note: I cross posted this question on perlmonks 
https://perlmonks.org/?node_id=1229558

On Thursday, February 7, 2019 at 9:48:20 AM UTC-8, Ron Bergin wrote:
>
> I'm brand new to Mojolicious and working on a lite script that goes to 75 
> urls and retrieves text in an h3 tag. I've worked up a working test script 
> that outputs to console and now I'm working on adjusting it to be a web app 
> but I can't seem to get the correct syntax to store/retrieve the data.  
> What am I doing wrong?
>
> #!/usr/bin/perl
>
> use Mojolicious::Lite;
>
> my @urls  = (
> 'https://mojolicious.org',
> 'https://metacpan.org',
> 'https://perlmonks.org',
> 'http://www.google.com',
> );
>
> get '/titles' => sub {
> my $ua= Mojo::UserAgent->new;
> my $async = Mojo::IOLoop::Delay->new;
>
> $async->steps(
> sub { 
> my $self = shift;
> $ua->get($_, $self->begin) for @urls;
> },
> sub {
> my ($self, @tx) = @_;
> my $titles  = [];
>
> foreach (@tx) {
> my $title  = '';
> my $status = $_->res->is_success ? 'Connected' : $_->error
> ->{message};
>
> if ( $_->res->is_success ) {
> $title = $_->res->dom->at('title')->text;
> $title =~ s/^\s+|\s+$//g; # couldn't get Mojo::Util 
> trim function to work
> }
>
> push @$titles, {host => $_->req->url->host, status => 
> $status, title => $title};
> }
> $self->stash(titles => $titles);
> }
> );
> } => 'titles';
>
> app->start;
>
> __DATA__
>
> @@ titles.html.ep
> % layout 'titles';
>
> %= dumper stash('titles')
>
> 
> 
>   Host
>   Status
>   Title
> 
>
> 
> % for my $server ( stash('titles') ) {
>   
> <%= $server->{host} %>
> <%= $server->{status} %>
> <%= $server->{title} =%>
>   
> % }
> 
>
> @@ layouts/titles.html.ep
> 
>
> 
>
> 
>   Titles
> 
>
> 
> Titles
> <%= content =%>
> 
>
> 
>
>
> Here's the output:
>
>> $ ./titles_web.pl get /titles
>> [Thu Feb  7 09:45:54 2019] [debug] GET "/titles" (fcf21ce8)
>> [Thu Feb  7 09:45:54 2019] [debug] Routing to a callback
>> [Thu Feb  7 09:45:54 2019] [debug] Rendering template "titles.html.ep" 
>> from DATA section
>> [Thu Feb  7 09:45:54 2019] [debug] Rendering template 
>> "layouts/titles.html.ep" from DATA section
>> [Thu Feb  7 09:45:54 2019] [debug] 200 OK (0.00267s, 374.532/s)
>> 
>>
>> 
>>
>> 
>>   Titles
>> 
>>
>> 
>> Titles
>>
>> undef
>>
>>
>> 
>> 
>>   Host
>>   Status
>>   Title
>> 
>>
>> 
>>   
>> 
>> 
>> 
>> 
>> 
>> 
>>
>> 
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to mojolicious+unsubscr...@googlegroups.com.
To post to this group, send email to mojolicious@googlegroups.com.
Visit this group at https://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.


[Mojolicious] Need help with stashing data and retrieving it in the template

2019-02-07 Thread Ron Bergin
I'm brand new to Mojolicious and working on a lite script that goes to 75 
urls and retrieves text in an h3 tag. I've worked up a working test script 
that outputs to console and now I'm working on adjusting it to be a web app 
but I can't seem to get the correct syntax to store/retrieve the data.  
What am I doing wrong?

#!/usr/bin/perl

use Mojolicious::Lite;

my @urls  = (
'https://mojolicious.org',
'https://metacpan.org',
'https://perlmonks.org',
'http://www.google.com',
);

get '/titles' => sub {
my $ua= Mojo::UserAgent->new;
my $async = Mojo::IOLoop::Delay->new;

$async->steps(
sub { 
my $self = shift;
$ua->get($_, $self->begin) for @urls;
},
sub {
my ($self, @tx) = @_;
my $titles  = [];

foreach (@tx) {
my $title  = '';
my $status = $_->res->is_success ? 'Connected' : $_->error
->{message};

if ( $_->res->is_success ) {
$title = $_->res->dom->at('title')->text;
$title =~ s/^\s+|\s+$//g; # couldn't get Mojo::Util 
trim function to work
}

push @$titles, {host => $_->req->url->host, status => 
$status, title => $title};
}
$self->stash(titles => $titles);
}
);
} => 'titles';

app->start;

__DATA__

@@ titles.html.ep
% layout 'titles';

%= dumper stash('titles')



  Host
  Status
  Title



% for my $server ( stash('titles') ) {
  
<%= $server->{host} %>
<%= $server->{status} %>
<%= $server->{title} =%>
  
% }


@@ layouts/titles.html.ep





  Titles



Titles
<%= content =%>





Here's the output:

> $ ./titles_web.pl get /titles
> [Thu Feb  7 09:45:54 2019] [debug] GET "/titles" (fcf21ce8)
> [Thu Feb  7 09:45:54 2019] [debug] Routing to a callback
> [Thu Feb  7 09:45:54 2019] [debug] Rendering template "titles.html.ep" 
> from DATA section
> [Thu Feb  7 09:45:54 2019] [debug] Rendering template 
> "layouts/titles.html.ep" from DATA section
> [Thu Feb  7 09:45:54 2019] [debug] 200 OK (0.00267s, 374.532/s)
> 
>
> 
>
> 
>   Titles
> 
>
> 
> Titles
>
> undef
>
>
> 
> 
>   Host
>   Status
>   Title
> 
>
> 
>   
> 
> 
> 
> 
> 
> 
>
> 
>

-- 
You received this message because you are subscribed to the Google Groups 
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to mojolicious+unsubscr...@googlegroups.com.
To post to this group, send email to mojolicious@googlegroups.com.
Visit this group at https://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.