Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018

 view release on metacpan or  search on metacpan

README  view on Meta::CPAN

    Please visit the project's homepage at
    <https://metacpan.org/release/Acme-CPANModulesBundle-Import-MojoliciousA
    dvent-2018>.

SOURCE
    Source repository is at
    <https://github.com/perlancar/perl-Acme-CPANModulesBundle-Import-Mojolic
    iousAdvent-2018>.

BUGS
    Please report any bugs or feature requests on the bugtracker website
    <https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModulesBundl
    e-Import-MojoliciousAdvent-2018>

    When submitting a bug or request, please include a test-file or a patch
    to an existing test-file that illustrates the bug or desired feature.

AUTHOR
    perlancar <perlancar@cpan.org>

COPYRIGHT AND LICENSE
    This software is copyright (c) 2018 by perlancar@cpan.org.

    This is free software; you can redistribute it and/or modify it under
    the same terms as the Perl 5 programming language system itself.

devdata/https_mojolicious.io_blog_2018_12_01_welcome-mojoconf-recap_  view on Meta::CPAN

<h3>Keynote</h3>

<p>This year&#39;s keynote was delivered by Author and Perl luminary <a href="http://www252.pair.com/~comdog/">brian d foy</a>.
He talked about how Mojo&#39;s whipupitude got real work done quickly in his consulting gigs.</p>

<p><iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen frameborder="0" height="480" src="https://www.youtube.com/embed/1tPAfgE3CbU" width="854"></iframe></p>

<h3>Mojolicious 8.0 Announcement</h3>

<p>Mojolicious Project founder and lead developer Sebastian Riedel presented &quot;Eight Point Oh&quot;.
Though it is ostensibly an announcement of the 8.0 release, it is more properly a recap of the features added to Mojo since 7.0.
It isn&#39;t just Mojolicious either, several spin-off projects are also mentioned.</p>

<p><iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen frameborder="0" height="480" src="https://www.youtube.com/embed/nYlFprRybzA" width="854"></iframe></p>

<p>(Edit: This post originally stated that the talk included changes since 5.0.
While that had originally been the planned, there were so many features added since 7.0, covering from 5.0 up was dropped.)</p>

<h3>My Own Worst Enemy</h3>

<p>On another personal note, I love including working code and doing live demos in talks.
I know the former risks bordom but I fell it is important for people to be able to see how code really works in practice.
Because of that fear, I like live demos because it <a href="https://youtu.be/dDH10srLgVc?t=343">engages the audience</a> and makes code-heavy talks more physical.</p>

<p>Of course everyone knows the problems of live demos!
Fear that they might fail in all kinds of embarrasing ways must surely be why more people don&#39;t attempt them.
Well this time I hit the most embarrassing of them all.</p>

devdata/https_mojolicious.io_blog_2018_12_03_higher-order-promises_  view on Meta::CPAN

<h3>Any</h3>

<p>An &quot;any&quot; Promise resolves immediately when the first of its Promises resolves. This is slightly different from <code>race</code> because at least one Promise must resolve. A Promise being rejected doesn&#39;t resolve the <code>any</code>...

<p>Here&#39;s a program that extracts the configured CPAN mirrors and tests that it can get the <em>index.html</em> file. To ensure that it finds that file and not some captive portal, it looks for &quot;Jarkko&quot; in the body:</p>

<pre><code>use v5.28;
use utf8;
use strict;
use warnings;
use feature qw(signatures);
no warnings qw(experimental::signatures);

use File::Spec::Functions;
use Mojo::Promise;
use Mojo::Promise::Role::HigherOrder;
use Mojo::UserAgent;
use Mojo::URL;

use lib catfile( $ENV{HOME}, &#39;.cpan&#39; );
my @mirrors = eval {

devdata/https_mojolicious.io_blog_2018_12_03_higher-order-promises_  view on Meta::CPAN

<h3>Some</h3>

<p>A <code>some</code> Promise resolves when a certain number of its Promises resolve. You specify how many you need to succeed and the the <code>some</code> Promise resolves when that number resolve. This should act like <code>some</code> in <a href...

<p>This example modifies the previous program to find more than one mirror that works. You can specify the number that need to work for the <code>some</code> to resolve:</p>

<pre><code>use v5.28;
use utf8;
use strict;
use warnings;
use feature qw(signatures);
no warnings qw(experimental::signatures);

use File::Spec::Functions;
use Mojo::Promise;
use Mojo::Promise::Role::HigherOrder;
use Mojo::UserAgent;
use Mojo::URL;

use lib catfile( $ENV{HOME}, &#39;.cpan&#39; );
my @mirrors = eval {

devdata/https_mojolicious.io_blog_2018_12_03_higher-order-promises_  view on Meta::CPAN

<h3>None</h3>

<p>A &quot;none&quot; Promise resolves when all of the its Promises are rejected. It&#39;s a trivial case that might be useful somewhere and I created it mostly because Perl 6 has a <a href="https://docs.perl6.org/routine/none">none Junction</a> (whi...

<p>For this very simple example, consider the task to check that no sites are that annoying &quot;404 File Not Found&quot;:</p>

<pre><code>use v5.28;
use utf8;
use strict;
use warnings;
use feature qw(signatures);
no warnings qw(experimental::signatures);

use Mojo::UserAgent;
my $ua = Mojo::UserAgent-&gt;new;

use Mojo::Promise;
use Mojo::Promise::Role::HigherOrder;

my @urls = qw(
  https://www.learning-perl.com/

devdata/https_mojolicious.io_blog_2018_12_10_minion-stands-alone_  view on Meta::CPAN

backend</a> so that
I don&#39;t need a separate database process running, but Minion can work
across multiple machines if you have a database that accepts remote
connections.</p>

<pre><code>plugin Minion =&gt; {
    SQLite =&gt; &#39;sqlite:&#39; . app-&gt;home-&gt;child(&#39;minion.db&#39;),
};
</code></pre>

<p>With the Minion plugin loaded, my application gains some new features:</p>

<ul>
<li>I can add Minion tasks (runnable bits of code) with the
<a href="https://mojolicious.org/perldoc/Minion#add_task"><code>minion.add_task</code></a>
helper</li>
<li>I can enqueue jobs in multiple ways:
<ul>
<li>From the command-line with <a href="https://mojolicious.org/perldoc/Minion/Command/minion/job">the <code>minion job</code>
command</a></li>
<li>From inside the application with <a href="https://mojolicious.org/perldoc/Minion#enqueue1">the <code>minion.enqueue</code>

devdata/https_mojolicious.io_blog_2018_12_20_testing-dancer_  view on Meta::CPAN

<p>During advent last year, I wrote about <a href="https://mojolicious.org/perldoc/Test/Mojo">Test::Mojo</a>, showing the many easy and (dare I say) fun ways that you can use it to test your Mojolicious applications.
If you missed it, go <a href="https://mojolicious.io/blog/2017/12/09/day-9-the-best-way-to-test/">check it out</a>.</p>

<p>I expect there are at least a few of you out there who read that and think, &quot;I&#39;d love to use that, but I don&#39;t use Mojolicious!&quot;; well, you&#39;re in luck!
With just a little role to bridge the gap, you can use Test::Mojo to test your PSGI applications too!</p>

              </section>
              <section id="section-2">
                  <h2>Mounting PSGI Applications</h2>

<p>Mojolicious itself doesn&#39;t use the <a href="https://metacpan.org/pod/PSGI">PSGI</a> protocol, owing to certain features that it doesn&#39;t provide and which are necessary for certain asynchronous operations.
That said, you can serve a Mojolicious application on a PSGI server by using <a href="https://mojolicious.org/perldoc/Mojo/Server/PSGI">Mojo::Server::PSGI</a>.
This Mojolicious-core module is automatically used for you when your Mojolicious-based app detects that it has started under a PSGI server (e.g. plackup or Starman).</p>

<p>While translating between a Mojo app and a PSGI server is core functionality, doing the opposite, translating between a PSGI app and a Mojolicious server (or app, as you&#39;ll see) is available as a third party module.
<a href="https://metacpan.org/pod/Mojolicious::Plugin::MountPSGI">Mojolicious::Plugin::MountPSGI</a>, as it&#39;s name implies, can mount a PSGI application into a Mojolicious-based one.
To do so, it builds a new, empty Mojolicious application that translates all requests to PSGI environments before dispatching to it as with any <a href="https://mojolicious.org/perldoc/Mojolicious/Plugin/Mount">mount</a>-ed application.</p>

<h2>Testing using Test::Mojo</h2>

<p>Once you can do that, it is trivial to take a PSGI application, wrap it with MountPSGI, and set it as the application for use with Test::Mojo.

devdata/https_mojolicious.io_blog_2018_12_20_testing-dancer_  view on Meta::CPAN


<pre><code>use Mojo::Base -strict;
</code></pre>

<p>Now if you aren&#39;t familiar, <code>use Mojo::Base -strict</code> is a quick way to say</p>

<pre><code>use strict;
use warnings;
use utf8;
use IO::Handle;
use feature &#39;:5.10&#39;;
</code></pre>

<p>but saves a lot of typing.
Next we load the necessary testing libraries.
Then make an instance of <code>Test::Mojo</code> composed with the <code>PSGI</code> role and make a new instance that points to the app we want to test.</p>

<pre><code>use Test::More;
use Test::Mojo;
my $t = Test::Mojo-&gt;with_roles(&#39;+PSGI&#39;)-&gt;new(&#39;app.psgi&#39;);
</code></pre>

devdata/https_mojolicious.io_blog_2018_12_22_use-carton-for-your-mojolicious-app-deployment_  view on Meta::CPAN

# Ask a minimal version
requires &#39;Net::DNS&#39;, &#39;&gt;= 1.12&#39;;
# Or
requires &#39;Net::DNS&#39;, &#39;1.12&#39;;
# Ask a maximal version
requires &#39;Locale::Maketext&#39;, &#39;&lt; 1.28&#39;;
# Give a range
requires &#39;Mojolicious&#39;, &#39;&gt;= 7.0, &lt; 8.0&#39;;

# Optional modules
feature &#39;postgresql&#39;, &#39;PostgreSQL support&#39; =&gt; sub {
    requires &#39;Mojo::Pg&#39;;
};
feature &#39;mysql&#39;, &#39;MySQL support&#39; =&gt; sub {
    requires &#39;Mojo::mysql&#39;;
};
feature &#39;ldap&#39;, &#39;LDAP authentication support&#39; =&gt; sub {
    requires &#39;Net::LDAP&#39;;
};
</code></pre>

<p>Cpanfile format can do more (recommended modules, requirements for a specific phase (<code>configure</code>, <code>test</code>…), using modules not published on CPAN…), but this is a post about Carton: I let you read cpanfile documentati...

<p>Nota bene: be careful to list non-Perl dependencies in README file<span class="superscript" id="back-to-1"><a href="#footnote-1">1</a></span>, like <code>libpq-dev</code> for <a href="https://mojolicious.org/perldoc/Mojo/Pg"><code>Mojo::Pg</code><...

<p>Cpanfile can be used by <a href="https://metacpan.org/pod/cpanm">cpanminus</a> or <a href="https://metacpan.org/pod/Carton">Carton</a>.</p>

<p>Go to the directory containing your <code>cpanfile</code> and do:</p>

<pre><code>cpanm --installdeps .
</code></pre>

<p><em>Et voilà !</em></p>

<p>Note that the modules in <code>features</code> has not been installed. You can install them with:</p>

<pre><code>cpanm --installdeps . --with-feature postgresql
</code></pre>

<p>Or, to install all <code>features</code> modules, but not the <code>mysql</code> one:</p>

<pre><code>cpanm --installdeps . --with-all-features --without-feature mysql
</code></pre>

<p>So, now, we can be sure that we have the good version of our application’s dependencies on the system.</p>

<p>But what if we host other applications on that system, that have conflicting requirements?</p>

<p>Cpanm is able to install modules in a specific folder (thank you, <a href="https://metacpan.org/pod/local::lib">local::lib</a>), but wouldn’t it be convenient to install our dependencies in the directory of our application?
We would always know where our dependencies are.</p>

<h2>Here comes Carton</h2>

devdata/https_mojolicious.io_blog_2018_12_22_use-carton-for-your-mojolicious-app-deployment_  view on Meta::CPAN


<p>For that, since we have a <code>cpanfile.snapshot</code> file from our development server, we can do:</p>

<pre><code>carton install --deployment
</code></pre>

<p>That installs the exact versions of modules listed in your snapshot.</p>

<h3>Features</h3>

<p>Per default, <code>carton install</code> will install all the <em>features</em> dependencies, but we can deactivate some:</p>

<pre><code>carton install --deployment --without mysql
</code></pre>

<p>In order to provide the correct version for all modules, even the optional ones, do a <code>carton install</code> on the development server, and use <code>--without</code> (note that this isn&#39;t <code>--without-feature</code> like <code>cpanm</...

<h3>Start your application</h3>

<p>In order to be able to use the <code>local</code> directory containing the dependencies, you can prefix your commands with <code>carton exec</code>.
So, to start a Mojolicious application with the built-in server <a href="https://mojolicious.org/perldoc/Mojo/Server/Hypnotoad">hypnotoad</a>, do:</p>

<pre><code>carton exec -- hypnotoad script/my_application
</code></pre>

<p>That works for all that you can do with your application. Example:</p>

devdata/https_mojolicious.io_blog_2018_12_23_mojolicious-and-angular_  view on Meta::CPAN


<p>As a sidenote, you may have to allow <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS">Cross Origin Resource Sharing (CORS)</a> if the Angular app throws an error while accessing the mojo API endpoint.
In that case you may want to make use of the <a href="https://mojolicious.org/perldoc/Mojolicious/#before_dispatch"><code>before_dispatch</code></a> app hook:</p>

<pre><code>$self-&gt;hook(before_dispatch =&gt; sub {
    my $c = shift;
    $c-&gt;res-&gt;headers-&gt;header(&#39;Access-Control-Allow-Origin&#39; =&gt; &#39;*&#39;);
});
</code></pre>

<p>But please note, in a real-world application <code>*</code> is defeating the security feature.</p>

<h3>Changes in Angular side</h3>

<p>An Angular app&#39;s core code files reside in <code>src/app</code> directory.
I will be making changes to following 4 files under <code>src/app</code> directory and explain changes:</p>

<ul>
<li>app.module.ts</li>
<li>app.component.ts</li>
<li>app.component.html</li>

devdata/https_mojolicious.io_blog_2018_12_24_async-await-the-mojo-way_  view on Meta::CPAN

  my $title = trim $tx-&gt;res-&gt;dom-&gt;at(&#39;title&#39;)-&gt;text;
  $promise-&gt;resolve($title);
});

$promise-&gt;then(sub ($title) {
  say $title;
})-&gt;wait;
</code></pre>

<p>At first glance this isn&#39;t too much better than the callback.
However, a few nice features emerge.
The most important of which is that the promise object can be returned to the caller and the caller can choose what to do with it.</p>

<p>In useful code you would also want to attach error handling, though I&#39;ve omitted it here for bevity.
Mojolicious&#39; promise implementation also gives us the <code>wait</code> method to start the ioloop if necessary.</p>

<p>Although it is interesting to see how a user can create a promise object to convert a callback api to promises, many libraries, including Mojolicious, now have promise variants built-in.
Rather than depending on the user to create a promise to resolve in the callback, these libraries will just return a promise of their own.
In the Mojolicious project, by convention methods that return promises end in <code>_p</code>.</p>

<p>With that we can write similar code to the one above</p>

devdata/https_mojolicious.io_blog_2018_12_24_async-await-the-mojo-way_  view on Meta::CPAN

<pre><code>my $promise = $ua-&gt;get_p($url);

$promise-&gt;then(sub ($tx) {
  my $title = trim $tx-&gt;res-&gt;dom-&gt;at(&#39;title&#39;)-&gt;text;
  say $title;
})-&gt;wait;
</code></pre>

<p>However that&#39;s slightly different.
The promise above resolved with the title, this one resolves with the transaction.
That brings us to the next interesting feature of promises: the return value of <code>then</code> is another promise that is resolved with the return value of the callback.
Additionally, if that value is another promise then they chain, if not then it resolves with the value.</p>

<p>We can use that property to replicate the original promise example above more directly like this</p>

<pre><code>my $promise = $ua-&gt;get_p($url)-&gt;then(sub ($tx) {
  return trim $tx-&gt;res-&gt;dom-&gt;at(&#39;title&#39;)-&gt;text;
});

$promise-&gt;then(sub ($title) {
  say $title;

lib/Acme/CPANModules/Import/MojoliciousAdvent/2018.pm  view on Meta::CPAN

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 SEE ALSO

L<Acme::CPANModules> - about the Acme::CPANModules namespace

L<cpanmodules> - CLI tool to let you browse/view the lists

=head1 AUTHOR

perlancar <perlancar@cpan.org>

lib/Acme/CPANModules/Import/MojoliciousAdvent/2018_12_02.pm  view on Meta::CPAN

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 SEE ALSO

L<Acme::CPANModules> - about the Acme::CPANModules namespace

L<cpanmodules> - CLI tool to let you browse/view the lists

=head1 AUTHOR

perlancar <perlancar@cpan.org>

lib/Acme/CPANModules/Import/MojoliciousAdvent/2018_12_03.pm  view on Meta::CPAN

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 SEE ALSO

L<Acme::CPANModules> - about the Acme::CPANModules namespace

L<cpanmodules> - CLI tool to let you browse/view the lists

=head1 AUTHOR

perlancar <perlancar@cpan.org>

lib/Acme/CPANModules/Import/MojoliciousAdvent/2018_12_04.pm  view on Meta::CPAN

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 SEE ALSO

L<Acme::CPANModules> - about the Acme::CPANModules namespace

L<cpanmodules> - CLI tool to let you browse/view the lists

=head1 AUTHOR

perlancar <perlancar@cpan.org>

lib/Acme/CPANModules/Import/MojoliciousAdvent/2018_12_05.pm  view on Meta::CPAN

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 SEE ALSO

L<Acme::CPANModules> - about the Acme::CPANModules namespace

L<cpanmodules> - CLI tool to let you browse/view the lists

=head1 AUTHOR

perlancar <perlancar@cpan.org>

lib/Acme/CPANModules/Import/MojoliciousAdvent/2018_12_06.pm  view on Meta::CPAN

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 SEE ALSO

L<Acme::CPANModules> - about the Acme::CPANModules namespace

L<cpanmodules> - CLI tool to let you browse/view the lists

=head1 AUTHOR

perlancar <perlancar@cpan.org>

lib/Acme/CPANModules/Import/MojoliciousAdvent/2018_12_07.pm  view on Meta::CPAN

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 SEE ALSO

L<Acme::CPANModules> - about the Acme::CPANModules namespace

L<cpanmodules> - CLI tool to let you browse/view the lists

=head1 AUTHOR

perlancar <perlancar@cpan.org>

lib/Acme/CPANModules/Import/MojoliciousAdvent/2018_12_08.pm  view on Meta::CPAN

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 SEE ALSO

L<Acme::CPANModules> - about the Acme::CPANModules namespace

L<cpanmodules> - CLI tool to let you browse/view the lists

=head1 AUTHOR

perlancar <perlancar@cpan.org>

lib/Acme/CPANModules/Import/MojoliciousAdvent/2018_12_09.pm  view on Meta::CPAN

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 SEE ALSO

L<Acme::CPANModules> - about the Acme::CPANModules namespace

L<cpanmodules> - CLI tool to let you browse/view the lists

=head1 AUTHOR

perlancar <perlancar@cpan.org>

lib/Acme/CPANModules/Import/MojoliciousAdvent/2018_12_10.pm  view on Meta::CPAN

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 SEE ALSO

L<Acme::CPANModules> - about the Acme::CPANModules namespace

L<cpanmodules> - CLI tool to let you browse/view the lists

=head1 AUTHOR

perlancar <perlancar@cpan.org>

lib/Acme/CPANModules/Import/MojoliciousAdvent/2018_12_11.pm  view on Meta::CPAN

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 SEE ALSO

L<Acme::CPANModules> - about the Acme::CPANModules namespace

L<cpanmodules> - CLI tool to let you browse/view the lists

=head1 AUTHOR

perlancar <perlancar@cpan.org>

lib/Acme/CPANModules/Import/MojoliciousAdvent/2018_12_12.pm  view on Meta::CPAN

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 SEE ALSO

L<Acme::CPANModules> - about the Acme::CPANModules namespace

L<cpanmodules> - CLI tool to let you browse/view the lists

=head1 AUTHOR

perlancar <perlancar@cpan.org>

lib/Acme/CPANModules/Import/MojoliciousAdvent/2018_12_13.pm  view on Meta::CPAN

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 SEE ALSO

L<Acme::CPANModules> - about the Acme::CPANModules namespace

L<cpanmodules> - CLI tool to let you browse/view the lists

=head1 AUTHOR

perlancar <perlancar@cpan.org>

lib/Acme/CPANModules/Import/MojoliciousAdvent/2018_12_14.pm  view on Meta::CPAN

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 SEE ALSO

L<Acme::CPANModules> - about the Acme::CPANModules namespace

L<cpanmodules> - CLI tool to let you browse/view the lists

=head1 AUTHOR

perlancar <perlancar@cpan.org>

lib/Acme/CPANModules/Import/MojoliciousAdvent/2018_12_15.pm  view on Meta::CPAN

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 SEE ALSO

L<Acme::CPANModules> - about the Acme::CPANModules namespace

L<cpanmodules> - CLI tool to let you browse/view the lists

=head1 AUTHOR

perlancar <perlancar@cpan.org>

lib/Acme/CPANModules/Import/MojoliciousAdvent/2018_12_16.pm  view on Meta::CPAN

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 SEE ALSO

L<Acme::CPANModules> - about the Acme::CPANModules namespace

L<cpanmodules> - CLI tool to let you browse/view the lists

=head1 AUTHOR

perlancar <perlancar@cpan.org>

lib/Acme/CPANModules/Import/MojoliciousAdvent/2018_12_17.pm  view on Meta::CPAN

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 SEE ALSO

L<Acme::CPANModules> - about the Acme::CPANModules namespace

L<cpanmodules> - CLI tool to let you browse/view the lists

=head1 AUTHOR

perlancar <perlancar@cpan.org>

lib/Acme/CPANModules/Import/MojoliciousAdvent/2018_12_18.pm  view on Meta::CPAN

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 SEE ALSO

L<Acme::CPANModules> - about the Acme::CPANModules namespace

L<cpanmodules> - CLI tool to let you browse/view the lists

=head1 AUTHOR

perlancar <perlancar@cpan.org>

lib/Acme/CPANModules/Import/MojoliciousAdvent/2018_12_19.pm  view on Meta::CPAN

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 SEE ALSO

L<Acme::CPANModules> - about the Acme::CPANModules namespace

L<cpanmodules> - CLI tool to let you browse/view the lists

=head1 AUTHOR

perlancar <perlancar@cpan.org>

lib/Acme/CPANModules/Import/MojoliciousAdvent/2018_12_20.pm  view on Meta::CPAN

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 SEE ALSO

L<Acme::CPANModules> - about the Acme::CPANModules namespace

L<cpanmodules> - CLI tool to let you browse/view the lists

=head1 AUTHOR

perlancar <perlancar@cpan.org>

lib/Acme/CPANModules/Import/MojoliciousAdvent/2018_12_21.pm  view on Meta::CPAN

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 SEE ALSO

L<Acme::CPANModules> - about the Acme::CPANModules namespace

L<cpanmodules> - CLI tool to let you browse/view the lists

=head1 AUTHOR

perlancar <perlancar@cpan.org>

lib/Acme/CPANModules/Import/MojoliciousAdvent/2018_12_22.pm  view on Meta::CPAN

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModulesBundle-Import-MojoliciousAdvent-2018>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 SEE ALSO

L<Acme::CPANModules> - about the Acme::CPANModules namespace

L<cpanmodules> - CLI tool to let you browse/view the lists

=head1 AUTHOR

perlancar <perlancar@cpan.org>



( run in 0.344 second using v1.01-cache-2.11-cpan-4d50c553e7e )