The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
<!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!--
This file was generated by Devel::Cover Version 1.26
Devel::Cover is copyright 2001-2012, Paul Johnson (paul@pjcj.net)
Devel::Cover is free. It is licensed under the same terms as Perl itself.
The latest version of Devel::Cover should be available from my homepage:
http://www.pjcj.net
-->
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
    <meta http-equiv="Content-Language" content="en-us"></meta>
    <link rel="stylesheet" type="text/css" href="cover.css"></link>
    <link rel="stylesheet" type="text/css" href="cover.css"></link>
    <title>File Coverage: lib/Yukki/Web/Router/Route/Match.pm</title>
</head>
<body>
<h1>File Coverage</h1>
<table>
<tr><td class="h" align="right">File:</td><td align="left">lib/Yukki/Web/Router/Route/Match.pm</td></tr>
<tr><td class="h" align="right">Coverage:</td><td align="left" class="c2">90.6%</td></tr>
</table>
<div><br/></div>
<table>
<tr><th>line</th><th>stmt</th><th>bran</th><th>cond</th><th>sub</th><th>pod</th><th>time</th><th>code</th></tr>
<tr><td class="h">1</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">package Yukki::Web::Router::Route::Match;</td></tr>
<tr><td class="h">2</td><td colspan="7"></td></tr><tr><td class="h">3</td><td><div class="c3">1</div><div class="c3">1</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Web-Router-Route-Match-pm--subroutine.html#L3">1</a></div></td><td></td><td><div>5</div><div>2</div></td><td class="s">use v5.24;</td></tr>
<tr><td class="h">4</td><td><div class="c3">1</div><div class="c3">1</div><div class="c3">1</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Web-Router-Route-Match-pm--subroutine.html#L4">1</a></div></td><td></td><td><div>3</div><div>2</div><div>2</div></td><td class="s">use utf8;</td></tr>
<tr><td class="h">5</td><td><div class="c3">1</div><div class="c3">1</div><div class="c3">1</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Web-Router-Route-Match-pm--subroutine.html#L5">1</a></div></td><td></td><td><div>11</div><div>1</div><div>2</div></td><td class="s">use Moo;</td></tr>
<tr><td class="h">6</td><td colspan="7"></td></tr><tr><td class="h">7</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">extends &#39;Path::Router::Route::Match&#39;;</td></tr>
<tr><td class="h">8</td><td colspan="7"></td></tr><tr><td class="h">9</td><td><div class="c3">1</div><div class="c3">1</div><div class="c3">1</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Web-Router-Route-Match-pm--subroutine.html#L9">1</a></div></td><td></td><td><div>175</div><div>1</div><div>40</div></td><td class="s">use List::Util qw( all any );</td></tr>
<tr><td class="h">10</td><td><div class="c3">1</div><div class="c3">1</div><div class="c3">1</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Web-Router-Route-Match-pm--subroutine.html#L10">1</a></div></td><td></td><td><div>2</div><div>1</div><div>5</div></td><td class="s">use Yukki::Error qw( http_throw );</td></tr>
<tr><td class="h">11</td><td colspan="7"></td></tr><tr><td class="h">12</td><td><div class="c3">1</div><div class="c3">1</div><div class="c3">1</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Web-Router-Route-Match-pm--subroutine.html#L12">1</a></div></td><td></td><td><div>187</div><div>2</div><div>3</div></td><td class="s">use namespace::clean;</td></tr>
<tr><td class="h">13</td><td colspan="7"></td></tr><tr><td class="h">14</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"># ABSTRACT: Matching with access controls</td></tr>
<tr><td class="h">15</td><td colspan="7"></td></tr><tr><td class="h">16 - 30</td><td colspan="6"></td><td class="s"><pre>=head1 DESCRIPTION

This is a helper that include access control level checking.

=head1 EXTENDS

L&lt;Path::Router::Route::Match&gt;

=head1 METHODS

=head2 access_level

Evaluates the access control list against a particular path.

=cut</pre></td></tr>
<tr><td class="h">31</td><td colspan="7"></td></tr><tr><td class="h">32</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub access_level {</td></tr>
<tr><td class="h">33</td><td><div class="c3">18</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Web-Router-Route-Match-pm--subroutine.html#L33">18</a></div></td><td><div class="c3">1</div></td><td><div>21</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $self = shift;</td></tr>
<tr><td class="h">34</td><td colspan="7"></td></tr><tr><td class="h">35</td><td><div class="c3">18</div></td><td></td><td></td><td></td><td></td><td><div>36</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $mapping = $self-&gt;mapping;</td></tr>
<tr><td class="h">36</td><td><div class="c3">18</div></td><td></td><td></td><td></td><td></td><td><div>35</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $acl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= $self-&gt;route-&gt;acl;</td></tr>
<tr><td class="h">37</td><td colspan="7"></td></tr><tr><td class="h">38</td><td><div class="c3">18</div></td><td></td><td></td><td></td><td></td><td><div>29</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;for my $rule (@$acl) {</td></tr>
<tr><td class="h">39</td><td><div class="c3">24</div></td><td></td><td></td><td></td><td></td><td><div>36</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my ($access_level, $match) = @$rule;</td></tr>
<tr><td class="h">40</td><td colspan="7"></td></tr><tr><td class="h">41</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $accepts = sub {</td></tr>
<tr><td class="h">42</td><td><div class="c3">24</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Web-Router-Route-Match-pm--subroutine.html#L42">24</a></div></td><td></td><td><div>26</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $key = shift;</td></tr>
<tr><td class="h">43</td><td colspan="7"></td></tr><tr><td class="h">44</td><td><div class="c3">24</div></td><td><div class="c0" title="-/F"><a href="lib-Yukki-Web-Router-Route-Match-pm--branch.html#L44">50</a></div><div class="c3" title="T/F"><a href="lib-Yukki-Web-Router-Route-Match-pm--branch.html#L44">100</a></div><div class="c0" title="T/-"><a href="lib-Yukki-Web-Router-Route-Match-pm--branch.html#L44">50</a></div></td><td></td><td></td><td></td><td><div>62</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!ref $match-&gt;{$key}) {</td></tr>
<tr><td class="h">45</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $mapping-&gt;{$key} eq $match-&gt;{$key};</td></tr>
<tr><td class="h">46</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">47</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elsif (ref $match-&gt;{$key} eq &#39;CODE&#39;) {</td></tr>
<tr><td class="h">48</td><td><div class="c3">3</div></td><td></td><td></td><td></td><td></td><td><div>5</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local $_ = $mapping-&gt;{$key};</td></tr>
<tr><td class="h">49</td><td><div class="c3">3</div></td><td></td><td></td><td></td><td></td><td><div>14</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $match-&gt;{$key}-&gt;($mapping-&gt;{$key});</td></tr>
<tr><td class="h">50</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">51</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elsif (ref $match-&gt;{$key} eq &#39;ARRAY&#39;) {</td></tr>
<tr><td class="h">52</td><td><div class="c3">21</div><div class="c3">53</div></td><td></td><td></td><td></td><td></td><td><div>59</div><div>111</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return any { $mapping-&gt;{$key} eq $_ } $match-&gt;{$key}-&gt;@*;</td></tr>
<tr><td class="h">53</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">54</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else {</td></tr>
<tr><td class="h">55</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;die &quot;unknown ACL authorization check type&quot;;</td></tr>
<tr><td class="h">56</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">57</td><td><div class="c3">24</div></td><td></td><td></td><td></td><td></td><td><div>56</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};</td></tr>
<tr><td class="h">58</td><td colspan="7"></td></tr><tr><td class="h">59</td><td><div class="c3">24</div><div class="c3">24</div></td><td><div class="c3" title="T/F"><a href="lib-Yukki-Web-Router-Route-Match-pm--branch.html#L59">100</a></div></td><td></td><td><div class="c3"><a href="lib-Yukki-Web-Router-Route-Match-pm--subroutine.html#L59">24</a></div></td><td></td><td><div>59</div><div>37</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (all { $accepts-&gt;($_) } keys %$match) {</td></tr>
<tr><td class="h">60</td><td><div class="c3">18</div></td><td></td><td></td><td></td><td></td><td><div>39</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $access_level;</td></tr>
<tr><td class="h">61</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">62</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">63</td><td colspan="7"></td></tr><tr><td class="h">64</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;http_throw(&quot;no ACL found to match &quot; . $self-&gt;path);</td></tr>
<tr><td class="h">65</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">66</td><td colspan="7"></td></tr><tr><td class="h">67</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">1;</td></tr>
</table>
</body>
</html>