travis-api/.coverage/index.html
2015-01-21 16:38:25 +01:00

29937 lines
883 KiB
HTML

<!DOCTYPE html>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<title>Code coverage for Travis-api</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script src='./assets/0.8.0/application.js' type='text/javascript'></script>
<link href='./assets/0.8.0/application.css' media='screen, projection, print' rel='stylesheet' type='text/css'>
<link rel="shortcut icon" type="image/png" href="./assets/0.8.0/favicon_red.png" />
<link rel="icon" type="image/png" href="./assets/0.8.0/favicon.png" />
</head>
<body>
<div id="loading">
<img src="./assets/0.8.0/loading.gif" alt="loading"/>
</div>
<div id="wrapper" style="display:none;">
<div class="timestamp">Generated <abbr class="timeago" title="2015-01-21T16:37:33+01:00">2015-01-21T16:37:33+01:00</abbr></div>
<ul class="group_tabs"></ul>
<div id="content">
<div class="file_list_container" id="AllFiles">
<h2>
<span class="group_name">All Files</span>
(<span class="covered_percent"><span class="red">67.05%</span></span>
covered at
<span class="covered_strength">
<span class="green">
5.33
</span>
</span> hits/line)
</h2>
<a name="AllFiles"></a>
<div>
<b>93</b> files in total.
<b>2064</b> relevant lines.
<span class="green"><b>1384</b> lines covered</span> and
<span class="red"><b>680</b> lines missed </span>
</div>
<table class="file_list">
<thead>
<tr>
<th>File</th>
<th>% covered</th>
<th>Lines</th>
<th>Relevant Lines</th>
<th>Lines covered</th>
<th>Lines missed</th>
<th>Avg. Hits / Line</th>
</tr>
</thead>
<tbody>
<tr>
<td class="strong"><a href="#6a8e7022de4db451dc6c402d7b521d74b4867cec" class="src_link" title="lib/travis/api/app.rb">lib/travis/api/app.rb</a></td>
<td class="yellow strong">85.25 %</td>
<td>207</td>
<td>122</td>
<td>104</td>
<td>18</td>
<td>21.2</td>
</tr>
<tr>
<td class="strong"><a href="#2563a9e3b6860f10bc10bc8b9abc2e0b307c3396" class="src_link" title="lib/travis/api/app/access_token.rb">lib/travis/api/app/access_token.rb</a></td>
<td class="yellow strong">87.5 %</td>
<td>105</td>
<td>64</td>
<td>56</td>
<td>8</td>
<td>4.3</td>
</tr>
<tr>
<td class="strong"><a href="#a961b2b2494498d5ea5ba390081b58db5ba6a9ae" class="src_link" title="lib/travis/api/app/base.rb">lib/travis/api/app/base.rb</a></td>
<td class="red strong">73.08 %</td>
<td>53</td>
<td>26</td>
<td>19</td>
<td>7</td>
<td>11.0</td>
</tr>
<tr>
<td class="strong"><a href="#d160d1d2c1e6c6e0542165ddbf75627d39b2de6f" class="src_link" title="lib/travis/api/app/cors.rb">lib/travis/api/app/cors.rb</a></td>
<td class="red strong">80.0 %</td>
<td>20</td>
<td>10</td>
<td>8</td>
<td>2</td>
<td>7.4</td>
</tr>
<tr>
<td class="strong"><a href="#eeda47705beb665db84542493bea1c2e0ec05731" class="src_link" title="lib/travis/api/app/endpoint.rb">lib/travis/api/app/endpoint.rb</a></td>
<td class="red strong">70.0 %</td>
<td>50</td>
<td>30</td>
<td>21</td>
<td>9</td>
<td>17.9</td>
</tr>
<tr>
<td class="strong"><a href="#b2b6630e8ce43a4e90ba2fa3f0747e7269631dd5" class="src_link" title="lib/travis/api/app/endpoint/accounts.rb">lib/travis/api/app/endpoint/accounts.rb</a></td>
<td class="yellow strong">83.33 %</td>
<td>11</td>
<td>6</td>
<td>5</td>
<td>1</td>
<td>0.8</td>
</tr>
<tr>
<td class="strong"><a href="#a5a778403a26fa47d8dfe304f657adcbfa66f559" class="src_link" title="lib/travis/api/app/endpoint/authorization.rb">lib/travis/api/app/endpoint/authorization.rb</a></td>
<td class="red strong">26.45 %</td>
<td>522</td>
<td>155</td>
<td>41</td>
<td>114</td>
<td>0.3</td>
</tr>
<tr>
<td class="strong"><a href="#2b74a2462ad5e4f3ca518f0cc6f13ddc82ee8762" class="src_link" title="lib/travis/api/app/endpoint/branches.rb">lib/travis/api/app/endpoint/branches.rb</a></td>
<td class="yellow strong">83.33 %</td>
<td>16</td>
<td>6</td>
<td>5</td>
<td>1</td>
<td>0.8</td>
</tr>
<tr>
<td class="strong"><a href="#f830dba6ed178eb88e884e4ef578db0073e9384a" class="src_link" title="lib/travis/api/app/endpoint/broadcasts.rb">lib/travis/api/app/endpoint/broadcasts.rb</a></td>
<td class="yellow strong">83.33 %</td>
<td>11</td>
<td>6</td>
<td>5</td>
<td>1</td>
<td>0.8</td>
</tr>
<tr>
<td class="strong"><a href="#fac69dfa06cb89c53a04099fb945fb4a805cc42c" class="src_link" title="lib/travis/api/app/endpoint/builds.rb">lib/travis/api/app/endpoint/builds.rb</a></td>
<td class="red strong">27.59 %</td>
<td>53</td>
<td>29</td>
<td>8</td>
<td>21</td>
<td>0.3</td>
</tr>
<tr>
<td class="strong"><a href="#03dcd32988fb710bc7a3c06636a6780bce656589" class="src_link" title="lib/travis/api/app/endpoint/documentation.rb">lib/travis/api/app/endpoint/documentation.rb</a></td>
<td class="yellow strong">85.71 %</td>
<td>13</td>
<td>7</td>
<td>6</td>
<td>1</td>
<td>0.9</td>
</tr>
<tr>
<td class="strong"><a href="#0dc46adef05fa2cbeadacf05c59276980cc25367" class="src_link" title="lib/travis/api/app/endpoint/endpoints.rb">lib/travis/api/app/endpoint/endpoints.rb</a></td>
<td class="yellow strong">86.96 %</td>
<td>68</td>
<td>23</td>
<td>20</td>
<td>3</td>
<td>19.8</td>
</tr>
<tr>
<td class="strong"><a href="#413ff5b985954d06f57e54bae462c9380050682b" class="src_link" title="lib/travis/api/app/endpoint/env_vars.rb">lib/travis/api/app/endpoint/env_vars.rb</a></td>
<td class="red strong">44.44 %</td>
<td>31</td>
<td>18</td>
<td>8</td>
<td>10</td>
<td>0.4</td>
</tr>
<tr>
<td class="strong"><a href="#f01f22d7534ebd190653ed0f88f71a94320108a3" class="src_link" title="lib/travis/api/app/endpoint/home.rb">lib/travis/api/app/endpoint/home.rb</a></td>
<td class="red strong">66.67 %</td>
<td>54</td>
<td>18</td>
<td>12</td>
<td>6</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#389e755e519bf86618fcf82593746fcedb9c4271" class="src_link" title="lib/travis/api/app/endpoint/hooks.rb">lib/travis/api/app/endpoint/hooks.rb</a></td>
<td class="red strong">75.0 %</td>
<td>15</td>
<td>8</td>
<td>6</td>
<td>2</td>
<td>0.8</td>
</tr>
<tr>
<td class="strong"><a href="#0c26cbaa8343afc54bde5f948dbae2fe3039c766" class="src_link" title="lib/travis/api/app/endpoint/jobs.rb">lib/travis/api/app/endpoint/jobs.rb</a></td>
<td class="red strong">22.73 %</td>
<td>122</td>
<td>66</td>
<td>15</td>
<td>51</td>
<td>0.2</td>
</tr>
<tr>
<td class="strong"><a href="#1d8c0ceda3860fb26fc34a1a770660c35db5b435" class="src_link" title="lib/travis/api/app/endpoint/lint.rb">lib/travis/api/app/endpoint/lint.rb</a></td>
<td class="red strong">61.54 %</td>
<td>19</td>
<td>13</td>
<td>8</td>
<td>5</td>
<td>0.6</td>
</tr>
<tr>
<td class="strong"><a href="#5d621a9a5eb87e9eb39a114965b4bc43594c05ee" class="src_link" title="lib/travis/api/app/endpoint/logs.rb">lib/travis/api/app/endpoint/logs.rb</a></td>
<td class="yellow strong">83.33 %</td>
<td>13</td>
<td>6</td>
<td>5</td>
<td>1</td>
<td>0.8</td>
</tr>
<tr>
<td class="strong"><a href="#41717bfcba400b9bc1a7add2cb84d3195cfc3565" class="src_link" title="lib/travis/api/app/endpoint/repos.rb">lib/travis/api/app/endpoint/repos.rb</a></td>
<td class="red strong">39.71 %</td>
<td>189</td>
<td>68</td>
<td>27</td>
<td>41</td>
<td>0.4</td>
</tr>
<tr>
<td class="strong"><a href="#3542f33a7b8a282ed0436611428aa30ad3f980a1" class="src_link" title="lib/travis/api/app/endpoint/requests.rb">lib/travis/api/app/endpoint/requests.rb</a></td>
<td class="red strong">47.06 %</td>
<td>32</td>
<td>17</td>
<td>8</td>
<td>9</td>
<td>0.5</td>
</tr>
<tr>
<td class="strong"><a href="#b615d4751e9fd711ed50e22c4b49c7c51f964d93" class="src_link" title="lib/travis/api/app/endpoint/setting_endpoint.rb">lib/travis/api/app/endpoint/setting_endpoint.rb</a></td>
<td class="red strong">52.73 %</td>
<td>98</td>
<td>55</td>
<td>29</td>
<td>26</td>
<td>4.6</td>
</tr>
<tr>
<td class="strong"><a href="#c146923d5484592bc716b1adae4f3329fd9ebb1b" class="src_link" title="lib/travis/api/app/endpoint/singleton_settings_endpoint.rb">lib/travis/api/app/endpoint/singleton_settings_endpoint.rb</a></td>
<td class="red strong">57.14 %</td>
<td>46</td>
<td>28</td>
<td>16</td>
<td>12</td>
<td>0.6</td>
</tr>
<tr>
<td class="strong"><a href="#3aa4c3de70a6e7203940667017613935754e19cd" class="src_link" title="lib/travis/api/app/endpoint/uptime.rb">lib/travis/api/app/endpoint/uptime.rb</a></td>
<td class="red strong">55.56 %</td>
<td>16</td>
<td>9</td>
<td>5</td>
<td>4</td>
<td>0.6</td>
</tr>
<tr>
<td class="strong"><a href="#2aeec642e9353983d22c25e11bb6aee7a68ff327" class="src_link" title="lib/travis/api/app/endpoint/users.rb">lib/travis/api/app/endpoint/users.rb</a></td>
<td class="red strong">50.0 %</td>
<td>59</td>
<td>18</td>
<td>9</td>
<td>9</td>
<td>0.5</td>
</tr>
<tr>
<td class="strong"><a href="#98cb249669c6e20fed930c4f814f8e6266add77c" class="src_link" title="lib/travis/api/app/extensions.rb">lib/travis/api/app/extensions.rb</a></td>
<td class="green strong">100.0 %</td>
<td>8</td>
<td>4</td>
<td>4</td>
<td>0</td>
<td>2.0</td>
</tr>
<tr>
<td class="strong"><a href="#00c3504cff5eca9f25748185fb2bd47ad1755d92" class="src_link" title="lib/travis/api/app/extensions/expose_pattern.rb">lib/travis/api/app/extensions/expose_pattern.rb</a></td>
<td class="green strong">100.0 %</td>
<td>12</td>
<td>7</td>
<td>7</td>
<td>0</td>
<td>34.7</td>
</tr>
<tr>
<td class="strong"><a href="#cf7268e37e643b00ddda6c99c2b8d2601a66df25" class="src_link" title="lib/travis/api/app/extensions/scoping.rb">lib/travis/api/app/extensions/scoping.rb</a></td>
<td class="red strong">41.03 %</td>
<td>69</td>
<td>39</td>
<td>16</td>
<td>23</td>
<td>9.4</td>
</tr>
<tr>
<td class="strong"><a href="#4afdb495e463d11449413cb7fabf94f05a66ff88" class="src_link" title="lib/travis/api/app/extensions/smart_constants.rb">lib/travis/api/app/extensions/smart_constants.rb</a></td>
<td class="green strong">100.0 %</td>
<td>28</td>
<td>11</td>
<td>11</td>
<td>0</td>
<td>3.3</td>
</tr>
<tr>
<td class="strong"><a href="#32932af295b8d816c57702d2dd3215d03df46d91" class="src_link" title="lib/travis/api/app/extensions/subclass_tracker.rb">lib/travis/api/app/extensions/subclass_tracker.rb</a></td>
<td class="green strong">100.0 %</td>
<td>25</td>
<td>13</td>
<td>13</td>
<td>0</td>
<td>113.6</td>
</tr>
<tr>
<td class="strong"><a href="#3583b3399a71ebe7de3f253f8a6a166b5ff1450d" class="src_link" title="lib/travis/api/app/helpers.rb">lib/travis/api/app/helpers.rb</a></td>
<td class="green strong">100.0 %</td>
<td>8</td>
<td>4</td>
<td>4</td>
<td>0</td>
<td>2.5</td>
</tr>
<tr>
<td class="strong"><a href="#d434ebb9387430acf5e4c2c6adda113f213d9a27" class="src_link" title="lib/travis/api/app/helpers/accept.rb">lib/travis/api/app/helpers/accept.rb</a></td>
<td class="red strong">49.06 %</td>
<td>93</td>
<td>53</td>
<td>26</td>
<td>27</td>
<td>1.5</td>
</tr>
<tr>
<td class="strong"><a href="#945fc5424b8698f6c9f47bf45d950c7993fe7f7d" class="src_link" title="lib/travis/api/app/helpers/current_user.rb">lib/travis/api/app/helpers/current_user.rb</a></td>
<td class="red strong">70.0 %</td>
<td>19</td>
<td>10</td>
<td>7</td>
<td>3</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#d6d6177d6e0d49294315541845ceb6265759cdf1" class="src_link" title="lib/travis/api/app/helpers/db_follower.rb">lib/travis/api/app/helpers/db_follower.rb</a></td>
<td class="yellow strong">83.33 %</td>
<td>11</td>
<td>6</td>
<td>5</td>
<td>1</td>
<td>0.8</td>
</tr>
<tr>
<td class="strong"><a href="#9b6cc591941ba41c4e94fefe940858e3353c284f" class="src_link" title="lib/travis/api/app/helpers/flash.rb">lib/travis/api/app/helpers/flash.rb</a></td>
<td class="green strong">100.0 %</td>
<td>11</td>
<td>6</td>
<td>6</td>
<td>0</td>
<td>2.5</td>
</tr>
<tr>
<td class="strong"><a href="#4bc54455bbe2ec43bb23f5b569a91e4d444598b6" class="src_link" title="lib/travis/api/app/helpers/mime_types.rb">lib/travis/api/app/helpers/mime_types.rb</a></td>
<td class="red strong">64.29 %</td>
<td>28</td>
<td>14</td>
<td>9</td>
<td>5</td>
<td>0.6</td>
</tr>
<tr>
<td class="strong"><a href="#e5ee14c5580baf7a66bac731983db9d3bdb48996" class="src_link" title="lib/travis/api/app/helpers/respond_with.rb">lib/travis/api/app/helpers/respond_with.rb</a></td>
<td class="red strong">40.54 %</td>
<td>70</td>
<td>37</td>
<td>15</td>
<td>22</td>
<td>2.5</td>
</tr>
<tr>
<td class="strong"><a href="#abcb6fbe07ff5db52c5716e39eb648ef96550296" class="src_link" title="lib/travis/api/app/middleware.rb">lib/travis/api/app/middleware.rb</a></td>
<td class="green strong">100.0 %</td>
<td>7</td>
<td>3</td>
<td>3</td>
<td>0</td>
<td>1.0</td>
</tr>
<tr>
<td class="strong"><a href="#fafd069a2bcef83fff5f536d88402c883f3cdc31" class="src_link" title="lib/travis/api/app/middleware/logging.rb">lib/travis/api/app/middleware/logging.rb</a></td>
<td class="green strong">100.0 %</td>
<td>15</td>
<td>8</td>
<td>8</td>
<td>0</td>
<td>6.6</td>
</tr>
<tr>
<td class="strong"><a href="#7670839fd3d16bec4a807509898851298c771968" class="src_link" title="lib/travis/api/app/middleware/metriks.rb">lib/travis/api/app/middleware/metriks.rb</a></td>
<td class="red strong">77.42 %</td>
<td>48</td>
<td>31</td>
<td>24</td>
<td>7</td>
<td>12.5</td>
</tr>
<tr>
<td class="strong"><a href="#fe2923d329420298ae0fb9e1101c22a8b601d151" class="src_link" title="lib/travis/api/app/middleware/rewrite.rb">lib/travis/api/app/middleware/rewrite.rb</a></td>
<td class="red strong">78.57 %</td>
<td>75</td>
<td>42</td>
<td>33</td>
<td>9</td>
<td>3.6</td>
</tr>
<tr>
<td class="strong"><a href="#26dd70a212f3b2cbf26d11a0b7f29ee3dec679c3" class="src_link" title="lib/travis/api/app/middleware/scope_check.rb">lib/travis/api/app/middleware/scope_check.rb</a></td>
<td class="green strong">92.59 %</td>
<td>47</td>
<td>27</td>
<td>25</td>
<td>2</td>
<td>8.9</td>
</tr>
<tr>
<td class="strong"><a href="#57848e06570d6ebc2e75aad01bea70082a1c55f4" class="src_link" title="lib/travis/api/app/middleware/user_agent_tracker.rb">lib/travis/api/app/middleware/user_agent_tracker.rb</a></td>
<td class="red strong">40.0 %</td>
<td>62</td>
<td>35</td>
<td>14</td>
<td>21</td>
<td>1.7</td>
</tr>
<tr>
<td class="strong"><a href="#866d316bcfc64963406986d03c50d1280b8fe34d" class="src_link" title="lib/travis/api/app/services/schedule_request.rb">lib/travis/api/app/services/schedule_request.rb</a></td>
<td class="red strong">51.61 %</td>
<td>52</td>
<td>31</td>
<td>16</td>
<td>15</td>
<td>0.5</td>
</tr>
<tr>
<td class="strong"><a href="#d04c5eced516ab14b9065b4d34d0af855835a730" class="src_link" title="lib/travis/api/serializer.rb">lib/travis/api/serializer.rb</a></td>
<td class="red strong">66.67 %</td>
<td>23</td>
<td>12</td>
<td>8</td>
<td>4</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#babe3ce05ce1d657f847b2e01c64437b8e58b014" class="src_link" title="lib/travis/api/v2.rb">lib/travis/api/v2.rb</a></td>
<td class="green strong">100.0 %</td>
<td>8</td>
<td>4</td>
<td>4</td>
<td>0</td>
<td>1.0</td>
</tr>
<tr>
<td class="strong"><a href="#1c817b9839dda1170aec2560bad5a09065552de6" class="src_link" title="lib/travis/api/v2/http.rb">lib/travis/api/v2/http.rb</a></td>
<td class="green strong">100.0 %</td>
<td>33</td>
<td>28</td>
<td>28</td>
<td>0</td>
<td>1.0</td>
</tr>
<tr>
<td class="strong"><a href="#c48990e0accf6ba7189617a1b67f9c86eecfc562" class="src_link" title="lib/travis/api/v2/http/accounts.rb">lib/travis/api/v2/http/accounts.rb</a></td>
<td class="red strong">68.75 %</td>
<td>38</td>
<td>16</td>
<td>11</td>
<td>5</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#65342af497e7edc515415235ed81e3bbaccc6979" class="src_link" title="lib/travis/api/v2/http/annotations.rb">lib/travis/api/v2/http/annotations.rb</a></td>
<td class="red strong">71.43 %</td>
<td>34</td>
<td>14</td>
<td>10</td>
<td>4</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#e48076813d88d2c6e10c03686156a6f19429e60e" class="src_link" title="lib/travis/api/v2/http/branch.rb">lib/travis/api/v2/http/branch.rb</a></td>
<td class="red strong">71.43 %</td>
<td>28</td>
<td>14</td>
<td>10</td>
<td>4</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#58933f40c3a13ad2f3470bedf8880494dabc2b2d" class="src_link" title="lib/travis/api/v2/http/branches.rb">lib/travis/api/v2/http/branches.rb</a></td>
<td class="red strong">54.55 %</td>
<td>60</td>
<td>22</td>
<td>12</td>
<td>10</td>
<td>0.5</td>
</tr>
<tr>
<td class="strong"><a href="#c46347e1a0d259fc446170187bf8517d99d49177" class="src_link" title="lib/travis/api/v2/http/broadcasts.rb">lib/travis/api/v2/http/broadcasts.rb</a></td>
<td class="red strong">66.67 %</td>
<td>32</td>
<td>15</td>
<td>10</td>
<td>5</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#8c4ac5c4e74342720580a492f7c3aa9d4d384e43" class="src_link" title="lib/travis/api/v2/http/build.rb">lib/travis/api/v2/http/build.rb</a></td>
<td class="red strong">60.87 %</td>
<td>87</td>
<td>23</td>
<td>14</td>
<td>9</td>
<td>0.6</td>
</tr>
<tr>
<td class="strong"><a href="#1abcacda27e1da4c1f9879072dc5eb5d0a6f1eab" class="src_link" title="lib/travis/api/v2/http/builds.rb">lib/travis/api/v2/http/builds.rb</a></td>
<td class="red strong">59.09 %</td>
<td>66</td>
<td>22</td>
<td>13</td>
<td>9</td>
<td>0.6</td>
</tr>
<tr>
<td class="strong"><a href="#b7d8a575e84049f0f7983320c9ad1737cc7619a1" class="src_link" title="lib/travis/api/v2/http/caches.rb">lib/travis/api/v2/http/caches.rb</a></td>
<td class="red strong">73.33 %</td>
<td>33</td>
<td>15</td>
<td>11</td>
<td>4</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#452e1e09b24321c66a631e743b6a84331da9bd13" class="src_link" title="lib/travis/api/v2/http/env_var.rb">lib/travis/api/v2/http/env_var.rb</a></td>
<td class="red strong">61.54 %</td>
<td>23</td>
<td>13</td>
<td>8</td>
<td>5</td>
<td>0.6</td>
</tr>
<tr>
<td class="strong"><a href="#f91e8a59d86280d6f7eb63939f3a080ab5f82e0f" class="src_link" title="lib/travis/api/v2/http/env_vars.rb">lib/travis/api/v2/http/env_vars.rb</a></td>
<td class="green strong">100.0 %</td>
<td>2</td>
<td>1</td>
<td>1</td>
<td>0</td>
<td>1.0</td>
</tr>
<tr>
<td class="strong"><a href="#16f73e884ddd5d7c35925c636e1981fa77cb5467" class="src_link" title="lib/travis/api/v2/http/hooks.rb">lib/travis/api/v2/http/hooks.rb</a></td>
<td class="red strong">66.67 %</td>
<td>37</td>
<td>15</td>
<td>10</td>
<td>5</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#7bb06459f99796e92585a0613514a4dc10a3b4e6" class="src_link" title="lib/travis/api/v2/http/job.rb">lib/travis/api/v2/http/job.rb</a></td>
<td class="red strong">70.59 %</td>
<td>63</td>
<td>17</td>
<td>12</td>
<td>5</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#28a544a6de90280731859574fbbbcf82c3b12b13" class="src_link" title="lib/travis/api/v2/http/jobs.rb">lib/travis/api/v2/http/jobs.rb</a></td>
<td class="red strong">63.16 %</td>
<td>61</td>
<td>19</td>
<td>12</td>
<td>7</td>
<td>0.6</td>
</tr>
<tr>
<td class="strong"><a href="#305e989221ff7819ee74c2690fb3d9b4d6366b86" class="src_link" title="lib/travis/api/v2/http/log.rb">lib/travis/api/v2/http/log.rb</a></td>
<td class="red strong">50.0 %</td>
<td>68</td>
<td>28</td>
<td>14</td>
<td>14</td>
<td>0.5</td>
</tr>
<tr>
<td class="strong"><a href="#87c289727e6a92299bc4a9407f685b69ca6eb426" class="src_link" title="lib/travis/api/v2/http/permissions.rb">lib/travis/api/v2/http/permissions.rb</a></td>
<td class="red strong">58.33 %</td>
<td>50</td>
<td>24</td>
<td>14</td>
<td>10</td>
<td>0.6</td>
</tr>
<tr>
<td class="strong"><a href="#8ff46500e36176862b05aa7513e20da8d68dc208" class="src_link" title="lib/travis/api/v2/http/repositories.rb">lib/travis/api/v2/http/repositories.rb</a></td>
<td class="red strong">68.75 %</td>
<td>43</td>
<td>16</td>
<td>11</td>
<td>5</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#eff78d14dee73bdad5c2af8b49e3b528390c9207" class="src_link" title="lib/travis/api/v2/http/repository.rb">lib/travis/api/v2/http/repository.rb</a></td>
<td class="red strong">78.57 %</td>
<td>43</td>
<td>14</td>
<td>11</td>
<td>3</td>
<td>0.8</td>
</tr>
<tr>
<td class="strong"><a href="#0438b13b58bbb8a610c81181e35ca9c4273df442" class="src_link" title="lib/travis/api/v2/http/request.rb">lib/travis/api/v2/http/request.rb</a></td>
<td class="red strong">52.17 %</td>
<td>71</td>
<td>23</td>
<td>12</td>
<td>11</td>
<td>0.5</td>
</tr>
<tr>
<td class="strong"><a href="#3409238a742e733e8cc83123cd42c5d119a08c09" class="src_link" title="lib/travis/api/v2/http/requests.rb">lib/travis/api/v2/http/requests.rb</a></td>
<td class="red strong">54.55 %</td>
<td>68</td>
<td>22</td>
<td>12</td>
<td>10</td>
<td>0.5</td>
</tr>
<tr>
<td class="strong"><a href="#5b078e65cda2e46c4754334f975a5362fd4e47ac" class="src_link" title="lib/travis/api/v2/http/ssh_key.rb">lib/travis/api/v2/http/ssh_key.rb</a></td>
<td class="red strong">66.67 %</td>
<td>26</td>
<td>15</td>
<td>10</td>
<td>5</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#f9da561db1b52264c76f56f7164b6394902c3a2e" class="src_link" title="lib/travis/api/v2/http/ssl_key.rb">lib/travis/api/v2/http/ssl_key.rb</a></td>
<td class="red strong">75.0 %</td>
<td>27</td>
<td>12</td>
<td>9</td>
<td>3</td>
<td>0.8</td>
</tr>
<tr>
<td class="strong"><a href="#4fe5f748a2411310c3bf861101420669e9a8812e" class="src_link" title="lib/travis/api/v2/http/user.rb">lib/travis/api/v2/http/user.rb</a></td>
<td class="red strong">73.33 %</td>
<td>43</td>
<td>15</td>
<td>11</td>
<td>4</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#dd52431f41a7d9215be3e7f466926538b62b434a" class="src_link" title="lib/travis/api/v2/http/validation_error.rb">lib/travis/api/v2/http/validation_error.rb</a></td>
<td class="red strong">47.37 %</td>
<td>39</td>
<td>19</td>
<td>9</td>
<td>10</td>
<td>0.5</td>
</tr>
<tr>
<td class="strong"><a href="#ec916e10f6af10305ba62ae14eb26968f828b52d" class="src_link" title="lib/travis/api/v3.rb">lib/travis/api/v3.rb</a></td>
<td class="green strong">100.0 %</td>
<td>27</td>
<td>18</td>
<td>18</td>
<td>0</td>
<td>10.1</td>
</tr>
<tr>
<td class="strong"><a href="#130cf32796ab3cf4d5781313e44244a58973bbf8" class="src_link" title="lib/travis/api/v3/access_control.rb">lib/travis/api/v3/access_control.rb</a></td>
<td class="green strong">100.0 %</td>
<td>15</td>
<td>11</td>
<td>11</td>
<td>0</td>
<td>17.1</td>
</tr>
<tr>
<td class="strong"><a href="#0c37cbeb8112d8c673c2de5e8d4a0bc4a54debad" class="src_link" title="lib/travis/api/v3/access_control/anonymous.rb">lib/travis/api/v3/access_control/anonymous.rb</a></td>
<td class="green strong">100.0 %</td>
<td>12</td>
<td>6</td>
<td>6</td>
<td>0</td>
<td>3.0</td>
</tr>
<tr>
<td class="strong"><a href="#0a4dcd743492bb72a7b2e02c986303e9b6a5f680" class="src_link" title="lib/travis/api/v3/access_control/application.rb">lib/travis/api/v3/access_control/application.rb</a></td>
<td class="green strong">93.33 %</td>
<td>25</td>
<td>15</td>
<td>14</td>
<td>1</td>
<td>2.8</td>
</tr>
<tr>
<td class="strong"><a href="#3e4c532be49003dde82e2f143a6ec6abac0c0fa4" class="src_link" title="lib/travis/api/v3/access_control/generic.rb">lib/travis/api/v3/access_control/generic.rb</a></td>
<td class="green strong">100.0 %</td>
<td>48</td>
<td>25</td>
<td>25</td>
<td>0</td>
<td>6.7</td>
</tr>
<tr>
<td class="strong"><a href="#cc06bcaeb6af4b5039cc7be04f2dcf7d8cbc1656" class="src_link" title="lib/travis/api/v3/access_control/legacy_token.rb">lib/travis/api/v3/access_control/legacy_token.rb</a></td>
<td class="green strong">100.0 %</td>
<td>27</td>
<td>15</td>
<td>15</td>
<td>0</td>
<td>2.2</td>
</tr>
<tr>
<td class="strong"><a href="#53595a642e443774649a7e171c5987c76711acd2" class="src_link" title="lib/travis/api/v3/access_control/scoped.rb">lib/travis/api/v3/access_control/scoped.rb</a></td>
<td class="green strong">100.0 %</td>
<td>19</td>
<td>11</td>
<td>11</td>
<td>0</td>
<td>2.1</td>
</tr>
<tr>
<td class="strong"><a href="#79c75a7a3afdda48d239b26bfbce537aac5c7e87" class="src_link" title="lib/travis/api/v3/access_control/signature.rb">lib/travis/api/v3/access_control/signature.rb</a></td>
<td class="yellow strong">81.25 %</td>
<td>58</td>
<td>32</td>
<td>26</td>
<td>6</td>
<td>3.8</td>
</tr>
<tr>
<td class="strong"><a href="#8ed530d2fb0e1b23faa65b796edd40391a551aff" class="src_link" title="lib/travis/api/v3/access_control/user.rb">lib/travis/api/v3/access_control/user.rb</a></td>
<td class="green strong">100.0 %</td>
<td>24</td>
<td>14</td>
<td>14</td>
<td>0</td>
<td>2.3</td>
</tr>
<tr>
<td class="strong"><a href="#e7d3951ce9217b83d561dc22cebb4194095eba79" class="src_link" title="lib/travis/api/v3/error.rb">lib/travis/api/v3/error.rb</a></td>
<td class="yellow strong">85.71 %</td>
<td>38</td>
<td>21</td>
<td>18</td>
<td>3</td>
<td>5.4</td>
</tr>
<tr>
<td class="strong"><a href="#31a1a8c991fef1e18b15080ccfcb0e9ba1d8c1a4" class="src_link" title="lib/travis/api/v3/opt_in.rb">lib/travis/api/v3/opt_in.rb</a></td>
<td class="green strong">97.22 %</td>
<td>64</td>
<td>36</td>
<td>35</td>
<td>1</td>
<td>13.0</td>
</tr>
<tr>
<td class="strong"><a href="#8705c480fd77b20d19558856194eeee048030a20" class="src_link" title="lib/travis/api/v3/renderer.rb">lib/travis/api/v3/renderer.rb</a></td>
<td class="green strong">100.0 %</td>
<td>14</td>
<td>8</td>
<td>8</td>
<td>0</td>
<td>7.1</td>
</tr>
<tr>
<td class="strong"><a href="#1b1a35fbaa7ca2749c8e0b8b9c270d2424fa0183" class="src_link" title="lib/travis/api/v3/renderer/error.rb">lib/travis/api/v3/renderer/error.rb</a></td>
<td class="green strong">100.0 %</td>
<td>14</td>
<td>5</td>
<td>5</td>
<td>0</td>
<td>2.8</td>
</tr>
<tr>
<td class="strong"><a href="#cca5ed5e9f0a0d7cd46bb5427220ee36042a9e9c" class="src_link" title="lib/travis/api/v3/renderer/repository.rb">lib/travis/api/v3/renderer/repository.rb</a></td>
<td class="green strong">100.0 %</td>
<td>33</td>
<td>10</td>
<td>10</td>
<td>0</td>
<td>7.9</td>
</tr>
<tr>
<td class="strong"><a href="#74ddbe2707d65e192759c48049f9527b65ce82db" class="src_link" title="lib/travis/api/v3/result.rb">lib/travis/api/v3/result.rb</a></td>
<td class="green strong">93.75 %</td>
<td>28</td>
<td>16</td>
<td>15</td>
<td>1</td>
<td>3.5</td>
</tr>
<tr>
<td class="strong"><a href="#31c7c96fc03fbcc205b874d99b9af9102c3400d7" class="src_link" title="lib/travis/api/v3/router.rb">lib/travis/api/v3/router.rb</a></td>
<td class="green strong">90.32 %</td>
<td>49</td>
<td>31</td>
<td>28</td>
<td>3</td>
<td>10.5</td>
</tr>
<tr>
<td class="strong"><a href="#0e450b71a9d314b9765473a9783eafbc6ad24b88" class="src_link" title="lib/travis/api/v3/routes.rb">lib/travis/api/v3/routes.rb</a></td>
<td class="green strong">100.0 %</td>
<td>11</td>
<td>7</td>
<td>7</td>
<td>0</td>
<td>1.0</td>
</tr>
<tr>
<td class="strong"><a href="#2e298b60191a32090a5982c87b6a53c75d24cb8c" class="src_link" title="lib/travis/api/v3/routes/dsl.rb">lib/travis/api/v3/routes/dsl.rb</a></td>
<td class="green strong">97.22 %</td>
<td>63</td>
<td>36</td>
<td>35</td>
<td>1</td>
<td>12.3</td>
</tr>
<tr>
<td class="strong"><a href="#f17bf0ade034477bfdb62ad253c6d587b77e5214" class="src_link" title="lib/travis/api/v3/routes/resource.rb">lib/travis/api/v3/routes/resource.rb</a></td>
<td class="green strong">100.0 %</td>
<td>21</td>
<td>12</td>
<td>12</td>
<td>0</td>
<td>1.0</td>
</tr>
<tr>
<td class="strong"><a href="#847a0c89fe4c592228989215bbeb1143051d97b6" class="src_link" title="lib/travis/api/v3/service.rb">lib/travis/api/v3/service.rb</a></td>
<td class="yellow strong">85.0 %</td>
<td>33</td>
<td>20</td>
<td>17</td>
<td>3</td>
<td>4.8</td>
</tr>
<tr>
<td class="strong"><a href="#63648861eabe7693b10dd0f87b899dfb0a4ff38f" class="src_link" title="lib/travis/api/v3/service_index.rb">lib/travis/api/v3/service_index.rb</a></td>
<td class="green strong">91.53 %</td>
<td>90</td>
<td>59</td>
<td>54</td>
<td>5</td>
<td>1.9</td>
</tr>
<tr>
<td class="strong"><a href="#4fa3e7e42191523754efec186ec8bfce3291040f" class="src_link" title="lib/travis/api/v3/services.rb">lib/travis/api/v3/services.rb</a></td>
<td class="green strong">100.0 %</td>
<td>8</td>
<td>5</td>
<td>5</td>
<td>0</td>
<td>11.4</td>
</tr>
<tr>
<td class="strong"><a href="#a6bb60f0c77473ac7b1a29920833a93a5c2cd7f7" class="src_link" title="lib/travis/api/v3/services/find_repository.rb">lib/travis/api/v3/services/find_repository.rb</a></td>
<td class="red strong">78.57 %</td>
<td>22</td>
<td>14</td>
<td>11</td>
<td>3</td>
<td>9.6</td>
</tr>
<tr>
<td class="strong"><a href="#dc5349ac13a7e081565d2ad293a276d468fd8b0b" class="src_link" title="lib/travis/private_key.rb">lib/travis/private_key.rb</a></td>
<td class="red strong">50.0 %</td>
<td>16</td>
<td>10</td>
<td>5</td>
<td>5</td>
<td>0.5</td>
</tr>
</tbody>
</table>
</div>
<div class="file_list_container" id="v3">
<h2>
<span class="group_name">v3</span>
(<span class="covered_percent"><span class="green">93.68%</span></span>
covered at
<span class="covered_strength">
<span class="green">
6.51
</span>
</span> hits/line)
</h2>
<a name="v3"></a>
<div>
<b>23</b> files in total.
<b>427</b> relevant lines.
<span class="green"><b>400</b> lines covered</span> and
<span class="red"><b>27</b> lines missed </span>
</div>
<table class="file_list">
<thead>
<tr>
<th>File</th>
<th>% covered</th>
<th>Lines</th>
<th>Relevant Lines</th>
<th>Lines covered</th>
<th>Lines missed</th>
<th>Avg. Hits / Line</th>
</tr>
</thead>
<tbody>
<tr>
<td class="strong"><a href="#ec916e10f6af10305ba62ae14eb26968f828b52d" class="src_link" title="lib/travis/api/v3.rb">lib/travis/api/v3.rb</a></td>
<td class="green strong">100.0 %</td>
<td>27</td>
<td>18</td>
<td>18</td>
<td>0</td>
<td>10.1</td>
</tr>
<tr>
<td class="strong"><a href="#130cf32796ab3cf4d5781313e44244a58973bbf8" class="src_link" title="lib/travis/api/v3/access_control.rb">lib/travis/api/v3/access_control.rb</a></td>
<td class="green strong">100.0 %</td>
<td>15</td>
<td>11</td>
<td>11</td>
<td>0</td>
<td>17.1</td>
</tr>
<tr>
<td class="strong"><a href="#0c37cbeb8112d8c673c2de5e8d4a0bc4a54debad" class="src_link" title="lib/travis/api/v3/access_control/anonymous.rb">lib/travis/api/v3/access_control/anonymous.rb</a></td>
<td class="green strong">100.0 %</td>
<td>12</td>
<td>6</td>
<td>6</td>
<td>0</td>
<td>3.0</td>
</tr>
<tr>
<td class="strong"><a href="#0a4dcd743492bb72a7b2e02c986303e9b6a5f680" class="src_link" title="lib/travis/api/v3/access_control/application.rb">lib/travis/api/v3/access_control/application.rb</a></td>
<td class="green strong">93.33 %</td>
<td>25</td>
<td>15</td>
<td>14</td>
<td>1</td>
<td>2.8</td>
</tr>
<tr>
<td class="strong"><a href="#3e4c532be49003dde82e2f143a6ec6abac0c0fa4" class="src_link" title="lib/travis/api/v3/access_control/generic.rb">lib/travis/api/v3/access_control/generic.rb</a></td>
<td class="green strong">100.0 %</td>
<td>48</td>
<td>25</td>
<td>25</td>
<td>0</td>
<td>6.7</td>
</tr>
<tr>
<td class="strong"><a href="#cc06bcaeb6af4b5039cc7be04f2dcf7d8cbc1656" class="src_link" title="lib/travis/api/v3/access_control/legacy_token.rb">lib/travis/api/v3/access_control/legacy_token.rb</a></td>
<td class="green strong">100.0 %</td>
<td>27</td>
<td>15</td>
<td>15</td>
<td>0</td>
<td>2.2</td>
</tr>
<tr>
<td class="strong"><a href="#53595a642e443774649a7e171c5987c76711acd2" class="src_link" title="lib/travis/api/v3/access_control/scoped.rb">lib/travis/api/v3/access_control/scoped.rb</a></td>
<td class="green strong">100.0 %</td>
<td>19</td>
<td>11</td>
<td>11</td>
<td>0</td>
<td>2.1</td>
</tr>
<tr>
<td class="strong"><a href="#79c75a7a3afdda48d239b26bfbce537aac5c7e87" class="src_link" title="lib/travis/api/v3/access_control/signature.rb">lib/travis/api/v3/access_control/signature.rb</a></td>
<td class="yellow strong">81.25 %</td>
<td>58</td>
<td>32</td>
<td>26</td>
<td>6</td>
<td>3.8</td>
</tr>
<tr>
<td class="strong"><a href="#8ed530d2fb0e1b23faa65b796edd40391a551aff" class="src_link" title="lib/travis/api/v3/access_control/user.rb">lib/travis/api/v3/access_control/user.rb</a></td>
<td class="green strong">100.0 %</td>
<td>24</td>
<td>14</td>
<td>14</td>
<td>0</td>
<td>2.3</td>
</tr>
<tr>
<td class="strong"><a href="#e7d3951ce9217b83d561dc22cebb4194095eba79" class="src_link" title="lib/travis/api/v3/error.rb">lib/travis/api/v3/error.rb</a></td>
<td class="yellow strong">85.71 %</td>
<td>38</td>
<td>21</td>
<td>18</td>
<td>3</td>
<td>5.4</td>
</tr>
<tr>
<td class="strong"><a href="#31a1a8c991fef1e18b15080ccfcb0e9ba1d8c1a4" class="src_link" title="lib/travis/api/v3/opt_in.rb">lib/travis/api/v3/opt_in.rb</a></td>
<td class="green strong">97.22 %</td>
<td>64</td>
<td>36</td>
<td>35</td>
<td>1</td>
<td>13.0</td>
</tr>
<tr>
<td class="strong"><a href="#8705c480fd77b20d19558856194eeee048030a20" class="src_link" title="lib/travis/api/v3/renderer.rb">lib/travis/api/v3/renderer.rb</a></td>
<td class="green strong">100.0 %</td>
<td>14</td>
<td>8</td>
<td>8</td>
<td>0</td>
<td>7.1</td>
</tr>
<tr>
<td class="strong"><a href="#1b1a35fbaa7ca2749c8e0b8b9c270d2424fa0183" class="src_link" title="lib/travis/api/v3/renderer/error.rb">lib/travis/api/v3/renderer/error.rb</a></td>
<td class="green strong">100.0 %</td>
<td>14</td>
<td>5</td>
<td>5</td>
<td>0</td>
<td>2.8</td>
</tr>
<tr>
<td class="strong"><a href="#cca5ed5e9f0a0d7cd46bb5427220ee36042a9e9c" class="src_link" title="lib/travis/api/v3/renderer/repository.rb">lib/travis/api/v3/renderer/repository.rb</a></td>
<td class="green strong">100.0 %</td>
<td>33</td>
<td>10</td>
<td>10</td>
<td>0</td>
<td>7.9</td>
</tr>
<tr>
<td class="strong"><a href="#74ddbe2707d65e192759c48049f9527b65ce82db" class="src_link" title="lib/travis/api/v3/result.rb">lib/travis/api/v3/result.rb</a></td>
<td class="green strong">93.75 %</td>
<td>28</td>
<td>16</td>
<td>15</td>
<td>1</td>
<td>3.5</td>
</tr>
<tr>
<td class="strong"><a href="#31c7c96fc03fbcc205b874d99b9af9102c3400d7" class="src_link" title="lib/travis/api/v3/router.rb">lib/travis/api/v3/router.rb</a></td>
<td class="green strong">90.32 %</td>
<td>49</td>
<td>31</td>
<td>28</td>
<td>3</td>
<td>10.5</td>
</tr>
<tr>
<td class="strong"><a href="#0e450b71a9d314b9765473a9783eafbc6ad24b88" class="src_link" title="lib/travis/api/v3/routes.rb">lib/travis/api/v3/routes.rb</a></td>
<td class="green strong">100.0 %</td>
<td>11</td>
<td>7</td>
<td>7</td>
<td>0</td>
<td>1.0</td>
</tr>
<tr>
<td class="strong"><a href="#2e298b60191a32090a5982c87b6a53c75d24cb8c" class="src_link" title="lib/travis/api/v3/routes/dsl.rb">lib/travis/api/v3/routes/dsl.rb</a></td>
<td class="green strong">97.22 %</td>
<td>63</td>
<td>36</td>
<td>35</td>
<td>1</td>
<td>12.3</td>
</tr>
<tr>
<td class="strong"><a href="#f17bf0ade034477bfdb62ad253c6d587b77e5214" class="src_link" title="lib/travis/api/v3/routes/resource.rb">lib/travis/api/v3/routes/resource.rb</a></td>
<td class="green strong">100.0 %</td>
<td>21</td>
<td>12</td>
<td>12</td>
<td>0</td>
<td>1.0</td>
</tr>
<tr>
<td class="strong"><a href="#847a0c89fe4c592228989215bbeb1143051d97b6" class="src_link" title="lib/travis/api/v3/service.rb">lib/travis/api/v3/service.rb</a></td>
<td class="yellow strong">85.0 %</td>
<td>33</td>
<td>20</td>
<td>17</td>
<td>3</td>
<td>4.8</td>
</tr>
<tr>
<td class="strong"><a href="#63648861eabe7693b10dd0f87b899dfb0a4ff38f" class="src_link" title="lib/travis/api/v3/service_index.rb">lib/travis/api/v3/service_index.rb</a></td>
<td class="green strong">91.53 %</td>
<td>90</td>
<td>59</td>
<td>54</td>
<td>5</td>
<td>1.9</td>
</tr>
<tr>
<td class="strong"><a href="#4fa3e7e42191523754efec186ec8bfce3291040f" class="src_link" title="lib/travis/api/v3/services.rb">lib/travis/api/v3/services.rb</a></td>
<td class="green strong">100.0 %</td>
<td>8</td>
<td>5</td>
<td>5</td>
<td>0</td>
<td>11.4</td>
</tr>
<tr>
<td class="strong"><a href="#a6bb60f0c77473ac7b1a29920833a93a5c2cd7f7" class="src_link" title="lib/travis/api/v3/services/find_repository.rb">lib/travis/api/v3/services/find_repository.rb</a></td>
<td class="red strong">78.57 %</td>
<td>22</td>
<td>14</td>
<td>11</td>
<td>3</td>
<td>9.6</td>
</tr>
</tbody>
</table>
</div>
<div class="file_list_container" id="Ungrouped">
<h2>
<span class="group_name">Ungrouped</span>
(<span class="covered_percent"><span class="red">60.11%</span></span>
covered at
<span class="covered_strength">
<span class="green">
5.02
</span>
</span> hits/line)
</h2>
<a name="Ungrouped"></a>
<div>
<b>70</b> files in total.
<b>1637</b> relevant lines.
<span class="green"><b>984</b> lines covered</span> and
<span class="red"><b>653</b> lines missed </span>
</div>
<table class="file_list">
<thead>
<tr>
<th>File</th>
<th>% covered</th>
<th>Lines</th>
<th>Relevant Lines</th>
<th>Lines covered</th>
<th>Lines missed</th>
<th>Avg. Hits / Line</th>
</tr>
</thead>
<tbody>
<tr>
<td class="strong"><a href="#6a8e7022de4db451dc6c402d7b521d74b4867cec" class="src_link" title="lib/travis/api/app.rb">lib/travis/api/app.rb</a></td>
<td class="yellow strong">85.25 %</td>
<td>207</td>
<td>122</td>
<td>104</td>
<td>18</td>
<td>21.2</td>
</tr>
<tr>
<td class="strong"><a href="#2563a9e3b6860f10bc10bc8b9abc2e0b307c3396" class="src_link" title="lib/travis/api/app/access_token.rb">lib/travis/api/app/access_token.rb</a></td>
<td class="yellow strong">87.5 %</td>
<td>105</td>
<td>64</td>
<td>56</td>
<td>8</td>
<td>4.3</td>
</tr>
<tr>
<td class="strong"><a href="#a961b2b2494498d5ea5ba390081b58db5ba6a9ae" class="src_link" title="lib/travis/api/app/base.rb">lib/travis/api/app/base.rb</a></td>
<td class="red strong">73.08 %</td>
<td>53</td>
<td>26</td>
<td>19</td>
<td>7</td>
<td>11.0</td>
</tr>
<tr>
<td class="strong"><a href="#d160d1d2c1e6c6e0542165ddbf75627d39b2de6f" class="src_link" title="lib/travis/api/app/cors.rb">lib/travis/api/app/cors.rb</a></td>
<td class="red strong">80.0 %</td>
<td>20</td>
<td>10</td>
<td>8</td>
<td>2</td>
<td>7.4</td>
</tr>
<tr>
<td class="strong"><a href="#eeda47705beb665db84542493bea1c2e0ec05731" class="src_link" title="lib/travis/api/app/endpoint.rb">lib/travis/api/app/endpoint.rb</a></td>
<td class="red strong">70.0 %</td>
<td>50</td>
<td>30</td>
<td>21</td>
<td>9</td>
<td>17.9</td>
</tr>
<tr>
<td class="strong"><a href="#b2b6630e8ce43a4e90ba2fa3f0747e7269631dd5" class="src_link" title="lib/travis/api/app/endpoint/accounts.rb">lib/travis/api/app/endpoint/accounts.rb</a></td>
<td class="yellow strong">83.33 %</td>
<td>11</td>
<td>6</td>
<td>5</td>
<td>1</td>
<td>0.8</td>
</tr>
<tr>
<td class="strong"><a href="#a5a778403a26fa47d8dfe304f657adcbfa66f559" class="src_link" title="lib/travis/api/app/endpoint/authorization.rb">lib/travis/api/app/endpoint/authorization.rb</a></td>
<td class="red strong">26.45 %</td>
<td>522</td>
<td>155</td>
<td>41</td>
<td>114</td>
<td>0.3</td>
</tr>
<tr>
<td class="strong"><a href="#2b74a2462ad5e4f3ca518f0cc6f13ddc82ee8762" class="src_link" title="lib/travis/api/app/endpoint/branches.rb">lib/travis/api/app/endpoint/branches.rb</a></td>
<td class="yellow strong">83.33 %</td>
<td>16</td>
<td>6</td>
<td>5</td>
<td>1</td>
<td>0.8</td>
</tr>
<tr>
<td class="strong"><a href="#f830dba6ed178eb88e884e4ef578db0073e9384a" class="src_link" title="lib/travis/api/app/endpoint/broadcasts.rb">lib/travis/api/app/endpoint/broadcasts.rb</a></td>
<td class="yellow strong">83.33 %</td>
<td>11</td>
<td>6</td>
<td>5</td>
<td>1</td>
<td>0.8</td>
</tr>
<tr>
<td class="strong"><a href="#fac69dfa06cb89c53a04099fb945fb4a805cc42c" class="src_link" title="lib/travis/api/app/endpoint/builds.rb">lib/travis/api/app/endpoint/builds.rb</a></td>
<td class="red strong">27.59 %</td>
<td>53</td>
<td>29</td>
<td>8</td>
<td>21</td>
<td>0.3</td>
</tr>
<tr>
<td class="strong"><a href="#03dcd32988fb710bc7a3c06636a6780bce656589" class="src_link" title="lib/travis/api/app/endpoint/documentation.rb">lib/travis/api/app/endpoint/documentation.rb</a></td>
<td class="yellow strong">85.71 %</td>
<td>13</td>
<td>7</td>
<td>6</td>
<td>1</td>
<td>0.9</td>
</tr>
<tr>
<td class="strong"><a href="#0dc46adef05fa2cbeadacf05c59276980cc25367" class="src_link" title="lib/travis/api/app/endpoint/endpoints.rb">lib/travis/api/app/endpoint/endpoints.rb</a></td>
<td class="yellow strong">86.96 %</td>
<td>68</td>
<td>23</td>
<td>20</td>
<td>3</td>
<td>19.8</td>
</tr>
<tr>
<td class="strong"><a href="#413ff5b985954d06f57e54bae462c9380050682b" class="src_link" title="lib/travis/api/app/endpoint/env_vars.rb">lib/travis/api/app/endpoint/env_vars.rb</a></td>
<td class="red strong">44.44 %</td>
<td>31</td>
<td>18</td>
<td>8</td>
<td>10</td>
<td>0.4</td>
</tr>
<tr>
<td class="strong"><a href="#f01f22d7534ebd190653ed0f88f71a94320108a3" class="src_link" title="lib/travis/api/app/endpoint/home.rb">lib/travis/api/app/endpoint/home.rb</a></td>
<td class="red strong">66.67 %</td>
<td>54</td>
<td>18</td>
<td>12</td>
<td>6</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#389e755e519bf86618fcf82593746fcedb9c4271" class="src_link" title="lib/travis/api/app/endpoint/hooks.rb">lib/travis/api/app/endpoint/hooks.rb</a></td>
<td class="red strong">75.0 %</td>
<td>15</td>
<td>8</td>
<td>6</td>
<td>2</td>
<td>0.8</td>
</tr>
<tr>
<td class="strong"><a href="#0c26cbaa8343afc54bde5f948dbae2fe3039c766" class="src_link" title="lib/travis/api/app/endpoint/jobs.rb">lib/travis/api/app/endpoint/jobs.rb</a></td>
<td class="red strong">22.73 %</td>
<td>122</td>
<td>66</td>
<td>15</td>
<td>51</td>
<td>0.2</td>
</tr>
<tr>
<td class="strong"><a href="#1d8c0ceda3860fb26fc34a1a770660c35db5b435" class="src_link" title="lib/travis/api/app/endpoint/lint.rb">lib/travis/api/app/endpoint/lint.rb</a></td>
<td class="red strong">61.54 %</td>
<td>19</td>
<td>13</td>
<td>8</td>
<td>5</td>
<td>0.6</td>
</tr>
<tr>
<td class="strong"><a href="#5d621a9a5eb87e9eb39a114965b4bc43594c05ee" class="src_link" title="lib/travis/api/app/endpoint/logs.rb">lib/travis/api/app/endpoint/logs.rb</a></td>
<td class="yellow strong">83.33 %</td>
<td>13</td>
<td>6</td>
<td>5</td>
<td>1</td>
<td>0.8</td>
</tr>
<tr>
<td class="strong"><a href="#41717bfcba400b9bc1a7add2cb84d3195cfc3565" class="src_link" title="lib/travis/api/app/endpoint/repos.rb">lib/travis/api/app/endpoint/repos.rb</a></td>
<td class="red strong">39.71 %</td>
<td>189</td>
<td>68</td>
<td>27</td>
<td>41</td>
<td>0.4</td>
</tr>
<tr>
<td class="strong"><a href="#3542f33a7b8a282ed0436611428aa30ad3f980a1" class="src_link" title="lib/travis/api/app/endpoint/requests.rb">lib/travis/api/app/endpoint/requests.rb</a></td>
<td class="red strong">47.06 %</td>
<td>32</td>
<td>17</td>
<td>8</td>
<td>9</td>
<td>0.5</td>
</tr>
<tr>
<td class="strong"><a href="#b615d4751e9fd711ed50e22c4b49c7c51f964d93" class="src_link" title="lib/travis/api/app/endpoint/setting_endpoint.rb">lib/travis/api/app/endpoint/setting_endpoint.rb</a></td>
<td class="red strong">52.73 %</td>
<td>98</td>
<td>55</td>
<td>29</td>
<td>26</td>
<td>4.6</td>
</tr>
<tr>
<td class="strong"><a href="#c146923d5484592bc716b1adae4f3329fd9ebb1b" class="src_link" title="lib/travis/api/app/endpoint/singleton_settings_endpoint.rb">lib/travis/api/app/endpoint/singleton_settings_endpoint.rb</a></td>
<td class="red strong">57.14 %</td>
<td>46</td>
<td>28</td>
<td>16</td>
<td>12</td>
<td>0.6</td>
</tr>
<tr>
<td class="strong"><a href="#3aa4c3de70a6e7203940667017613935754e19cd" class="src_link" title="lib/travis/api/app/endpoint/uptime.rb">lib/travis/api/app/endpoint/uptime.rb</a></td>
<td class="red strong">55.56 %</td>
<td>16</td>
<td>9</td>
<td>5</td>
<td>4</td>
<td>0.6</td>
</tr>
<tr>
<td class="strong"><a href="#2aeec642e9353983d22c25e11bb6aee7a68ff327" class="src_link" title="lib/travis/api/app/endpoint/users.rb">lib/travis/api/app/endpoint/users.rb</a></td>
<td class="red strong">50.0 %</td>
<td>59</td>
<td>18</td>
<td>9</td>
<td>9</td>
<td>0.5</td>
</tr>
<tr>
<td class="strong"><a href="#98cb249669c6e20fed930c4f814f8e6266add77c" class="src_link" title="lib/travis/api/app/extensions.rb">lib/travis/api/app/extensions.rb</a></td>
<td class="green strong">100.0 %</td>
<td>8</td>
<td>4</td>
<td>4</td>
<td>0</td>
<td>2.0</td>
</tr>
<tr>
<td class="strong"><a href="#00c3504cff5eca9f25748185fb2bd47ad1755d92" class="src_link" title="lib/travis/api/app/extensions/expose_pattern.rb">lib/travis/api/app/extensions/expose_pattern.rb</a></td>
<td class="green strong">100.0 %</td>
<td>12</td>
<td>7</td>
<td>7</td>
<td>0</td>
<td>34.7</td>
</tr>
<tr>
<td class="strong"><a href="#cf7268e37e643b00ddda6c99c2b8d2601a66df25" class="src_link" title="lib/travis/api/app/extensions/scoping.rb">lib/travis/api/app/extensions/scoping.rb</a></td>
<td class="red strong">41.03 %</td>
<td>69</td>
<td>39</td>
<td>16</td>
<td>23</td>
<td>9.4</td>
</tr>
<tr>
<td class="strong"><a href="#4afdb495e463d11449413cb7fabf94f05a66ff88" class="src_link" title="lib/travis/api/app/extensions/smart_constants.rb">lib/travis/api/app/extensions/smart_constants.rb</a></td>
<td class="green strong">100.0 %</td>
<td>28</td>
<td>11</td>
<td>11</td>
<td>0</td>
<td>3.3</td>
</tr>
<tr>
<td class="strong"><a href="#32932af295b8d816c57702d2dd3215d03df46d91" class="src_link" title="lib/travis/api/app/extensions/subclass_tracker.rb">lib/travis/api/app/extensions/subclass_tracker.rb</a></td>
<td class="green strong">100.0 %</td>
<td>25</td>
<td>13</td>
<td>13</td>
<td>0</td>
<td>113.6</td>
</tr>
<tr>
<td class="strong"><a href="#3583b3399a71ebe7de3f253f8a6a166b5ff1450d" class="src_link" title="lib/travis/api/app/helpers.rb">lib/travis/api/app/helpers.rb</a></td>
<td class="green strong">100.0 %</td>
<td>8</td>
<td>4</td>
<td>4</td>
<td>0</td>
<td>2.5</td>
</tr>
<tr>
<td class="strong"><a href="#d434ebb9387430acf5e4c2c6adda113f213d9a27" class="src_link" title="lib/travis/api/app/helpers/accept.rb">lib/travis/api/app/helpers/accept.rb</a></td>
<td class="red strong">49.06 %</td>
<td>93</td>
<td>53</td>
<td>26</td>
<td>27</td>
<td>1.5</td>
</tr>
<tr>
<td class="strong"><a href="#945fc5424b8698f6c9f47bf45d950c7993fe7f7d" class="src_link" title="lib/travis/api/app/helpers/current_user.rb">lib/travis/api/app/helpers/current_user.rb</a></td>
<td class="red strong">70.0 %</td>
<td>19</td>
<td>10</td>
<td>7</td>
<td>3</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#d6d6177d6e0d49294315541845ceb6265759cdf1" class="src_link" title="lib/travis/api/app/helpers/db_follower.rb">lib/travis/api/app/helpers/db_follower.rb</a></td>
<td class="yellow strong">83.33 %</td>
<td>11</td>
<td>6</td>
<td>5</td>
<td>1</td>
<td>0.8</td>
</tr>
<tr>
<td class="strong"><a href="#9b6cc591941ba41c4e94fefe940858e3353c284f" class="src_link" title="lib/travis/api/app/helpers/flash.rb">lib/travis/api/app/helpers/flash.rb</a></td>
<td class="green strong">100.0 %</td>
<td>11</td>
<td>6</td>
<td>6</td>
<td>0</td>
<td>2.5</td>
</tr>
<tr>
<td class="strong"><a href="#4bc54455bbe2ec43bb23f5b569a91e4d444598b6" class="src_link" title="lib/travis/api/app/helpers/mime_types.rb">lib/travis/api/app/helpers/mime_types.rb</a></td>
<td class="red strong">64.29 %</td>
<td>28</td>
<td>14</td>
<td>9</td>
<td>5</td>
<td>0.6</td>
</tr>
<tr>
<td class="strong"><a href="#e5ee14c5580baf7a66bac731983db9d3bdb48996" class="src_link" title="lib/travis/api/app/helpers/respond_with.rb">lib/travis/api/app/helpers/respond_with.rb</a></td>
<td class="red strong">40.54 %</td>
<td>70</td>
<td>37</td>
<td>15</td>
<td>22</td>
<td>2.5</td>
</tr>
<tr>
<td class="strong"><a href="#abcb6fbe07ff5db52c5716e39eb648ef96550296" class="src_link" title="lib/travis/api/app/middleware.rb">lib/travis/api/app/middleware.rb</a></td>
<td class="green strong">100.0 %</td>
<td>7</td>
<td>3</td>
<td>3</td>
<td>0</td>
<td>1.0</td>
</tr>
<tr>
<td class="strong"><a href="#fafd069a2bcef83fff5f536d88402c883f3cdc31" class="src_link" title="lib/travis/api/app/middleware/logging.rb">lib/travis/api/app/middleware/logging.rb</a></td>
<td class="green strong">100.0 %</td>
<td>15</td>
<td>8</td>
<td>8</td>
<td>0</td>
<td>6.6</td>
</tr>
<tr>
<td class="strong"><a href="#7670839fd3d16bec4a807509898851298c771968" class="src_link" title="lib/travis/api/app/middleware/metriks.rb">lib/travis/api/app/middleware/metriks.rb</a></td>
<td class="red strong">77.42 %</td>
<td>48</td>
<td>31</td>
<td>24</td>
<td>7</td>
<td>12.5</td>
</tr>
<tr>
<td class="strong"><a href="#fe2923d329420298ae0fb9e1101c22a8b601d151" class="src_link" title="lib/travis/api/app/middleware/rewrite.rb">lib/travis/api/app/middleware/rewrite.rb</a></td>
<td class="red strong">78.57 %</td>
<td>75</td>
<td>42</td>
<td>33</td>
<td>9</td>
<td>3.6</td>
</tr>
<tr>
<td class="strong"><a href="#26dd70a212f3b2cbf26d11a0b7f29ee3dec679c3" class="src_link" title="lib/travis/api/app/middleware/scope_check.rb">lib/travis/api/app/middleware/scope_check.rb</a></td>
<td class="green strong">92.59 %</td>
<td>47</td>
<td>27</td>
<td>25</td>
<td>2</td>
<td>8.9</td>
</tr>
<tr>
<td class="strong"><a href="#57848e06570d6ebc2e75aad01bea70082a1c55f4" class="src_link" title="lib/travis/api/app/middleware/user_agent_tracker.rb">lib/travis/api/app/middleware/user_agent_tracker.rb</a></td>
<td class="red strong">40.0 %</td>
<td>62</td>
<td>35</td>
<td>14</td>
<td>21</td>
<td>1.7</td>
</tr>
<tr>
<td class="strong"><a href="#866d316bcfc64963406986d03c50d1280b8fe34d" class="src_link" title="lib/travis/api/app/services/schedule_request.rb">lib/travis/api/app/services/schedule_request.rb</a></td>
<td class="red strong">51.61 %</td>
<td>52</td>
<td>31</td>
<td>16</td>
<td>15</td>
<td>0.5</td>
</tr>
<tr>
<td class="strong"><a href="#d04c5eced516ab14b9065b4d34d0af855835a730" class="src_link" title="lib/travis/api/serializer.rb">lib/travis/api/serializer.rb</a></td>
<td class="red strong">66.67 %</td>
<td>23</td>
<td>12</td>
<td>8</td>
<td>4</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#babe3ce05ce1d657f847b2e01c64437b8e58b014" class="src_link" title="lib/travis/api/v2.rb">lib/travis/api/v2.rb</a></td>
<td class="green strong">100.0 %</td>
<td>8</td>
<td>4</td>
<td>4</td>
<td>0</td>
<td>1.0</td>
</tr>
<tr>
<td class="strong"><a href="#1c817b9839dda1170aec2560bad5a09065552de6" class="src_link" title="lib/travis/api/v2/http.rb">lib/travis/api/v2/http.rb</a></td>
<td class="green strong">100.0 %</td>
<td>33</td>
<td>28</td>
<td>28</td>
<td>0</td>
<td>1.0</td>
</tr>
<tr>
<td class="strong"><a href="#c48990e0accf6ba7189617a1b67f9c86eecfc562" class="src_link" title="lib/travis/api/v2/http/accounts.rb">lib/travis/api/v2/http/accounts.rb</a></td>
<td class="red strong">68.75 %</td>
<td>38</td>
<td>16</td>
<td>11</td>
<td>5</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#65342af497e7edc515415235ed81e3bbaccc6979" class="src_link" title="lib/travis/api/v2/http/annotations.rb">lib/travis/api/v2/http/annotations.rb</a></td>
<td class="red strong">71.43 %</td>
<td>34</td>
<td>14</td>
<td>10</td>
<td>4</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#e48076813d88d2c6e10c03686156a6f19429e60e" class="src_link" title="lib/travis/api/v2/http/branch.rb">lib/travis/api/v2/http/branch.rb</a></td>
<td class="red strong">71.43 %</td>
<td>28</td>
<td>14</td>
<td>10</td>
<td>4</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#58933f40c3a13ad2f3470bedf8880494dabc2b2d" class="src_link" title="lib/travis/api/v2/http/branches.rb">lib/travis/api/v2/http/branches.rb</a></td>
<td class="red strong">54.55 %</td>
<td>60</td>
<td>22</td>
<td>12</td>
<td>10</td>
<td>0.5</td>
</tr>
<tr>
<td class="strong"><a href="#c46347e1a0d259fc446170187bf8517d99d49177" class="src_link" title="lib/travis/api/v2/http/broadcasts.rb">lib/travis/api/v2/http/broadcasts.rb</a></td>
<td class="red strong">66.67 %</td>
<td>32</td>
<td>15</td>
<td>10</td>
<td>5</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#8c4ac5c4e74342720580a492f7c3aa9d4d384e43" class="src_link" title="lib/travis/api/v2/http/build.rb">lib/travis/api/v2/http/build.rb</a></td>
<td class="red strong">60.87 %</td>
<td>87</td>
<td>23</td>
<td>14</td>
<td>9</td>
<td>0.6</td>
</tr>
<tr>
<td class="strong"><a href="#1abcacda27e1da4c1f9879072dc5eb5d0a6f1eab" class="src_link" title="lib/travis/api/v2/http/builds.rb">lib/travis/api/v2/http/builds.rb</a></td>
<td class="red strong">59.09 %</td>
<td>66</td>
<td>22</td>
<td>13</td>
<td>9</td>
<td>0.6</td>
</tr>
<tr>
<td class="strong"><a href="#b7d8a575e84049f0f7983320c9ad1737cc7619a1" class="src_link" title="lib/travis/api/v2/http/caches.rb">lib/travis/api/v2/http/caches.rb</a></td>
<td class="red strong">73.33 %</td>
<td>33</td>
<td>15</td>
<td>11</td>
<td>4</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#452e1e09b24321c66a631e743b6a84331da9bd13" class="src_link" title="lib/travis/api/v2/http/env_var.rb">lib/travis/api/v2/http/env_var.rb</a></td>
<td class="red strong">61.54 %</td>
<td>23</td>
<td>13</td>
<td>8</td>
<td>5</td>
<td>0.6</td>
</tr>
<tr>
<td class="strong"><a href="#f91e8a59d86280d6f7eb63939f3a080ab5f82e0f" class="src_link" title="lib/travis/api/v2/http/env_vars.rb">lib/travis/api/v2/http/env_vars.rb</a></td>
<td class="green strong">100.0 %</td>
<td>2</td>
<td>1</td>
<td>1</td>
<td>0</td>
<td>1.0</td>
</tr>
<tr>
<td class="strong"><a href="#16f73e884ddd5d7c35925c636e1981fa77cb5467" class="src_link" title="lib/travis/api/v2/http/hooks.rb">lib/travis/api/v2/http/hooks.rb</a></td>
<td class="red strong">66.67 %</td>
<td>37</td>
<td>15</td>
<td>10</td>
<td>5</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#7bb06459f99796e92585a0613514a4dc10a3b4e6" class="src_link" title="lib/travis/api/v2/http/job.rb">lib/travis/api/v2/http/job.rb</a></td>
<td class="red strong">70.59 %</td>
<td>63</td>
<td>17</td>
<td>12</td>
<td>5</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#28a544a6de90280731859574fbbbcf82c3b12b13" class="src_link" title="lib/travis/api/v2/http/jobs.rb">lib/travis/api/v2/http/jobs.rb</a></td>
<td class="red strong">63.16 %</td>
<td>61</td>
<td>19</td>
<td>12</td>
<td>7</td>
<td>0.6</td>
</tr>
<tr>
<td class="strong"><a href="#305e989221ff7819ee74c2690fb3d9b4d6366b86" class="src_link" title="lib/travis/api/v2/http/log.rb">lib/travis/api/v2/http/log.rb</a></td>
<td class="red strong">50.0 %</td>
<td>68</td>
<td>28</td>
<td>14</td>
<td>14</td>
<td>0.5</td>
</tr>
<tr>
<td class="strong"><a href="#87c289727e6a92299bc4a9407f685b69ca6eb426" class="src_link" title="lib/travis/api/v2/http/permissions.rb">lib/travis/api/v2/http/permissions.rb</a></td>
<td class="red strong">58.33 %</td>
<td>50</td>
<td>24</td>
<td>14</td>
<td>10</td>
<td>0.6</td>
</tr>
<tr>
<td class="strong"><a href="#8ff46500e36176862b05aa7513e20da8d68dc208" class="src_link" title="lib/travis/api/v2/http/repositories.rb">lib/travis/api/v2/http/repositories.rb</a></td>
<td class="red strong">68.75 %</td>
<td>43</td>
<td>16</td>
<td>11</td>
<td>5</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#eff78d14dee73bdad5c2af8b49e3b528390c9207" class="src_link" title="lib/travis/api/v2/http/repository.rb">lib/travis/api/v2/http/repository.rb</a></td>
<td class="red strong">78.57 %</td>
<td>43</td>
<td>14</td>
<td>11</td>
<td>3</td>
<td>0.8</td>
</tr>
<tr>
<td class="strong"><a href="#0438b13b58bbb8a610c81181e35ca9c4273df442" class="src_link" title="lib/travis/api/v2/http/request.rb">lib/travis/api/v2/http/request.rb</a></td>
<td class="red strong">52.17 %</td>
<td>71</td>
<td>23</td>
<td>12</td>
<td>11</td>
<td>0.5</td>
</tr>
<tr>
<td class="strong"><a href="#3409238a742e733e8cc83123cd42c5d119a08c09" class="src_link" title="lib/travis/api/v2/http/requests.rb">lib/travis/api/v2/http/requests.rb</a></td>
<td class="red strong">54.55 %</td>
<td>68</td>
<td>22</td>
<td>12</td>
<td>10</td>
<td>0.5</td>
</tr>
<tr>
<td class="strong"><a href="#5b078e65cda2e46c4754334f975a5362fd4e47ac" class="src_link" title="lib/travis/api/v2/http/ssh_key.rb">lib/travis/api/v2/http/ssh_key.rb</a></td>
<td class="red strong">66.67 %</td>
<td>26</td>
<td>15</td>
<td>10</td>
<td>5</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#f9da561db1b52264c76f56f7164b6394902c3a2e" class="src_link" title="lib/travis/api/v2/http/ssl_key.rb">lib/travis/api/v2/http/ssl_key.rb</a></td>
<td class="red strong">75.0 %</td>
<td>27</td>
<td>12</td>
<td>9</td>
<td>3</td>
<td>0.8</td>
</tr>
<tr>
<td class="strong"><a href="#4fe5f748a2411310c3bf861101420669e9a8812e" class="src_link" title="lib/travis/api/v2/http/user.rb">lib/travis/api/v2/http/user.rb</a></td>
<td class="red strong">73.33 %</td>
<td>43</td>
<td>15</td>
<td>11</td>
<td>4</td>
<td>0.7</td>
</tr>
<tr>
<td class="strong"><a href="#dd52431f41a7d9215be3e7f466926538b62b434a" class="src_link" title="lib/travis/api/v2/http/validation_error.rb">lib/travis/api/v2/http/validation_error.rb</a></td>
<td class="red strong">47.37 %</td>
<td>39</td>
<td>19</td>
<td>9</td>
<td>10</td>
<td>0.5</td>
</tr>
<tr>
<td class="strong"><a href="#dc5349ac13a7e081565d2ad293a276d468fd8b0b" class="src_link" title="lib/travis/private_key.rb">lib/travis/private_key.rb</a></td>
<td class="red strong">50.0 %</td>
<td>16</td>
<td>10</td>
<td>5</td>
<td>5</td>
<td>0.5</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="footer">
Generated by <a href="http://github.com/colszowka/simplecov">simplecov</a> v0.9.1
and simplecov-html v0.8.0<br/>
using RSpec
</div>
<div class="source_files">
<div class="source_table" id="6a8e7022de4db451dc6c402d7b521d74b4867cec">
<div class="header">
<h3>lib/travis/api/app.rb</h3>
<h4><span class="yellow">85.25 %</span> covered</h4>
<div>
<b>122</b> relevant lines.
<span class="green"><b>104</b> lines covered</span> and
<span class="red"><b>18</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/model&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/support/amqp&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/states_cache&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby">require &#39;rack&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby">require &#39;rack/protection&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby">require &#39;rack/contrib&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby">require &#39;dalli&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="9">
<span class="hits">1</span>
<code class="ruby">require &#39;memcachier&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby">require &#39;rack/cache&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="11">
<span class="hits">1</span>
<code class="ruby">require &#39;rack/attack&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="12">
<span class="hits">1</span>
<code class="ruby">require &#39;active_record&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="13">
<span class="hits">1</span>
<code class="ruby">require &#39;redis&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="14">
<span class="hits">1</span>
<code class="ruby">require &#39;gh&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="15">
<span class="hits">1</span>
<code class="ruby">require &#39;raven&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="16">
<span class="hits">1</span>
<code class="ruby">require &#39;sidekiq&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="17">
<span class="hits">1</span>
<code class="ruby">require &#39;metriks/reporter/logger&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="18">
<span class="hits">1</span>
<code class="ruby">require &#39;metriks/librato_metrics_reporter&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="19">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/support/log_subscriber/active_record_metrics&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="20">
<span class="hits">1</span>
<code class="ruby">require &#39;fileutils&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="21">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/v2/http&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="22">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/v3&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"># Rack class implementing the HTTP API.</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"># Instances respond to #call.</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby">#</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"># run Travis::Api::App.new</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby">#</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"># Requires TLS in production.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="30">
<span class="hits">1</span>
<code class="ruby">module Travis::Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="31">
<span class="hits">1</span>
<code class="ruby"> class App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="32">
<span class="hits">1</span>
<code class="ruby"> autoload :AccessToken, &#39;travis/api/app/access_token&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="33">
<span class="hits">1</span>
<code class="ruby"> autoload :Base, &#39;travis/api/app/base&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="34">
<span class="hits">1</span>
<code class="ruby"> autoload :Endpoint, &#39;travis/api/app/endpoint&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="35">
<span class="hits">1</span>
<code class="ruby"> autoload :Extensions, &#39;travis/api/app/extensions&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="36">
<span class="hits">1</span>
<code class="ruby"> autoload :Helpers, &#39;travis/api/app/helpers&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="37">
<span class="hits">1</span>
<code class="ruby"> autoload :Middleware, &#39;travis/api/app/middleware&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="38">
<span class="hits">1</span>
<code class="ruby"> autoload :Responders, &#39;travis/api/app/responders&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="39">
<span class="hits">1</span>
<code class="ruby"> autoload :Cors, &#39;travis/api/app/cors&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="40">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="41">
<span class="hits">1</span>
<code class="ruby"> Rack.autoload :SSL, &#39;rack/ssl&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="42">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="43">
<span class="hits">1</span>
<code class="ruby"> ERROR_RESPONSE = JSON.generate(error: &#39;Travis encountered an error, sorry :(&#39;)</code>
</li>
<li class="never" data-hits="" data-linenumber="44">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="45">
<code class="ruby"> # Used to track if setup already ran.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="46">
<span class="hits">1</span>
<code class="ruby"> def self.setup?</code>
</li>
<li class="covered" data-hits="28" data-linenumber="47">
<span class="hits">28</span>
<code class="ruby"> @setup ||= false</code>
</li>
<li class="never" data-hits="" data-linenumber="48">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="49">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="50">
<code class="ruby"> # Loads all endpoints and middleware and hooks them up properly.</code>
</li>
<li class="never" data-hits="" data-linenumber="51">
<code class="ruby"> # Calls #setup on any middleware and endpoint.</code>
</li>
<li class="never" data-hits="" data-linenumber="52">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="53">
<code class="ruby"> # This method is not threadsafe, but called when loading</code>
</li>
<li class="never" data-hits="" data-linenumber="54">
<code class="ruby"> # the environment, so no biggy.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="55">
<span class="hits">1</span>
<code class="ruby"> def self.setup(options = {})</code>
</li>
<li class="covered" data-hits="28" data-linenumber="56">
<span class="hits">28</span>
<code class="ruby"> setup! unless setup?</code>
</li>
<li class="covered" data-hits="28" data-linenumber="57">
<span class="hits">28</span>
<code class="ruby"> Endpoint.set(options) if options</code>
</li>
<li class="covered" data-hits="28" data-linenumber="58">
<span class="hits">28</span>
<code class="ruby"> FileUtils.touch(&#39;/tmp/app-initialized&#39;) if ENV[&#39;DYNO&#39;] # Heroku</code>
</li>
<li class="never" data-hits="" data-linenumber="59">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="60">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="61">
<span class="hits">1</span>
<code class="ruby"> def self.new(options = {})</code>
</li>
<li class="covered" data-hits="27" data-linenumber="62">
<span class="hits">27</span>
<code class="ruby"> setup(options)</code>
</li>
<li class="covered" data-hits="27" data-linenumber="63">
<span class="hits">27</span>
<code class="ruby"> super()</code>
</li>
<li class="never" data-hits="" data-linenumber="64">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="65">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="66">
<span class="hits">1</span>
<code class="ruby"> def self.deploy_sha</code>
</li>
<li class="missed" data-hits="0" data-linenumber="67">
<code class="ruby"> @deploy_sha ||= File.exist?(deploy_sha_path) ? File.read(deploy_sha_path)[0..7] : &#39;deploy-sha&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="68">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="69">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="70">
<span class="hits">1</span>
<code class="ruby"> def self.deploy_sha_path</code>
</li>
<li class="missed" data-hits="0" data-linenumber="71">
<code class="ruby"> File.expand_path(&#39;../../../../.deploy-sha&#39;, __FILE__)</code>
</li>
<li class="never" data-hits="" data-linenumber="72">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="73">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="74">
<span class="hits">1</span>
<code class="ruby"> attr_accessor :app</code>
</li>
<li class="never" data-hits="" data-linenumber="75">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="76">
<span class="hits">1</span>
<code class="ruby"> def initialize</code>
</li>
<li class="covered" data-hits="27" data-linenumber="77">
<span class="hits">27</span>
<code class="ruby"> @app = Rack::Builder.app do</code>
</li>
<li class="covered" data-hits="50" data-linenumber="78">
<span class="hits">50</span>
<code class="ruby"> use(Rack::Config) { |env| env[&#39;metriks.request.start&#39;] ||= Time.now.utc }</code>
</li>
<li class="never" data-hits="" data-linenumber="79">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="27" data-linenumber="80">
<span class="hits">27</span>
<code class="ruby"> Rack::Utils::HTTP_STATUS_CODES[420] = &quot;Enhance Your Calm&quot;</code>
</li>
<li class="covered" data-hits="27" data-linenumber="81">
<span class="hits">27</span>
<code class="ruby"> use Rack::Attack</code>
</li>
<li class="covered" data-hits="27" data-linenumber="82">
<span class="hits">27</span>
<code class="ruby"> Rack::Attack.blacklist(&#39;block client requesting ruby builds&#39;) do |req|</code>
</li>
<li class="covered" data-hits="23" data-linenumber="83">
<span class="hits">23</span>
<code class="ruby"> req.ip == &quot;130.15.4.210&quot;</code>
</li>
<li class="never" data-hits="" data-linenumber="84">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="85">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="27" data-linenumber="86">
<span class="hits">27</span>
<code class="ruby"> Rack::Attack.blacklisted_response = lambda do |env|</code>
</li>
<li class="missed" data-hits="0" data-linenumber="87">
<code class="ruby"> [ 420, {}, [&#39;Enhance Your Calm&#39;]]</code>
</li>
<li class="never" data-hits="" data-linenumber="88">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="89">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="27" data-linenumber="90">
<span class="hits">27</span>
<code class="ruby"> use Travis::Api::App::Cors # if Travis.env == &#39;development&#39; ???</code>
</li>
<li class="covered" data-hits="27" data-linenumber="91">
<span class="hits">27</span>
<code class="ruby"> use Raven::Rack if Endpoint.production? &amp;&amp; Travis.config.sentry.dsn</code>
</li>
<li class="covered" data-hits="27" data-linenumber="92">
<span class="hits">27</span>
<code class="ruby"> use Rack::Protection::PathTraversal</code>
</li>
<li class="covered" data-hits="27" data-linenumber="93">
<span class="hits">27</span>
<code class="ruby"> use Rack::SSL if Endpoint.production?</code>
</li>
<li class="covered" data-hits="27" data-linenumber="94">
<span class="hits">27</span>
<code class="ruby"> use ActiveRecord::ConnectionAdapters::ConnectionManagement</code>
</li>
<li class="covered" data-hits="27" data-linenumber="95">
<span class="hits">27</span>
<code class="ruby"> use ActiveRecord::QueryCache</code>
</li>
<li class="never" data-hits="" data-linenumber="96">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="27" data-linenumber="97">
<span class="hits">27</span>
<code class="ruby"> memcache_servers = ENV[&#39;MEMCACHIER_SERVERS&#39;]</code>
</li>
<li class="covered" data-hits="27" data-linenumber="98">
<span class="hits">27</span>
<code class="ruby"> if Travis::Features.feature_active?(:use_rack_cache) &amp;&amp; memcache_servers</code>
</li>
<li class="missed" data-hits="0" data-linenumber="99">
<code class="ruby"> use Rack::Cache,</code>
</li>
<li class="never" data-hits="" data-linenumber="100">
<code class="ruby"> metastore: &quot;memcached://#{memcache_servers}/meta-#{Travis::Api::App.deploy_sha}&quot;,</code>
</li>
<li class="never" data-hits="" data-linenumber="101">
<code class="ruby"> entitystore: &quot;memcached://#{memcache_servers}/body-#{Travis::Api::App.deploy_sha}&quot;</code>
</li>
<li class="never" data-hits="" data-linenumber="102">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="103">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="27" data-linenumber="104">
<span class="hits">27</span>
<code class="ruby"> use Rack::Deflater</code>
</li>
<li class="covered" data-hits="27" data-linenumber="105">
<span class="hits">27</span>
<code class="ruby"> use Rack::PostBodyContentTypeParser</code>
</li>
<li class="covered" data-hits="27" data-linenumber="106">
<span class="hits">27</span>
<code class="ruby"> use Rack::JSONP</code>
</li>
<li class="never" data-hits="" data-linenumber="107">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="27" data-linenumber="108">
<span class="hits">27</span>
<code class="ruby"> use Rack::Config do |env|</code>
</li>
<li class="covered" data-hits="23" data-linenumber="109">
<span class="hits">23</span>
<code class="ruby"> env[&#39;SCRIPT_NAME&#39;] = env[&#39;HTTP_X_SCRIPT_NAME&#39;].to_s + env[&#39;SCRIPT_NAME&#39;].to_s</code>
</li>
<li class="covered" data-hits="23" data-linenumber="110">
<span class="hits">23</span>
<code class="ruby"> env[&#39;travis.global_prefix&#39;] = env[&#39;SCRIPT_NAME&#39;]</code>
</li>
<li class="never" data-hits="" data-linenumber="111">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="112">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="113">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="27" data-linenumber="114">
<span class="hits">27</span>
<code class="ruby"> use Travis::Api::App::Middleware::Logging</code>
</li>
<li class="covered" data-hits="27" data-linenumber="115">
<span class="hits">27</span>
<code class="ruby"> use Travis::Api::App::Middleware::ScopeCheck</code>
</li>
<li class="covered" data-hits="27" data-linenumber="116">
<span class="hits">27</span>
<code class="ruby"> use Travis::Api::App::Middleware::UserAgentTracker</code>
</li>
<li class="covered" data-hits="27" data-linenumber="117">
<span class="hits">27</span>
<code class="ruby"> use Travis::Api::App::Middleware::Metriks</code>
</li>
<li class="never" data-hits="" data-linenumber="118">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="119">
<code class="ruby"> # if this is a v3 API request, ignore everything after</code>
</li>
<li class="covered" data-hits="27" data-linenumber="120">
<span class="hits">27</span>
<code class="ruby"> use Travis::API::V3::OptIn</code>
</li>
<li class="never" data-hits="" data-linenumber="121">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="122">
<code class="ruby"> # rewrite should come after V3 hook</code>
</li>
<li class="covered" data-hits="27" data-linenumber="123">
<span class="hits">27</span>
<code class="ruby"> use Travis::Api::App::Middleware::Rewrite</code>
</li>
<li class="never" data-hits="" data-linenumber="124">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="27" data-linenumber="125">
<span class="hits">27</span>
<code class="ruby"> SettingsEndpoint.subclass :env_vars</code>
</li>
<li class="covered" data-hits="27" data-linenumber="126">
<span class="hits">27</span>
<code class="ruby"> if Travis.config.endpoints.ssh_key</code>
</li>
<li class="covered" data-hits="27" data-linenumber="127">
<span class="hits">27</span>
<code class="ruby"> SingletonSettingsEndpoint.subclass :ssh_key</code>
</li>
<li class="never" data-hits="" data-linenumber="128">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="129">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="27" data-linenumber="130">
<span class="hits">27</span>
<code class="ruby"> Endpoint.subclasses.each do |e|</code>
</li>
<li class="covered" data-hits="486" data-linenumber="131">
<span class="hits">486</span>
<code class="ruby"> next if e == SettingsEndpoint # TODO: add something like abstract? method to check if</code>
</li>
<li class="never" data-hits="" data-linenumber="132">
<code class="ruby"> # class should be registered</code>
</li>
<li class="covered" data-hits="972" data-linenumber="133">
<span class="hits">972</span>
<code class="ruby"> map(e.prefix) { run(e.new) }</code>
</li>
<li class="never" data-hits="" data-linenumber="134">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="135">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="136">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="137">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="138">
<code class="ruby"> # Rack protocol</code>
</li>
<li class="covered" data-hits="1" data-linenumber="139">
<span class="hits">1</span>
<code class="ruby"> def call(env)</code>
</li>
<li class="covered" data-hits="23" data-linenumber="140">
<span class="hits">23</span>
<code class="ruby"> app.call(env)</code>
</li>
<li class="never" data-hits="" data-linenumber="141">
<code class="ruby"> rescue</code>
</li>
<li class="missed" data-hits="0" data-linenumber="142">
<code class="ruby"> if Endpoint.production?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="143">
<code class="ruby"> [500, {&#39;Content-Type&#39; =&gt; &#39;application/json&#39;}, [ERROR_RESPONSE]]</code>
</li>
<li class="never" data-hits="" data-linenumber="144">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="145">
<code class="ruby"> raise</code>
</li>
<li class="never" data-hits="" data-linenumber="146">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="147">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="148">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="149">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="150">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="151">
<span class="hits">1</span>
<code class="ruby"> def self.console?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="152">
<code class="ruby"> defined? Travis::Console</code>
</li>
<li class="never" data-hits="" data-linenumber="153">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="154">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="155">
<span class="hits">1</span>
<code class="ruby"> def self.setup!</code>
</li>
<li class="covered" data-hits="1" data-linenumber="156">
<span class="hits">1</span>
<code class="ruby"> setup_travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="157">
<span class="hits">1</span>
<code class="ruby"> load_endpoints</code>
</li>
<li class="covered" data-hits="1" data-linenumber="158">
<span class="hits">1</span>
<code class="ruby"> setup_endpoints</code>
</li>
<li class="covered" data-hits="1" data-linenumber="159">
<span class="hits">1</span>
<code class="ruby"> @setup = true</code>
</li>
<li class="never" data-hits="" data-linenumber="160">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="161">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="162">
<span class="hits">1</span>
<code class="ruby"> def self.setup_travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="163">
<span class="hits">1</span>
<code class="ruby"> Travis::Async.enabled = true</code>
</li>
<li class="covered" data-hits="1" data-linenumber="164">
<span class="hits">1</span>
<code class="ruby"> Travis::Amqp.config = Travis.config.amqp</code>
</li>
<li class="never" data-hits="" data-linenumber="165">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="166">
<span class="hits">1</span>
<code class="ruby"> setup_database_connections</code>
</li>
<li class="never" data-hits="" data-linenumber="167">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="168">
<span class="hits">1</span>
<code class="ruby"> if Travis.env == &#39;production&#39; || Travis.env == &#39;staging&#39;</code>
</li>
<li class="missed" data-hits="0" data-linenumber="169">
<code class="ruby"> Sidekiq.configure_client do |config|</code>
</li>
<li class="missed" data-hits="0" data-linenumber="170">
<code class="ruby"> config.redis = Travis.config.redis.merge(size: 1, namespace: Travis.config.sidekiq.namespace)</code>
</li>
<li class="never" data-hits="" data-linenumber="171">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="172">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="173">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="174">
<span class="hits">1</span>
<code class="ruby"> if (Travis.env == &#39;production&#39; || Travis.env == &#39;staging&#39;) and not console?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="175">
<code class="ruby"> setup_monitoring</code>
</li>
<li class="never" data-hits="" data-linenumber="176">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="177">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="178">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="179">
<span class="hits">1</span>
<code class="ruby"> def self.setup_database_connections</code>
</li>
<li class="covered" data-hits="1" data-linenumber="180">
<span class="hits">1</span>
<code class="ruby"> Travis::Database.connect</code>
</li>
<li class="never" data-hits="" data-linenumber="181">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="182">
<span class="hits">1</span>
<code class="ruby"> if Travis.config.logs_database</code>
</li>
<li class="missed" data-hits="0" data-linenumber="183">
<code class="ruby"> Log.establish_connection &#39;logs_database&#39;</code>
</li>
<li class="missed" data-hits="0" data-linenumber="184">
<code class="ruby"> Log::Part.establish_connection &#39;logs_database&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="185">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="186">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="187">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="188">
<span class="hits">1</span>
<code class="ruby"> def self.setup_monitoring</code>
</li>
<li class="never" data-hits="" data-linenumber="189">
<code class="ruby"> Raven.configure do |config|</code>
</li>
<li class="missed" data-hits="0" data-linenumber="190">
<code class="ruby"> config.dsn = Travis.config.sentry.dsn</code>
</li>
<li class="missed" data-hits="0" data-linenumber="191">
<code class="ruby"> end if Travis.config.sentry.dsn</code>
</li>
<li class="never" data-hits="" data-linenumber="192">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="193">
<code class="ruby"> Travis::LogSubscriber::ActiveRecordMetrics.attach</code>
</li>
<li class="missed" data-hits="0" data-linenumber="194">
<code class="ruby"> Travis::Notification.setup(instrumentation: false)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="195">
<code class="ruby"> Travis::Metrics.setup</code>
</li>
<li class="never" data-hits="" data-linenumber="196">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="197">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="198">
<span class="hits">1</span>
<code class="ruby"> def self.load_endpoints</code>
</li>
<li class="covered" data-hits="6" data-linenumber="199">
<span class="hits">6</span>
<code class="ruby"> Dir.glob(&quot;#{__dir__}/app/middleware/*.rb&quot;).each { |f| require f[%r[(?&lt;=lib/).+(?=\.rb$)]] }</code>
</li>
<li class="covered" data-hits="20" data-linenumber="200">
<span class="hits">20</span>
<code class="ruby"> Dir.glob(&quot;#{__dir__}/app/endpoint/*.rb&quot;).each { |f| require f[%r[(?&lt;=lib/).+(?=\.rb$)]] }</code>
</li>
<li class="never" data-hits="" data-linenumber="201">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="202">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="203">
<span class="hits">1</span>
<code class="ruby"> def self.setup_endpoints</code>
</li>
<li class="covered" data-hits="1" data-linenumber="204">
<span class="hits">1</span>
<code class="ruby"> Base.subclasses.each(&amp;:setup)</code>
</li>
<li class="never" data-hits="" data-linenumber="205">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="206">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="207">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="2563a9e3b6860f10bc10bc8b9abc2e0b307c3396">
<div class="header">
<h3>lib/travis/api/app/access_token.rb</h3>
<h4><span class="yellow">87.5 %</span> covered</h4>
<div>
<b>64</b> relevant lines.
<span class="green"><b>56</b> lines covered</span> and
<span class="red"><b>8</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby">require &#39;securerandom&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="3">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class AccessToken</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> DEFAULT_SCOPES = [:public, :private]</code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> attr_reader :token, :scopes, :user_id, :app_id, :expires_in, :extra</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="9">
<span class="hits">1</span>
<code class="ruby"> def self.create(options = {})</code>
</li>
<li class="covered" data-hits="4" data-linenumber="10">
<span class="hits">4</span>
<code class="ruby"> new(options).tap(&amp;:save)</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="13">
<span class="hits">1</span>
<code class="ruby"> def self.for_travis_token(travis_token, options = {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="14">
<code class="ruby"> travis_token = Token.find_by_token(travis_token) unless travis_token.respond_to? :user</code>
</li>
<li class="missed" data-hits="0" data-linenumber="15">
<code class="ruby"> new(scope: :travis_token, app_id: 1, user: travis_token.user).tap(&amp;:save) if travis_token</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="18">
<span class="hits">1</span>
<code class="ruby"> def self.find_by_token(token)</code>
</li>
<li class="covered" data-hits="8" data-linenumber="19">
<span class="hits">8</span>
<code class="ruby"> return token if token.is_a? self</code>
</li>
<li class="covered" data-hits="8" data-linenumber="20">
<span class="hits">8</span>
<code class="ruby"> user_id, app_id, *scopes = redis.lrange(key(token), 0, -1)</code>
</li>
<li class="covered" data-hits="8" data-linenumber="21">
<span class="hits">8</span>
<code class="ruby"> extra = decode_json(scopes.pop) if scopes.last &amp;&amp; scopes.last =~ /^json:/</code>
</li>
<li class="covered" data-hits="8" data-linenumber="22">
<span class="hits">8</span>
<code class="ruby"> new(token: token, scopes: scopes, user_id: user_id, app_id: app_id, extra: extra) if user_id</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="25">
<span class="hits">1</span>
<code class="ruby"> def initialize(options = {})</code>
</li>
<li class="covered" data-hits="12" data-linenumber="26">
<span class="hits">12</span>
<code class="ruby"> raise ArgumentError, &#39;must supply either user_id or user&#39; unless options.key?(:user) ^ options.key?(:user_id)</code>
</li>
<li class="covered" data-hits="12" data-linenumber="27">
<span class="hits">12</span>
<code class="ruby"> raise ArgumentError, &#39;must supply app_id&#39; unless options.key?(:app_id)</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="12" data-linenumber="29">
<span class="hits">12</span>
<code class="ruby"> begin</code>
</li>
<li class="covered" data-hits="12" data-linenumber="30">
<span class="hits">12</span>
<code class="ruby"> @expires_in = Integer(options[:expires_in]) if options[:expires_in]</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> rescue ArgumentError</code>
</li>
<li class="missed" data-hits="0" data-linenumber="32">
<code class="ruby"> raise ArgumentError, &#39;expires_in must be of integer type&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="12" data-linenumber="35">
<span class="hits">12</span>
<code class="ruby"> @app_id = Integer(options[:app_id])</code>
</li>
<li class="covered" data-hits="12" data-linenumber="36">
<span class="hits">12</span>
<code class="ruby"> @scopes = Array(options[:scopes] || options[:scope] || DEFAULT_SCOPES).map(&amp;:to_sym)</code>
</li>
<li class="covered" data-hits="12" data-linenumber="37">
<span class="hits">12</span>
<code class="ruby"> @user = options[:user]</code>
</li>
<li class="covered" data-hits="12" data-linenumber="38">
<span class="hits">12</span>
<code class="ruby"> @user_id = Integer(options[:user_id] || @user.id)</code>
</li>
<li class="covered" data-hits="12" data-linenumber="39">
<span class="hits">12</span>
<code class="ruby"> @token = options[:token] || reuse_token || SecureRandom.urlsafe_base64(16)</code>
</li>
<li class="covered" data-hits="12" data-linenumber="40">
<span class="hits">12</span>
<code class="ruby"> @extra = options[:extra]</code>
</li>
<li class="never" data-hits="" data-linenumber="41">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="42">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="43">
<span class="hits">1</span>
<code class="ruby"> def save</code>
</li>
<li class="covered" data-hits="4" data-linenumber="44">
<span class="hits">4</span>
<code class="ruby"> key = key(token)</code>
</li>
<li class="covered" data-hits="4" data-linenumber="45">
<span class="hits">4</span>
<code class="ruby"> redis.del(key)</code>
</li>
<li class="covered" data-hits="4" data-linenumber="46">
<span class="hits">4</span>
<code class="ruby"> data = [user_id, app_id, *scopes]</code>
</li>
<li class="covered" data-hits="4" data-linenumber="47">
<span class="hits">4</span>
<code class="ruby"> data &lt;&lt; encode_json(extra) if extra</code>
</li>
<li class="covered" data-hits="4" data-linenumber="48">
<span class="hits">4</span>
<code class="ruby"> redis.rpush(key, data.map(&amp;:to_s))</code>
</li>
<li class="covered" data-hits="4" data-linenumber="49">
<span class="hits">4</span>
<code class="ruby"> redis.set(reuse_key, token)</code>
</li>
<li class="never" data-hits="" data-linenumber="50">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="4" data-linenumber="51">
<span class="hits">4</span>
<code class="ruby"> if expires_in</code>
</li>
<li class="missed" data-hits="0" data-linenumber="52">
<code class="ruby"> redis.expire(reuse_key, expires_in)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="53">
<code class="ruby"> redis.expire(key, expires_in)</code>
</li>
<li class="never" data-hits="" data-linenumber="54">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="55">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="56">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="57">
<span class="hits">1</span>
<code class="ruby"> def user</code>
</li>
<li class="covered" data-hits="4" data-linenumber="58">
<span class="hits">4</span>
<code class="ruby"> @user ||= User.find(user_id) if user_id</code>
</li>
<li class="never" data-hits="" data-linenumber="59">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="60">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="61">
<span class="hits">1</span>
<code class="ruby"> def user?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="62">
<code class="ruby"> !!user</code>
</li>
<li class="never" data-hits="" data-linenumber="63">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="64">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="65">
<span class="hits">1</span>
<code class="ruby"> def to_s</code>
</li>
<li class="covered" data-hits="4" data-linenumber="66">
<span class="hits">4</span>
<code class="ruby"> token</code>
</li>
<li class="never" data-hits="" data-linenumber="67">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="68">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="69">
<span class="hits">1</span>
<code class="ruby"> module Helpers</code>
</li>
<li class="covered" data-hits="1" data-linenumber="70">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="covered" data-hits="1" data-linenumber="71">
<span class="hits">1</span>
<code class="ruby"> def redis</code>
</li>
<li class="covered" data-hits="24" data-linenumber="72">
<span class="hits">24</span>
<code class="ruby"> Thread.current[:redis] ||= ::Redis.connect(url: Travis.config.redis.url)</code>
</li>
<li class="never" data-hits="" data-linenumber="73">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="74">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="75">
<span class="hits">1</span>
<code class="ruby"> def key(token)</code>
</li>
<li class="covered" data-hits="12" data-linenumber="76">
<span class="hits">12</span>
<code class="ruby"> &quot;t:#{token}&quot;</code>
</li>
<li class="never" data-hits="" data-linenumber="77">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="78">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="79">
<span class="hits">1</span>
<code class="ruby"> def encode_json(hash)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="80">
<code class="ruby"> &#39;json:&#39; + Base64.encode64(hash.to_json)</code>
</li>
<li class="never" data-hits="" data-linenumber="81">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="82">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="83">
<span class="hits">1</span>
<code class="ruby"> def decode_json(json)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="84">
<code class="ruby"> JSON.parse(Base64.decode64(json.gsub(/^json:/, &#39;&#39;)))</code>
</li>
<li class="never" data-hits="" data-linenumber="85">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="86">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="87">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="88">
<span class="hits">1</span>
<code class="ruby"> include Helpers</code>
</li>
<li class="covered" data-hits="1" data-linenumber="89">
<span class="hits">1</span>
<code class="ruby"> extend Helpers</code>
</li>
<li class="never" data-hits="" data-linenumber="90">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="91">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="92">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="93">
<span class="hits">1</span>
<code class="ruby"> def reuse_token</code>
</li>
<li class="covered" data-hits="4" data-linenumber="94">
<span class="hits">4</span>
<code class="ruby"> redis.get(reuse_key) unless expires_in</code>
</li>
<li class="never" data-hits="" data-linenumber="95">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="96">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="97">
<span class="hits">1</span>
<code class="ruby"> def reuse_key</code>
</li>
<li class="never" data-hits="" data-linenumber="98">
<code class="ruby"> @reuse_key ||= begin</code>
</li>
<li class="covered" data-hits="4" data-linenumber="99">
<span class="hits">4</span>
<code class="ruby"> keys = [&quot;r&quot;, user_id, app_id]</code>
</li>
<li class="covered" data-hits="4" data-linenumber="100">
<span class="hits">4</span>
<code class="ruby"> keys.append(scopes.map(&amp;:to_s).sort) if scopes != DEFAULT_SCOPES</code>
</li>
<li class="covered" data-hits="4" data-linenumber="101">
<span class="hits">4</span>
<code class="ruby"> keys.join(&#39;:&#39;)</code>
</li>
<li class="covered" data-hits="8" data-linenumber="102">
<span class="hits">8</span>
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="103">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="104">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="105">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="a961b2b2494498d5ea5ba390081b58db5ba6a9ae">
<div class="header">
<h3>lib/travis/api/app/base.rb</h3>
<h4><span class="red">73.08 %</span> covered</h4>
<div>
<b>26</b> relevant lines.
<span class="green"><b>19</b> lines covered</span> and
<span class="red"><b>7</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby">require &#39;sinatra/base&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">require &#39;mustermann&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="4">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="never" data-hits="" data-linenumber="6">
<code class="ruby"> # Superclass for any endpoint and middleware.</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"> # Pulls in relevant helpers and extensions.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> class Base &lt; Sinatra::Base</code>
</li>
<li class="covered" data-hits="1" data-linenumber="9">
<span class="hits">1</span>
<code class="ruby"> register Extensions::SmartConstants</code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> register Mustermann</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="12">
<span class="hits">1</span>
<code class="ruby"> error NotImplementedError do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="13">
<code class="ruby"> content_type :txt</code>
</li>
<li class="missed" data-hits="0" data-linenumber="14">
<code class="ruby"> status 501</code>
</li>
<li class="missed" data-hits="0" data-linenumber="15">
<code class="ruby"> &quot;This feature has not yet been implemented. Sorry :(\n\nPull Requests welcome!&quot;</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="18">
<span class="hits">1</span>
<code class="ruby"> error JSON::ParserError do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="19">
<code class="ruby"> status 400</code>
</li>
<li class="missed" data-hits="0" data-linenumber="20">
<code class="ruby"> &quot;Invalid JSON in request body&quot;</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> # hotfix??</code>
</li>
<li class="covered" data-hits="1" data-linenumber="24">
<span class="hits">1</span>
<code class="ruby"> def route_missing</code>
</li>
<li class="covered" data-hits="135" data-linenumber="25">
<span class="hits">135</span>
<code class="ruby"> @app ? forward : halt(404)</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="28">
<span class="hits">1</span>
<code class="ruby"> def call(env)</code>
</li>
<li class="covered" data-hits="135" data-linenumber="29">
<span class="hits">135</span>
<code class="ruby"> super</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> rescue Sinatra::NotFound</code>
</li>
<li class="missed" data-hits="0" data-linenumber="31">
<code class="ruby"> [404, {&#39;Content-Type&#39; =&gt; &#39;text/plain&#39;}, [&#39;Tell Konstantin to fix this!&#39;]]</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="34">
<span class="hits">1</span>
<code class="ruby"> configure do</code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"> # We pull in certain protection middleware in App.</code>
</li>
<li class="never" data-hits="" data-linenumber="36">
<code class="ruby"> # Being token based makes us invulnerable to common</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"> # CSRF attack.</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="39">
<code class="ruby"> # Logging is set up by custom middleware</code>
</li>
<li class="covered" data-hits="1" data-linenumber="40">
<span class="hits">1</span>
<code class="ruby"> disable :protection, :logging, :setup</code>
</li>
<li class="covered" data-hits="1" data-linenumber="41">
<span class="hits">1</span>
<code class="ruby"> enable :raise_errors</code>
</li>
<li class="never" data-hits="" data-linenumber="42">
<code class="ruby"> # disable :dump_errors</code>
</li>
<li class="covered" data-hits="1" data-linenumber="43">
<span class="hits">1</span>
<code class="ruby"> register :subclass_tracker, :expose_pattern</code>
</li>
<li class="covered" data-hits="1" data-linenumber="44">
<span class="hits">1</span>
<code class="ruby"> helpers :respond_with, :mime_types</code>
</li>
<li class="never" data-hits="" data-linenumber="45">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="46">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="47">
<span class="hits">1</span>
<code class="ruby"> configure :development do</code>
</li>
<li class="never" data-hits="" data-linenumber="48">
<code class="ruby"> # We want error pages in development, but only</code>
</li>
<li class="never" data-hits="" data-linenumber="49">
<code class="ruby"> # when we don&#39;t have an error handler specified</code>
</li>
<li class="missed" data-hits="0" data-linenumber="50">
<code class="ruby"> set :show_exceptions, :after_handler</code>
</li>
<li class="never" data-hits="" data-linenumber="51">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="52">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="53">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="d160d1d2c1e6c6e0542165ddbf75627d39b2de6f">
<div class="header">
<h3>lib/travis/api/app/cors.rb</h3>
<h4><span class="red">80.0 %</span> covered</h4>
<div>
<b>10</b> relevant lines.
<span class="green"><b>8</b> lines covered</span> and
<span class="red"><b>2</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="never" data-hits="" data-linenumber="4">
<code class="ruby"> # Implements Cross-Origin Resource Sharing. Supported by all major browsers.</code>
</li>
<li class="never" data-hits="" data-linenumber="5">
<code class="ruby"> # See http://www.w3.org/TR/cors/</code>
</li>
<li class="never" data-hits="" data-linenumber="6">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"> # TODO: Be smarter about origin.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> class Cors &lt; Base</code>
</li>
<li class="covered" data-hits="1" data-linenumber="9">
<span class="hits">1</span>
<code class="ruby"> before do</code>
</li>
<li class="covered" data-hits="23" data-linenumber="10">
<span class="hits">23</span>
<code class="ruby"> headers[&#39;Access-Control-Allow-Origin&#39;] = &quot;*&quot;</code>
</li>
<li class="covered" data-hits="23" data-linenumber="11">
<span class="hits">23</span>
<code class="ruby"> headers[&#39;Access-Control-Allow-Credentials&#39;] = &quot;true&quot;</code>
</li>
<li class="covered" data-hits="23" data-linenumber="12">
<span class="hits">23</span>
<code class="ruby"> headers[&#39;Access-Control-Expose-Headers&#39;] = &quot;Content-Type, Cache-Control, Expires, Etag, Last-Modified&quot;</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="15">
<span class="hits">1</span>
<code class="ruby"> options // do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="16">
<code class="ruby"> headers[&#39;Access-Control-Allow-Methods&#39;] = &quot;HEAD, GET, POST, PATCH, PUT, DELETE&quot;</code>
</li>
<li class="missed" data-hits="0" data-linenumber="17">
<code class="ruby"> headers[&#39;Access-Control-Allow-Headers&#39;] = &quot;Content-Type, Authorization, Accept, If-None-Match, If-Modified-Since, X-User-Agent&quot;</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="eeda47705beb665db84542493bea1c2e0ec05731">
<div class="header">
<h3>lib/travis/api/app/endpoint.rb</h3>
<h4><span class="red">70.0 %</span> covered</h4>
<div>
<b>30</b> relevant lines.
<span class="green"><b>21</b> lines covered</span> and
<span class="red"><b>9</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby">require &#39;addressable/uri&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">require &#39;active_record/base&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="4">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="never" data-hits="" data-linenumber="6">
<code class="ruby"> # Superclass for HTTP endpoints. Takes care of prefixing.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> class Endpoint &lt; Base</code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> include Travis::Services::Helpers</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="471" data-linenumber="10">
<span class="hits">471</span>
<code class="ruby"> set(:prefix) { &quot;/&quot; &lt;&lt; name[/[^:]+$/].underscore }</code>
</li>
<li class="covered" data-hits="1" data-linenumber="11">
<span class="hits">1</span>
<code class="ruby"> set disable_root_endpoint: false</code>
</li>
<li class="covered" data-hits="1" data-linenumber="12">
<span class="hits">1</span>
<code class="ruby"> register :scoping</code>
</li>
<li class="covered" data-hits="1" data-linenumber="13">
<span class="hits">1</span>
<code class="ruby"> helpers :current_user, :flash, :db_follower</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"> # TODO hmmm?</code>
</li>
<li class="covered" data-hits="11" data-linenumber="16">
<span class="hits">11</span>
<code class="ruby"> before { flash.clear }</code>
</li>
<li class="covered" data-hits="11" data-linenumber="17">
<span class="hits">11</span>
<code class="ruby"> after { content_type :json unless content_type }</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="19">
<span class="hits">1</span>
<code class="ruby"> error(ActiveRecord::RecordNotFound, Sinatra::NotFound) { not_found }</code>
</li>
<li class="covered" data-hits="1" data-linenumber="20">
<span class="hits">1</span>
<code class="ruby"> not_found {</code>
</li>
<li class="covered" data-hits="10" data-linenumber="21">
<span class="hits">10</span>
<code class="ruby"> if content_type =~ /json/</code>
</li>
<li class="covered" data-hits="10" data-linenumber="22">
<span class="hits">10</span>
<code class="ruby"> if body &amp;&amp; !body.empty?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="23">
<code class="ruby"> body</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> else</code>
</li>
<li class="covered" data-hits="10" data-linenumber="25">
<span class="hits">10</span>
<code class="ruby"> { &#39;file&#39; =&gt; &#39;not found&#39; }</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="28">
<code class="ruby"> &#39;file not found&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="32">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="34">
<span class="hits">1</span>
<code class="ruby"> def redis</code>
</li>
<li class="missed" data-hits="0" data-linenumber="35">
<code class="ruby"> Thread.current[:redis] ||= ::Redis.connect(url: Travis.config.redis.url)</code>
</li>
<li class="never" data-hits="" data-linenumber="36">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="38">
<span class="hits">1</span>
<code class="ruby"> def endpoint(link, query_values = {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="39">
<code class="ruby"> link = url(File.join(env[&#39;travis.global_prefix&#39;], link), true, false)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="40">
<code class="ruby"> uri = Addressable::URI.parse(link)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="41">
<code class="ruby"> query_values = query_values.merge(uri.query_values) if uri.query_values</code>
</li>
<li class="missed" data-hits="0" data-linenumber="42">
<code class="ruby"> uri.query_values = query_values</code>
</li>
<li class="missed" data-hits="0" data-linenumber="43">
<code class="ruby"> uri.to_s</code>
</li>
<li class="never" data-hits="" data-linenumber="44">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="45">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="46">
<span class="hits">1</span>
<code class="ruby"> def safe_redirect(url)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="47">
<code class="ruby"> redirect(endpoint(&#39;/redirect&#39;, to: url), 301)</code>
</li>
<li class="never" data-hits="" data-linenumber="48">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="49">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="50">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="b2b6630e8ce43a4e90ba2fa3f0747e7269631dd5">
<div class="header">
<h3>lib/travis/api/app/endpoint/accounts.rb</h3>
<h4><span class="yellow">83.33 %</span> covered</h4>
<div>
<b>6</b> relevant lines.
<span class="green"><b>5</b> lines covered</span> and
<span class="red"><b>1</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> class Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Accounts &lt; Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> get &#39;/&#39;, scope: :private do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="7">
<code class="ruby"> respond_with service(:find_user_accounts, params), type: :accounts</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="a5a778403a26fa47d8dfe304f657adcbfa66f559">
<div class="header">
<h3>lib/travis/api/app/endpoint/authorization.rb</h3>
<h4><span class="red">26.45 %</span> covered</h4>
<div>
<b>155</b> relevant lines.
<span class="green"><b>41</b> lines covered</span> and
<span class="red"><b>114</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby">require &#39;addressable/uri&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">require &#39;faraday&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby">require &#39;securerandom&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="5">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> class Endpoint</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"> # You need to get hold of an access token in order to reach any</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"> # endpoint requiring authorization.</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"> # There are three ways to get hold of such a token: OAuth2, via a GitHub</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> # token you may already have or with Cross-Origin Window Messages.</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> # ## OAuth2</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"> # API authorization is done via a subset of OAuth2 and is largely compatible</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> # with the [GitHub process](http://developer.github.com/v3/oauth/).</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"> # Be aware that Travis CI will in turn use OAuth2 to authenticate (and</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"> # authorize) against GitHub.</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"> # This is the recommended way for third-party web apps.</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"> # The entry point is [/auth/authorize](#/auth/authorize).</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> # ## GitHub Token</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> # If you already have a GitHub token with the same or greater scope than</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> # the tokens used by Travis CI, you can easily exchange it for a access</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"> # token. Travis will not store the GitHub token and only use it for a single</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"> # request to resolve the associated user and scopes.</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> # This is the recommended way for GitHub applications that also want Travis</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> # integration.</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"> # The entry point is [/auth/github](#POST /auth/github).</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"> # ## Cross-Origin Window Messages</code>
</li>
<li class="never" data-hits="" data-linenumber="36">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"> # This is the recommended way for the official client. We might improve the</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby"> # authorization flow to support third-party clients in the future, too.</code>
</li>
<li class="never" data-hits="" data-linenumber="39">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="40">
<code class="ruby"> # The entry point is [/auth/post_message](#/auth/post_message).</code>
</li>
<li class="covered" data-hits="1" data-linenumber="41">
<span class="hits">1</span>
<code class="ruby"> class Authorization &lt; Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="42">
<span class="hits">1</span>
<code class="ruby"> enable :inline_templates</code>
</li>
<li class="covered" data-hits="1" data-linenumber="43">
<span class="hits">1</span>
<code class="ruby"> set prefix: &#39;/auth&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="44">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="45">
<code class="ruby"> # Endpoint for retrieving an authorization code, which in turn can be used</code>
</li>
<li class="never" data-hits="" data-linenumber="46">
<code class="ruby"> # to generate an access token.</code>
</li>
<li class="never" data-hits="" data-linenumber="47">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="48">
<code class="ruby"> # NOTE: This endpoint is not yet implemented.</code>
</li>
<li class="never" data-hits="" data-linenumber="49">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="50">
<code class="ruby"> # Parameters:</code>
</li>
<li class="never" data-hits="" data-linenumber="51">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="52">
<code class="ruby"> # * **client_id**: your App&#39;s client id (required)</code>
</li>
<li class="never" data-hits="" data-linenumber="53">
<code class="ruby"> # * **redirect_uri**: URL to redirect to</code>
</li>
<li class="never" data-hits="" data-linenumber="54">
<code class="ruby"> # * **scope**: requested access scope</code>
</li>
<li class="never" data-hits="" data-linenumber="55">
<code class="ruby"> # * **state**: should be random string to prevent CSRF attacks</code>
</li>
<li class="covered" data-hits="1" data-linenumber="56">
<span class="hits">1</span>
<code class="ruby"> get &#39;/authorize&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="57">
<code class="ruby"> raise NotImplementedError</code>
</li>
<li class="never" data-hits="" data-linenumber="58">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="59">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="60">
<code class="ruby"> # Endpoint for generating an access token from an authorization code.</code>
</li>
<li class="never" data-hits="" data-linenumber="61">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="62">
<code class="ruby"> # NOTE: This endpoint is not yet implemented.</code>
</li>
<li class="never" data-hits="" data-linenumber="63">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="64">
<code class="ruby"> # Parameters:</code>
</li>
<li class="never" data-hits="" data-linenumber="65">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="66">
<code class="ruby"> # * **client_id**: your App&#39;s client id (required)</code>
</li>
<li class="never" data-hits="" data-linenumber="67">
<code class="ruby"> # * **client_secret**: your App&#39;s client secret (required)</code>
</li>
<li class="never" data-hits="" data-linenumber="68">
<code class="ruby"> # * **code**: code retrieved from redirect from [/auth/authorize](#/auth/authorize) (required)</code>
</li>
<li class="never" data-hits="" data-linenumber="69">
<code class="ruby"> # * **redirect_uri**: URL to redirect to</code>
</li>
<li class="never" data-hits="" data-linenumber="70">
<code class="ruby"> # * **state**: same value sent to [/auth/authorize](#/auth/authorize)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="71">
<span class="hits">1</span>
<code class="ruby"> post &#39;/access_token&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="72">
<code class="ruby"> raise NotImplementedError</code>
</li>
<li class="never" data-hits="" data-linenumber="73">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="74">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="75">
<code class="ruby"> # Endpoint for generating an access token from a GitHub access token.</code>
</li>
<li class="never" data-hits="" data-linenumber="76">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="77">
<code class="ruby"> # Parameters:</code>
</li>
<li class="never" data-hits="" data-linenumber="78">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="79">
<code class="ruby"> # * **github_token**: GitHub token for checking authorization (required)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="80">
<span class="hits">1</span>
<code class="ruby"> post &#39;/github&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="81">
<code class="ruby"> unless params[:github_token]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="82">
<code class="ruby"> halt 422, { &quot;error&quot; =&gt; &quot;Must pass &#39;github_token&#39; parameter&quot; }</code>
</li>
<li class="never" data-hits="" data-linenumber="83">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="84">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="85">
<code class="ruby"> { &#39;access_token&#39; =&gt; github_to_travis(params[:github_token], app_id: 1, drop_token: true) }</code>
</li>
<li class="never" data-hits="" data-linenumber="86">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="87">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="88">
<code class="ruby"> # Endpoint for making sure user authorized Travis CI to access GitHub.</code>
</li>
<li class="never" data-hits="" data-linenumber="89">
<code class="ruby"> # There are no restrictions on where to redirect to after handshake.</code>
</li>
<li class="never" data-hits="" data-linenumber="90">
<code class="ruby"> # However, no information whatsoever is being sent with the redirect.</code>
</li>
<li class="never" data-hits="" data-linenumber="91">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="92">
<code class="ruby"> # Parameters:</code>
</li>
<li class="never" data-hits="" data-linenumber="93">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="94">
<code class="ruby"> # * **redirect_uri**: URI to redirect to after handshake.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="95">
<span class="hits">1</span>
<code class="ruby"> get &#39;/handshake&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="96">
<code class="ruby"> handshake do |user, token, redirect_uri|</code>
</li>
<li class="missed" data-hits="0" data-linenumber="97">
<code class="ruby"> if target_ok? redirect_uri</code>
</li>
<li class="missed" data-hits="0" data-linenumber="98">
<code class="ruby"> content_type :html</code>
</li>
<li class="missed" data-hits="0" data-linenumber="99">
<code class="ruby"> data = { user: user, token: token, uri: redirect_uri }</code>
</li>
<li class="missed" data-hits="0" data-linenumber="100">
<code class="ruby"> erb(:post_payload, locals: data)</code>
</li>
<li class="never" data-hits="" data-linenumber="101">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="102">
<code class="ruby"> safe_redirect redirect_uri</code>
</li>
<li class="never" data-hits="" data-linenumber="103">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="104">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="105">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="106">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="107">
<code class="ruby"> # This endpoint is meant to be embedded in an iframe, popup window or</code>
</li>
<li class="never" data-hits="" data-linenumber="108">
<code class="ruby"> # similar. It will perform the handshake and, once done, will send an</code>
</li>
<li class="never" data-hits="" data-linenumber="109">
<code class="ruby"> # access token and user payload to the parent window via postMessage.</code>
</li>
<li class="never" data-hits="" data-linenumber="110">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="111">
<code class="ruby"> # However, the endpoint to send the payload to has to be explicitely</code>
</li>
<li class="never" data-hits="" data-linenumber="112">
<code class="ruby"> # whitelisted in production, as this is endpoint is only meant to be used</code>
</li>
<li class="never" data-hits="" data-linenumber="113">
<code class="ruby"> # with the official Travis CI client at the moment.</code>
</li>
<li class="never" data-hits="" data-linenumber="114">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="115">
<code class="ruby"> # Example usage:</code>
</li>
<li class="never" data-hits="" data-linenumber="116">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="117">
<code class="ruby"> # window.addEventListener(&quot;message&quot;, function(event) {</code>
</li>
<li class="never" data-hits="" data-linenumber="118">
<code class="ruby"> # console.log(&quot;received token: &quot; + event.data.token);</code>
</li>
<li class="never" data-hits="" data-linenumber="119">
<code class="ruby"> # });</code>
</li>
<li class="never" data-hits="" data-linenumber="120">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="121">
<code class="ruby"> # var iframe = $(&#39;&lt;iframe /&gt;&#39;).hide();</code>
</li>
<li class="never" data-hits="" data-linenumber="122">
<code class="ruby"> # iframe.appendTo(&#39;body&#39;);</code>
</li>
<li class="never" data-hits="" data-linenumber="123">
<code class="ruby"> # iframe.attr(&#39;src&#39;, &quot;https://api.travis-ci.org/auth/post_message&quot;);</code>
</li>
<li class="never" data-hits="" data-linenumber="124">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="125">
<code class="ruby"> # Note that embedding it in an iframe will only work for users that are</code>
</li>
<li class="never" data-hits="" data-linenumber="126">
<code class="ruby"> # logged in at GitHub and already authorized Travis CI. It is therefore</code>
</li>
<li class="never" data-hits="" data-linenumber="127">
<code class="ruby"> # recommended to redirect to [/auth/handshake](#/auth/handshake) if no</code>
</li>
<li class="never" data-hits="" data-linenumber="128">
<code class="ruby"> # token is being received.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="129">
<span class="hits">1</span>
<code class="ruby"> get &#39;/post_message&#39;, scope: :public do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="130">
<code class="ruby"> content_type :html</code>
</li>
<li class="missed" data-hits="0" data-linenumber="131">
<code class="ruby"> data = { check_third_party_cookies: !Travis.config.auth.disable_third_party_cookies_check }</code>
</li>
<li class="missed" data-hits="0" data-linenumber="132">
<code class="ruby"> erb(:container, locals: data)</code>
</li>
<li class="never" data-hits="" data-linenumber="133">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="134">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="135">
<span class="hits">1</span>
<code class="ruby"> get &#39;/post_message/iframe&#39;, scope: :public do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="136">
<code class="ruby"> handshake do |user, token, target_origin|</code>
</li>
<li class="missed" data-hits="0" data-linenumber="137">
<code class="ruby"> halt 403, invalid_target(target_origin) unless target_ok? target_origin</code>
</li>
<li class="missed" data-hits="0" data-linenumber="138">
<code class="ruby"> post_message(token: token, user: user, target_origin: target_origin)</code>
</li>
<li class="never" data-hits="" data-linenumber="139">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="140">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="141">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="142">
<span class="hits">1</span>
<code class="ruby"> error Faraday::Error::ClientError do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="143">
<code class="ruby"> halt 401, &#39;could not resolve github token&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="144">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="145">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="146">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="147">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="148">
<span class="hits">1</span>
<code class="ruby"> def serialize_user(user)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="149">
<code class="ruby"> rendered = Travis::Api.data(user, version: :v2)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="150">
<code class="ruby"> rendered[&#39;user&#39;].merge(&#39;token&#39; =&gt; user.tokens.first.try(:token).to_s)</code>
</li>
<li class="never" data-hits="" data-linenumber="151">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="152">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="153">
<span class="hits">1</span>
<code class="ruby"> def oauth_endpoint</code>
</li>
<li class="missed" data-hits="0" data-linenumber="154">
<code class="ruby"> proxy = Travis.config.oauth2.proxy</code>
</li>
<li class="missed" data-hits="0" data-linenumber="155">
<code class="ruby"> proxy ? File.join(proxy, request.fullpath) : url</code>
</li>
<li class="never" data-hits="" data-linenumber="156">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="157">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="158">
<span class="hits">1</span>
<code class="ruby"> def handshake</code>
</li>
<li class="missed" data-hits="0" data-linenumber="159">
<code class="ruby"> config = Travis.config.oauth2</code>
</li>
<li class="missed" data-hits="0" data-linenumber="160">
<code class="ruby"> endpoint = Addressable::URI.parse(config.authorization_server)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="161">
<code class="ruby"> values = {</code>
</li>
<li class="never" data-hits="" data-linenumber="162">
<code class="ruby"> client_id: config.client_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="163">
<code class="ruby"> scope: config.scope,</code>
</li>
<li class="never" data-hits="" data-linenumber="164">
<code class="ruby"> redirect_uri: oauth_endpoint</code>
</li>
<li class="never" data-hits="" data-linenumber="165">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="166">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="167">
<code class="ruby"> if params[:code]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="168">
<code class="ruby"> halt 400, &#39;state mismatch&#39; unless state_ok?(params[:state])</code>
</li>
<li class="missed" data-hits="0" data-linenumber="169">
<code class="ruby"> endpoint.path = config.access_token_path</code>
</li>
<li class="missed" data-hits="0" data-linenumber="170">
<code class="ruby"> values[:state] = params[:state]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="171">
<code class="ruby"> values[:code] = params[:code]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="172">
<code class="ruby"> values[:client_secret] = config.client_secret</code>
</li>
<li class="missed" data-hits="0" data-linenumber="173">
<code class="ruby"> github_token = get_token(endpoint.to_s, values)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="174">
<code class="ruby"> user = user_for_github_token(github_token)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="175">
<code class="ruby"> token = generate_token(user: user, app_id: 0)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="176">
<code class="ruby"> payload = params[:state].split(&quot;:::&quot;, 2)[1]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="177">
<code class="ruby"> yield serialize_user(user), token, payload</code>
</li>
<li class="never" data-hits="" data-linenumber="178">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="179">
<code class="ruby"> values[:state] = create_state</code>
</li>
<li class="missed" data-hits="0" data-linenumber="180">
<code class="ruby"> endpoint.path = config.authorize_path</code>
</li>
<li class="missed" data-hits="0" data-linenumber="181">
<code class="ruby"> endpoint.query_values = values</code>
</li>
<li class="missed" data-hits="0" data-linenumber="182">
<code class="ruby"> redirect to(endpoint.to_s)</code>
</li>
<li class="never" data-hits="" data-linenumber="183">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="184">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="185">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="186">
<span class="hits">1</span>
<code class="ruby"> def create_state</code>
</li>
<li class="missed" data-hits="0" data-linenumber="187">
<code class="ruby"> state = SecureRandom.urlsafe_base64(16)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="188">
<code class="ruby"> redis.sadd(&#39;github:states&#39;, state)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="189">
<code class="ruby"> redis.expire(&#39;github:states&#39;, 1800)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="190">
<code class="ruby"> payload = params[:origin] || params[:redirect_uri]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="191">
<code class="ruby"> state &lt;&lt; &quot;:::&quot; &lt;&lt; payload if payload</code>
</li>
<li class="missed" data-hits="0" data-linenumber="192">
<code class="ruby"> response.set_cookie(&#39;travis.state&#39;, state)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="193">
<code class="ruby"> state</code>
</li>
<li class="never" data-hits="" data-linenumber="194">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="195">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="196">
<span class="hits">1</span>
<code class="ruby"> def state_ok?(state)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="197">
<code class="ruby"> cookie_state = request.cookies[&#39;travis.state&#39;]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="198">
<code class="ruby"> state == cookie_state and redis.srem(&#39;github:states&#39;, state.to_s.split(&quot;:::&quot;, 1))</code>
</li>
<li class="never" data-hits="" data-linenumber="199">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="200">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="201">
<span class="hits">1</span>
<code class="ruby"> def github_to_travis(token, options = {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="202">
<code class="ruby"> drop_token = options.delete(:drop_token)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="203">
<code class="ruby"> generate_token options.merge(user: user_for_github_token(token, drop_token))</code>
</li>
<li class="never" data-hits="" data-linenumber="204">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="205">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="206">
<span class="hits">1</span>
<code class="ruby"> class UserManager &lt; Struct.new(:data, :token, :drop_token)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="207">
<span class="hits">1</span>
<code class="ruby"> include User::Renaming</code>
</li>
<li class="never" data-hits="" data-linenumber="208">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="209">
<span class="hits">1</span>
<code class="ruby"> attr_accessor :user</code>
</li>
<li class="never" data-hits="" data-linenumber="210">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="211">
<span class="hits">1</span>
<code class="ruby"> def initialize(*)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="212">
<code class="ruby"> super</code>
</li>
<li class="never" data-hits="" data-linenumber="213">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="214">
<code class="ruby"> @user = ::User.find_by_github_id(data[&#39;id&#39;])</code>
</li>
<li class="never" data-hits="" data-linenumber="215">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="216">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="217">
<span class="hits">1</span>
<code class="ruby"> def info(attributes = {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="218">
<code class="ruby"> info = data.to_hash.slice(&#39;name&#39;, &#39;login&#39;, &#39;gravatar_id&#39;)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="219">
<code class="ruby"> info.merge! attributes.stringify_keys</code>
</li>
<li class="never" data-hits="" data-linenumber="220">
<code class="ruby"> if Travis::Features.feature_active?(:education_data_sync) ||</code>
</li>
<li class="missed" data-hits="0" data-linenumber="221">
<code class="ruby"> (user &amp;&amp; Travis::Features.owner_active?(:education_data_sync, user))</code>
</li>
<li class="missed" data-hits="0" data-linenumber="222">
<code class="ruby"> info[&#39;education&#39;] = education</code>
</li>
<li class="never" data-hits="" data-linenumber="223">
<code class="ruby"> end</code>
</li>
<li class="missed" data-hits="0" data-linenumber="224">
<code class="ruby"> info[&#39;github_id&#39;] ||= data[&#39;id&#39;]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="225">
<code class="ruby"> info</code>
</li>
<li class="never" data-hits="" data-linenumber="226">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="227">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="228">
<span class="hits">1</span>
<code class="ruby"> def user_exists?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="229">
<code class="ruby"> user</code>
</li>
<li class="never" data-hits="" data-linenumber="230">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="231">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="232">
<span class="hits">1</span>
<code class="ruby"> def education</code>
</li>
<li class="missed" data-hits="0" data-linenumber="233">
<code class="ruby"> Travis::Github::Education.new(token.to_s).student?</code>
</li>
<li class="never" data-hits="" data-linenumber="234">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="235">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="236">
<span class="hits">1</span>
<code class="ruby"> def fetch</code>
</li>
<li class="missed" data-hits="0" data-linenumber="237">
<code class="ruby"> retried ||= false</code>
</li>
<li class="missed" data-hits="0" data-linenumber="238">
<code class="ruby"> info = drop_token ? self.info : self.info(github_oauth_token: token)</code>
</li>
<li class="never" data-hits="" data-linenumber="239">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="240">
<code class="ruby"> ActiveRecord::Base.transaction do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="241">
<code class="ruby"> if user</code>
</li>
<li class="missed" data-hits="0" data-linenumber="242">
<code class="ruby"> rename_repos_owner(user.login, info[&#39;login&#39;])</code>
</li>
<li class="missed" data-hits="0" data-linenumber="243">
<code class="ruby"> user.update_attributes info</code>
</li>
<li class="never" data-hits="" data-linenumber="244">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="245">
<code class="ruby"> self.user = ::User.create! info</code>
</li>
<li class="never" data-hits="" data-linenumber="246">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="247">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="248">
<code class="ruby"> nullify_logins(user.github_id, user.login)</code>
</li>
<li class="never" data-hits="" data-linenumber="249">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="250">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="251">
<code class="ruby"> user</code>
</li>
<li class="never" data-hits="" data-linenumber="252">
<code class="ruby"> rescue ActiveRecord::RecordNotUnique</code>
</li>
<li class="missed" data-hits="0" data-linenumber="253">
<code class="ruby"> unless retried</code>
</li>
<li class="missed" data-hits="0" data-linenumber="254">
<code class="ruby"> retried = true</code>
</li>
<li class="missed" data-hits="0" data-linenumber="255">
<code class="ruby"> retry</code>
</li>
<li class="never" data-hits="" data-linenumber="256">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="257">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="258">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="259">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="260">
<span class="hits">1</span>
<code class="ruby"> def user_for_github_token(token, drop_token = false)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="261">
<code class="ruby"> data = GH.with(token: token.to_s, client_id: nil) { GH[&#39;user&#39;] }</code>
</li>
<li class="missed" data-hits="0" data-linenumber="262">
<code class="ruby"> scopes = parse_scopes data.headers[&#39;x-oauth-scopes&#39;]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="263">
<code class="ruby"> manager = UserManager.new(data, token, drop_token)</code>
</li>
<li class="never" data-hits="" data-linenumber="264">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="265">
<code class="ruby"> unless acceptable?(scopes, drop_token)</code>
</li>
<li class="never" data-hits="" data-linenumber="266">
<code class="ruby"> # TODO: we should probably only redirect if this is a web</code>
</li>
<li class="never" data-hits="" data-linenumber="267">
<code class="ruby"> # oauth request, are there any other possibilities to</code>
</li>
<li class="never" data-hits="" data-linenumber="268">
<code class="ruby"> # consider?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="269">
<code class="ruby"> url = Travis.config.oauth2.insufficient_access_redirect_url</code>
</li>
<li class="missed" data-hits="0" data-linenumber="270">
<code class="ruby"> url += &quot;#existing-user&quot; if manager.user_exists?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="271">
<code class="ruby"> redirect to(url)</code>
</li>
<li class="never" data-hits="" data-linenumber="272">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="273">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="274">
<code class="ruby"> user = manager.fetch</code>
</li>
<li class="missed" data-hits="0" data-linenumber="275">
<code class="ruby"> halt 403, &#39;not a Travis user&#39; if user.nil?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="276">
<code class="ruby"> user</code>
</li>
<li class="never" data-hits="" data-linenumber="277">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="278">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="279">
<span class="hits">1</span>
<code class="ruby"> def get_token(endpoint, values)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="280">
<code class="ruby"> response = Faraday.new(ssl: Travis.config.github.ssl).post(endpoint, values)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="281">
<code class="ruby"> parameters = Addressable::URI.form_unencode(response.body)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="282">
<code class="ruby"> token_info = parameters.assoc(&quot;access_token&quot;)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="283">
<code class="ruby"> halt 401, &#39;could not resolve github token&#39; unless token_info</code>
</li>
<li class="missed" data-hits="0" data-linenumber="284">
<code class="ruby"> token_info.last</code>
</li>
<li class="never" data-hits="" data-linenumber="285">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="286">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="287">
<span class="hits">1</span>
<code class="ruby"> def parse_scopes(data)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="288">
<code class="ruby"> data.gsub(/\s/,&#39;&#39;).split(&#39;,&#39;) if data</code>
</li>
<li class="never" data-hits="" data-linenumber="289">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="290">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="291">
<span class="hits">1</span>
<code class="ruby"> def generate_token(options)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="292">
<code class="ruby"> AccessToken.create(options).token</code>
</li>
<li class="never" data-hits="" data-linenumber="293">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="294">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="295">
<span class="hits">1</span>
<code class="ruby"> def acceptable?(scopes, lossy = false)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="296">
<code class="ruby"> User::Oauth.wanted_scopes.all? do |scope|</code>
</li>
<li class="missed" data-hits="0" data-linenumber="297">
<code class="ruby"> acceptable_scopes_for(scope, lossy).any? { |s| scopes.include? s }</code>
</li>
<li class="never" data-hits="" data-linenumber="298">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="299">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="300">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="301">
<span class="hits">1</span>
<code class="ruby"> def acceptable_scopes_for(scope, lossy = false)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="302">
<code class="ruby"> scopes = case scope = scope.to_s</code>
</li>
<li class="missed" data-hits="0" data-linenumber="303">
<code class="ruby"> when /^(.+):/ then [$1, scope]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="304">
<code class="ruby"> when &#39;public_repo&#39; then [scope, &#39;repo&#39;]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="305">
<code class="ruby"> else [scope]</code>
</li>
<li class="never" data-hits="" data-linenumber="306">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="307">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="308">
<code class="ruby"> if lossy</code>
</li>
<li class="missed" data-hits="0" data-linenumber="309">
<code class="ruby"> scopes &lt;&lt; &#39;repo&#39;</code>
</li>
<li class="missed" data-hits="0" data-linenumber="310">
<code class="ruby"> scopes &lt;&lt; &#39;public_repo&#39; if lossy and scope != &#39;repo&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="311">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="312">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="313">
<code class="ruby"> scopes</code>
</li>
<li class="never" data-hits="" data-linenumber="314">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="315">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="316">
<span class="hits">1</span>
<code class="ruby"> def post_message(payload)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="317">
<code class="ruby"> content_type :html</code>
</li>
<li class="missed" data-hits="0" data-linenumber="318">
<code class="ruby"> erb(:post_message, locals: payload)</code>
</li>
<li class="never" data-hits="" data-linenumber="319">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="320">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="321">
<span class="hits">1</span>
<code class="ruby"> def invalid_target(target_origin)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="322">
<code class="ruby"> content_type :html</code>
</li>
<li class="missed" data-hits="0" data-linenumber="323">
<code class="ruby"> erb(:invalid_target, {}, target_origin: target_origin)</code>
</li>
<li class="never" data-hits="" data-linenumber="324">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="325">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="326">
<span class="hits">1</span>
<code class="ruby"> def target_ok?(target_origin)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="327">
<code class="ruby"> return unless uri = Addressable::URI.parse(target_origin)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="328">
<code class="ruby"> if allowed_https_targets.include?(uri.host)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="329">
<code class="ruby"> uri.scheme == &#39;https&#39;</code>
</li>
<li class="missed" data-hits="0" data-linenumber="330">
<code class="ruby"> elsif uri.host =~ /\A(.+\.)?travis-ci\.(com|org)\Z/</code>
</li>
<li class="missed" data-hits="0" data-linenumber="331">
<code class="ruby"> uri.scheme == &#39;https&#39;</code>
</li>
<li class="missed" data-hits="0" data-linenumber="332">
<code class="ruby"> elsif uri.host =~ /\A(.+\.)?travis-lite\.com\Z/</code>
</li>
<li class="missed" data-hits="0" data-linenumber="333">
<code class="ruby"> uri.scheme == &#39;https&#39;</code>
</li>
<li class="missed" data-hits="0" data-linenumber="334">
<code class="ruby"> elsif uri.host == &#39;localhost&#39; or uri.host == &#39;127.0.0.1&#39;</code>
</li>
<li class="missed" data-hits="0" data-linenumber="335">
<code class="ruby"> uri.port &gt; 1023</code>
</li>
<li class="never" data-hits="" data-linenumber="336">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="337">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="338">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="339">
<span class="hits">1</span>
<code class="ruby"> def allowed_https_targets</code>
</li>
<li class="missed" data-hits="0" data-linenumber="340">
<code class="ruby"> @allowed_https_targets ||= Travis.config.auth.target_origin.to_s.split(&#39;,&#39;)</code>
</li>
<li class="never" data-hits="" data-linenumber="341">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="342">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="343">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="344">
<code class="ruby">end</code>
</li>
<li class="never" data-hits="" data-linenumber="345">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="346">
<code class="ruby">__END__</code>
</li>
<li class="never" data-hits="" data-linenumber="347">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="348">
<code class="ruby">@@ invalid_target</code>
</li>
<li class="never" data-hits="" data-linenumber="349">
<code class="ruby">&lt;script&gt;</code>
</li>
<li class="never" data-hits="" data-linenumber="350">
<code class="ruby">console.log(&#39;refusing to send a token to &lt;%= target_origin.inspect %&gt;, not whitelisted!&#39;);</code>
</li>
<li class="never" data-hits="" data-linenumber="351">
<code class="ruby">&lt;/script&gt;</code>
</li>
<li class="never" data-hits="" data-linenumber="352">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="353">
<code class="ruby">@@ common</code>
</li>
<li class="never" data-hits="" data-linenumber="354">
<code class="ruby">function tellEveryone(msg, win) {</code>
</li>
<li class="never" data-hits="" data-linenumber="355">
<code class="ruby"> if(win == undefined) win = window;</code>
</li>
<li class="never" data-hits="" data-linenumber="356">
<code class="ruby"> win.postMessage(msg, &#39;*&#39;);</code>
</li>
<li class="never" data-hits="" data-linenumber="357">
<code class="ruby"> if(win.parent != win) tellEveryone(msg, win.parent);</code>
</li>
<li class="never" data-hits="" data-linenumber="358">
<code class="ruby"> if(win.opener) tellEveryone(msg, win.opener);</code>
</li>
<li class="never" data-hits="" data-linenumber="359">
<code class="ruby">}</code>
</li>
<li class="never" data-hits="" data-linenumber="360">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="361">
<code class="ruby">@@ container</code>
</li>
<li class="never" data-hits="" data-linenumber="362">
<code class="ruby">&lt;!DOCTYPE html&gt;</code>
</li>
<li class="never" data-hits="" data-linenumber="363">
<code class="ruby">&lt;html&gt;&lt;body&gt;&lt;script&gt;</code>
</li>
<li class="never" data-hits="" data-linenumber="364">
<code class="ruby">// === THE FLOW ===</code>
</li>
<li class="never" data-hits="" data-linenumber="365">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="366">
<code class="ruby">// every serious program has a main function</code>
</li>
<li class="never" data-hits="" data-linenumber="367">
<code class="ruby">function main() {</code>
</li>
<li class="never" data-hits="" data-linenumber="368">
<code class="ruby"> doYouHave(thirdPartyCookies,</code>
</li>
<li class="never" data-hits="" data-linenumber="369">
<code class="ruby"> yesIndeed(&quot;third party cookies enabled, creating iframe&quot;,</code>
</li>
<li class="never" data-hits="" data-linenumber="370">
<code class="ruby"> doYouHave(iframe(after(5)),</code>
</li>
<li class="never" data-hits="" data-linenumber="371">
<code class="ruby"> yesIndeed(&quot;iframe succeeded&quot;, done),</code>
</li>
<li class="never" data-hits="" data-linenumber="372">
<code class="ruby"> nopeSorry(&quot;iframe taking too long, creating pop-up&quot;,</code>
</li>
<li class="never" data-hits="" data-linenumber="373">
<code class="ruby"> doYouHave(popup(after(5)),</code>
</li>
<li class="never" data-hits="" data-linenumber="374">
<code class="ruby"> yesIndeed(&quot;pop-up succeeded&quot;, done),</code>
</li>
<li class="never" data-hits="" data-linenumber="375">
<code class="ruby"> nopeSorry(&quot;pop-up failed, redirecting&quot;, redirect))))),</code>
</li>
<li class="never" data-hits="" data-linenumber="376">
<code class="ruby"> nopeSorry(&quot;third party cookies disabled, creating pop-up&quot;,</code>
</li>
<li class="never" data-hits="" data-linenumber="377">
<code class="ruby"> doYouHave(popup(after(8)),</code>
</li>
<li class="never" data-hits="" data-linenumber="378">
<code class="ruby"> yesIndeed(&quot;popup succeeded&quot;, done),</code>
</li>
<li class="never" data-hits="" data-linenumber="379">
<code class="ruby"> nopeSorry(&quot;popup failed&quot;, redirect))))();</code>
</li>
<li class="never" data-hits="" data-linenumber="380">
<code class="ruby">}</code>
</li>
<li class="never" data-hits="" data-linenumber="381">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="382">
<code class="ruby">// === THE LOGIC ===</code>
</li>
<li class="never" data-hits="" data-linenumber="383">
<code class="ruby">var url = window.location.pathname + &#39;/iframe&#39; + window.location.search;</code>
</li>
<li class="never" data-hits="" data-linenumber="384">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="385">
<code class="ruby">function thirdPartyCookies(yes, no) {</code>
</li>
<li class="never" data-hits="" data-linenumber="386">
<code class="ruby"> &lt;%= &quot;return no();&quot; unless check_third_party_cookies %&gt;</code>
</li>
<li class="never" data-hits="" data-linenumber="387">
<code class="ruby"> window.cookiesCheckCallback = function(enabled) { enabled ? yes() : no() };</code>
</li>
<li class="never" data-hits="" data-linenumber="388">
<code class="ruby"> var img = document.createElement(&#39;img&#39;);</code>
</li>
<li class="never" data-hits="" data-linenumber="389">
<code class="ruby"> img.src = &quot;https://third-party-cookies.herokuapp.com/set&quot;;</code>
</li>
<li class="never" data-hits="" data-linenumber="390">
<code class="ruby"> img.onload = function() {</code>
</li>
<li class="never" data-hits="" data-linenumber="391">
<code class="ruby"> var script = document.createElement(&#39;script&#39;);</code>
</li>
<li class="never" data-hits="" data-linenumber="392">
<code class="ruby"> script.src = &quot;https://third-party-cookies.herokuapp.com/check&quot;;</code>
</li>
<li class="never" data-hits="" data-linenumber="393">
<code class="ruby"> window.document.body.appendChild(script);</code>
</li>
<li class="never" data-hits="" data-linenumber="394">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="395">
<code class="ruby">}</code>
</li>
<li class="never" data-hits="" data-linenumber="396">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="397">
<code class="ruby">function iframe(time) {</code>
</li>
<li class="never" data-hits="" data-linenumber="398">
<code class="ruby"> return function(yes, no) {</code>
</li>
<li class="never" data-hits="" data-linenumber="399">
<code class="ruby"> var iframe = document.createElement(&#39;iframe&#39;);</code>
</li>
<li class="never" data-hits="" data-linenumber="400">
<code class="ruby"> iframe.src = url;</code>
</li>
<li class="never" data-hits="" data-linenumber="401">
<code class="ruby"> timeout(time, yes, no);</code>
</li>
<li class="never" data-hits="" data-linenumber="402">
<code class="ruby"> window.document.body.appendChild(iframe);</code>
</li>
<li class="never" data-hits="" data-linenumber="403">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="404">
<code class="ruby">}</code>
</li>
<li class="never" data-hits="" data-linenumber="405">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="406">
<code class="ruby">function popup(time) {</code>
</li>
<li class="never" data-hits="" data-linenumber="407">
<code class="ruby"> return function(yes, no) {</code>
</li>
<li class="never" data-hits="" data-linenumber="408">
<code class="ruby"> if(popupWindow) {</code>
</li>
<li class="never" data-hits="" data-linenumber="409">
<code class="ruby"> timeout(time, yes, function() {</code>
</li>
<li class="never" data-hits="" data-linenumber="410">
<code class="ruby"> if(popupWindow.closed || popupWindow.innerHeight &lt; 1) {</code>
</li>
<li class="never" data-hits="" data-linenumber="411">
<code class="ruby"> no()</code>
</li>
<li class="never" data-hits="" data-linenumber="412">
<code class="ruby"> } else {</code>
</li>
<li class="never" data-hits="" data-linenumber="413">
<code class="ruby"> try {</code>
</li>
<li class="never" data-hits="" data-linenumber="414">
<code class="ruby"> popupWindow.focus();</code>
</li>
<li class="never" data-hits="" data-linenumber="415">
<code class="ruby"> popupWindow.resizeTo(900, 500);</code>
</li>
<li class="never" data-hits="" data-linenumber="416">
<code class="ruby"> } catch(err) {</code>
</li>
<li class="never" data-hits="" data-linenumber="417">
<code class="ruby"> no()</code>
</li>
<li class="never" data-hits="" data-linenumber="418">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="419">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="420">
<code class="ruby"> });</code>
</li>
<li class="never" data-hits="" data-linenumber="421">
<code class="ruby"> } else {</code>
</li>
<li class="never" data-hits="" data-linenumber="422">
<code class="ruby"> no()</code>
</li>
<li class="never" data-hits="" data-linenumber="423">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="424">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="425">
<code class="ruby">}</code>
</li>
<li class="never" data-hits="" data-linenumber="426">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="427">
<code class="ruby">function done() {</code>
</li>
<li class="never" data-hits="" data-linenumber="428">
<code class="ruby"> if(popupWindow &amp;&amp; !popupWindow.closed) popupWindow.close();</code>
</li>
<li class="never" data-hits="" data-linenumber="429">
<code class="ruby">}</code>
</li>
<li class="never" data-hits="" data-linenumber="430">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="431">
<code class="ruby">function redirect() {</code>
</li>
<li class="never" data-hits="" data-linenumber="432">
<code class="ruby"> tellEveryone(&#39;redirect&#39;);</code>
</li>
<li class="never" data-hits="" data-linenumber="433">
<code class="ruby">}</code>
</li>
<li class="never" data-hits="" data-linenumber="434">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="435">
<code class="ruby">function createPopup() {</code>
</li>
<li class="never" data-hits="" data-linenumber="436">
<code class="ruby"> if(!popupWindow) popupWindow = window.open(url, &#39;Signing in...&#39;, &#39;height=50,width=50&#39;);</code>
</li>
<li class="never" data-hits="" data-linenumber="437">
<code class="ruby">}</code>
</li>
<li class="never" data-hits="" data-linenumber="438">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="439">
<code class="ruby">// === THE PLUMBING ===</code>
</li>
<li class="never" data-hits="" data-linenumber="440">
<code class="ruby">&lt;%= erb :common %&gt;</code>
</li>
<li class="never" data-hits="" data-linenumber="441">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="442">
<code class="ruby">function timeout(time, yes, no) {</code>
</li>
<li class="never" data-hits="" data-linenumber="443">
<code class="ruby"> var timeout = setTimeout(no, time);</code>
</li>
<li class="never" data-hits="" data-linenumber="444">
<code class="ruby"> onSuccess(function() {</code>
</li>
<li class="never" data-hits="" data-linenumber="445">
<code class="ruby"> clearTimeout(timeout);</code>
</li>
<li class="never" data-hits="" data-linenumber="446">
<code class="ruby"> yes()</code>
</li>
<li class="never" data-hits="" data-linenumber="447">
<code class="ruby"> });</code>
</li>
<li class="never" data-hits="" data-linenumber="448">
<code class="ruby">}</code>
</li>
<li class="never" data-hits="" data-linenumber="449">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="450">
<code class="ruby">function onSuccess(callback) {</code>
</li>
<li class="never" data-hits="" data-linenumber="451">
<code class="ruby"> succeeded ? callback() : callbacks.push(callback)</code>
</li>
<li class="never" data-hits="" data-linenumber="452">
<code class="ruby">}</code>
</li>
<li class="never" data-hits="" data-linenumber="453">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="454">
<code class="ruby">function doYouHave(feature, yes, no) {</code>
</li>
<li class="never" data-hits="" data-linenumber="455">
<code class="ruby"> return function() { feature(yes, no) };</code>
</li>
<li class="never" data-hits="" data-linenumber="456">
<code class="ruby">}</code>
</li>
<li class="never" data-hits="" data-linenumber="457">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="458">
<code class="ruby">function yesIndeed(msg, callback) {</code>
</li>
<li class="never" data-hits="" data-linenumber="459">
<code class="ruby"> return function() {</code>
</li>
<li class="never" data-hits="" data-linenumber="460">
<code class="ruby"> if(console &amp;&amp; console.log) console.log(msg);</code>
</li>
<li class="never" data-hits="" data-linenumber="461">
<code class="ruby"> return callback();</code>
</li>
<li class="never" data-hits="" data-linenumber="462">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="463">
<code class="ruby">}</code>
</li>
<li class="never" data-hits="" data-linenumber="464">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="465">
<code class="ruby">function after(value) {</code>
</li>
<li class="never" data-hits="" data-linenumber="466">
<code class="ruby"> return value*1000;</code>
</li>
<li class="never" data-hits="" data-linenumber="467">
<code class="ruby">}</code>
</li>
<li class="never" data-hits="" data-linenumber="468">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="469">
<code class="ruby">var nopeSorry = yesIndeed;</code>
</li>
<li class="never" data-hits="" data-linenumber="470">
<code class="ruby">var timeoutes = [];</code>
</li>
<li class="never" data-hits="" data-linenumber="471">
<code class="ruby">var callbacks = [];</code>
</li>
<li class="never" data-hits="" data-linenumber="472">
<code class="ruby">var seconds = 1000;</code>
</li>
<li class="never" data-hits="" data-linenumber="473">
<code class="ruby">var succeeded = false;</code>
</li>
<li class="never" data-hits="" data-linenumber="474">
<code class="ruby">var popupWindow;</code>
</li>
<li class="never" data-hits="" data-linenumber="475">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="476">
<code class="ruby">window.addEventListener(&quot;message&quot;, function(event) {</code>
</li>
<li class="never" data-hits="" data-linenumber="477">
<code class="ruby"> if(event.data === &quot;done&quot;) {</code>
</li>
<li class="never" data-hits="" data-linenumber="478">
<code class="ruby"> succeeded = true</code>
</li>
<li class="never" data-hits="" data-linenumber="479">
<code class="ruby"> for(var i = 0; i &lt; callbacks.length; i++) {</code>
</li>
<li class="never" data-hits="" data-linenumber="480">
<code class="ruby"> (callbacks[i])();</code>
</li>
<li class="never" data-hits="" data-linenumber="481">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="482">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="483">
<code class="ruby">});</code>
</li>
<li class="never" data-hits="" data-linenumber="484">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="485">
<code class="ruby">// === READY? GO! ===</code>
</li>
<li class="never" data-hits="" data-linenumber="486">
<code class="ruby">main();</code>
</li>
<li class="never" data-hits="" data-linenumber="487">
<code class="ruby">&lt;/script&gt;</code>
</li>
<li class="never" data-hits="" data-linenumber="488">
<code class="ruby">&lt;/body&gt;</code>
</li>
<li class="never" data-hits="" data-linenumber="489">
<code class="ruby">&lt;/html&gt;</code>
</li>
<li class="never" data-hits="" data-linenumber="490">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="491">
<code class="ruby">@@ post_message</code>
</li>
<li class="never" data-hits="" data-linenumber="492">
<code class="ruby">&lt;script&gt;</code>
</li>
<li class="never" data-hits="" data-linenumber="493">
<code class="ruby">&lt;%= erb :common %&gt;</code>
</li>
<li class="never" data-hits="" data-linenumber="494">
<code class="ruby">function uberParent(win) {</code>
</li>
<li class="never" data-hits="" data-linenumber="495">
<code class="ruby"> return win.parent === win ? win : uberParent(win.parent);</code>
</li>
<li class="never" data-hits="" data-linenumber="496">
<code class="ruby">}</code>
</li>
<li class="never" data-hits="" data-linenumber="497">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="498">
<code class="ruby">function sendPayload(win) {</code>
</li>
<li class="never" data-hits="" data-linenumber="499">
<code class="ruby"> var payload = {</code>
</li>
<li class="never" data-hits="" data-linenumber="500">
<code class="ruby"> &#39;user&#39;: &lt;%= user.to_json %&gt;,</code>
</li>
<li class="never" data-hits="" data-linenumber="501">
<code class="ruby"> &#39;token&#39;: &lt;%= token.inspect %&gt;</code>
</li>
<li class="never" data-hits="" data-linenumber="502">
<code class="ruby"> };</code>
</li>
<li class="never" data-hits="" data-linenumber="503">
<code class="ruby"> uberParent(win).postMessage(payload, &lt;%= target_origin.inspect %&gt;);</code>
</li>
<li class="never" data-hits="" data-linenumber="504">
<code class="ruby">}</code>
</li>
<li class="never" data-hits="" data-linenumber="505">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="506">
<code class="ruby">if(window.parent == window) {</code>
</li>
<li class="never" data-hits="" data-linenumber="507">
<code class="ruby"> sendPayload(window.opener);</code>
</li>
<li class="never" data-hits="" data-linenumber="508">
<code class="ruby"> window.close();</code>
</li>
<li class="never" data-hits="" data-linenumber="509">
<code class="ruby">} else {</code>
</li>
<li class="never" data-hits="" data-linenumber="510">
<code class="ruby"> tellEveryone(&#39;done&#39;);</code>
</li>
<li class="never" data-hits="" data-linenumber="511">
<code class="ruby"> sendPayload(window.parent);</code>
</li>
<li class="never" data-hits="" data-linenumber="512">
<code class="ruby">}</code>
</li>
<li class="never" data-hits="" data-linenumber="513">
<code class="ruby">&lt;/script&gt;</code>
</li>
<li class="never" data-hits="" data-linenumber="514">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="515">
<code class="ruby">@@ post_payload</code>
</li>
<li class="never" data-hits="" data-linenumber="516">
<code class="ruby">&lt;body onload=&#39;document.forms[0].submit()&#39;&gt;</code>
</li>
<li class="never" data-hits="" data-linenumber="517">
<code class="ruby"> &lt;form action=&quot;&lt;%= uri %&gt;&quot; method=&#39;post&#39;&gt;</code>
</li>
<li class="never" data-hits="" data-linenumber="518">
<code class="ruby"> &lt;input type=&#39;hidden&#39; name=&#39;token&#39; value=&#39;&lt;%= token %&gt;&#39;&gt;</code>
</li>
<li class="never" data-hits="" data-linenumber="519">
<code class="ruby"> &lt;input type=&#39;hidden&#39; name=&#39;user&#39; value=&quot;&lt;%= user.to_json.gsub(&#39;&quot;&#39;, &#39;&amp;quot;&#39;) %&gt;&quot;&gt;</code>
</li>
<li class="never" data-hits="" data-linenumber="520">
<code class="ruby"> &lt;input type=&#39;hidden&#39; name=&#39;storage&#39; value=&#39;localStorage&#39;&gt;</code>
</li>
<li class="never" data-hits="" data-linenumber="521">
<code class="ruby"> &lt;/form&gt;</code>
</li>
<li class="never" data-hits="" data-linenumber="522">
<code class="ruby">&lt;/body&gt;</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="2b74a2462ad5e4f3ca518f0cc6f13ddc82ee8762">
<div class="header">
<h3>lib/travis/api/app/endpoint/branches.rb</h3>
<h4><span class="yellow">83.33 %</span> covered</h4>
<div>
<b>6</b> relevant lines.
<span class="green"><b>5</b> lines covered</span> and
<span class="red"><b>1</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> class Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Branches &lt; Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> get &#39;/&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="7">
<code class="ruby"> respond_with service(:find_branches, params), type: :branches</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"> # get &#39;/:owner_name/:name/branches&#39; do # v1</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> # get &#39;/repos/:owner_name/:name/branches&#39; do # v2</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> # respond_with service(:branches, :find_all, params), type: :branches</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> # end</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="f830dba6ed178eb88e884e4ef578db0073e9384a">
<div class="header">
<h3>lib/travis/api/app/endpoint/broadcasts.rb</h3>
<h4><span class="yellow">83.33 %</span> covered</h4>
<div>
<b>6</b> relevant lines.
<span class="green"><b>5</b> lines covered</span> and
<span class="red"><b>1</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> class Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Broadcasts &lt; Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> get &#39;/&#39;, scope: :private do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="7">
<code class="ruby"> respond_with service(:find_user_broadcasts, params), type: :broadcasts</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="fac69dfa06cb89c53a04099fb945fb4a805cc42c">
<div class="header">
<h3>lib/travis/api/app/endpoint/builds.rb</h3>
<h4><span class="red">27.59 %</span> covered</h4>
<div>
<b>29</b> relevant lines.
<span class="green"><b>8</b> lines covered</span> and
<span class="red"><b>21</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> class Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Builds &lt; Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> get &#39;/&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="7">
<code class="ruby"> prefer_follower do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="8">
<code class="ruby"> name = params[:branches] ? :find_branches : :find_builds</code>
</li>
<li class="missed" data-hits="0" data-linenumber="9">
<code class="ruby"> params[&#39;ids&#39;] = params[&#39;ids&#39;].split(&#39;,&#39;) if params[&#39;ids&#39;].respond_to?(:split)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="10">
<code class="ruby"> respond_with service(name, params)</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="14">
<span class="hits">1</span>
<code class="ruby"> get &#39;/:id&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="15">
<code class="ruby"> respond_with service(:find_build, params)</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="18">
<span class="hits">1</span>
<code class="ruby"> post &#39;/:id/cancel&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="19">
<code class="ruby"> Metriks.meter(&quot;api.request.cancel_build&quot;).mark</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="21">
<code class="ruby"> service = self.service(:cancel_build, params.merge(source: &#39;api&#39;))</code>
</li>
<li class="missed" data-hits="0" data-linenumber="22">
<code class="ruby"> if !service.authorized?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="23">
<code class="ruby"> json = { error: {</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> message: &quot;You don&#39;t have access to cancel build(#{params[:id]})&quot;</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> } }</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="27">
<code class="ruby"> Metriks.meter(&quot;api.request.cancel_build.unauthorized&quot;).mark</code>
</li>
<li class="missed" data-hits="0" data-linenumber="28">
<code class="ruby"> status 403</code>
</li>
<li class="missed" data-hits="0" data-linenumber="29">
<code class="ruby"> respond_with json</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> elsif !service.can_cancel?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="31">
<code class="ruby"> json = { error: {</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> message: &quot;The build(#{params[:id]}) can&#39;t be canceled&quot;,</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"> code: &#39;cant_cancel&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"> } }</code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="36">
<code class="ruby"> Metriks.meter(&quot;api.request.cancel_build.cant_cancel&quot;).mark</code>
</li>
<li class="missed" data-hits="0" data-linenumber="37">
<code class="ruby"> status 422</code>
</li>
<li class="missed" data-hits="0" data-linenumber="38">
<code class="ruby"> respond_with json</code>
</li>
<li class="never" data-hits="" data-linenumber="39">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="40">
<code class="ruby"> service.run</code>
</li>
<li class="never" data-hits="" data-linenumber="41">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="42">
<code class="ruby"> Metriks.meter(&quot;api.request.cancel_build.success&quot;).mark</code>
</li>
<li class="missed" data-hits="0" data-linenumber="43">
<code class="ruby"> status 204</code>
</li>
<li class="never" data-hits="" data-linenumber="44">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="45">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="46">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="47">
<span class="hits">1</span>
<code class="ruby"> post &#39;/:id/restart&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="48">
<code class="ruby"> Metriks.meter(&quot;api.request.restart_build&quot;).mark</code>
</li>
<li class="missed" data-hits="0" data-linenumber="49">
<code class="ruby"> respond_with service(:reset_model, build_id: params[:id])</code>
</li>
<li class="never" data-hits="" data-linenumber="50">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="51">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="52">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="53">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="03dcd32988fb710bc7a3c06636a6780bce656589">
<div class="header">
<h3>lib/travis/api/app/endpoint/documentation.rb</h3>
<h4><span class="yellow">85.71 %</span> covered</h4>
<div>
<b>7</b> relevant lines.
<span class="green"><b>6</b> lines covered</span> and
<span class="red"><b>1</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> class Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Documentation &lt; Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> set prefix: &#39;/docs&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> get &#39;/&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="9">
<code class="ruby"> redirect &quot;http://docs.travis-ci.com/api&quot;</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="0dc46adef05fa2cbeadacf05c59276980cc25367">
<div class="header">
<h3>lib/travis/api/app/endpoint/endpoints.rb</h3>
<h4><span class="yellow">86.96 %</span> covered</h4>
<div>
<b>23</b> relevant lines.
<span class="green"><b>20</b> lines covered</span> and
<span class="red"><b>3</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby">require &#39;yard/sinatra&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="3">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Endpoint</code>
</li>
<li class="never" data-hits="" data-linenumber="6">
<code class="ruby"> # Documents all available API endpoints for the currently deployed version.</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"> # Text is actually parsed from the source code upon server start.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> class Endpoints &lt; Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="9">
<span class="hits">1</span>
<code class="ruby"> set :endpoints, {}</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="11">
<span class="hits">1</span>
<code class="ruby"> set :setup do</code>
</li>
<li class="covered" data-hits="1" data-linenumber="12">
<span class="hits">1</span>
<code class="ruby"> endpoint_files = Dir.glob(File.expand_path(&quot;../*.rb&quot;, __FILE__))</code>
</li>
<li class="covered" data-hits="1" data-linenumber="13">
<span class="hits">1</span>
<code class="ruby"> YARD::Registry.load(endpoint_files, true)</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="15">
<span class="hits">1</span>
<code class="ruby"> YARD::Sinatra.routes.each do |route|</code>
</li>
<li class="covered" data-hits="68" data-linenumber="16">
<span class="hits">68</span>
<code class="ruby"> namespace = route.namespace</code>
</li>
<li class="covered" data-hits="68" data-linenumber="17">
<span class="hits">68</span>
<code class="ruby"> controller = namespace.to_s.constantize</code>
</li>
<li class="covered" data-hits="68" data-linenumber="18">
<span class="hits">68</span>
<code class="ruby"> route_info = {</code>
</li>
<li class="covered" data-hits="68" data-linenumber="19">
<span class="hits">68</span>
<code class="ruby"> &#39;uri&#39; =&gt; (controller.prefix + route.http_path).gsub(&#39;//&#39;, &#39;/&#39;),</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"> &#39;verb&#39; =&gt; route.http_verb,</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"> &#39;doc&#39; =&gt; route.docstring,</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"> &#39;scope&#39; =&gt; /scope\W+(\w+)/.match(route.source).try(:[], 1) || controller.default_scope.to_s</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> }</code>
</li>
<li class="covered" data-hits="68" data-linenumber="24">
<span class="hits">68</span>
<code class="ruby"> endpoint = endpoints[controller.prefix] ||= {</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> &#39;name&#39; =&gt; namespace.name,</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> &#39;doc&#39; =&gt; namespace.docstring,</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"> &#39;prefix&#39; =&gt; controller.prefix,</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"> &#39;routes&#39; =&gt; []</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> }</code>
</li>
<li class="covered" data-hits="68" data-linenumber="30">
<span class="hits">68</span>
<code class="ruby"> endpoint[&#39;routes&#39;] &lt;&lt; route_info</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="18" data-linenumber="33">
<span class="hits">18</span>
<code class="ruby"> set :json, endpoints.keys.sort.map { |k| endpoints[k] }.to_json</code>
</li>
<li class="covered" data-hits="18" data-linenumber="34">
<span class="hits">18</span>
<code class="ruby"> endpoints.each_value { |r| r[:json] = r.to_json if r.respond_to? :to_hash }</code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="36">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"> # Lists all available API endpoints by URI prefix.</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="39">
<code class="ruby"> # Values in the resulting array correspond to return values of</code>
</li>
<li class="never" data-hits="" data-linenumber="40">
<code class="ruby"> # [`/endpoints/:prefix`](#/endpoints/:prefix).</code>
</li>
<li class="covered" data-hits="1" data-linenumber="41">
<span class="hits">1</span>
<code class="ruby"> get &#39;/&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="42">
<code class="ruby"> settings.json</code>
</li>
<li class="never" data-hits="" data-linenumber="43">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="44">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="45">
<code class="ruby"> # Infos about a specific controller.</code>
</li>
<li class="never" data-hits="" data-linenumber="46">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="47">
<code class="ruby"> # Example response:</code>
</li>
<li class="never" data-hits="" data-linenumber="48">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="49">
<code class="ruby"> # {</code>
</li>
<li class="never" data-hits="" data-linenumber="50">
<code class="ruby"> # name: &quot;Endpoints&quot;,</code>
</li>
<li class="never" data-hits="" data-linenumber="51">
<code class="ruby"> # doc: &quot;Documents all available API endpoints...&quot;,</code>
</li>
<li class="never" data-hits="" data-linenumber="52">
<code class="ruby"> # prefix: &quot;/endpoints&quot;,</code>
</li>
<li class="never" data-hits="" data-linenumber="53">
<code class="ruby"> # routes: [</code>
</li>
<li class="never" data-hits="" data-linenumber="54">
<code class="ruby"> # {</code>
</li>
<li class="never" data-hits="" data-linenumber="55">
<code class="ruby"> # uri: &quot;/endpoints/:prefix&quot;,</code>
</li>
<li class="never" data-hits="" data-linenumber="56">
<code class="ruby"> # verb: &quot;GET&quot;,</code>
</li>
<li class="never" data-hits="" data-linenumber="57">
<code class="ruby"> # doc: &quot;Infos about...&quot;,</code>
</li>
<li class="never" data-hits="" data-linenumber="58">
<code class="ruby"> # scope: &quot;public&quot;</code>
</li>
<li class="never" data-hits="" data-linenumber="59">
<code class="ruby"> # }</code>
</li>
<li class="never" data-hits="" data-linenumber="60">
<code class="ruby"> # ]</code>
</li>
<li class="never" data-hits="" data-linenumber="61">
<code class="ruby"> # }</code>
</li>
<li class="covered" data-hits="1" data-linenumber="62">
<span class="hits">1</span>
<code class="ruby"> get &#39;/:prefix&#39; do |prefix|</code>
</li>
<li class="missed" data-hits="0" data-linenumber="63">
<code class="ruby"> pass unless endpoint = settings.endpoints[&quot;/#{prefix}&quot;]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="64">
<code class="ruby"> endpoint[:json]</code>
</li>
<li class="never" data-hits="" data-linenumber="65">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="66">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="67">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="68">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="413ff5b985954d06f57e54bae462c9380050682b">
<div class="header">
<h3>lib/travis/api/app/endpoint/env_vars.rb</h3>
<h4><span class="red">44.44 %</span> covered</h4>
<div>
<b>18</b> relevant lines.
<span class="green"><b>8</b> lines covered</span> and
<span class="red"><b>10</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app/endpoint/setting_endpoint&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="3">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> class EnvVars &lt; SettingsEndpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> define_method(:name) { :env_vars }</code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> define_routes!</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> def update</code>
</li>
<li class="missed" data-hits="0" data-linenumber="11">
<code class="ruby"> data = JSON.parse(request.body.read)[singular_name]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="12">
<code class="ruby"> previously_public = record.public?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="13">
<code class="ruby"> record.update(data)</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"> # if we update from private to public reset value</code>
</li>
<li class="missed" data-hits="0" data-linenumber="16">
<code class="ruby"> if !previously_public &amp;&amp; record.public? &amp;&amp; data[&#39;value&#39;].nil?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="17">
<code class="ruby"> record.value = nil</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="20">
<code class="ruby"> if record.valid?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="21">
<code class="ruby"> repo_settings.save</code>
</li>
<li class="missed" data-hits="0" data-linenumber="22">
<code class="ruby"> respond_with(record, type: singular_name, version: :v2)</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="24">
<code class="ruby"> status 422</code>
</li>
<li class="missed" data-hits="0" data-linenumber="25">
<code class="ruby"> respond_with(record, type: :validation_error, version: :v2)</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="f01f22d7534ebd190653ed0f88f71a94320108a3">
<div class="header">
<h3>lib/travis/api/app/endpoint/home.rb</h3>
<h4><span class="red">66.67 %</span> covered</h4>
<div>
<b>18</b> relevant lines.
<span class="green"><b>12</b> lines covered</span> and
<span class="red"><b>6</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> class Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Home &lt; Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> host = Travis.config.client_domain || Travis.config.host</code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> fail &quot;Travis.config.client_domain is not set&quot; unless host or test?</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="9">
<span class="hits">1</span>
<code class="ruby"> set :prefix, &#39;/&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> set :client_config,</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> host: host,</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> shorten_host: Travis.config.shorten_host,</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> assets: Travis.config.assets,</code>
</li>
<li class="covered" data-hits="1" data-linenumber="14">
<span class="hits">1</span>
<code class="ruby"> pusher: (Travis.config.pusher_ws || Travis.config.pusher || {}).to_hash.slice(:scheme, :host, :port, :path, :key),</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"> github: { api_url: GH.current.api_host.to_s, scopes: Travis.config.oauth2.try(:scope).to_s.split(?,) }</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"> # Landing point. Redirects web browsers to [API documentation](#/docs/).</code>
</li>
<li class="covered" data-hits="1" data-linenumber="18">
<span class="hits">1</span>
<code class="ruby"> get &#39;/&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="19">
<code class="ruby"> pass if settings.disable_root_endpoint?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="20">
<code class="ruby"> redirect to(&#39;/docs/&#39;) if request.preferred_type(&#39;application/json&#39;, &#39;application/json-home&#39;, &#39;text/html&#39;) == &#39;text/html&#39;</code>
</li>
<li class="missed" data-hits="0" data-linenumber="21">
<code class="ruby"> { &#39;hello&#39; =&gt; &#39;world&#39; }</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> # Simple endpoints that redirects somewhere else, to make sure we don&#39;t</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> # send a referrer.</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"> # Parameters:</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> # * **to**: URI to redirect to after handshake.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="30">
<span class="hits">1</span>
<code class="ruby"> get &#39;/redirect&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="31">
<code class="ruby"> halt 400 unless params[:to] =~ %r{^https?://}</code>
</li>
<li class="missed" data-hits="0" data-linenumber="32">
<code class="ruby"> redirect params[:to]</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"> # Provides you with system info:</code>
</li>
<li class="never" data-hits="" data-linenumber="36">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"> # {</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby"> # config: {</code>
</li>
<li class="never" data-hits="" data-linenumber="39">
<code class="ruby"> # host: &quot;travis-ci.org&quot;,</code>
</li>
<li class="never" data-hits="" data-linenumber="40">
<code class="ruby"> # shorten_host: &quot;trvs.io&quot;,</code>
</li>
<li class="never" data-hits="" data-linenumber="41">
<code class="ruby"> # pusher: { key: &quot;dd3f11c013317df48b50&quot; },</code>
</li>
<li class="never" data-hits="" data-linenumber="42">
<code class="ruby"> # assets: {</code>
</li>
<li class="never" data-hits="" data-linenumber="43">
<code class="ruby"> # host: &quot;localhost:3000&quot;,</code>
</li>
<li class="never" data-hits="" data-linenumber="44">
<code class="ruby"> # version: &quot;asset-id&quot;,</code>
</li>
<li class="never" data-hits="" data-linenumber="45">
<code class="ruby"> # interval: 15</code>
</li>
<li class="never" data-hits="" data-linenumber="46">
<code class="ruby"> # }</code>
</li>
<li class="never" data-hits="" data-linenumber="47">
<code class="ruby"> # }</code>
</li>
<li class="never" data-hits="" data-linenumber="48">
<code class="ruby"> # }</code>
</li>
<li class="covered" data-hits="1" data-linenumber="49">
<span class="hits">1</span>
<code class="ruby"> get &#39;/config&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="50">
<code class="ruby"> { config: settings.client_config }</code>
</li>
<li class="never" data-hits="" data-linenumber="51">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="52">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="53">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="54">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="389e755e519bf86618fcf82593746fcedb9c4271">
<div class="header">
<h3>lib/travis/api/app/endpoint/hooks.rb</h3>
<h4><span class="red">75.0 %</span> covered</h4>
<div>
<b>8</b> relevant lines.
<span class="green"><b>6</b> lines covered</span> and
<span class="red"><b>2</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> class Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Hooks &lt; Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> get &#39;/&#39;, scope: :private do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="7">
<code class="ruby"> respond_with service(:find_hooks, params), type: :hooks</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> put &#39;/:id?&#39;, scope: :private do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="11">
<code class="ruby"> respond_with service(:update_hook, id: params[:id] || params[:hook][:id], active: params[:hook][:active])</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="0c26cbaa8343afc54bde5f948dbae2fe3039c766">
<div class="header">
<h3>lib/travis/api/app/endpoint/jobs.rb</h3>
<h4><span class="red">22.73 %</span> covered</h4>
<div>
<b>66</b> relevant lines.
<span class="green"><b>15</b> lines covered</span> and
<span class="red"><b>51</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> class Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Jobs &lt; Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> include Helpers::Accept</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> get &#39;/&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="9">
<code class="ruby"> prefer_follower do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="10">
<code class="ruby"> respond_with service(:find_jobs, params)</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="14">
<span class="hits">1</span>
<code class="ruby"> get &#39;/:id&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="15">
<code class="ruby"> job = service(:find_job, params).run</code>
</li>
<li class="missed" data-hits="0" data-linenumber="16">
<code class="ruby"> if job &amp;&amp; job.repository</code>
</li>
<li class="missed" data-hits="0" data-linenumber="17">
<code class="ruby"> respond_with job</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="19">
<code class="ruby"> json = { error: { message: &quot;The job(#{params[:id]}) couldn&#39;t be found&quot; } }</code>
</li>
<li class="missed" data-hits="0" data-linenumber="20">
<code class="ruby"> status 404</code>
</li>
<li class="missed" data-hits="0" data-linenumber="21">
<code class="ruby"> respond_with json</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="25">
<span class="hits">1</span>
<code class="ruby"> post &#39;/:id/cancel&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="26">
<code class="ruby"> Metriks.meter(&quot;api.request.cancel_job&quot;).mark</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="28">
<code class="ruby"> service = self.service(:cancel_job, params.merge(source: &#39;api&#39;))</code>
</li>
<li class="missed" data-hits="0" data-linenumber="29">
<code class="ruby"> if !service.authorized?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="30">
<code class="ruby"> json = { error: {</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> message: &quot;You don&#39;t have access to cancel job(#{params[:id]})&quot;</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> } }</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="34">
<code class="ruby"> Metriks.meter(&quot;api.request.cancel_job.unauthorized&quot;).mark</code>
</li>
<li class="missed" data-hits="0" data-linenumber="35">
<code class="ruby"> status 403</code>
</li>
<li class="missed" data-hits="0" data-linenumber="36">
<code class="ruby"> respond_with json</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"> elsif !service.can_cancel?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="38">
<code class="ruby"> json = { error: {</code>
</li>
<li class="never" data-hits="" data-linenumber="39">
<code class="ruby"> message: &quot;The job(#{params[:id]}) can&#39;t be canceled&quot;,</code>
</li>
<li class="never" data-hits="" data-linenumber="40">
<code class="ruby"> code: &#39;cant_cancel&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="41">
<code class="ruby"> } }</code>
</li>
<li class="never" data-hits="" data-linenumber="42">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="43">
<code class="ruby"> Metriks.meter(&quot;api.request.cancel_job.cant_cancel&quot;).mark</code>
</li>
<li class="missed" data-hits="0" data-linenumber="44">
<code class="ruby"> status 422</code>
</li>
<li class="missed" data-hits="0" data-linenumber="45">
<code class="ruby"> respond_with json</code>
</li>
<li class="never" data-hits="" data-linenumber="46">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="47">
<code class="ruby"> service.run</code>
</li>
<li class="never" data-hits="" data-linenumber="48">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="49">
<code class="ruby"> Metriks.meter(&quot;api.request.cancel_job.success&quot;).mark</code>
</li>
<li class="missed" data-hits="0" data-linenumber="50">
<code class="ruby"> status 204</code>
</li>
<li class="never" data-hits="" data-linenumber="51">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="52">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="53">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="54">
<span class="hits">1</span>
<code class="ruby"> post &#39;/:id/restart&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="55">
<code class="ruby"> Metriks.meter(&quot;api.request.restart_job&quot;).mark</code>
</li>
<li class="missed" data-hits="0" data-linenumber="56">
<code class="ruby"> respond_with service(:reset_model, job_id: params[:id])</code>
</li>
<li class="never" data-hits="" data-linenumber="57">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="58">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="59">
<span class="hits">1</span>
<code class="ruby"> get &#39;/:job_id/log&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="60">
<code class="ruby"> resource = service(:find_log, params).run</code>
</li>
<li class="missed" data-hits="0" data-linenumber="61">
<code class="ruby"> if (!resource || resource.archived?)</code>
</li>
<li class="never" data-hits="" data-linenumber="62">
<code class="ruby"> # the way we use responders makes it hard to validate proper format</code>
</li>
<li class="never" data-hits="" data-linenumber="63">
<code class="ruby"> # automatically here, so we need to check it explicitly</code>
</li>
<li class="missed" data-hits="0" data-linenumber="64">
<code class="ruby"> if accepts?(&#39;text/plain&#39;)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="65">
<code class="ruby"> archived_log_path = archive_url(&quot;/jobs/#{params[:job_id]}/log.txt&quot;)</code>
</li>
<li class="never" data-hits="" data-linenumber="66">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="67">
<code class="ruby"> if params[:cors_hax]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="68">
<code class="ruby"> status 204</code>
</li>
<li class="missed" data-hits="0" data-linenumber="69">
<code class="ruby"> headers[&#39;Access-Control-Expose-Headers&#39;] = &#39;Location&#39;</code>
</li>
<li class="missed" data-hits="0" data-linenumber="70">
<code class="ruby"> headers[&#39;Location&#39;] = archived_log_path</code>
</li>
<li class="never" data-hits="" data-linenumber="71">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="72">
<code class="ruby"> redirect archived_log_path, 307</code>
</li>
<li class="never" data-hits="" data-linenumber="73">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="74">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="75">
<code class="ruby"> status 406</code>
</li>
<li class="never" data-hits="" data-linenumber="76">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="77">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="78">
<code class="ruby"> respond_with resource</code>
</li>
<li class="never" data-hits="" data-linenumber="79">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="80">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="81">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="82">
<span class="hits">1</span>
<code class="ruby"> patch &#39;/:id/log&#39;, scope: :private do |id|</code>
</li>
<li class="missed" data-hits="0" data-linenumber="83">
<code class="ruby"> begin</code>
</li>
<li class="missed" data-hits="0" data-linenumber="84">
<code class="ruby"> self.service(:remove_log, params).run</code>
</li>
<li class="never" data-hits="" data-linenumber="85">
<code class="ruby"> rescue Travis::AuthorizationDenied =&gt; ade</code>
</li>
<li class="missed" data-hits="0" data-linenumber="86">
<code class="ruby"> status 401</code>
</li>
<li class="missed" data-hits="0" data-linenumber="87">
<code class="ruby"> { error: { message: ade.message } }</code>
</li>
<li class="never" data-hits="" data-linenumber="88">
<code class="ruby"> rescue Travis::JobUnfinished, Travis::LogAlreadyRemoved =&gt; e</code>
</li>
<li class="missed" data-hits="0" data-linenumber="89">
<code class="ruby"> status 409</code>
</li>
<li class="missed" data-hits="0" data-linenumber="90">
<code class="ruby"> { error: { message: e.message } }</code>
</li>
<li class="never" data-hits="" data-linenumber="91">
<code class="ruby"> rescue =&gt; e</code>
</li>
<li class="missed" data-hits="0" data-linenumber="92">
<code class="ruby"> status 500</code>
</li>
<li class="missed" data-hits="0" data-linenumber="93">
<code class="ruby"> { error: { message: &quot;Unexpected error occurred: #{e.message}&quot; } }</code>
</li>
<li class="never" data-hits="" data-linenumber="94">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="95">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="96">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="97">
<span class="hits">1</span>
<code class="ruby"> get &quot;/:job_id/annotations&quot; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="98">
<code class="ruby"> respond_with service(:find_annotations, params)</code>
</li>
<li class="never" data-hits="" data-linenumber="99">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="100">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="101">
<span class="hits">1</span>
<code class="ruby"> post &quot;/:job_id/annotations&quot; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="102">
<code class="ruby"> if params[:status] &amp;&amp; params[:description]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="103">
<code class="ruby"> annotation = service(:update_annotation, params).run</code>
</li>
<li class="never" data-hits="" data-linenumber="104">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="105">
<code class="ruby"> status annotation ? 204 : 401</code>
</li>
<li class="never" data-hits="" data-linenumber="106">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="107">
<code class="ruby"> status 422</code>
</li>
<li class="never" data-hits="" data-linenumber="108">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="109">
<code class="ruby"> { &quot;error&quot; =&gt; &quot;Must include status and description&quot; }</code>
</li>
<li class="never" data-hits="" data-linenumber="110">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="111">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="112">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="113">
<span class="hits">1</span>
<code class="ruby"> def archive_url(path)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="114">
<code class="ruby"> &quot;https://s3.amazonaws.com/#{hostname(&#39;archive&#39;)}#{path}&quot;</code>
</li>
<li class="never" data-hits="" data-linenumber="115">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="116">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="117">
<span class="hits">1</span>
<code class="ruby"> def hostname(name)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="118">
<code class="ruby"> &quot;#{name}#{&#39;-staging&#39; if Travis.env == &#39;staging&#39;}.#{Travis.config.host.split(&#39;.&#39;)[-2, 2].join(&#39;.&#39;)}&quot;</code>
</li>
<li class="never" data-hits="" data-linenumber="119">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="120">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="121">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="122">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="1d8c0ceda3860fb26fc34a1a770660c35db5b435">
<div class="header">
<h3>lib/travis/api/app/endpoint/lint.rb</h3>
<h4><span class="red">61.54 %</span> covered</h4>
<div>
<b>13</b> relevant lines.
<span class="green"><b>8</b> lines covered</span> and
<span class="red"><b>5</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/yaml&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="3">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> class Lint &lt; Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> def lint</code>
</li>
<li class="missed" data-hits="0" data-linenumber="8">
<code class="ruby"> request.body.rewind</code>
</li>
<li class="missed" data-hits="0" data-linenumber="9">
<code class="ruby"> content = params[:content] || request.body.read</code>
</li>
<li class="missed" data-hits="0" data-linenumber="10">
<code class="ruby"> parsed = Travis::Yaml.parse(content)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="11">
<code class="ruby"> warnings = parsed.nested_warnings.map { |k, m| { key: k, message: m } }</code>
</li>
<li class="missed" data-hits="0" data-linenumber="12">
<code class="ruby"> { lint: { warnings: warnings } }.to_json</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="15">
<span class="hits">1</span>
<code class="ruby"> post(&#39;/&#39;, scope: :public) { lint }</code>
</li>
<li class="covered" data-hits="1" data-linenumber="16">
<span class="hits">1</span>
<code class="ruby"> put(&#39;/&#39;, scope: :public) { lint }</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="5d621a9a5eb87e9eb39a114965b4bc43594c05ee">
<div class="header">
<h3>lib/travis/api/app/endpoint/logs.rb</h3>
<h4><span class="yellow">83.33 %</span> covered</h4>
<div>
<b>6</b> relevant lines.
<span class="green"><b>5</b> lines covered</span> and
<span class="red"><b>1</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> class Endpoint</code>
</li>
<li class="never" data-hits="" data-linenumber="5">
<code class="ruby"> # Logs are generated by builds.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> class Logs &lt; Endpoint</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"> # Fetches a log by its *id*.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> get &#39;/:id&#39; do |id|</code>
</li>
<li class="missed" data-hits="0" data-linenumber="9">
<code class="ruby"> respond_with service(:find_log, params)</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="41717bfcba400b9bc1a7add2cb84d3195cfc3565">
<div class="header">
<h3>lib/travis/api/app/endpoint/repos.rb</h3>
<h4><span class="red">39.71 %</span> covered</h4>
<div>
<b>68</b> relevant lines.
<span class="green"><b>27</b> lines covered</span> and
<span class="red"><b>41</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> class Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Repos &lt; Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> set :pattern, capture: { id: /\d+/ }</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"> # Endpoint for getting all repositories.</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"> # You can filter the repositories by adding parameters to the request. For example, you can get all repositories</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> # owned by johndoe by adding `owner_name=johndoe`, or all repositories that johndoe has access to by adding</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> # `member=johndoe`. The parameter names correspond to the keys of the response hash.</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"> # ### Response</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> # json(:repositories)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="17">
<span class="hits">1</span>
<code class="ruby"> get &#39;/&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="18">
<code class="ruby"> prefer_follower do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="19">
<code class="ruby"> respond_with service(:find_repos, params)</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> # Gets the repository with the given id.</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> # ### Response</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"> # json(:repository)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="28">
<span class="hits">1</span>
<code class="ruby"> get &#39;/:id&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="29">
<code class="ruby"> prefer_follower do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="30">
<code class="ruby"> respond_with service(:find_repo, params)</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"> # Retrieves repositories for a given owner.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="35">
<span class="hits">1</span>
<code class="ruby"> get &#39;/:owner_name&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="36">
<code class="ruby"> prefer_follower do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="37">
<code class="ruby"> respond_with service(:find_repos, params)</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="39">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="40">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="41">
<span class="hits">1</span>
<code class="ruby"> get &#39;/:id/cc&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="42">
<code class="ruby"> respond_with service(:find_repo, params.merge(schema: &#39;cc&#39;))</code>
</li>
<li class="never" data-hits="" data-linenumber="43">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="44">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="45">
<code class="ruby"> # Get settings for a given repository</code>
</li>
<li class="never" data-hits="" data-linenumber="46">
<code class="ruby"> #</code>
</li>
<li class="covered" data-hits="1" data-linenumber="47">
<span class="hits">1</span>
<code class="ruby"> get &#39;/:id/settings&#39;, scope: :private do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="48">
<code class="ruby"> settings = service(:find_repo_settings, params).run</code>
</li>
<li class="missed" data-hits="0" data-linenumber="49">
<code class="ruby"> if settings</code>
</li>
<li class="missed" data-hits="0" data-linenumber="50">
<code class="ruby"> respond_with({ settings: settings.simple_attributes }, version: :v2)</code>
</li>
<li class="never" data-hits="" data-linenumber="51">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="52">
<code class="ruby"> status 404</code>
</li>
<li class="never" data-hits="" data-linenumber="53">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="54">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="55">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="56">
<span class="hits">1</span>
<code class="ruby"> patch &#39;/:id/settings&#39;, scope: :private do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="57">
<code class="ruby"> payload = JSON.parse request.body.read</code>
</li>
<li class="never" data-hits="" data-linenumber="58">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="59">
<code class="ruby"> if payload[&#39;settings&#39;].blank? || !payload[&#39;settings&#39;].is_a?(Hash)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="60">
<code class="ruby"> halt 422, { &quot;error&quot; =&gt; &quot;Settings must be passed with a request&quot; }</code>
</li>
<li class="never" data-hits="" data-linenumber="61">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="62">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="63">
<code class="ruby"> settings = service(:find_repo_settings, params).run</code>
</li>
<li class="missed" data-hits="0" data-linenumber="64">
<code class="ruby"> if settings</code>
</li>
<li class="missed" data-hits="0" data-linenumber="65">
<code class="ruby"> settings.merge(payload[&#39;settings&#39;])</code>
</li>
<li class="never" data-hits="" data-linenumber="66">
<code class="ruby"> # TODO: I would like to have better API here, but leaving this</code>
</li>
<li class="never" data-hits="" data-linenumber="67">
<code class="ruby"> # for testing to not waste too much time before I can play with it</code>
</li>
<li class="missed" data-hits="0" data-linenumber="68">
<code class="ruby"> if settings.save</code>
</li>
<li class="missed" data-hits="0" data-linenumber="69">
<code class="ruby"> respond_with({ settings: settings.simple_attributes }, version: :v2)</code>
</li>
<li class="never" data-hits="" data-linenumber="70">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="71">
<code class="ruby"> status 422</code>
</li>
<li class="missed" data-hits="0" data-linenumber="72">
<code class="ruby"> respond_with(settings, type: :validation_error, version: :v2)</code>
</li>
<li class="never" data-hits="" data-linenumber="73">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="74">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="75">
<code class="ruby"> status 404</code>
</li>
<li class="never" data-hits="" data-linenumber="76">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="77">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="78">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="79">
<code class="ruby"> # Get the public key for the repository with the given id.</code>
</li>
<li class="never" data-hits="" data-linenumber="80">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="81">
<code class="ruby"> # This can be used to encrypt secure variables in the build configuration. See</code>
</li>
<li class="never" data-hits="" data-linenumber="82">
<code class="ruby"> # [the encryption keys](http://docs.travis-ci.com/user/encryption-keys/) documentation page for more</code>
</li>
<li class="never" data-hits="" data-linenumber="83">
<code class="ruby"> # information.</code>
</li>
<li class="never" data-hits="" data-linenumber="84">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="85">
<code class="ruby"> # ### Response</code>
</li>
<li class="never" data-hits="" data-linenumber="86">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="87">
<code class="ruby"> # json(:repository_key)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="88">
<span class="hits">1</span>
<code class="ruby"> get &#39;/:id/key&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="89">
<code class="ruby"> respond_with service(:find_repo_key, params), version: :v2</code>
</li>
<li class="never" data-hits="" data-linenumber="90">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="91">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="92">
<span class="hits">1</span>
<code class="ruby"> post &#39;/:id/key&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="93">
<code class="ruby"> respond_with service(:regenerate_repo_key, params), version: :v2</code>
</li>
<li class="never" data-hits="" data-linenumber="94">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="95">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="96">
<code class="ruby"> # Gets list of branches</code>
</li>
<li class="covered" data-hits="1" data-linenumber="97">
<span class="hits">1</span>
<code class="ruby"> get &#39;/:repository_id/branches&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="98">
<code class="ruby"> respond_with service(:find_branches, params), type: :branches, version: :v2</code>
</li>
<li class="never" data-hits="" data-linenumber="99">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="100">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="101">
<code class="ruby"> # Gets lastest build on a branch branches</code>
</li>
<li class="covered" data-hits="1" data-linenumber="102">
<span class="hits">1</span>
<code class="ruby"> get &#39;/:repository_id/branches/:branch&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="103">
<code class="ruby"> respond_with service(:find_branch, params), type: :branch, version: :v2</code>
</li>
<li class="never" data-hits="" data-linenumber="104">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="105">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="106">
<code class="ruby"> # List caches for a given repo. Can be filtered with `branch` and `match` query parameter.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="107">
<span class="hits">1</span>
<code class="ruby"> get &#39;/:repository_id/caches&#39;, scope: :private do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="108">
<code class="ruby"> respond_with service(:find_caches, params), type: :caches, version: :v2</code>
</li>
<li class="never" data-hits="" data-linenumber="109">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="110">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="111">
<code class="ruby"> # Delete caches for a given repo. Can be filtered with `branch` and `match` query parameter.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="112">
<span class="hits">1</span>
<code class="ruby"> delete &#39;/:repository_id/caches&#39;, scope: :private do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="113">
<code class="ruby"> respond_with service(:delete_caches, params), type: :caches, version: :v2</code>
</li>
<li class="never" data-hits="" data-linenumber="114">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="115">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="116">
<code class="ruby"> # Gets the repository with the given name.</code>
</li>
<li class="never" data-hits="" data-linenumber="117">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="118">
<code class="ruby"> # ### Response</code>
</li>
<li class="never" data-hits="" data-linenumber="119">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="120">
<code class="ruby"> # json(:repository)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="121">
<span class="hits">1</span>
<code class="ruby"> get &#39;/:owner_name/:name&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="122">
<code class="ruby"> prefer_follower do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="123">
<code class="ruby"> respond_with service(:find_repo, params)</code>
</li>
<li class="never" data-hits="" data-linenumber="124">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="125">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="126">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="127">
<code class="ruby"> # Gets the builds for the repository with the given name.</code>
</li>
<li class="never" data-hits="" data-linenumber="128">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="129">
<code class="ruby"> # ### Response</code>
</li>
<li class="never" data-hits="" data-linenumber="130">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="131">
<code class="ruby"> # json(:builds)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="132">
<span class="hits">1</span>
<code class="ruby"> get &#39;/:owner_name/:name/builds&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="133">
<code class="ruby"> name = params[:branches] ? :find_branches : :find_builds</code>
</li>
<li class="missed" data-hits="0" data-linenumber="134">
<code class="ruby"> params[&#39;ids&#39;] = params[&#39;ids&#39;].split(&#39;,&#39;) if params[&#39;ids&#39;].respond_to?(:split)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="135">
<code class="ruby"> respond_with service(:find_builds, params)</code>
</li>
<li class="never" data-hits="" data-linenumber="136">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="137">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="138">
<code class="ruby"> # Get a build with the given id in the repository with the given name.</code>
</li>
<li class="never" data-hits="" data-linenumber="139">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="140">
<code class="ruby"> # ### Response</code>
</li>
<li class="never" data-hits="" data-linenumber="141">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="142">
<code class="ruby"> # json(:build)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="143">
<span class="hits">1</span>
<code class="ruby"> get &#39;/:owner_name/:name/builds/:id&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="144">
<code class="ruby"> respond_with service(:find_build, params)</code>
</li>
<li class="never" data-hits="" data-linenumber="145">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="146">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="147">
<span class="hits">1</span>
<code class="ruby"> get &#39;/:owner_name/:name/cc&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="148">
<code class="ruby"> respond_with service(:find_repo, params.merge(schema: &#39;cc&#39;))</code>
</li>
<li class="never" data-hits="" data-linenumber="149">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="150">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="151">
<code class="ruby"> # Get the public key for a given repository.</code>
</li>
<li class="never" data-hits="" data-linenumber="152">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="153">
<code class="ruby"> # This can be used to encrypt secure variables in the build configuration. See</code>
</li>
<li class="never" data-hits="" data-linenumber="154">
<code class="ruby"> # [the encryption keys](http://docs.travis-ci.com/user/encryption-keys/) documentation page for more</code>
</li>
<li class="never" data-hits="" data-linenumber="155">
<code class="ruby"> # information.</code>
</li>
<li class="never" data-hits="" data-linenumber="156">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="157">
<code class="ruby"> # ### Response</code>
</li>
<li class="never" data-hits="" data-linenumber="158">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="159">
<code class="ruby"> # json(:repository_key)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="160">
<span class="hits">1</span>
<code class="ruby"> get &#39;/:owner_name/:name/key&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="161">
<code class="ruby"> respond_with service(:find_repo_key, params), version: :v2</code>
</li>
<li class="never" data-hits="" data-linenumber="162">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="163">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="164">
<span class="hits">1</span>
<code class="ruby"> post &#39;/:owner_name/:name/key&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="165">
<code class="ruby"> respond_with service(:regenerate_repo_key, params), version: :v2</code>
</li>
<li class="never" data-hits="" data-linenumber="166">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="167">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="168">
<code class="ruby"> # Gets list of branches</code>
</li>
<li class="covered" data-hits="1" data-linenumber="169">
<span class="hits">1</span>
<code class="ruby"> get &#39;/:owner_name/:name/branches&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="170">
<code class="ruby"> respond_with service(:find_branches, params), type: :branches, version: :v2</code>
</li>
<li class="never" data-hits="" data-linenumber="171">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="172">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="173">
<code class="ruby"> # Gets lastest build on a branch branches</code>
</li>
<li class="covered" data-hits="1" data-linenumber="174">
<span class="hits">1</span>
<code class="ruby"> get &#39;/:owner_name/:name/branches/:branch&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="175">
<code class="ruby"> respond_with service(:find_branch, params), type: :branch, version: :v2</code>
</li>
<li class="never" data-hits="" data-linenumber="176">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="177">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="178">
<code class="ruby"> # List caches for a given repo. Can be filtered with `branch` and `match` query parameter.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="179">
<span class="hits">1</span>
<code class="ruby"> get &#39;/:owner_name/:name/caches&#39;, scope: :private do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="180">
<code class="ruby"> respond_with service(:find_caches, params), type: :caches, version: :v2</code>
</li>
<li class="never" data-hits="" data-linenumber="181">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="182">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="183">
<code class="ruby"> # Delete caches for a given repo. Can be filtered with `branch` and `match` query parameter.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="184">
<span class="hits">1</span>
<code class="ruby"> delete &#39;/:owner_name/:name/caches&#39;, scope: :private do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="185">
<code class="ruby"> respond_with service(:delete_caches, params), type: :caches, version: :v2</code>
</li>
<li class="never" data-hits="" data-linenumber="186">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="187">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="188">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="189">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="3542f33a7b8a282ed0436611428aa30ad3f980a1">
<div class="header">
<h3>lib/travis/api/app/endpoint/requests.rb</h3>
<h4><span class="red">47.06 %</span> covered</h4>
<div>
<b>17</b> relevant lines.
<span class="green"><b>8</b> lines covered</span> and
<span class="red"><b>9</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app/services/schedule_request&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="3">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> class Requests &lt; Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> post &#39;/&#39;, scope: :private do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="8">
<code class="ruby"> if params[:request] &amp;&amp; params[:request][:repository]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="9">
<code class="ruby"> respond_with service(:schedule_request, params[:request])</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"> else</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> # DEPRECATED: this will be removed by 1st of December</code>
</li>
<li class="missed" data-hits="0" data-linenumber="12">
<code class="ruby"> Metriks.meter(&quot;api.request.restart&quot;).mark</code>
</li>
<li class="missed" data-hits="0" data-linenumber="13">
<code class="ruby"> respond_with service(:reset_model, params)</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="17">
<span class="hits">1</span>
<code class="ruby"> get &#39;/&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="18">
<code class="ruby"> begin</code>
</li>
<li class="missed" data-hits="0" data-linenumber="19">
<code class="ruby"> respond_with(service(:find_requests, params).run)</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"> rescue Travis::RepositoryNotFoundError =&gt; e</code>
</li>
<li class="missed" data-hits="0" data-linenumber="21">
<code class="ruby"> status 404</code>
</li>
<li class="missed" data-hits="0" data-linenumber="22">
<code class="ruby"> { &quot;error&quot; =&gt; &quot;Repository could not be found&quot; }</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="26">
<span class="hits">1</span>
<code class="ruby"> get &#39;/:id&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="27">
<code class="ruby"> respond_with service(:find_request, params)</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby">end</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"></code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="b615d4751e9fd711ed50e22c4b49c7c51f964d93">
<div class="header">
<h3>lib/travis/api/app/endpoint/setting_endpoint.rb</h3>
<h4><span class="red">52.73 %</span> covered</h4>
<div>
<b>55</b> relevant lines.
<span class="green"><b>29</b> lines covered</span> and
<span class="red"><b>26</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> class SettingsEndpoint &lt; Endpoint</code>
</li>
<li class="covered" data-hits="66" data-linenumber="5">
<span class="hits">66</span>
<code class="ruby"> set(:prefix) { &quot;/settings/&quot; &lt;&lt; name[/[^:]+$/].underscore }</code>
</li>
<li class="never" data-hits="" data-linenumber="6">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> class &lt;&lt; self</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"> # This method checks if class based on a given name exists or creates</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"> # a new SettingsEndpoint subclass, which will be then used as an endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> def subclass(name)</code>
</li>
<li class="covered" data-hits="54" data-linenumber="11">
<span class="hits">54</span>
<code class="ruby"> class_name = name.to_s.camelize</code>
</li>
<li class="covered" data-hits="54" data-linenumber="12">
<span class="hits">54</span>
<code class="ruby"> if Travis::Api::App::Endpoint.const_defined?(class_name)</code>
</li>
<li class="covered" data-hits="53" data-linenumber="13">
<span class="hits">53</span>
<code class="ruby"> Travis::Api::App::Endpoint.const_get(class_name)</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"> else</code>
</li>
<li class="covered" data-hits="1" data-linenumber="15">
<span class="hits">1</span>
<code class="ruby"> klass = create_settings_class(name)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="16">
<span class="hits">1</span>
<code class="ruby"> Travis::Api::App::Endpoint.const_set(class_name, klass)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="17">
<span class="hits">1</span>
<code class="ruby"> klass</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="21">
<span class="hits">1</span>
<code class="ruby"> def create_settings_class(name)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="22">
<code class="ruby"> klass = Class.new(self) do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="23">
<code class="ruby"> define_method(:name) { name }</code>
</li>
<li class="missed" data-hits="0" data-linenumber="24">
<code class="ruby"> define_routes!</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="28">
<span class="hits">1</span>
<code class="ruby"> def define_routes!</code>
</li>
<li class="covered" data-hits="1" data-linenumber="29">
<span class="hits">1</span>
<code class="ruby"> get(&quot;/&quot;, scope: :private) do index end</code>
</li>
<li class="covered" data-hits="1" data-linenumber="30">
<span class="hits">1</span>
<code class="ruby"> get(&quot;/:id&quot;, scope: :private) do show end</code>
</li>
<li class="covered" data-hits="1" data-linenumber="31">
<span class="hits">1</span>
<code class="ruby"> post(&quot;/&quot;, scope: :private) do create end</code>
</li>
<li class="covered" data-hits="1" data-linenumber="32">
<span class="hits">1</span>
<code class="ruby"> patch(&quot;/:id&quot;, scope: :private) do update end</code>
</li>
<li class="covered" data-hits="1" data-linenumber="33">
<span class="hits">1</span>
<code class="ruby"> delete(&quot;/:id&quot;, scope: :private) do destroy end</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="36">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"> # Rails style methods for easy overriding</code>
</li>
<li class="covered" data-hits="1" data-linenumber="38">
<span class="hits">1</span>
<code class="ruby"> def index</code>
</li>
<li class="missed" data-hits="0" data-linenumber="39">
<code class="ruby"> respond_with(collection, type: name, version: :v2)</code>
</li>
<li class="never" data-hits="" data-linenumber="40">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="41">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="42">
<span class="hits">1</span>
<code class="ruby"> def show</code>
</li>
<li class="missed" data-hits="0" data-linenumber="43">
<code class="ruby"> respond_with(record, type: singular_name, version: :v2)</code>
</li>
<li class="never" data-hits="" data-linenumber="44">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="45">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="46">
<span class="hits">1</span>
<code class="ruby"> def update</code>
</li>
<li class="missed" data-hits="0" data-linenumber="47">
<code class="ruby"> record.update(JSON.parse(request.body.read)[singular_name])</code>
</li>
<li class="missed" data-hits="0" data-linenumber="48">
<code class="ruby"> if record.valid?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="49">
<code class="ruby"> repo_settings.save</code>
</li>
<li class="missed" data-hits="0" data-linenumber="50">
<code class="ruby"> respond_with(record, type: singular_name, version: :v2)</code>
</li>
<li class="never" data-hits="" data-linenumber="51">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="52">
<code class="ruby"> status 422</code>
</li>
<li class="missed" data-hits="0" data-linenumber="53">
<code class="ruby"> respond_with(record, type: :validation_error, version: :v2)</code>
</li>
<li class="never" data-hits="" data-linenumber="54">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="55">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="56">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="57">
<span class="hits">1</span>
<code class="ruby"> def create</code>
</li>
<li class="missed" data-hits="0" data-linenumber="58">
<code class="ruby"> record = collection.create(JSON.parse(request.body.read)[singular_name])</code>
</li>
<li class="missed" data-hits="0" data-linenumber="59">
<code class="ruby"> if record.valid?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="60">
<code class="ruby"> repo_settings.save</code>
</li>
<li class="missed" data-hits="0" data-linenumber="61">
<code class="ruby"> respond_with(record, type: singular_name, version: :v2)</code>
</li>
<li class="never" data-hits="" data-linenumber="62">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="63">
<code class="ruby"> status 422</code>
</li>
<li class="missed" data-hits="0" data-linenumber="64">
<code class="ruby"> respond_with(record, type: :validation_error, version: :v2)</code>
</li>
<li class="never" data-hits="" data-linenumber="65">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="66">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="67">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="68">
<span class="hits">1</span>
<code class="ruby"> def destroy</code>
</li>
<li class="missed" data-hits="0" data-linenumber="69">
<code class="ruby"> record = collection.destroy(params[:id]) || record_not_found</code>
</li>
<li class="missed" data-hits="0" data-linenumber="70">
<code class="ruby"> repo_settings.save</code>
</li>
<li class="missed" data-hits="0" data-linenumber="71">
<code class="ruby"> respond_with(record, type: singular_name, version: :v2)</code>
</li>
<li class="never" data-hits="" data-linenumber="72">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="73">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="74">
<span class="hits">1</span>
<code class="ruby"> def singular_name</code>
</li>
<li class="missed" data-hits="0" data-linenumber="75">
<code class="ruby"> name.to_s.singularize</code>
</li>
<li class="never" data-hits="" data-linenumber="76">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="77">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="78">
<span class="hits">1</span>
<code class="ruby"> def collection</code>
</li>
<li class="missed" data-hits="0" data-linenumber="79">
<code class="ruby"> @collection ||= repo_settings.send(name)</code>
</li>
<li class="never" data-hits="" data-linenumber="80">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="81">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="82">
<code class="ruby"> # This method can&#39;t be called &quot;settings&quot; because it clashes with</code>
</li>
<li class="never" data-hits="" data-linenumber="83">
<code class="ruby"> # Sinatra&#39;s method</code>
</li>
<li class="covered" data-hits="1" data-linenumber="84">
<span class="hits">1</span>
<code class="ruby"> def repo_settings</code>
</li>
<li class="never" data-hits="" data-linenumber="85">
<code class="ruby"> @settings ||= begin</code>
</li>
<li class="missed" data-hits="0" data-linenumber="86">
<code class="ruby"> service(:find_repo_settings, id: params[&#39;repository_id&#39;].to_i).run</code>
</li>
<li class="missed" data-hits="0" data-linenumber="87">
<code class="ruby"> end || halt(404, error: &quot;Couldn&#39;t find repository&quot;)</code>
</li>
<li class="never" data-hits="" data-linenumber="88">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="89">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="90">
<span class="hits">1</span>
<code class="ruby"> def record</code>
</li>
<li class="missed" data-hits="0" data-linenumber="91">
<code class="ruby"> collection.find(params[:id]) || record_not_found</code>
</li>
<li class="never" data-hits="" data-linenumber="92">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="93">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="94">
<span class="hits">1</span>
<code class="ruby"> def record_not_found</code>
</li>
<li class="missed" data-hits="0" data-linenumber="95">
<code class="ruby"> halt(404, { error: &quot;Could not find a requested setting&quot; })</code>
</li>
<li class="never" data-hits="" data-linenumber="96">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="97">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="98">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="c146923d5484592bc716b1adae4f3329fd9ebb1b">
<div class="header">
<h3>lib/travis/api/app/endpoint/singleton_settings_endpoint.rb</h3>
<h4><span class="red">57.14 %</span> covered</h4>
<div>
<b>28</b> relevant lines.
<span class="green"><b>16</b> lines covered</span> and
<span class="red"><b>12</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app/endpoint/setting_endpoint&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="3">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class SingletonSettingsEndpoint &lt; SettingsEndpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> class &lt;&lt; self</code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> def create_settings_class(name)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> klass = Class.new(self) do</code>
</li>
<li class="covered" data-hits="1" data-linenumber="9">
<span class="hits">1</span>
<code class="ruby"> define_method(:name) { name }</code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> get(&quot;/:repository_id&quot;, scope: :private) do show end</code>
</li>
<li class="covered" data-hits="1" data-linenumber="11">
<span class="hits">1</span>
<code class="ruby"> patch(&quot;/:repository_id&quot;, scope: :private) do update end</code>
</li>
<li class="covered" data-hits="1" data-linenumber="12">
<span class="hits">1</span>
<code class="ruby"> delete(&quot;/:repository_id&quot;, scope: :private) do destroy end</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="17">
<span class="hits">1</span>
<code class="ruby"> def update</code>
</li>
<li class="missed" data-hits="0" data-linenumber="18">
<code class="ruby"> record = parent.update(name, JSON.parse(request.body.read)[singular_name])</code>
</li>
<li class="missed" data-hits="0" data-linenumber="19">
<code class="ruby"> if record.valid?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="20">
<code class="ruby"> repo_settings.save</code>
</li>
<li class="missed" data-hits="0" data-linenumber="21">
<code class="ruby"> respond_with(record, type: singular_name, version: :v2)</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="23">
<code class="ruby"> status 422</code>
</li>
<li class="missed" data-hits="0" data-linenumber="24">
<code class="ruby"> respond_with(record, type: :validation_error, version: :v2)</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="28">
<span class="hits">1</span>
<code class="ruby"> def destroy</code>
</li>
<li class="missed" data-hits="0" data-linenumber="29">
<code class="ruby"> record = parent.delete(name)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="30">
<code class="ruby"> repo_settings.save</code>
</li>
<li class="missed" data-hits="0" data-linenumber="31">
<code class="ruby"> respond_with(record, type: singular_name, version: :v2)</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="34">
<span class="hits">1</span>
<code class="ruby"> def record</code>
</li>
<li class="missed" data-hits="0" data-linenumber="35">
<code class="ruby"> parent.get(name) || record_not_found</code>
</li>
<li class="never" data-hits="" data-linenumber="36">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="38">
<span class="hits">1</span>
<code class="ruby"> def parent</code>
</li>
<li class="missed" data-hits="0" data-linenumber="39">
<code class="ruby"> repo_settings</code>
</li>
<li class="never" data-hits="" data-linenumber="40">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="41">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="42">
<span class="hits">1</span>
<code class="ruby"> def record_not_found</code>
</li>
<li class="missed" data-hits="0" data-linenumber="43">
<code class="ruby"> halt(404, { error: &quot;Could not find a requested setting&quot; })</code>
</li>
<li class="never" data-hits="" data-linenumber="44">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="45">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="46">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="3aa4c3de70a6e7203940667017613935754e19cd">
<div class="header">
<h3>lib/travis/api/app/endpoint/uptime.rb</h3>
<h4><span class="red">55.56 %</span> covered</h4>
<div>
<b>9</b> relevant lines.
<span class="green"><b>5</b> lines covered</span> and
<span class="red"><b>4</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> class Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Uptime &lt; Endpoint</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> get &#39;/&#39; do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="7">
<code class="ruby"> begin</code>
</li>
<li class="missed" data-hits="0" data-linenumber="8">
<code class="ruby"> ActiveRecord::Base.connection.execute(&#39;select 1&#39;)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="9">
<code class="ruby"> [200, &quot;OK&quot;]</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"> rescue Exception =&gt; e</code>
</li>
<li class="missed" data-hits="0" data-linenumber="11">
<code class="ruby"> return [500, &quot;Error: #{e.message}&quot;]</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="2aeec642e9353983d22c25e11bb6aee7a68ff327">
<div class="header">
<h3>lib/travis/api/app/endpoint/users.rb</h3>
<h4><span class="red">50.0 %</span> covered</h4>
<div>
<b>18</b> relevant lines.
<span class="green"><b>9</b> lines covered</span> and
<span class="red"><b>9</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> class Endpoint</code>
</li>
<li class="never" data-hits="" data-linenumber="5">
<code class="ruby"> # TODO should this be /profile?</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> class Users &lt; Endpoint</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"> # Gives information about the currently logged in user.</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"> # Example:</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> # {</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> # &quot;user&quot;: {</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> # &quot;name&quot;: &quot;Sven Fuchs&quot;,</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"> # &quot;login&quot;: &quot;svenfuchs&quot;,</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"> # &quot;email&quot;: &quot;svenfuchs@artweb-design.de&quot;,</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> # &quot;gravatar_id&quot;: &quot;402602a60e500e85f2f5dc1ff3648ecb&quot;,</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"> # &quot;locale&quot;: &quot;de&quot;,</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"> # &quot;is_syncing&quot;: false,</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"> # &quot;synced_at&quot;: &quot;2012-08-14T22:11:21Z&quot;</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"> # }</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"> # }</code>
</li>
<li class="covered" data-hits="1" data-linenumber="22">
<span class="hits">1</span>
<code class="ruby"> get &#39;/&#39;, scope: :private do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="23">
<code class="ruby"> respond_with current_user</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="26">
<span class="hits">1</span>
<code class="ruby"> get &#39;/permissions&#39;, scope: :private do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="27">
<code class="ruby"> respond_with service(:find_user_permissions), type: :permissions</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> # TODO fix url/key generation in ember-data</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> # get &#39;/accounts&#39;, scope: :private do</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> # respond_with service(:users, :find_accounts), type: :accounts</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"> # end</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"> # TODO fix url/key generation in ember-data</code>
</li>
<li class="never" data-hits="" data-linenumber="36">
<code class="ruby"> # get &#39;/broadcasts&#39;, scope: :private do</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"> # respond_with service(:users, :find_broadcasts), type: :broadcasts</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby"> # end</code>
</li>
<li class="never" data-hits="" data-linenumber="39">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="40">
<span class="hits">1</span>
<code class="ruby"> get &#39;/:id&#39;, scope: :private do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="41">
<code class="ruby"> pass unless current_user.id.to_s == params[:id]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="42">
<code class="ruby"> respond_with current_user</code>
</li>
<li class="never" data-hits="" data-linenumber="43">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="44">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="45">
<span class="hits">1</span>
<code class="ruby"> put &#39;/:id?&#39;, scope: :private do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="46">
<code class="ruby"> respond_with service(:update_user, params[:user])</code>
</li>
<li class="never" data-hits="" data-linenumber="47">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="48">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="49">
<span class="hits">1</span>
<code class="ruby"> post &#39;/sync&#39;, scope: :private do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="50">
<code class="ruby"> if current_user.syncing?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="51">
<code class="ruby"> status 409</code>
</li>
<li class="missed" data-hits="0" data-linenumber="52">
<code class="ruby"> { &#39;message&#39; =&gt; &quot;Sync already in progress. Try again later.&quot; }</code>
</li>
<li class="never" data-hits="" data-linenumber="53">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="54">
<code class="ruby"> respond_with service(:sync_user)</code>
</li>
<li class="never" data-hits="" data-linenumber="55">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="56">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="57">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="58">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="59">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="98cb249669c6e20fed930c4f814f8e6266add77c">
<div class="header">
<h3>lib/travis/api/app/extensions.rb</h3>
<h4><span class="green">100.0 %</span> covered</h4>
<div>
<b>4</b> relevant lines.
<span class="green"><b>4</b> lines covered</span> and
<span class="red"><b>0</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="never" data-hits="" data-linenumber="4">
<code class="ruby"> # Namespace for Sinatra extensions.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> module Extensions</code>
</li>
<li class="covered" data-hits="5" data-linenumber="6">
<span class="hits">5</span>
<code class="ruby"> Dir.glob(&quot;#{__dir__}/extensions/*.rb&quot;).each { |f| require f[%r[(?&lt;=lib/).+(?=\.rb$)]] }</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="00c3504cff5eca9f25748185fb2bd47ad1755d92">
<div class="header">
<h3>lib/travis/api/app/extensions/expose_pattern.rb</h3>
<h4><span class="green">100.0 %</span> covered</h4>
<div>
<b>7</b> relevant lines.
<span class="green"><b>7</b> lines covered</span> and
<span class="red"><b>0</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Extensions</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> module ExposePattern</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> def route(verb, path, *)</code>
</li>
<li class="covered" data-hits="119" data-linenumber="7">
<span class="hits">119</span>
<code class="ruby"> condition { headers(&#39;X-Endpoint&#39; =&gt; settings.name.to_s, &#39;X-Pattern&#39; =&gt; path.to_s) }</code>
</li>
<li class="covered" data-hits="119" data-linenumber="8">
<span class="hits">119</span>
<code class="ruby"> super</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="cf7268e37e643b00ddda6c99c2b8d2601a66df25">
<div class="header">
<h3>lib/travis/api/app/extensions/scoping.rb</h3>
<h4><span class="red">41.03 %</span> covered</h4>
<div>
<b>39</b> relevant lines.
<span class="green"><b>16</b> lines covered</span> and
<span class="red"><b>23</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Extensions</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> module Scoping</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> module Helpers</code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> def scope</code>
</li>
<li class="missed" data-hits="0" data-linenumber="8">
<code class="ruby"> env[&#39;travis.scope&#39;].to_sym</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="11">
<span class="hits">1</span>
<code class="ruby"> def public?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="12">
<code class="ruby"> scope == :public</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="15">
<span class="hits">1</span>
<code class="ruby"> def required_params_match?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="16">
<code class="ruby"> return true unless token = env[&#39;travis.access_token&#39;]</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="18">
<code class="ruby"> if token.extra &amp;&amp; (required_params = token.extra[&#39;required_params&#39;])</code>
</li>
<li class="missed" data-hits="0" data-linenumber="19">
<code class="ruby"> required_params.all? { |name, value| params[name] == value }</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="21">
<code class="ruby"> true</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="26">
<span class="hits">1</span>
<code class="ruby"> def self.registered(app)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="27">
<span class="hits">1</span>
<code class="ruby"> app.set default_scope: :public, anonymous_scopes: [:public]</code>
</li>
<li class="covered" data-hits="1" data-linenumber="28">
<span class="hits">1</span>
<code class="ruby"> app.helpers(Helpers)</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="31">
<span class="hits">1</span>
<code class="ruby"> def scope(*names)</code>
</li>
<li class="covered" data-hits="118" data-linenumber="32">
<span class="hits">118</span>
<code class="ruby"> condition do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="33">
<code class="ruby"> names = [settings.default_scope] if names == [:default]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="34">
<code class="ruby"> scopes = env[&#39;travis.access_token&#39;].try(:scopes) || settings.anonymous_scopes</code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="36">
<code class="ruby"> result = names.any? do |name|</code>
</li>
<li class="missed" data-hits="0" data-linenumber="37">
<code class="ruby"> if scopes.include?(name) &amp;&amp; required_params_match?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="38">
<code class="ruby"> headers[&#39;X-OAuth-Scopes&#39;] = scopes.map(&amp;:to_s).join(&#39;,&#39;)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="39">
<code class="ruby"> headers[&#39;X-Accepted-OAuth-Scopes&#39;] = name.to_s</code>
</li>
<li class="never" data-hits="" data-linenumber="40">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="41">
<code class="ruby"> env[&#39;travis.scope&#39;] = name</code>
</li>
<li class="missed" data-hits="0" data-linenumber="42">
<code class="ruby"> headers[&#39;Vary&#39;] = &#39;Accept&#39;</code>
</li>
<li class="missed" data-hits="0" data-linenumber="43">
<code class="ruby"> headers[&#39;Vary&#39;] &lt;&lt; &#39;, Authorization&#39; unless public?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="44">
<code class="ruby"> true</code>
</li>
<li class="never" data-hits="" data-linenumber="45">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="46">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="47">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="48">
<code class="ruby"> if !result</code>
</li>
<li class="missed" data-hits="0" data-linenumber="49">
<code class="ruby"> headers[&#39;X-OAuth-Scopes&#39;] = scopes.map(&amp;:to_s).join(&#39;,&#39;)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="50">
<code class="ruby"> headers[&#39;X-Accepted-OAuth-Scopes&#39;] = names.first.to_s</code>
</li>
<li class="never" data-hits="" data-linenumber="51">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="52">
<code class="ruby"> if env[&#39;travis.access_token&#39;]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="53">
<code class="ruby"> pass { halt 403, &quot;insufficient access&quot; }</code>
</li>
<li class="never" data-hits="" data-linenumber="54">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="55">
<code class="ruby"> pass { halt 401, &quot;no access token supplied&quot; }</code>
</li>
<li class="never" data-hits="" data-linenumber="56">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="57">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="58">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="59">
<code class="ruby"> result</code>
</li>
<li class="never" data-hits="" data-linenumber="60">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="61">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="62">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="63">
<span class="hits">1</span>
<code class="ruby"> def route(verb, path, options = {}, &amp;block)</code>
</li>
<li class="covered" data-hits="118" data-linenumber="64">
<span class="hits">118</span>
<code class="ruby"> options[:scope] ||= :default</code>
</li>
<li class="covered" data-hits="118" data-linenumber="65">
<span class="hits">118</span>
<code class="ruby"> super(verb, path, options, &amp;block)</code>
</li>
<li class="never" data-hits="" data-linenumber="66">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="67">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="68">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="69">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="4afdb495e463d11449413cb7fabf94f05a66ff88">
<div class="header">
<h3>lib/travis/api/app/extensions/smart_constants.rb</h3>
<h4><span class="green">100.0 %</span> covered</h4>
<div>
<b>11</b> relevant lines.
<span class="green"><b>11</b> lines covered</span> and
<span class="red"><b>0</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Extensions</code>
</li>
<li class="never" data-hits="" data-linenumber="5">
<code class="ruby"> # Allows writing</code>
</li>
<li class="never" data-hits="" data-linenumber="6">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"> # helpers :some_helper</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"> # Instead of</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"> #</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> # helpers Travis::Api::App::Helpers::SomeHelper</code>
</li>
<li class="covered" data-hits="1" data-linenumber="12">
<span class="hits">1</span>
<code class="ruby"> module SmartConstants</code>
</li>
<li class="covered" data-hits="1" data-linenumber="13">
<span class="hits">1</span>
<code class="ruby"> def helpers(*list, &amp;block)</code>
</li>
<li class="covered" data-hits="4" data-linenumber="14">
<span class="hits">4</span>
<code class="ruby"> super(*resolve_constants(list, Helpers), &amp;block)</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="17">
<span class="hits">1</span>
<code class="ruby"> def register(*list, &amp;block)</code>
</li>
<li class="covered" data-hits="4" data-linenumber="18">
<span class="hits">4</span>
<code class="ruby"> super(*resolve_constants(list, Extensions), &amp;block)</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="21">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="23">
<span class="hits">1</span>
<code class="ruby"> def resolve_constants(list, namespace)</code>
</li>
<li class="covered" data-hits="20" data-linenumber="24">
<span class="hits">20</span>
<code class="ruby"> list.map { |e| Symbol === e ? namespace.const_get(e.to_s.camelize) : e }</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="32932af295b8d816c57702d2dd3215d03df46d91">
<div class="header">
<h3>lib/travis/api/app/extensions/subclass_tracker.rb</h3>
<h4><span class="green">100.0 %</span> covered</h4>
<div>
<b>13</b> relevant lines.
<span class="green"><b>13</b> lines covered</span> and
<span class="red"><b>0</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Extensions</code>
</li>
<li class="never" data-hits="" data-linenumber="5">
<code class="ruby"> # Keeps track of subclasses. Used for endpoint and middleware detection.</code>
</li>
<li class="never" data-hits="" data-linenumber="6">
<code class="ruby"> # This will prevent garbage collection of subclasses.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> module SubclassTracker</code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> def direct_subclasses</code>
</li>
<li class="covered" data-hits="707" data-linenumber="9">
<span class="hits">707</span>
<code class="ruby"> @direct_subclasses ||= []</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> # List of &quot;leaf&quot; subclasses (ie subclasses without subclasses).</code>
</li>
<li class="covered" data-hits="1" data-linenumber="13">
<span class="hits">1</span>
<code class="ruby"> def subclasses</code>
</li>
<li class="covered" data-hits="594" data-linenumber="14">
<span class="hits">594</span>
<code class="ruby"> return [self] if direct_subclasses.empty?</code>
</li>
<li class="covered" data-hits="85" data-linenumber="15">
<span class="hits">85</span>
<code class="ruby"> direct_subclasses.map(&amp;:subclasses).flatten.uniq</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="18">
<span class="hits">1</span>
<code class="ruby"> def inherited(subclass)</code>
</li>
<li class="covered" data-hits="28" data-linenumber="19">
<span class="hits">28</span>
<code class="ruby"> super</code>
</li>
<li class="covered" data-hits="28" data-linenumber="20">
<span class="hits">28</span>
<code class="ruby"> subclass.set app_file: caller_files.first</code>
</li>
<li class="covered" data-hits="28" data-linenumber="21">
<span class="hits">28</span>
<code class="ruby"> direct_subclasses &lt;&lt; subclass</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="3583b3399a71ebe7de3f253f8a6a166b5ff1450d">
<div class="header">
<h3>lib/travis/api/app/helpers.rb</h3>
<h4><span class="green">100.0 %</span> covered</h4>
<div>
<b>4</b> relevant lines.
<span class="green"><b>4</b> lines covered</span> and
<span class="red"><b>0</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="never" data-hits="" data-linenumber="4">
<code class="ruby"> # Namespace for helpers.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> module Helpers</code>
</li>
<li class="covered" data-hits="7" data-linenumber="6">
<span class="hits">7</span>
<code class="ruby"> Dir.glob(&quot;#{__dir__}/helpers/*.rb&quot;).each { |f| require f[%r[(?&lt;=lib/).+(?=\.rb$)]] }</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="d434ebb9387430acf5e4c2c6adda113f213d9a27">
<div class="header">
<h3>lib/travis/api/app/helpers/accept.rb</h3>
<h4><span class="red">49.06 %</span> covered</h4>
<div>
<b>53</b> relevant lines.
<span class="green"><b>26</b> lines covered</span> and
<span class="red"><b>27</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Helpers</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> module Accept</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> HEADER_FORMAT = /vnd\.travis-ci\.(\d+)\+(\w+)/</code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> DEFAULT_VERSION = &#39;v1&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> DEFAULT_FORMAT = &#39;json&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> class Entry</code>
</li>
<li class="covered" data-hits="1" data-linenumber="11">
<span class="hits">1</span>
<code class="ruby"> SEPARATORS = Regexp.escape(&quot;()&lt;&gt;@,;:\/[]?={}\t &quot;)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="12">
<span class="hits">1</span>
<code class="ruby"> TOKEN = /[^#{SEPARATORS}]+/</code>
</li>
<li class="covered" data-hits="1" data-linenumber="13">
<span class="hits">1</span>
<code class="ruby"> attr_reader :type, :subtype, :quality, :version, :params</code>
</li>
<li class="covered" data-hits="1" data-linenumber="14">
<span class="hits">1</span>
<code class="ruby"> def initialize(accept_string)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="15">
<code class="ruby"> @type, @subtype, @quality, @version, @params = parse(accept_string)</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="18">
<span class="hits">1</span>
<code class="ruby"> def &lt;=&gt;(other)</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"> [1 - quality, mime_type.count(&#39;*&#39;), 1 - params.size] &lt;=&gt;</code>
</li>
<li class="missed" data-hits="0" data-linenumber="20">
<code class="ruby"> [1 - other.quality, other.mime_type.count(&#39;*&#39;), 1 - other.params.size]</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="23">
<span class="hits">1</span>
<code class="ruby"> def mime_type</code>
</li>
<li class="missed" data-hits="0" data-linenumber="24">
<code class="ruby"> &quot;#{type}/#{subtype}&quot;</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="27">
<span class="hits">1</span>
<code class="ruby"> def version</code>
</li>
<li class="missed" data-hits="0" data-linenumber="28">
<code class="ruby"> version = @version || params[&#39;version&#39;]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="29">
<code class="ruby"> version ? &quot;v#{version}&quot; : nil</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="32">
<span class="hits">1</span>
<code class="ruby"> def accepts?(mime_type)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="33">
<code class="ruby"> return true if self.mime_type == &#39;*/*&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="35">
<code class="ruby"> type, subtype = mime_type.scan(%r{(#{TOKEN})/(#{TOKEN})}).flatten</code>
</li>
<li class="missed" data-hits="0" data-linenumber="36">
<code class="ruby"> type == self.type &amp;&amp; (self.subtype == &#39;*&#39; || subtype == self.subtype)</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="39">
<span class="hits">1</span>
<code class="ruby"> def to_s</code>
</li>
<li class="missed" data-hits="0" data-linenumber="40">
<code class="ruby"> str = &quot;#{mime_type}; q=#{quality}&quot;</code>
</li>
<li class="missed" data-hits="0" data-linenumber="41">
<code class="ruby"> str &lt;&lt; &quot;; #{params.map { |k,v| &quot;#{k}=#{v}&quot; }.join(&#39;; &#39;)}&quot; if params.length &gt; 0</code>
</li>
<li class="missed" data-hits="0" data-linenumber="42">
<code class="ruby"> str</code>
</li>
<li class="never" data-hits="" data-linenumber="43">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="44">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="45">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="covered" data-hits="1" data-linenumber="46">
<span class="hits">1</span>
<code class="ruby"> def parse(str)</code>
</li>
<li class="never" data-hits="" data-linenumber="47">
<code class="ruby"> # this handles only subset of what Accept header can</code>
</li>
<li class="never" data-hits="" data-linenumber="48">
<code class="ruby"> # contain, only the simplest cases, no quoted strings etc.</code>
</li>
<li class="missed" data-hits="0" data-linenumber="49">
<code class="ruby"> type, subtype, params = str.scan(%r{(#{TOKEN})/(#{TOKEN})(.*)}).flatten</code>
</li>
<li class="missed" data-hits="0" data-linenumber="50">
<code class="ruby"> quality = 1</code>
</li>
<li class="never" data-hits="" data-linenumber="51">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="52">
<code class="ruby"> version = nil</code>
</li>
<li class="missed" data-hits="0" data-linenumber="53">
<code class="ruby"> if params</code>
</li>
<li class="missed" data-hits="0" data-linenumber="54">
<code class="ruby"> params = Hash[*params.split(&#39;;&#39;).map { |p| p.scan /(#{TOKEN})=(#{TOKEN})/ }.flatten]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="55">
<code class="ruby"> quality = params.delete(&#39;q&#39;).to_f if params[&#39;q&#39;]</code>
</li>
<li class="never" data-hits="" data-linenumber="56">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="57">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="58">
<code class="ruby"> if subtype =~ HEADER_FORMAT</code>
</li>
<li class="missed" data-hits="0" data-linenumber="59">
<code class="ruby"> subtype = $2</code>
</li>
<li class="missed" data-hits="0" data-linenumber="60">
<code class="ruby"> version = $1</code>
</li>
<li class="never" data-hits="" data-linenumber="61">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="62">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="63">
<code class="ruby"> [type, subtype, quality, version, params]</code>
</li>
<li class="never" data-hits="" data-linenumber="64">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="65">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="66">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="67">
<span class="hits">1</span>
<code class="ruby"> def accepts?(mime_type)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="68">
<code class="ruby"> accept_entries.any? { |e| e.accepts?(mime_type) }</code>
</li>
<li class="never" data-hits="" data-linenumber="69">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="70">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="71">
<span class="hits">1</span>
<code class="ruby"> def accept_entries</code>
</li>
<li class="missed" data-hits="0" data-linenumber="72">
<code class="ruby"> entries = env[&#39;HTTP_ACCEPT&#39;].to_s.delete(&#39; &#39;).to_s.split(&#39;,&#39;).map { |e| Entry.new(e) }</code>
</li>
<li class="missed" data-hits="0" data-linenumber="73">
<code class="ruby"> entries.empty? ? [Entry.new(&#39;*/*&#39;)] : entries.sort</code>
</li>
<li class="never" data-hits="" data-linenumber="74">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="75">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="76">
<span class="hits">1</span>
<code class="ruby"> def acceptable_formats</code>
</li>
<li class="missed" data-hits="0" data-linenumber="77">
<code class="ruby"> if format = env[&#39;travis.format_from_path&#39;]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="78">
<code class="ruby"> [Entry.new(Rack::Mime.mime_type(&quot;.#{format}&quot;))]</code>
</li>
<li class="never" data-hits="" data-linenumber="79">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="80">
<code class="ruby"> accept_entries</code>
</li>
<li class="never" data-hits="" data-linenumber="81">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="82">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="83">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="84">
<span class="hits">1</span>
<code class="ruby"> def accept_version</code>
</li>
<li class="covered" data-hits="43" data-linenumber="85">
<span class="hits">43</span>
<code class="ruby"> @accept_version ||= request.accept.join =~ HEADER_FORMAT &amp;&amp; &quot;v#{$1}&quot; || DEFAULT_VERSION</code>
</li>
<li class="never" data-hits="" data-linenumber="86">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="87">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="88">
<span class="hits">1</span>
<code class="ruby"> def accept_format</code>
</li>
<li class="covered" data-hits="10" data-linenumber="89">
<span class="hits">10</span>
<code class="ruby"> @accept_format ||= request.accept.join =~ HEADER_FORMAT &amp;&amp; $2 || DEFAULT_FORMAT</code>
</li>
<li class="never" data-hits="" data-linenumber="90">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="91">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="92">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="93">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="945fc5424b8698f6c9f47bf45d950c7993fe7f7d">
<div class="header">
<h3>lib/travis/api/app/helpers/current_user.rb</h3>
<h4><span class="red">70.0 %</span> covered</h4>
<div>
<b>10</b> relevant lines.
<span class="green"><b>7</b> lines covered</span> and
<span class="red"><b>3</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Helpers</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> module CurrentUser</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> def current_user</code>
</li>
<li class="missed" data-hits="0" data-linenumber="7">
<code class="ruby"> access_token.user if signed_in?</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> def access_token</code>
</li>
<li class="missed" data-hits="0" data-linenumber="11">
<code class="ruby"> env[&#39;travis.access_token&#39;]</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="14">
<span class="hits">1</span>
<code class="ruby"> def signed_in?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="15">
<code class="ruby"> !!access_token</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="d6d6177d6e0d49294315541845ceb6265759cdf1">
<div class="header">
<h3>lib/travis/api/app/helpers/db_follower.rb</h3>
<h4><span class="yellow">83.33 %</span> covered</h4>
<div>
<b>6</b> relevant lines.
<span class="green"><b>5</b> lines covered</span> and
<span class="red"><b>1</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Helpers</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> module DbFollower</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> def prefer_follower</code>
</li>
<li class="missed" data-hits="0" data-linenumber="7">
<code class="ruby"> yield</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="9b6cc591941ba41c4e94fefe940858e3353c284f">
<div class="header">
<h3>lib/travis/api/app/helpers/flash.rb</h3>
<h4><span class="green">100.0 %</span> covered</h4>
<div>
<b>6</b> relevant lines.
<span class="green"><b>6</b> lines covered</span> and
<span class="red"><b>0</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Helpers</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> module Flash</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> def flash</code>
</li>
<li class="covered" data-hits="10" data-linenumber="7">
<span class="hits">10</span>
<code class="ruby"> @flash ||= []</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="4bc54455bbe2ec43bb23f5b569a91e4d444598b6">
<div class="header">
<h3>lib/travis/api/app/helpers/mime_types.rb</h3>
<h4><span class="red">64.29 %</span> covered</h4>
<div>
<b>14</b> relevant lines.
<span class="green"><b>9</b> lines covered</span> and
<span class="red"><b>5</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Helpers</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> module MimeTypes</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> def html?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="7">
<code class="ruby"> request.accept =~ %r(text/html)</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> def json?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="11">
<code class="ruby"> request.accept =~ %r(application/json)</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="14">
<span class="hits">1</span>
<code class="ruby"> def xml?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="15">
<code class="ruby"> request.accept =~ %r(application/xml)</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="18">
<span class="hits">1</span>
<code class="ruby"> def png?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="19">
<code class="ruby"> request.accept =~ %r(image/png)</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="22">
<span class="hits">1</span>
<code class="ruby"> def atom?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="23">
<code class="ruby"> request.accept =~ %r(application/atom+xml)</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby">end</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"></code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="e5ee14c5580baf7a66bac731983db9d3bdb48996">
<div class="header">
<h3>lib/travis/api/app/helpers/respond_with.rb</h3>
<h4><span class="red">40.54 %</span> covered</h4>
<div>
<b>37</b> relevant lines.
<span class="green"><b>15</b> lines covered</span> and
<span class="red"><b>22</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Helpers</code>
</li>
<li class="never" data-hits="" data-linenumber="5">
<code class="ruby"> # Allows routes to return either hashes or anything Travis::API.data can</code>
</li>
<li class="never" data-hits="" data-linenumber="6">
<code class="ruby"> # convert (in addition to the return values supported by Sinatra, of</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"> # course). These values will be encoded in JSON.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> module RespondWith</code>
</li>
<li class="covered" data-hits="1" data-linenumber="9">
<span class="hits">1</span>
<code class="ruby"> include Accept</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="11">
<span class="hits">1</span>
<code class="ruby"> STATUS = {</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> success: 200,</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> not_found: 404</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="16">
<span class="hits">1</span>
<code class="ruby"> def respond_with(resource, options = {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="17">
<code class="ruby"> result = respond(resource, options)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="18">
<code class="ruby"> if result &amp;&amp; response.content_type =~ /application\/json/</code>
</li>
<li class="missed" data-hits="0" data-linenumber="19">
<code class="ruby"> status STATUS[result[:result]] if result.is_a?(Hash) &amp;&amp; result[:result].is_a?(Symbol)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="20">
<code class="ruby"> result = prettify_result? ? JSON.pretty_generate(result) : result.to_json</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"> end</code>
</li>
<li class="missed" data-hits="0" data-linenumber="22">
<code class="ruby"> halt result || 404</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="25">
<span class="hits">1</span>
<code class="ruby"> def body(value = nil, options = {}, &amp;block)</code>
</li>
<li class="covered" data-hits="40" data-linenumber="26">
<span class="hits">40</span>
<code class="ruby"> value = value.to_json if value.is_a?(Hash)</code>
</li>
<li class="covered" data-hits="40" data-linenumber="27">
<span class="hits">40</span>
<code class="ruby"> super(value, &amp;block)</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="30">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="32">
<span class="hits">1</span>
<code class="ruby"> def respond(resource, options)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="33">
<code class="ruby"> resource = apply_service_responder(resource, options)</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="35">
<code class="ruby"> response = nil</code>
</li>
<li class="missed" data-hits="0" data-linenumber="36">
<code class="ruby"> acceptable_formats.find do |accept|</code>
</li>
<li class="missed" data-hits="0" data-linenumber="37">
<code class="ruby"> responders(resource, options).find do |const|</code>
</li>
<li class="missed" data-hits="0" data-linenumber="38">
<code class="ruby"> responder = const.new(self, resource, options.dup.merge(accept: accept))</code>
</li>
<li class="missed" data-hits="0" data-linenumber="39">
<code class="ruby"> response = responder.apply if responder.apply?</code>
</li>
<li class="never" data-hits="" data-linenumber="40">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="41">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="42">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="43">
<code class="ruby"> if responders = options[:responders]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="44">
<code class="ruby"> responders.each do |klass|</code>
</li>
<li class="missed" data-hits="0" data-linenumber="45">
<code class="ruby"> responder = klass.new(self, response, options)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="46">
<code class="ruby"> response = responder.apply if responder.apply?</code>
</li>
<li class="never" data-hits="" data-linenumber="47">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="48">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="49">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="50">
<code class="ruby"> response || (resource ? error(406) : error(404))</code>
</li>
<li class="never" data-hits="" data-linenumber="51">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="52">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="53">
<span class="hits">1</span>
<code class="ruby"> def prettify_result?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="54">
<code class="ruby"> !params[:pretty].nil? &amp;&amp; (params[:pretty].downcase == &#39;true&#39; || params[:pretty].to_i &gt; 0)</code>
</li>
<li class="never" data-hits="" data-linenumber="55">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="56">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="57">
<span class="hits">1</span>
<code class="ruby"> def apply_service_responder(resource, options)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="58">
<code class="ruby"> responder = Responders::Service.new(self, resource, options)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="59">
<code class="ruby"> resource = responder.apply if responder.apply?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="60">
<code class="ruby"> resource</code>
</li>
<li class="never" data-hits="" data-linenumber="61">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="62">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="63">
<span class="hits">1</span>
<code class="ruby"> def responders(resource, options)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="64">
<code class="ruby"> [:Json, :Atom, :Image, :Xml, :Plain, :Badge].map do |name|</code>
</li>
<li class="missed" data-hits="0" data-linenumber="65">
<code class="ruby"> Responders.const_get(name)</code>
</li>
<li class="never" data-hits="" data-linenumber="66">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="67">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="68">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="69">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="70">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="abcb6fbe07ff5db52c5716e39eb648ef96550296">
<div class="header">
<h3>lib/travis/api/app/middleware.rb</h3>
<h4><span class="green">100.0 %</span> covered</h4>
<div>
<b>3</b> relevant lines.
<span class="green"><b>3</b> lines covered</span> and
<span class="red"><b>0</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="never" data-hits="" data-linenumber="4">
<code class="ruby"> # Superclass for all middleware.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Middleware &lt; Base</code>
</li>
<li class="never" data-hits="" data-linenumber="6">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="fafd069a2bcef83fff5f536d88402c883f3cdc31">
<div class="header">
<h3>lib/travis/api/app/middleware/logging.rb</h3>
<h4><span class="green">100.0 %</span> covered</h4>
<div>
<b>8</b> relevant lines.
<span class="green"><b>8</b> lines covered</span> and
<span class="red"><b>0</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> class Middleware</code>
</li>
<li class="never" data-hits="" data-linenumber="5">
<code class="ruby"> # Makes sure we use Travis.logger everywhere.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> class Logging &lt; Middleware</code>
</li>
<li class="covered" data-hits="2" data-linenumber="7">
<span class="hits">2</span>
<code class="ruby"> set(:setup) { ActiveRecord::Base.logger = Travis.logger }</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="9">
<span class="hits">1</span>
<code class="ruby"> before do</code>
</li>
<li class="covered" data-hits="23" data-linenumber="10">
<span class="hits">23</span>
<code class="ruby"> env[&#39;rack.logger&#39;] = Travis.logger</code>
</li>
<li class="covered" data-hits="23" data-linenumber="11">
<span class="hits">23</span>
<code class="ruby"> env[&#39;rack.errors&#39;] = Travis.logger.instance_variable_get(:@logdev).dev rescue nil</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="7670839fd3d16bec4a807509898851298c771968">
<div class="header">
<h3>lib/travis/api/app/middleware/metriks.rb</h3>
<h4><span class="red">77.42 %</span> covered</h4>
<div>
<b>31</b> relevant lines.
<span class="green"><b>24</b> lines covered</span> and
<span class="red"><b>7</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby">require &#39;metriks&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="3">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Middleware</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> class Metriks &lt; Middleware</code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> include Helpers::Accept</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="9">
<span class="hits">1</span>
<code class="ruby"> before do</code>
</li>
<li class="covered" data-hits="23" data-linenumber="10">
<span class="hits">23</span>
<code class="ruby"> env[&#39;metriks.request.start&#39;] ||= Time.now.utc</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="13">
<span class="hits">1</span>
<code class="ruby"> after do</code>
</li>
<li class="covered" data-hits="23" data-linenumber="14">
<span class="hits">23</span>
<code class="ruby"> if queue_start = time(env[&#39;HTTP_X_QUEUE_START&#39;]) || time(env[&#39;HTTP_X_REQUEST_START&#39;])</code>
</li>
<li class="missed" data-hits="0" data-linenumber="15">
<code class="ruby"> time = env[&#39;metriks.request.start&#39;] - queue_start</code>
</li>
<li class="missed" data-hits="0" data-linenumber="16">
<code class="ruby"> ::Metriks.timer(&#39;api.request_queue&#39;).update(time)</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="23" data-linenumber="19">
<span class="hits">23</span>
<code class="ruby"> if response.status &lt; 400</code>
</li>
<li class="covered" data-hits="13" data-linenumber="20">
<span class="hits">13</span>
<code class="ruby"> time = Time.now.utc - env[&#39;metriks.request.start&#39;]</code>
</li>
<li class="covered" data-hits="13" data-linenumber="21">
<span class="hits">13</span>
<code class="ruby"> if headers[&#39;X-Pattern&#39;].present? and headers[&#39;X-Endpoint&#39;].present?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="22">
<code class="ruby"> name = &quot;#{(headers[&#39;X-Endpoint&#39;].split(&quot;::&quot;, 5).last.gsub(/::/, &quot;.&quot;)).downcase}#{headers[&#39;X-Pattern&#39;].gsub(/[\/]/, &#39;.&#39;).gsub(/[:\?\*]/, &quot;_&quot;)}&quot;</code>
</li>
<li class="missed" data-hits="0" data-linenumber="23">
<code class="ruby"> metric = &quot;api.request.endpoint.#{name}&quot;</code>
</li>
<li class="missed" data-hits="0" data-linenumber="24">
<code class="ruby"> ::Metriks.timer(metric).update(time)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="25">
<code class="ruby"> ::Metriks.timer(&#39;api.requests&#39;).update(time)</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> end</code>
</li>
<li class="covered" data-hits="13" data-linenumber="27">
<span class="hits">13</span>
<code class="ruby"> if content_type.present?</code>
</li>
<li class="covered" data-hits="13" data-linenumber="28">
<span class="hits">13</span>
<code class="ruby"> type = content_type.split(&#39;;&#39;, 2).first.to_s.gsub(/\s/,&#39;&#39;).gsub(/[^A-z\/]+/, &#39;_&#39;).gsub(&#39;/&#39;, &#39;.&#39;)</code>
</li>
<li class="covered" data-hits="13" data-linenumber="29">
<span class="hits">13</span>
<code class="ruby"> ::Metriks.timer(&quot;api.request.content_type.#{type}&quot;).update(time)</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="31">
<code class="ruby"> ::Metriks.timer(&quot;api.request.content_type.none&quot;).update(time)</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> end</code>
</li>
<li class="covered" data-hits="13" data-linenumber="33">
<span class="hits">13</span>
<code class="ruby"> ::Metriks.meter(&quot;api.request.#{request.request_method.downcase}&quot;).mark</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="23" data-linenumber="36">
<span class="hits">23</span>
<code class="ruby"> ::Metriks.meter(&quot;api.request.status.#{response.status.to_s[0]}&quot;).mark</code>
</li>
<li class="covered" data-hits="23" data-linenumber="37">
<span class="hits">23</span>
<code class="ruby"> ::Metriks.meter(&quot;api.request.version.#{accept_version}&quot;).mark</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="39">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="40">
<span class="hits">1</span>
<code class="ruby"> def time(value)</code>
</li>
<li class="covered" data-hits="46" data-linenumber="41">
<span class="hits">46</span>
<code class="ruby"> value = value.to_f</code>
</li>
<li class="covered" data-hits="46" data-linenumber="42">
<span class="hits">46</span>
<code class="ruby"> start = env[&#39;metriks.request.start&#39;].to_f</code>
</li>
<li class="covered" data-hits="46" data-linenumber="43">
<span class="hits">46</span>
<code class="ruby"> value /= 1000 while value &gt; start</code>
</li>
<li class="covered" data-hits="46" data-linenumber="44">
<span class="hits">46</span>
<code class="ruby"> Time.at(value) if value &gt; 946684800</code>
</li>
<li class="never" data-hits="" data-linenumber="45">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="46">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="47">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="48">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="fe2923d329420298ae0fb9e1101c22a8b601d151">
<div class="header">
<h3>lib/travis/api/app/middleware/rewrite.rb</h3>
<h4><span class="red">78.57 %</span> covered</h4>
<div>
<b>42</b> relevant lines.
<span class="green"><b>33</b> lines covered</span> and
<span class="red"><b>9</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> class Middleware</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Rewrite &lt; Middleware</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> FORMAT = %r(\.(json|xml|png|txt|atom|svg)$)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> V1_REPO_URL = %r(^(/[^/]+/[^/]+(?:/builds(?:/[\d]+)?|/cc)?)$)</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="9">
<span class="hits">1</span>
<code class="ruby"> helpers :accept</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="2" data-linenumber="11">
<span class="hits">2</span>
<code class="ruby"> set(:setup) { ActiveRecord::Base.logger = Travis.logger }</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="13">
<span class="hits">1</span>
<code class="ruby"> before do</code>
</li>
<li class="covered" data-hits="10" data-linenumber="14">
<span class="hits">10</span>
<code class="ruby"> extract_format</code>
</li>
<li class="covered" data-hits="10" data-linenumber="15">
<span class="hits">10</span>
<code class="ruby"> rewrite_v1_repo_segment if v1? || xml?</code>
</li>
<li class="covered" data-hits="10" data-linenumber="16">
<span class="hits">10</span>
<code class="ruby"> rewrite_v1_named_repo_image_path if png? || svg?</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="19">
<span class="hits">1</span>
<code class="ruby"> after do</code>
</li>
<li class="covered" data-hits="10" data-linenumber="20">
<span class="hits">10</span>
<code class="ruby"> redirect_v1_named_repo_path if (v1? || xml?) &amp;&amp; not_found?</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="23">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="25">
<span class="hits">1</span>
<code class="ruby"> def extract_format</code>
</li>
<li class="covered" data-hits="10" data-linenumber="26">
<span class="hits">10</span>
<code class="ruby"> env[&#39;PATH_INFO&#39;].sub!(FORMAT, &#39;&#39;)</code>
</li>
<li class="covered" data-hits="10" data-linenumber="27">
<span class="hits">10</span>
<code class="ruby"> env[&#39;travis.format_from_path&#39;] = $1</code>
</li>
<li class="covered" data-hits="10" data-linenumber="28">
<span class="hits">10</span>
<code class="ruby"> env[&#39;travis.format&#39;] = $1 || accept_format</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="31">
<span class="hits">1</span>
<code class="ruby"> def rewrite_v1_repo_segment</code>
</li>
<li class="covered" data-hits="10" data-linenumber="32">
<span class="hits">10</span>
<code class="ruby"> env[&#39;PATH_INFO&#39;].sub!(%r(^/repositories), &#39;/repos&#39;)</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="35">
<span class="hits">1</span>
<code class="ruby"> def rewrite_v1_named_repo_image_path</code>
</li>
<li class="missed" data-hits="0" data-linenumber="36">
<code class="ruby"> env[&#39;PATH_INFO&#39;].sub!(V1_REPO_URL) { &quot;/repos#{$1}&quot; }</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="39">
<span class="hits">1</span>
<code class="ruby"> def redirect_v1_named_repo_path</code>
</li>
<li class="covered" data-hits="10" data-linenumber="40">
<span class="hits">10</span>
<code class="ruby"> if request.path =~ V1_REPO_URL</code>
</li>
<li class="missed" data-hits="0" data-linenumber="41">
<code class="ruby"> force_redirect(&quot;/repositories#{$1}.#{env[&#39;travis.format&#39;]}&quot;)</code>
</li>
<li class="never" data-hits="" data-linenumber="42">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="43">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="44">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="45">
<span class="hits">1</span>
<code class="ruby"> def force_redirect(path)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="46">
<code class="ruby"> path += &quot;?#{request.query_string}&quot; unless request.query_string.empty?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="47">
<code class="ruby"> response.body = &#39;&#39;</code>
</li>
<li class="missed" data-hits="0" data-linenumber="48">
<code class="ruby"> response[&#39;Content-Length&#39;] = &#39;0&#39;</code>
</li>
<li class="missed" data-hits="0" data-linenumber="49">
<code class="ruby"> response[&#39;Content-Type&#39;] = &#39;&#39;</code>
</li>
<li class="missed" data-hits="0" data-linenumber="50">
<code class="ruby"> redirect(path)</code>
</li>
<li class="never" data-hits="" data-linenumber="51">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="52">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="53">
<span class="hits">1</span>
<code class="ruby"> def png?</code>
</li>
<li class="covered" data-hits="10" data-linenumber="54">
<span class="hits">10</span>
<code class="ruby"> env[&#39;travis.format&#39;] == &#39;png&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="55">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="56">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="57">
<span class="hits">1</span>
<code class="ruby"> def svg?</code>
</li>
<li class="covered" data-hits="10" data-linenumber="58">
<span class="hits">10</span>
<code class="ruby"> env[&#39;travis.format&#39;] == &#39;svg&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="59">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="60">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="61">
<span class="hits">1</span>
<code class="ruby"> def xml?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="62">
<code class="ruby"> env[&#39;travis.format&#39;] == &#39;xml&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="63">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="64">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="65">
<span class="hits">1</span>
<code class="ruby"> def atom?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="66">
<code class="ruby"> env[&#39;travis.format&#39;] == &#39;atom&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="67">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="68">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="69">
<span class="hits">1</span>
<code class="ruby"> def v1?</code>
</li>
<li class="covered" data-hits="20" data-linenumber="70">
<span class="hits">20</span>
<code class="ruby"> accept_version == &#39;v1&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="71">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="72">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="73">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="74">
<code class="ruby">end</code>
</li>
<li class="never" data-hits="" data-linenumber="75">
<code class="ruby"></code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="26dd70a212f3b2cbf26d11a0b7f29ee3dec679c3">
<div class="header">
<h3>lib/travis/api/app/middleware/scope_check.rb</h3>
<h4><span class="green">92.59 %</span> covered</h4>
<div>
<b>27</b> relevant lines.
<span class="green"><b>25</b> lines covered</span> and
<span class="red"><b>2</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> class Middleware</code>
</li>
<li class="never" data-hits="" data-linenumber="5">
<code class="ruby"> # Checks access tokens and sets appropriate scopes.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> class ScopeCheck &lt; Middleware</code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> before do</code>
</li>
<li class="covered" data-hits="23" data-linenumber="8">
<span class="hits">23</span>
<code class="ruby"> next unless token</code>
</li>
<li class="covered" data-hits="4" data-linenumber="9">
<span class="hits">4</span>
<code class="ruby"> access_token = AccessToken.find_by_token(token)</code>
</li>
<li class="covered" data-hits="4" data-linenumber="10">
<span class="hits">4</span>
<code class="ruby"> halt 403, &#39;access denied&#39; unless access_token</code>
</li>
<li class="covered" data-hits="4" data-linenumber="11">
<span class="hits">4</span>
<code class="ruby"> env[&#39;travis.access_token&#39;] = access_token</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="14">
<span class="hits">1</span>
<code class="ruby"> after do</code>
</li>
<li class="covered" data-hits="23" data-linenumber="15">
<span class="hits">23</span>
<code class="ruby"> headers[&#39;X-OAuth-Scopes&#39;] ||= begin</code>
</li>
<li class="covered" data-hits="23" data-linenumber="16">
<span class="hits">23</span>
<code class="ruby"> scopes = Array(env[&#39;travis.access_token&#39;].try(:scopes))</code>
</li>
<li class="covered" data-hits="23" data-linenumber="17">
<span class="hits">23</span>
<code class="ruby"> scopes.map(&amp;:to_s).join(&#39;,&#39;)</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="21">
<span class="hits">1</span>
<code class="ruby"> def token</code>
</li>
<li class="covered" data-hits="27" data-linenumber="22">
<span class="hits">27</span>
<code class="ruby"> @token ||= header_token || query_token || travis_token</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="25">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="27">
<span class="hits">1</span>
<code class="ruby"> def travis_token</code>
</li>
<li class="covered" data-hits="19" data-linenumber="28">
<span class="hits">19</span>
<code class="ruby"> return unless token = params[:token]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="29">
<code class="ruby"> AccessToken.for_travis_token(token) || &quot;&quot;</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="32">
<span class="hits">1</span>
<code class="ruby"> def query_token</code>
</li>
<li class="covered" data-hits="19" data-linenumber="33">
<span class="hits">19</span>
<code class="ruby"> params[:access_token] if params[:access_token] and not params[:access_token].empty?</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="36">
<span class="hits">1</span>
<code class="ruby"> def header_token</code>
</li>
<li class="covered" data-hits="23" data-linenumber="37">
<span class="hits">23</span>
<code class="ruby"> type, payload = env[&#39;HTTP_AUTHORIZATION&#39;].to_s.split(&quot; &quot;, 2)</code>
</li>
<li class="covered" data-hits="23" data-linenumber="38">
<span class="hits">23</span>
<code class="ruby"> return if payload.nil? or payload.empty?</code>
</li>
<li class="never" data-hits="" data-linenumber="39">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="10" data-linenumber="40">
<span class="hits">10</span>
<code class="ruby"> case type.downcase</code>
</li>
<li class="missed" data-hits="0" data-linenumber="41">
<code class="ruby"> when &#39;basic&#39; then payload.unpack(&quot;m&quot;).first.split(&#39;:&#39;, 2).first</code>
</li>
<li class="covered" data-hits="4" data-linenumber="42">
<span class="hits">4</span>
<code class="ruby"> when &#39;token&#39; then payload.gsub(/^&quot;(.+)&quot;$/, &#39;\1&#39;)</code>
</li>
<li class="never" data-hits="" data-linenumber="43">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="44">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="45">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="46">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="47">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="57848e06570d6ebc2e75aad01bea70082a1c55f4">
<div class="header">
<h3>lib/travis/api/app/middleware/user_agent_tracker.rb</h3>
<h4><span class="red">40.0 %</span> covered</h4>
<div>
<b>35</b> relevant lines.
<span class="green"><b>14</b> lines covered</span> and
<span class="red"><b>21</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby">require &#39;useragent&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="3">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Middleware</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> class UserAgentTracker &lt; Middleware</code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> WEB_BROWSERS = [</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"> &quot;Internet Explorer&quot;,</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"> &quot;Webkit&quot;, &quot;Chrome&quot;, &quot;Safari&quot;, &quot;Android&quot;,</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"> &quot;Firefox&quot;, &quot;Camino&quot;, &quot;Iceweasel&quot;, &quot;Seamonkey&quot;, &quot;Android&quot;,</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> &quot;Opera&quot;, &quot;Mozilla&quot;</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> ]</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="14">
<span class="hits">1</span>
<code class="ruby"> before(agent: /^$/) do</code>
</li>
<li class="covered" data-hits="23" data-linenumber="15">
<span class="hits">23</span>
<code class="ruby"> ::Metriks.meter(&quot;api.user_agent.missing&quot;).mark</code>
</li>
<li class="covered" data-hits="23" data-linenumber="16">
<span class="hits">23</span>
<code class="ruby"> halt(400, &quot;error&quot; =&gt; &quot;missing User-Agent header&quot;) if Travis::Features.feature_active?(:require_user_agent)</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="19">
<span class="hits">1</span>
<code class="ruby"> before(agent: /^.+$/) do</code>
</li>
<li class="missed" data-hits="0" data-linenumber="20">
<code class="ruby"> agent = UserAgent.parse(request.user_agent)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="21">
<code class="ruby"> case agent.browser</code>
</li>
<li class="missed" data-hits="0" data-linenumber="22">
<code class="ruby"> when *WEB_BROWSERS then mark_browser</code>
</li>
<li class="missed" data-hits="0" data-linenumber="23">
<code class="ruby"> when &quot;curl&quot;, &quot;Wget&quot; then mark(:console, agent.browser)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="24">
<code class="ruby"> when &quot;travis-api-wrapper&quot; then mark(:script, :node_js, agent.browser)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="25">
<code class="ruby"> when &quot;TravisPy&quot; then mark(:script, :python, agent.browser)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="26">
<code class="ruby"> when &quot;Ruby&quot;, &quot;PHP&quot;, &quot;Perl&quot;, &quot;Python&quot; then mark(:script, agent.browser, :vanilla)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="27">
<code class="ruby"> when &quot;Faraday&quot; then mark(:script, :ruby, :vanilla)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="28">
<code class="ruby"> when &quot;Travis&quot; then mark_travis(agent)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="29">
<code class="ruby"> else mark_unknown</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="33">
<span class="hits">1</span>
<code class="ruby"> def mark_browser</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"> # allows a JavaScript Client to set X-User-Agent, for instance to &quot;travis-web&quot; in travis-web</code>
</li>
<li class="missed" data-hits="0" data-linenumber="35">
<code class="ruby"> x_agent = UserAgent.parse(env[&#39;HTTP_X_USER_AGENT&#39;] || &#39;unknown&#39;).browser</code>
</li>
<li class="missed" data-hits="0" data-linenumber="36">
<code class="ruby"> mark(:browser, x_agent)</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="39">
<span class="hits">1</span>
<code class="ruby"> def mark_travis(agent)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="40">
<code class="ruby"> command = agent.application.comment.detect { |c| c.start_with? &quot;command &quot; }</code>
</li>
<li class="never" data-hits="" data-linenumber="41">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="42">
<code class="ruby"> if command</code>
</li>
<li class="missed" data-hits="0" data-linenumber="43">
<code class="ruby"> mark(:cli, :version, agent.version)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="44">
<code class="ruby"> mark(:cli, command.sub(&#39; &#39;, &#39;.&#39;))</code>
</li>
<li class="never" data-hits="" data-linenumber="45">
<code class="ruby"> else</code>
</li>
<li class="never" data-hits="" data-linenumber="46">
<code class="ruby"> # only track ruby version and library version for non-cli usage</code>
</li>
<li class="missed" data-hits="0" data-linenumber="47">
<code class="ruby"> mark(:script, :ruby, :travis, :version, agent.version)</code>
</li>
<li class="never" data-hits="" data-linenumber="48">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="49">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="50">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="51">
<span class="hits">1</span>
<code class="ruby"> def mark_unknown</code>
</li>
<li class="missed" data-hits="0" data-linenumber="52">
<code class="ruby"> logger.warn &quot;[user-agent-tracker] Unknown User-Agent: %p&quot; % request.user_agent</code>
</li>
<li class="missed" data-hits="0" data-linenumber="53">
<code class="ruby"> mark(:unknown)</code>
</li>
<li class="never" data-hits="" data-linenumber="54">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="55">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="56">
<span class="hits">1</span>
<code class="ruby"> def mark(*keys)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="57">
<code class="ruby"> key = &quot;api.user_agent.&quot; &lt;&lt; keys.map { |k| k.to_s.downcase.gsub(/[^a-z0-9\-\.]+/, &#39;_&#39;) }.join(&#39;.&#39;)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="58">
<code class="ruby"> ::Metriks.meter(key).mark</code>
</li>
<li class="never" data-hits="" data-linenumber="59">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="60">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="61">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="62">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="866d316bcfc64963406986d03c50d1280b8fe34d">
<div class="header">
<h3>lib/travis/api/app/services/schedule_request.rb</h3>
<h4><span class="red">51.61 %</span> covered</h4>
<div>
<b>31</b> relevant lines.
<span class="green"><b>16</b> lines covered</span> and
<span class="red"><b>15</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;multi_json&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/sidekiq/build_request&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/services/base&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="4">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::App</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> module Services</code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> class ScheduleRequest &lt; Travis::Services::Base</code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> register :schedule_request</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> def run</code>
</li>
<li class="missed" data-hits="0" data-linenumber="11">
<code class="ruby"> repo &amp;&amp; active? ? schedule_request : not_found</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="14">
<span class="hits">1</span>
<code class="ruby"> def messages</code>
</li>
<li class="missed" data-hits="0" data-linenumber="15">
<code class="ruby"> @messages ||= []</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="18">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="20">
<span class="hits">1</span>
<code class="ruby"> def schedule_request</code>
</li>
<li class="missed" data-hits="0" data-linenumber="21">
<code class="ruby"> Metriks.meter(&#39;api.request.create&#39;).mark</code>
</li>
<li class="missed" data-hits="0" data-linenumber="22">
<code class="ruby"> Travis::Sidekiq::BuildRequest.perform_async(type: &#39;api&#39;, payload: payload, credentials: {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="23">
<code class="ruby"> messages &lt;&lt; { notice: &#39;Build request scheduled.&#39; }</code>
</li>
<li class="missed" data-hits="0" data-linenumber="24">
<code class="ruby"> :success</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="27">
<span class="hits">1</span>
<code class="ruby"> def not_found</code>
</li>
<li class="missed" data-hits="0" data-linenumber="28">
<code class="ruby"> messages &lt;&lt; { error: &quot;Repository #{slug} not found.&quot; }</code>
</li>
<li class="missed" data-hits="0" data-linenumber="29">
<code class="ruby"> :not_found</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="32">
<span class="hits">1</span>
<code class="ruby"> def active?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="33">
<code class="ruby"> Travis::Features.owner_active?(:request_create, repo.owner)</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="36">
<span class="hits">1</span>
<code class="ruby"> def payload</code>
</li>
<li class="missed" data-hits="0" data-linenumber="37">
<code class="ruby"> data = params.merge(user: { id: current_user.id })</code>
</li>
<li class="missed" data-hits="0" data-linenumber="38">
<code class="ruby"> data[:repository][:id] = repo.github_id</code>
</li>
<li class="missed" data-hits="0" data-linenumber="39">
<code class="ruby"> MultiJson.encode(data)</code>
</li>
<li class="never" data-hits="" data-linenumber="40">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="41">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="42">
<span class="hits">1</span>
<code class="ruby"> def repo</code>
</li>
<li class="missed" data-hits="0" data-linenumber="43">
<code class="ruby"> @repo ||= Repository.by_slug(slug).first</code>
</li>
<li class="never" data-hits="" data-linenumber="44">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="45">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="46">
<span class="hits">1</span>
<code class="ruby"> def slug</code>
</li>
<li class="missed" data-hits="0" data-linenumber="47">
<code class="ruby"> repo = params[:repository] || {}</code>
</li>
<li class="missed" data-hits="0" data-linenumber="48">
<code class="ruby"> repo.values_at(:owner_name, :name).join(&#39;/&#39;)</code>
</li>
<li class="never" data-hits="" data-linenumber="49">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="50">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="51">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="52">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="d04c5eced516ab14b9065b4d34d0af855835a730">
<div class="header">
<h3>lib/travis/api/serializer.rb</h3>
<h4><span class="red">66.67 %</span> covered</h4>
<div>
<b>12</b> relevant lines.
<span class="green"><b>8</b> lines covered</span> and
<span class="red"><b>4</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;active_model_serializers&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Serializer &lt; ActiveModel::Serializer</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> def data</code>
</li>
<li class="missed" data-hits="0" data-linenumber="7">
<code class="ruby"> as_json</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="11">
<span class="hits">1</span>
<code class="ruby"> class ArraySerializer &lt; ActiveModel::ArraySerializer</code>
</li>
<li class="covered" data-hits="1" data-linenumber="12">
<span class="hits">1</span>
<code class="ruby"> def data</code>
</li>
<li class="missed" data-hits="0" data-linenumber="13">
<code class="ruby"> as_json</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="16">
<span class="hits">1</span>
<code class="ruby"> def initialize(resource, options)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="17">
<code class="ruby"> options[:each_serializer] ||= Travis::Api::V2::Http.const_get(options[:root].to_s.singularize.camelize)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="18">
<code class="ruby"> super(resource, options)</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby">end</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"></code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="babe3ce05ce1d657f847b2e01c64437b8e58b014">
<div class="header">
<h3>lib/travis/api/v2.rb</h3>
<h4><span class="green">100.0 %</span> covered</h4>
<div>
<b>4</b> relevant lines.
<span class="green"><b>4</b> lines covered</span> and
<span class="red"><b>0</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> module V2</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> require &#39;travis/api/v2/http&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="5">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="6">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby">end</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"></code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="1c817b9839dda1170aec2560bad5a09065552de6">
<div class="header">
<h3>lib/travis/api/v2/http.rb</h3>
<h4><span class="green">100.0 %</span> covered</h4>
<div>
<b>28</b> relevant lines.
<span class="green"><b>28</b> lines covered</span> and
<span class="red"><b>0</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/serializer&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> module V2</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> module Http</code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> require &#39;travis/api/v2/http/accounts&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> require &#39;travis/api/v2/http/annotations&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="9">
<span class="hits">1</span>
<code class="ruby"> require &#39;travis/api/v2/http/broadcasts&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> require &#39;travis/api/v2/http/branch&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="11">
<span class="hits">1</span>
<code class="ruby"> require &#39;travis/api/v2/http/branches&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="12">
<span class="hits">1</span>
<code class="ruby"> require &#39;travis/api/v2/http/build&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="13">
<span class="hits">1</span>
<code class="ruby"> require &#39;travis/api/v2/http/builds&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="14">
<span class="hits">1</span>
<code class="ruby"> require &#39;travis/api/v2/http/caches&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="15">
<span class="hits">1</span>
<code class="ruby"> require &#39;travis/api/v2/http/hooks&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="16">
<span class="hits">1</span>
<code class="ruby"> require &#39;travis/api/v2/http/job&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="17">
<span class="hits">1</span>
<code class="ruby"> require &#39;travis/api/v2/http/jobs&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="18">
<span class="hits">1</span>
<code class="ruby"> require &#39;travis/api/v2/http/log&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="19">
<span class="hits">1</span>
<code class="ruby"> require &#39;travis/api/v2/http/permissions&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="20">
<span class="hits">1</span>
<code class="ruby"> require &#39;travis/api/v2/http/repositories&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="21">
<span class="hits">1</span>
<code class="ruby"> require &#39;travis/api/v2/http/repository&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="22">
<span class="hits">1</span>
<code class="ruby"> require &#39;travis/api/v2/http/requests&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="23">
<span class="hits">1</span>
<code class="ruby"> require &#39;travis/api/v2/http/request&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="24">
<span class="hits">1</span>
<code class="ruby"> require &#39;travis/api/v2/http/ssl_key&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="25">
<span class="hits">1</span>
<code class="ruby"> require &#39;travis/api/v2/http/env_var&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="26">
<span class="hits">1</span>
<code class="ruby"> require &#39;travis/api/v2/http/env_vars&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="27">
<span class="hits">1</span>
<code class="ruby"> require &#39;travis/api/v2/http/user&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="28">
<span class="hits">1</span>
<code class="ruby"> require &#39;travis/api/v2/http/validation_error&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="29">
<span class="hits">1</span>
<code class="ruby"> require &#39;travis/api/v2/http/ssh_key&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="c48990e0accf6ba7189617a1b67f9c86eecfc562">
<div class="header">
<h3>lib/travis/api/v2/http/accounts.rb</h3>
<h4><span class="red">68.75 %</span> covered</h4>
<div>
<b>16</b> relevant lines.
<span class="green"><b>11</b> lines covered</span> and
<span class="red"><b>5</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> module V2</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Http</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Accounts</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> include Formats</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> attr_reader :accounts, :options</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> def initialize(accounts, options = {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="11">
<code class="ruby"> @accounts = accounts</code>
</li>
<li class="missed" data-hits="0" data-linenumber="12">
<code class="ruby"> @options = options</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="15">
<span class="hits">1</span>
<code class="ruby"> def data</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> {</code>
</li>
<li class="missed" data-hits="0" data-linenumber="17">
<code class="ruby"> :accounts =&gt; accounts.map { |account| account_data(account) }</code>
</li>
<li class="missed" data-hits="0" data-linenumber="18">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="21">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="23">
<span class="hits">1</span>
<code class="ruby"> def account_data(account)</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> &#39;id&#39; =&gt; account.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> &#39;name&#39; =&gt; account.name,</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"> &#39;login&#39; =&gt; account.login,</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"> &#39;type&#39; =&gt; account.type.underscore,</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> &#39;repos_count&#39; =&gt; account.repos_count</code>
</li>
<li class="missed" data-hits="0" data-linenumber="30">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="36">
<code class="ruby">end</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby"></code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="65342af497e7edc515415235ed81e3bbaccc6979">
<div class="header">
<h3>lib/travis/api/v2/http/annotations.rb</h3>
<h4><span class="red">71.43 %</span> covered</h4>
<div>
<b>14</b> relevant lines.
<span class="green"><b>10</b> lines covered</span> and
<span class="red"><b>4</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> module V2</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Http</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Annotations</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> include Formats</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> def initialize(annotations, options = {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="9">
<code class="ruby"> @annotations = annotations</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="12">
<span class="hits">1</span>
<code class="ruby"> def data</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> {</code>
</li>
<li class="missed" data-hits="0" data-linenumber="14">
<code class="ruby"> &quot;annotations&quot; =&gt; @annotations.map { |annotation| build_annotation(annotation) },</code>
</li>
<li class="missed" data-hits="0" data-linenumber="15">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="18">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="20">
<span class="hits">1</span>
<code class="ruby"> def build_annotation(annotation)</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"> &quot;id&quot; =&gt; annotation.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> &quot;job_id&quot; =&gt; annotation.job_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> &quot;description&quot; =&gt; annotation.description,</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> &quot;url&quot; =&gt; annotation.url,</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> &quot;status&quot; =&gt; annotation.status,</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"> &quot;provider_name&quot; =&gt; annotation.annotation_provider.name,</code>
</li>
<li class="missed" data-hits="0" data-linenumber="28">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="e48076813d88d2c6e10c03686156a6f19429e60e">
<div class="header">
<h3>lib/travis/api/v2/http/branch.rb</h3>
<h4><span class="red">71.43 %</span> covered</h4>
<div>
<b>14</b> relevant lines.
<span class="green"><b>10</b> lines covered</span> and
<span class="red"><b>4</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/v2/http/branches&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> module V2</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> module Http</code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> class Branch &lt; Branches</code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> include Formats</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> attr_reader :build, :commit, :options</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="12">
<span class="hits">1</span>
<code class="ruby"> def initialize(build, options = {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="13">
<code class="ruby"> @build = build</code>
</li>
<li class="missed" data-hits="0" data-linenumber="14">
<code class="ruby"> @commit = build.commit</code>
</li>
<li class="missed" data-hits="0" data-linenumber="15">
<code class="ruby"> @options = options</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="18">
<span class="hits">1</span>
<code class="ruby"> def data</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"> &#39;branch&#39; =&gt; build_data(build),</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"> &#39;commit&#39; =&gt; commit_data(commit)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="22">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="58933f40c3a13ad2f3470bedf8880494dabc2b2d">
<div class="header">
<h3>lib/travis/api/v2/http/branches.rb</h3>
<h4><span class="red">54.55 %</span> covered</h4>
<div>
<b>22</b> relevant lines.
<span class="green"><b>12</b> lines covered</span> and
<span class="red"><b>10</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> module V2</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Http</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Branches</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> include Formats</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> attr_reader :builds, :commits, :options</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> def initialize(builds, options = {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="11">
<code class="ruby"> builds = builds.last_finished_builds_by_branches if builds.is_a?(Repository) # TODO remove, bc</code>
</li>
<li class="missed" data-hits="0" data-linenumber="12">
<code class="ruby"> @builds = builds</code>
</li>
<li class="missed" data-hits="0" data-linenumber="13">
<code class="ruby"> @commits = builds.map(&amp;:commit)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="14">
<code class="ruby"> @options = options</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="17">
<span class="hits">1</span>
<code class="ruby"> def data</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"> {</code>
</li>
<li class="missed" data-hits="0" data-linenumber="19">
<code class="ruby"> &#39;branches&#39; =&gt; builds.map { |build| build_data(build) },</code>
</li>
<li class="missed" data-hits="0" data-linenumber="20">
<code class="ruby"> &#39;commits&#39; =&gt; commits.map { |commit| commit_data(commit) }</code>
</li>
<li class="missed" data-hits="0" data-linenumber="21">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="24">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="26">
<span class="hits">1</span>
<code class="ruby"> def build_data(build)</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"> &#39;id&#39; =&gt; build.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> &#39;repository_id&#39; =&gt; build.repository_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> &#39;commit_id&#39; =&gt; build.commit_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> &#39;number&#39; =&gt; build.number,</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> &#39;config&#39; =&gt; build.obfuscated_config.stringify_keys,</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"> &#39;state&#39; =&gt; build.state.to_s,</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"> &#39;started_at&#39; =&gt; format_date(build.started_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"> &#39;finished_at&#39; =&gt; format_date(build.finished_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="36">
<code class="ruby"> &#39;duration&#39; =&gt; build.duration,</code>
</li>
<li class="missed" data-hits="0" data-linenumber="37">
<code class="ruby"> &#39;job_ids&#39; =&gt; build.matrix.map { |job| job.id },</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby"> &#39;pull_request&#39; =&gt; build.pull_request?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="39">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="40">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="41">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="42">
<span class="hits">1</span>
<code class="ruby"> def commit_data(commit)</code>
</li>
<li class="never" data-hits="" data-linenumber="43">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="44">
<code class="ruby"> &#39;id&#39; =&gt; commit.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="45">
<code class="ruby"> &#39;sha&#39; =&gt; commit.commit,</code>
</li>
<li class="never" data-hits="" data-linenumber="46">
<code class="ruby"> &#39;branch&#39; =&gt; commit.branch,</code>
</li>
<li class="never" data-hits="" data-linenumber="47">
<code class="ruby"> &#39;message&#39; =&gt; commit.message,</code>
</li>
<li class="never" data-hits="" data-linenumber="48">
<code class="ruby"> &#39;committed_at&#39; =&gt; format_date(commit.committed_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="49">
<code class="ruby"> &#39;author_name&#39; =&gt; commit.author_name,</code>
</li>
<li class="never" data-hits="" data-linenumber="50">
<code class="ruby"> &#39;author_email&#39; =&gt; commit.author_email,</code>
</li>
<li class="never" data-hits="" data-linenumber="51">
<code class="ruby"> &#39;committer_name&#39; =&gt; commit.committer_name,</code>
</li>
<li class="never" data-hits="" data-linenumber="52">
<code class="ruby"> &#39;committer_email&#39; =&gt; commit.committer_email,</code>
</li>
<li class="never" data-hits="" data-linenumber="53">
<code class="ruby"> &#39;compare_url&#39; =&gt; commit.compare_url,</code>
</li>
<li class="missed" data-hits="0" data-linenumber="54">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="55">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="56">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="57">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="58">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="59">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="60">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="c46347e1a0d259fc446170187bf8517d99d49177">
<div class="header">
<h3>lib/travis/api/v2/http/broadcasts.rb</h3>
<h4><span class="red">66.67 %</span> covered</h4>
<div>
<b>15</b> relevant lines.
<span class="green"><b>10</b> lines covered</span> and
<span class="red"><b>5</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> module V2</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Http</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Broadcasts</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> attr_reader :broadcasts, :options</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> def initialize(broadcasts, options = {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="9">
<code class="ruby"> @broadcasts = broadcasts</code>
</li>
<li class="missed" data-hits="0" data-linenumber="10">
<code class="ruby"> @options = options</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="13">
<span class="hits">1</span>
<code class="ruby"> def data</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"> {</code>
</li>
<li class="missed" data-hits="0" data-linenumber="15">
<code class="ruby"> &#39;broadcasts&#39; =&gt; broadcasts.map { |broadcast| broadcast_data(broadcast) }</code>
</li>
<li class="missed" data-hits="0" data-linenumber="16">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="19">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="21">
<span class="hits">1</span>
<code class="ruby"> def broadcast_data(broadcast)</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> &#39;id&#39; =&gt; broadcast.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> &#39;message&#39; =&gt; broadcast.message</code>
</li>
<li class="missed" data-hits="0" data-linenumber="25">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby">end</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"></code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="8c4ac5c4e74342720580a492f7c3aa9d4d384e43">
<div class="header">
<h3>lib/travis/api/v2/http/build.rb</h3>
<h4><span class="red">60.87 %</span> covered</h4>
<div>
<b>23</b> relevant lines.
<span class="green"><b>14</b> lines covered</span> and
<span class="red"><b>9</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> module V2</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Http</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Build</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> include Formats</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> attr_reader :build, :options</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> def initialize(build, options = {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="11">
<code class="ruby"> options[:include_jobs] = true unless options.key?(:include_jobs)</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="13">
<code class="ruby"> @build = build</code>
</li>
<li class="missed" data-hits="0" data-linenumber="14">
<code class="ruby"> @options = options</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="17">
<span class="hits">1</span>
<code class="ruby"> def data</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"> &#39;build&#39; =&gt; build_data(build),</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"> &#39;commit&#39; =&gt; commit_data(build.commit),</code>
</li>
<li class="missed" data-hits="0" data-linenumber="21">
<code class="ruby"> &#39;jobs&#39; =&gt; options[:include_jobs] ? build.matrix.map { |job| job_data(job) } : [],</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"> &#39;annotations&#39; =&gt; options[:include_jobs] ? Annotations.new(annotations(build), @options).data[&quot;annotations&quot;] : [],</code>
</li>
<li class="missed" data-hits="0" data-linenumber="23">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="26">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="28">
<span class="hits">1</span>
<code class="ruby"> def build_data(build)</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> &#39;id&#39; =&gt; build.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> &#39;repository_id&#39; =&gt; build.repository_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> &#39;commit_id&#39; =&gt; build.commit_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"> &#39;number&#39; =&gt; build.number,</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"> &#39;pull_request&#39; =&gt; build.pull_request?,</code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"> &#39;pull_request_title&#39; =&gt; build.pull_request_title,</code>
</li>
<li class="never" data-hits="" data-linenumber="36">
<code class="ruby"> &#39;pull_request_number&#39; =&gt; build.pull_request_number,</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"> &#39;config&#39; =&gt; build.obfuscated_config.stringify_keys,</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby"> &#39;state&#39; =&gt; build.state.to_s,</code>
</li>
<li class="never" data-hits="" data-linenumber="39">
<code class="ruby"> &#39;started_at&#39; =&gt; format_date(build.started_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="40">
<code class="ruby"> &#39;finished_at&#39; =&gt; format_date(build.finished_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="41">
<code class="ruby"> &#39;duration&#39; =&gt; build.duration,</code>
</li>
<li class="never" data-hits="" data-linenumber="42">
<code class="ruby"> &#39;job_ids&#39; =&gt; build.matrix_ids</code>
</li>
<li class="missed" data-hits="0" data-linenumber="43">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="44">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="45">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="46">
<span class="hits">1</span>
<code class="ruby"> def commit_data(commit)</code>
</li>
<li class="never" data-hits="" data-linenumber="47">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="48">
<code class="ruby"> &#39;id&#39; =&gt; commit.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="49">
<code class="ruby"> &#39;sha&#39; =&gt; commit.commit,</code>
</li>
<li class="never" data-hits="" data-linenumber="50">
<code class="ruby"> &#39;branch&#39; =&gt; commit.branch,</code>
</li>
<li class="never" data-hits="" data-linenumber="51">
<code class="ruby"> &#39;message&#39; =&gt; commit.message,</code>
</li>
<li class="never" data-hits="" data-linenumber="52">
<code class="ruby"> &#39;committed_at&#39; =&gt; format_date(commit.committed_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="53">
<code class="ruby"> &#39;author_name&#39; =&gt; commit.author_name,</code>
</li>
<li class="never" data-hits="" data-linenumber="54">
<code class="ruby"> &#39;author_email&#39; =&gt; commit.author_email,</code>
</li>
<li class="never" data-hits="" data-linenumber="55">
<code class="ruby"> &#39;committer_name&#39; =&gt; commit.committer_name,</code>
</li>
<li class="never" data-hits="" data-linenumber="56">
<code class="ruby"> &#39;committer_email&#39; =&gt; commit.committer_email,</code>
</li>
<li class="never" data-hits="" data-linenumber="57">
<code class="ruby"> &#39;compare_url&#39; =&gt; commit.compare_url,</code>
</li>
<li class="missed" data-hits="0" data-linenumber="58">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="59">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="60">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="61">
<span class="hits">1</span>
<code class="ruby"> def job_data(job)</code>
</li>
<li class="never" data-hits="" data-linenumber="62">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="63">
<code class="ruby"> &#39;id&#39; =&gt; job.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="64">
<code class="ruby"> &#39;repository_id&#39; =&gt; job.repository_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="65">
<code class="ruby"> &#39;build_id&#39; =&gt; job.source_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="66">
<code class="ruby"> &#39;commit_id&#39; =&gt; job.commit_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="67">
<code class="ruby"> &#39;log_id&#39; =&gt; job.log_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="68">
<code class="ruby"> &#39;state&#39; =&gt; job.state.to_s,</code>
</li>
<li class="never" data-hits="" data-linenumber="69">
<code class="ruby"> &#39;number&#39; =&gt; job.number,</code>
</li>
<li class="never" data-hits="" data-linenumber="70">
<code class="ruby"> &#39;config&#39; =&gt; job.obfuscated_config.stringify_keys,</code>
</li>
<li class="never" data-hits="" data-linenumber="71">
<code class="ruby"> &#39;started_at&#39; =&gt; format_date(job.started_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="72">
<code class="ruby"> &#39;finished_at&#39; =&gt; format_date(job.finished_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="73">
<code class="ruby"> &#39;queue&#39; =&gt; job.queue,</code>
</li>
<li class="never" data-hits="" data-linenumber="74">
<code class="ruby"> &#39;allow_failure&#39; =&gt; job.allow_failure,</code>
</li>
<li class="never" data-hits="" data-linenumber="75">
<code class="ruby"> &#39;tags&#39; =&gt; job.tags,</code>
</li>
<li class="never" data-hits="" data-linenumber="76">
<code class="ruby"> &#39;annotation_ids&#39; =&gt; job.annotation_ids,</code>
</li>
<li class="missed" data-hits="0" data-linenumber="77">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="78">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="79">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="80">
<span class="hits">1</span>
<code class="ruby"> def annotations(build)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="81">
<code class="ruby"> build.matrix.map(&amp;:annotations).flatten</code>
</li>
<li class="never" data-hits="" data-linenumber="82">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="83">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="84">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="85">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="86">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="87">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="1abcacda27e1da4c1f9879072dc5eb5d0a6f1eab">
<div class="header">
<h3>lib/travis/api/v2/http/builds.rb</h3>
<h4><span class="red">59.09 %</span> covered</h4>
<div>
<b>22</b> relevant lines.
<span class="green"><b>13</b> lines covered</span> and
<span class="red"><b>9</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> module V2</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Http</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Builds</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> include Formats</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> attr_reader :builds, :commits, :options</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> def initialize(builds, options = {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="11">
<code class="ruby"> @builds = builds</code>
</li>
<li class="missed" data-hits="0" data-linenumber="12">
<code class="ruby"> @commits = builds.map(&amp;:commit)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="13">
<code class="ruby"> @options = options</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="16">
<span class="hits">1</span>
<code class="ruby"> def data</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"> {</code>
</li>
<li class="missed" data-hits="0" data-linenumber="18">
<code class="ruby"> &#39;builds&#39; =&gt; builds.map { |build| build_data(build) },</code>
</li>
<li class="missed" data-hits="0" data-linenumber="19">
<code class="ruby"> &#39;commits&#39; =&gt; commits.map { |commit| commit_data(commit) }</code>
</li>
<li class="missed" data-hits="0" data-linenumber="20">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="23">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="25">
<span class="hits">1</span>
<code class="ruby"> def build_data(build)</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"> &#39;id&#39; =&gt; build.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"> &#39;repository_id&#39; =&gt; build.repository_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> &#39;commit_id&#39; =&gt; build.commit_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> &#39;number&#39; =&gt; build.number,</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> &#39;pull_request&#39; =&gt; build.pull_request?,</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> &#39;pull_request_title&#39; =&gt; build.pull_request_title,</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"> &#39;pull_request_number&#39; =&gt; build.pull_request_number,</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"> &#39;config&#39; =&gt; build.obfuscated_config.stringify_keys,</code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"> &#39;state&#39; =&gt; build.state.to_s,</code>
</li>
<li class="never" data-hits="" data-linenumber="36">
<code class="ruby"> &#39;started_at&#39; =&gt; format_date(build.started_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"> &#39;finished_at&#39; =&gt; format_date(build.finished_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby"> &#39;duration&#39; =&gt; build.duration,</code>
</li>
<li class="never" data-hits="" data-linenumber="39">
<code class="ruby"> &#39;job_ids&#39; =&gt; matrix_ids(build)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="40">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="41">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="42">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="43">
<span class="hits">1</span>
<code class="ruby"> def matrix_ids(build)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="44">
<code class="ruby"> build.cached_matrix_ids || build.matrix_ids</code>
</li>
<li class="never" data-hits="" data-linenumber="45">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="46">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="47">
<span class="hits">1</span>
<code class="ruby"> def commit_data(commit)</code>
</li>
<li class="never" data-hits="" data-linenumber="48">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="49">
<code class="ruby"> &#39;id&#39; =&gt; commit.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="50">
<code class="ruby"> &#39;sha&#39; =&gt; commit.commit,</code>
</li>
<li class="never" data-hits="" data-linenumber="51">
<code class="ruby"> &#39;branch&#39; =&gt; commit.branch,</code>
</li>
<li class="never" data-hits="" data-linenumber="52">
<code class="ruby"> &#39;message&#39; =&gt; commit.message,</code>
</li>
<li class="never" data-hits="" data-linenumber="53">
<code class="ruby"> &#39;committed_at&#39; =&gt; format_date(commit.committed_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="54">
<code class="ruby"> &#39;author_name&#39; =&gt; commit.author_name,</code>
</li>
<li class="never" data-hits="" data-linenumber="55">
<code class="ruby"> &#39;author_email&#39; =&gt; commit.author_email,</code>
</li>
<li class="never" data-hits="" data-linenumber="56">
<code class="ruby"> &#39;committer_name&#39; =&gt; commit.committer_name,</code>
</li>
<li class="never" data-hits="" data-linenumber="57">
<code class="ruby"> &#39;committer_email&#39; =&gt; commit.committer_email,</code>
</li>
<li class="never" data-hits="" data-linenumber="58">
<code class="ruby"> &#39;compare_url&#39; =&gt; commit.compare_url,</code>
</li>
<li class="never" data-hits="" data-linenumber="59">
<code class="ruby"> &#39;pull_request_number&#39; =&gt; commit.pull_request_number</code>
</li>
<li class="missed" data-hits="0" data-linenumber="60">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="61">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="62">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="63">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="64">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="65">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="66">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="b7d8a575e84049f0f7983320c9ad1737cc7619a1">
<div class="header">
<h3>lib/travis/api/v2/http/caches.rb</h3>
<h4><span class="red">73.33 %</span> covered</h4>
<div>
<b>15</b> relevant lines.
<span class="green"><b>11</b> lines covered</span> and
<span class="red"><b>4</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> module V2</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Http</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Caches</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> include Formats</code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> attr_reader :caches, :options</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="9">
<span class="hits">1</span>
<code class="ruby"> def initialize(caches, options = {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="10">
<code class="ruby"> @caches = caches</code>
</li>
<li class="missed" data-hits="0" data-linenumber="11">
<code class="ruby"> @options = options</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="14">
<span class="hits">1</span>
<code class="ruby"> def data</code>
</li>
<li class="missed" data-hits="0" data-linenumber="15">
<code class="ruby"> { &#39;caches&#39; =&gt; caches.map { |cache| cache_data(cache) } }</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="18">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="20">
<span class="hits">1</span>
<code class="ruby"> def cache_data(cache)</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"> &#39;repository_id&#39; =&gt; cache.repository.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> &#39;size&#39; =&gt; cache.size,</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> &#39;slug&#39; =&gt; cache.slug,</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> &#39;branch&#39; =&gt; cache.branch,</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> &#39;last_modified&#39; =&gt; format_date(cache.last_modified)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="27">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="452e1e09b24321c66a631e743b6a84331da9bd13">
<div class="header">
<h3>lib/travis/api/v2/http/env_var.rb</h3>
<h4><span class="red">61.54 %</span> covered</h4>
<div>
<b>13</b> relevant lines.
<span class="green"><b>8</b> lines covered</span> and
<span class="red"><b>5</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> module V2</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Http</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class EnvVar &lt; Travis::Api::Serializer</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> attributes :id, :name, :value, :public, :repository_id</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> def value</code>
</li>
<li class="missed" data-hits="0" data-linenumber="9">
<code class="ruby"> if object.public?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="10">
<code class="ruby"> object.value.decrypt</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="14">
<span class="hits">1</span>
<code class="ruby"> def serializable_hash</code>
</li>
<li class="missed" data-hits="0" data-linenumber="15">
<code class="ruby"> hash = super</code>
</li>
<li class="missed" data-hits="0" data-linenumber="16">
<code class="ruby"> hash.delete :value unless object.public?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="17">
<code class="ruby"> hash</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="f91e8a59d86280d6f7eb63939f3a080ab5f82e0f">
<div class="header">
<h3>lib/travis/api/v2/http/env_vars.rb</h3>
<h4><span class="green">100.0 %</span> covered</h4>
<div>
<b>1</b> relevant lines.
<span class="green"><b>1</b> lines covered</span> and
<span class="red"><b>0</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">class Travis::Api::V2::Http::EnvVars &lt; Travis::Api::ArraySerializer</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="16f73e884ddd5d7c35925c636e1981fa77cb5467">
<div class="header">
<h3>lib/travis/api/v2/http/hooks.rb</h3>
<h4><span class="red">66.67 %</span> covered</h4>
<div>
<b>15</b> relevant lines.
<span class="green"><b>10</b> lines covered</span> and
<span class="red"><b>5</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> module V2</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Http</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Hooks</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> attr_reader :hooks, :options</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> def initialize(hooks, options = {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="9">
<code class="ruby"> @hooks = hooks</code>
</li>
<li class="missed" data-hits="0" data-linenumber="10">
<code class="ruby"> @options = options</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="13">
<span class="hits">1</span>
<code class="ruby"> def data</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"> {</code>
</li>
<li class="missed" data-hits="0" data-linenumber="15">
<code class="ruby"> &#39;hooks&#39; =&gt; hooks.map { |hook| hook_data(hook) },</code>
</li>
<li class="missed" data-hits="0" data-linenumber="16">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="19">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="21">
<span class="hits">1</span>
<code class="ruby"> def hook_data(hook)</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> &#39;id&#39; =&gt; hook.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> &#39;name&#39; =&gt; hook.name,</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> &#39;owner_name&#39; =&gt; hook.owner_name,</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> &#39;description&#39; =&gt; hook.description,</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"> &#39;active&#39; =&gt; hook.active,</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"> &#39;private&#39; =&gt; hook.private,</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> &#39;admin&#39; =&gt; hook.admin?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="30">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="36">
<code class="ruby">end</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"></code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="7bb06459f99796e92585a0613514a4dc10a3b4e6">
<div class="header">
<h3>lib/travis/api/v2/http/job.rb</h3>
<h4><span class="red">70.59 %</span> covered</h4>
<div>
<b>17</b> relevant lines.
<span class="green"><b>12</b> lines covered</span> and
<span class="red"><b>5</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> module V2</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Http</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Job</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> include Formats</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> attr_reader :job, :options</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> def initialize(job, options = {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="11">
<code class="ruby"> @job = job</code>
</li>
<li class="missed" data-hits="0" data-linenumber="12">
<code class="ruby"> @options = options</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="15">
<span class="hits">1</span>
<code class="ruby"> def data</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"> &#39;job&#39; =&gt; job_data(job),</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"> &#39;commit&#39; =&gt; commit_data(job.commit),</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"> &#39;annotations&#39; =&gt; Annotations.new(job.annotations, @options).data[&quot;annotations&quot;],</code>
</li>
<li class="missed" data-hits="0" data-linenumber="20">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="23">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="25">
<span class="hits">1</span>
<code class="ruby"> def job_data(job)</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"> &#39;id&#39; =&gt; job.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"> &#39;repository_id&#39; =&gt; job.repository_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> &#39;repository_slug&#39; =&gt; job.repository.slug,</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> &#39;build_id&#39; =&gt; job.source_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> &#39;commit_id&#39; =&gt; job.commit_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> &#39;log_id&#39; =&gt; job.log_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"> &#39;number&#39; =&gt; job.number,</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"> &#39;config&#39; =&gt; job.obfuscated_config.stringify_keys,</code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"> &#39;state&#39; =&gt; job.state.to_s,</code>
</li>
<li class="never" data-hits="" data-linenumber="36">
<code class="ruby"> &#39;started_at&#39; =&gt; format_date(job.started_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"> &#39;finished_at&#39; =&gt; format_date(job.finished_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby"> &#39;queue&#39; =&gt; job.queue,</code>
</li>
<li class="never" data-hits="" data-linenumber="39">
<code class="ruby"> &#39;allow_failure&#39; =&gt; job.allow_failure,</code>
</li>
<li class="never" data-hits="" data-linenumber="40">
<code class="ruby"> &#39;tags&#39; =&gt; job.tags,</code>
</li>
<li class="never" data-hits="" data-linenumber="41">
<code class="ruby"> &#39;annotation_ids&#39; =&gt; job.annotation_ids,</code>
</li>
<li class="missed" data-hits="0" data-linenumber="42">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="43">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="44">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="45">
<span class="hits">1</span>
<code class="ruby"> def commit_data(commit)</code>
</li>
<li class="never" data-hits="" data-linenumber="46">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="47">
<code class="ruby"> &#39;id&#39; =&gt; commit.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="48">
<code class="ruby"> &#39;sha&#39; =&gt; commit.commit,</code>
</li>
<li class="never" data-hits="" data-linenumber="49">
<code class="ruby"> &#39;branch&#39; =&gt; commit.branch,</code>
</li>
<li class="never" data-hits="" data-linenumber="50">
<code class="ruby"> &#39;message&#39; =&gt; commit.message,</code>
</li>
<li class="never" data-hits="" data-linenumber="51">
<code class="ruby"> &#39;committed_at&#39; =&gt; format_date(commit.committed_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="52">
<code class="ruby"> &#39;author_name&#39; =&gt; commit.author_name,</code>
</li>
<li class="never" data-hits="" data-linenumber="53">
<code class="ruby"> &#39;author_email&#39; =&gt; commit.author_email,</code>
</li>
<li class="never" data-hits="" data-linenumber="54">
<code class="ruby"> &#39;committer_name&#39; =&gt; commit.committer_name,</code>
</li>
<li class="never" data-hits="" data-linenumber="55">
<code class="ruby"> &#39;committer_email&#39; =&gt; commit.committer_email,</code>
</li>
<li class="never" data-hits="" data-linenumber="56">
<code class="ruby"> &#39;compare_url&#39; =&gt; commit.compare_url,</code>
</li>
<li class="missed" data-hits="0" data-linenumber="57">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="58">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="59">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="60">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="61">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="62">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="63">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="28a544a6de90280731859574fbbbcf82c3b12b13">
<div class="header">
<h3>lib/travis/api/v2/http/jobs.rb</h3>
<h4><span class="red">63.16 %</span> covered</h4>
<div>
<b>19</b> relevant lines.
<span class="green"><b>12</b> lines covered</span> and
<span class="red"><b>7</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> module V2</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Http</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Jobs</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> include Formats</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> attr_reader :jobs, :options</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> def initialize(jobs, options = {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="11">
<code class="ruby"> @jobs = jobs</code>
</li>
<li class="missed" data-hits="0" data-linenumber="12">
<code class="ruby"> @options = options</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="15">
<span class="hits">1</span>
<code class="ruby"> def data</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> {</code>
</li>
<li class="missed" data-hits="0" data-linenumber="17">
<code class="ruby"> &#39;jobs&#39; =&gt; jobs.map { |job| job_data(job) },</code>
</li>
<li class="missed" data-hits="0" data-linenumber="18">
<code class="ruby"> &#39;commits&#39; =&gt; jobs.map { |job| commit_data(job.commit) }</code>
</li>
<li class="missed" data-hits="0" data-linenumber="19">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="22">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="24">
<span class="hits">1</span>
<code class="ruby"> def job_data(job)</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> &#39;id&#39; =&gt; job.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"> &#39;repository_id&#39; =&gt; job.repository_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"> &#39;repository_slug&#39; =&gt; job.repository.slug,</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> &#39;build_id&#39; =&gt; job.source_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> &#39;commit_id&#39; =&gt; job.commit_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> &#39;log_id&#39; =&gt; job.log_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> &#39;number&#39; =&gt; job.number,</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"> &#39;config&#39; =&gt; job.obfuscated_config.stringify_keys,</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"> &#39;state&#39; =&gt; job.state.to_s,</code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"> &#39;started_at&#39; =&gt; format_date(job.started_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="36">
<code class="ruby"> &#39;finished_at&#39; =&gt; format_date(job.finished_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"> &#39;queue&#39; =&gt; job.queue,</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby"> &#39;allow_failure&#39; =&gt; job.allow_failure,</code>
</li>
<li class="never" data-hits="" data-linenumber="39">
<code class="ruby"> &#39;tags&#39; =&gt; job.tags</code>
</li>
<li class="missed" data-hits="0" data-linenumber="40">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="41">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="42">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="43">
<span class="hits">1</span>
<code class="ruby"> def commit_data(commit)</code>
</li>
<li class="never" data-hits="" data-linenumber="44">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="45">
<code class="ruby"> &#39;id&#39; =&gt; commit.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="46">
<code class="ruby"> &#39;sha&#39; =&gt; commit.commit,</code>
</li>
<li class="never" data-hits="" data-linenumber="47">
<code class="ruby"> &#39;branch&#39; =&gt; commit.branch,</code>
</li>
<li class="never" data-hits="" data-linenumber="48">
<code class="ruby"> &#39;message&#39; =&gt; commit.message,</code>
</li>
<li class="never" data-hits="" data-linenumber="49">
<code class="ruby"> &#39;committed_at&#39; =&gt; format_date(commit.committed_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="50">
<code class="ruby"> &#39;author_name&#39; =&gt; commit.author_name,</code>
</li>
<li class="never" data-hits="" data-linenumber="51">
<code class="ruby"> &#39;author_email&#39; =&gt; commit.author_email,</code>
</li>
<li class="never" data-hits="" data-linenumber="52">
<code class="ruby"> &#39;committer_name&#39; =&gt; commit.committer_name,</code>
</li>
<li class="never" data-hits="" data-linenumber="53">
<code class="ruby"> &#39;committer_email&#39; =&gt; commit.committer_email,</code>
</li>
<li class="never" data-hits="" data-linenumber="54">
<code class="ruby"> &#39;compare_url&#39; =&gt; commit.compare_url,</code>
</li>
<li class="missed" data-hits="0" data-linenumber="55">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="56">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="57">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="58">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="59">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="60">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="61">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="305e989221ff7819ee74c2690fb3d9b4d6366b86">
<div class="header">
<h3>lib/travis/api/v2/http/log.rb</h3>
<h4><span class="red">50.0 %</span> covered</h4>
<div>
<b>28</b> relevant lines.
<span class="green"><b>14</b> lines covered</span> and
<span class="red"><b>14</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> module V2</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Http</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Log</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> attr_reader :log, :options</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> def initialize(log, options = {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="9">
<code class="ruby"> @log = log</code>
</li>
<li class="missed" data-hits="0" data-linenumber="10">
<code class="ruby"> @options = options</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="13">
<span class="hits">1</span>
<code class="ruby"> def data</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"> &#39;log&#39; =&gt; options[:chunked] ? chunked_log_data : log_data,</code>
</li>
<li class="missed" data-hits="0" data-linenumber="16">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="19">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="21">
<span class="hits">1</span>
<code class="ruby"> def log_data</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> &#39;id&#39; =&gt; log.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> &#39;job_id&#39; =&gt; log.job_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> &#39;type&#39; =&gt; log.class.name.demodulize,</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> &#39;body&#39; =&gt; log.content</code>
</li>
<li class="missed" data-hits="0" data-linenumber="27">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="30">
<span class="hits">1</span>
<code class="ruby"> def chunked_log_data</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> &#39;id&#39; =&gt; log.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"> &#39;job_id&#39; =&gt; log.job_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"> &#39;type&#39; =&gt; log.class.name.demodulize,</code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"> &#39;parts&#39; =&gt; log_parts</code>
</li>
<li class="missed" data-hits="0" data-linenumber="36">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="39">
<span class="hits">1</span>
<code class="ruby"> def log_parts</code>
</li>
<li class="missed" data-hits="0" data-linenumber="40">
<code class="ruby"> parts = log.parts</code>
</li>
<li class="missed" data-hits="0" data-linenumber="41">
<code class="ruby"> parts = parts.where(number: part_numbers) if part_numbers</code>
</li>
<li class="missed" data-hits="0" data-linenumber="42">
<code class="ruby"> parts = parts.where([&quot;number &gt; ?&quot;, after]) if after</code>
</li>
<li class="missed" data-hits="0" data-linenumber="43">
<code class="ruby"> parts.sort_by(&amp;:number).map do |part|</code>
</li>
<li class="never" data-hits="" data-linenumber="44">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="45">
<code class="ruby"> &#39;id&#39; =&gt; part.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="46">
<code class="ruby"> &#39;number&#39; =&gt; part.number,</code>
</li>
<li class="never" data-hits="" data-linenumber="47">
<code class="ruby"> &#39;content&#39; =&gt; part.content,</code>
</li>
<li class="never" data-hits="" data-linenumber="48">
<code class="ruby"> &#39;final&#39; =&gt; part.final</code>
</li>
<li class="missed" data-hits="0" data-linenumber="49">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="50">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="51">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="52">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="53">
<span class="hits">1</span>
<code class="ruby"> def after</code>
</li>
<li class="missed" data-hits="0" data-linenumber="54">
<code class="ruby"> after = options[&#39;after&#39;].to_i</code>
</li>
<li class="missed" data-hits="0" data-linenumber="55">
<code class="ruby"> after == 0 ? nil : after</code>
</li>
<li class="never" data-hits="" data-linenumber="56">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="57">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="58">
<span class="hits">1</span>
<code class="ruby"> def part_numbers</code>
</li>
<li class="missed" data-hits="0" data-linenumber="59">
<code class="ruby"> if numbers = options[&#39;part_numbers&#39;]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="60">
<code class="ruby"> numbers.is_a?(String) ? numbers.split(&#39;,&#39;).map(&amp;:to_i) : numbers</code>
</li>
<li class="never" data-hits="" data-linenumber="61">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="62">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="63">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="64">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="65">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="66">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="67">
<code class="ruby">end</code>
</li>
<li class="never" data-hits="" data-linenumber="68">
<code class="ruby"></code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="87c289727e6a92299bc4a9407f685b69ca6eb426">
<div class="header">
<h3>lib/travis/api/v2/http/permissions.rb</h3>
<h4><span class="red">58.33 %</span> covered</h4>
<div>
<b>24</b> relevant lines.
<span class="green"><b>14</b> lines covered</span> and
<span class="red"><b>10</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> module V2</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Http</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Permissions</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> attr_reader :permissions, :options</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> def initialize(permissions, options = {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="9">
<code class="ruby"> @permissions = permissions</code>
</li>
<li class="missed" data-hits="0" data-linenumber="10">
<code class="ruby"> @options = options</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="13">
<span class="hits">1</span>
<code class="ruby"> def data</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"> &#39;permissions&#39; =&gt; repo_ids,</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> &#39;admin&#39; =&gt; admin_ids,</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"> &#39;pull&#39; =&gt; pull_ids,</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"> &#39;push&#39; =&gt; push_ids</code>
</li>
<li class="missed" data-hits="0" data-linenumber="19">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="22">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="covered" data-hits="1" data-linenumber="23">
<span class="hits">1</span>
<code class="ruby"> def filtered_ids(perm = nil)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="24">
<code class="ruby"> if perm</code>
</li>
<li class="missed" data-hits="0" data-linenumber="25">
<code class="ruby"> permissions.find_all { |p| p.send(&quot;#{perm}?&quot;) }.map { |permission| permission.repository_id }</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="27">
<code class="ruby"> permissions.map { |permission| permission.repository_id }</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="31">
<span class="hits">1</span>
<code class="ruby"> def repo_ids</code>
</li>
<li class="missed" data-hits="0" data-linenumber="32">
<code class="ruby"> filtered_ids</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="35">
<span class="hits">1</span>
<code class="ruby"> def admin_ids</code>
</li>
<li class="missed" data-hits="0" data-linenumber="36">
<code class="ruby"> filtered_ids(:admin)</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="39">
<span class="hits">1</span>
<code class="ruby"> def pull_ids</code>
</li>
<li class="missed" data-hits="0" data-linenumber="40">
<code class="ruby"> filtered_ids(:pull)</code>
</li>
<li class="never" data-hits="" data-linenumber="41">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="42">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="43">
<span class="hits">1</span>
<code class="ruby"> def push_ids</code>
</li>
<li class="missed" data-hits="0" data-linenumber="44">
<code class="ruby"> filtered_ids(:push)</code>
</li>
<li class="never" data-hits="" data-linenumber="45">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="46">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="47">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="48">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="49">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="50">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="8ff46500e36176862b05aa7513e20da8d68dc208">
<div class="header">
<h3>lib/travis/api/v2/http/repositories.rb</h3>
<h4><span class="red">68.75 %</span> covered</h4>
<div>
<b>16</b> relevant lines.
<span class="green"><b>11</b> lines covered</span> and
<span class="red"><b>5</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> module V2</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Http</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Repositories</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> include Formats</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> attr_reader :repositories, :options</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> def initialize(repositories, options = {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="11">
<code class="ruby"> @repositories = repositories</code>
</li>
<li class="missed" data-hits="0" data-linenumber="12">
<code class="ruby"> @options = options</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="15">
<span class="hits">1</span>
<code class="ruby"> def data</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> {</code>
</li>
<li class="missed" data-hits="0" data-linenumber="17">
<code class="ruby"> &#39;repos&#39; =&gt; repositories.map { |repository| repository_data(repository) }</code>
</li>
<li class="missed" data-hits="0" data-linenumber="18">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="21">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="23">
<span class="hits">1</span>
<code class="ruby"> def repository_data(repository)</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> &#39;id&#39; =&gt; repository.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> &#39;slug&#39; =&gt; repository.slug,</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"> &#39;description&#39; =&gt; repository.description,</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"> &#39;last_build_id&#39; =&gt; repository.last_build_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> &#39;last_build_number&#39; =&gt; repository.last_build_number,</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> &#39;last_build_state&#39; =&gt; repository.last_build_state.to_s,</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> &#39;last_build_duration&#39; =&gt; repository.last_build_duration,</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> &#39;last_build_language&#39; =&gt; nil,</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"> &#39;last_build_started_at&#39; =&gt; format_date(repository.last_build_started_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"> &#39;last_build_finished_at&#39; =&gt; format_date(repository.last_build_finished_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"> &#39;active&#39; =&gt; repository.active,</code>
</li>
<li class="never" data-hits="" data-linenumber="36">
<code class="ruby"> &#39;github_language&#39; =&gt; repository.github_language</code>
</li>
<li class="missed" data-hits="0" data-linenumber="37">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="39">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="40">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="41">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="42">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="43">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="eff78d14dee73bdad5c2af8b49e3b528390c9207">
<div class="header">
<h3>lib/travis/api/v2/http/repository.rb</h3>
<h4><span class="red">78.57 %</span> covered</h4>
<div>
<b>14</b> relevant lines.
<span class="green"><b>11</b> lines covered</span> and
<span class="red"><b>3</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> module V2</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Http</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Repository</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> include Formats</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> attr_reader :repository, :options</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> def initialize(repository, options = {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="11">
<code class="ruby"> @repository = repository</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="14">
<span class="hits">1</span>
<code class="ruby"> def data</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> &#39;repo&#39; =&gt; repository_data(repository)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="17">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="20">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"> # TODO why does this not include the last build? (i.e. &#39;builds&#39; =&gt; { last build here })</code>
</li>
<li class="covered" data-hits="1" data-linenumber="23">
<span class="hits">1</span>
<code class="ruby"> def repository_data(repository)</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> &#39;id&#39; =&gt; repository.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> &#39;slug&#39; =&gt; repository.slug,</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"> &#39;description&#39; =&gt; repository.description,</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"> &#39;last_build_id&#39; =&gt; repository.last_build_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> &#39;last_build_number&#39; =&gt; repository.last_build_number,</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> &#39;last_build_state&#39; =&gt; repository.last_build_state.to_s,</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> &#39;last_build_duration&#39; =&gt; repository.last_build_duration,</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> &#39;last_build_language&#39; =&gt; nil,</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"> &#39;last_build_started_at&#39; =&gt; format_date(repository.last_build_started_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"> &#39;last_build_finished_at&#39; =&gt; format_date(repository.last_build_finished_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"> &#39;github_language&#39; =&gt; repository.github_language</code>
</li>
<li class="missed" data-hits="0" data-linenumber="36">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="39">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="40">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="41">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="42">
<code class="ruby">end</code>
</li>
<li class="never" data-hits="" data-linenumber="43">
<code class="ruby"></code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="0438b13b58bbb8a610c81181e35ca9c4273df442">
<div class="header">
<h3>lib/travis/api/v2/http/request.rb</h3>
<h4><span class="red">52.17 %</span> covered</h4>
<div>
<b>23</b> relevant lines.
<span class="green"><b>12</b> lines covered</span> and
<span class="red"><b>11</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> module V2</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Http</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Request</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> include Formats</code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> attr_reader :request, :commit, :options</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="9">
<span class="hits">1</span>
<code class="ruby"> def initialize(request, options = {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="10">
<code class="ruby"> @request = request</code>
</li>
<li class="missed" data-hits="0" data-linenumber="11">
<code class="ruby"> @commit = request.commit</code>
</li>
<li class="missed" data-hits="0" data-linenumber="12">
<code class="ruby"> @options = options</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="15">
<span class="hits">1</span>
<code class="ruby"> def data</code>
</li>
<li class="missed" data-hits="0" data-linenumber="16">
<code class="ruby"> data = {</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"> &#39;request&#39; =&gt; request_data</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"> }</code>
</li>
<li class="missed" data-hits="0" data-linenumber="19">
<code class="ruby"> if commit</code>
</li>
<li class="missed" data-hits="0" data-linenumber="20">
<code class="ruby"> data[&#39;commit&#39;] = commit_data</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"> end</code>
</li>
<li class="missed" data-hits="0" data-linenumber="22">
<code class="ruby"> data</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="25">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="27">
<span class="hits">1</span>
<code class="ruby"> def request_data</code>
</li>
<li class="missed" data-hits="0" data-linenumber="28">
<code class="ruby"> data = {</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> &#39;id&#39; =&gt; request.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> &#39;repository_id&#39; =&gt; request.repository_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> &#39;commit_id&#39; =&gt; request.commit_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> &#39;created_at&#39; =&gt; format_date(request.created_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"> &#39;owner_id&#39; =&gt; request.owner_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"> &#39;owner_type&#39; =&gt; request.owner_type,</code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"> &#39;event_type&#39; =&gt; request.event_type,</code>
</li>
<li class="never" data-hits="" data-linenumber="36">
<code class="ruby"> &#39;base_commit&#39; =&gt; request.base_commit,</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"> &#39;head_commit&#39; =&gt; request.head_commit,</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby"> &#39;result&#39; =&gt; request.result,</code>
</li>
<li class="never" data-hits="" data-linenumber="39">
<code class="ruby"> &#39;message&#39; =&gt; request.message,</code>
</li>
<li class="never" data-hits="" data-linenumber="40">
<code class="ruby"> &#39;pull_request&#39; =&gt; request.pull_request?,</code>
</li>
<li class="never" data-hits="" data-linenumber="41">
<code class="ruby"> &#39;pull_request_number&#39; =&gt; request.pull_request_number,</code>
</li>
<li class="never" data-hits="" data-linenumber="42">
<code class="ruby"> &#39;pull_request_title&#39; =&gt; request.pull_request_title,</code>
</li>
<li class="never" data-hits="" data-linenumber="43">
<code class="ruby"> &#39;branch&#39; =&gt; request.branch_name,</code>
</li>
<li class="never" data-hits="" data-linenumber="44">
<code class="ruby"> &#39;tag&#39; =&gt; request.tag_name</code>
</li>
<li class="never" data-hits="" data-linenumber="45">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="46">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="47">
<code class="ruby"> data[&#39;build_id&#39;] = request.builds.first.id if request.builds.present?</code>
</li>
<li class="never" data-hits="" data-linenumber="48">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="49">
<code class="ruby"> data</code>
</li>
<li class="never" data-hits="" data-linenumber="50">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="51">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="52">
<span class="hits">1</span>
<code class="ruby"> def commit_data</code>
</li>
<li class="never" data-hits="" data-linenumber="53">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="54">
<code class="ruby"> &#39;id&#39; =&gt; commit.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="55">
<code class="ruby"> &#39;sha&#39; =&gt; commit.commit,</code>
</li>
<li class="never" data-hits="" data-linenumber="56">
<code class="ruby"> &#39;branch&#39; =&gt; commit.branch,</code>
</li>
<li class="never" data-hits="" data-linenumber="57">
<code class="ruby"> &#39;message&#39; =&gt; commit.message,</code>
</li>
<li class="never" data-hits="" data-linenumber="58">
<code class="ruby"> &#39;committed_at&#39; =&gt; format_date(commit.committed_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="59">
<code class="ruby"> &#39;author_name&#39; =&gt; commit.author_name,</code>
</li>
<li class="never" data-hits="" data-linenumber="60">
<code class="ruby"> &#39;author_email&#39; =&gt; commit.author_email,</code>
</li>
<li class="never" data-hits="" data-linenumber="61">
<code class="ruby"> &#39;committer_name&#39; =&gt; commit.committer_name,</code>
</li>
<li class="never" data-hits="" data-linenumber="62">
<code class="ruby"> &#39;committer_email&#39; =&gt; commit.committer_email,</code>
</li>
<li class="never" data-hits="" data-linenumber="63">
<code class="ruby"> &#39;compare_url&#39; =&gt; commit.compare_url,</code>
</li>
<li class="never" data-hits="" data-linenumber="64">
<code class="ruby"> &#39;pull_request_number&#39; =&gt; commit.pull_request_number</code>
</li>
<li class="missed" data-hits="0" data-linenumber="65">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="66">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="67">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="68">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="69">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="70">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="71">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="3409238a742e733e8cc83123cd42c5d119a08c09">
<div class="header">
<h3>lib/travis/api/v2/http/requests.rb</h3>
<h4><span class="red">54.55 %</span> covered</h4>
<div>
<b>22</b> relevant lines.
<span class="green"><b>12</b> lines covered</span> and
<span class="red"><b>10</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> module V2</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Http</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class Requests</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> include Formats</code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> attr_reader :requests, :commits, :options</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="9">
<span class="hits">1</span>
<code class="ruby"> def initialize(requests, options = {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="10">
<code class="ruby"> @requests = requests</code>
</li>
<li class="missed" data-hits="0" data-linenumber="11">
<code class="ruby"> @commits = requests.map(&amp;:commit)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="12">
<code class="ruby"> @options = options</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="15">
<span class="hits">1</span>
<code class="ruby"> def data</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> {</code>
</li>
<li class="missed" data-hits="0" data-linenumber="17">
<code class="ruby"> &#39;requests&#39; =&gt; requests.map { |request| request_data(request) },</code>
</li>
<li class="missed" data-hits="0" data-linenumber="18">
<code class="ruby"> &#39;commits&#39; =&gt; commits.compact.map { |commit| commit_data(commit) }</code>
</li>
<li class="missed" data-hits="0" data-linenumber="19">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="22">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="24">
<span class="hits">1</span>
<code class="ruby"> def request_data(request)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="25">
<code class="ruby"> data = {</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> &#39;id&#39; =&gt; request.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"> &#39;repository_id&#39; =&gt; request.repository_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"> &#39;commit_id&#39; =&gt; request.commit_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> &#39;created_at&#39; =&gt; format_date(request.created_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> &#39;owner_id&#39; =&gt; request.owner_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> &#39;owner_type&#39; =&gt; request.owner_type,</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> &#39;event_type&#39; =&gt; request.event_type,</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"> &#39;base_commit&#39; =&gt; request.base_commit,</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"> &#39;head_commit&#39; =&gt; request.head_commit,</code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"> &#39;result&#39; =&gt; request.result,</code>
</li>
<li class="never" data-hits="" data-linenumber="36">
<code class="ruby"> &#39;message&#39; =&gt; request.message,</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"> &#39;pull_request&#39; =&gt; request.pull_request?,</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby"> &#39;pull_request_number&#39; =&gt; request.pull_request_number,</code>
</li>
<li class="never" data-hits="" data-linenumber="39">
<code class="ruby"> &#39;pull_request_title&#39; =&gt; request.pull_request_title,</code>
</li>
<li class="never" data-hits="" data-linenumber="40">
<code class="ruby"> &#39;branch&#39; =&gt; request.branch_name,</code>
</li>
<li class="never" data-hits="" data-linenumber="41">
<code class="ruby"> &#39;tag&#39; =&gt; request.tag_name</code>
</li>
<li class="never" data-hits="" data-linenumber="42">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="43">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="44">
<code class="ruby"> data[&#39;build_id&#39;] = request.builds.first.id if request.builds.present?</code>
</li>
<li class="never" data-hits="" data-linenumber="45">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="46">
<code class="ruby"> data</code>
</li>
<li class="never" data-hits="" data-linenumber="47">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="48">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="49">
<span class="hits">1</span>
<code class="ruby"> def commit_data(commit)</code>
</li>
<li class="never" data-hits="" data-linenumber="50">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="51">
<code class="ruby"> &#39;id&#39; =&gt; commit.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="52">
<code class="ruby"> &#39;sha&#39; =&gt; commit.commit,</code>
</li>
<li class="never" data-hits="" data-linenumber="53">
<code class="ruby"> &#39;branch&#39; =&gt; commit.branch,</code>
</li>
<li class="never" data-hits="" data-linenumber="54">
<code class="ruby"> &#39;message&#39; =&gt; commit.message,</code>
</li>
<li class="never" data-hits="" data-linenumber="55">
<code class="ruby"> &#39;committed_at&#39; =&gt; format_date(commit.committed_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="56">
<code class="ruby"> &#39;author_name&#39; =&gt; commit.author_name,</code>
</li>
<li class="never" data-hits="" data-linenumber="57">
<code class="ruby"> &#39;author_email&#39; =&gt; commit.author_email,</code>
</li>
<li class="never" data-hits="" data-linenumber="58">
<code class="ruby"> &#39;committer_name&#39; =&gt; commit.committer_name,</code>
</li>
<li class="never" data-hits="" data-linenumber="59">
<code class="ruby"> &#39;committer_email&#39; =&gt; commit.committer_email,</code>
</li>
<li class="never" data-hits="" data-linenumber="60">
<code class="ruby"> &#39;compare_url&#39; =&gt; commit.compare_url,</code>
</li>
<li class="never" data-hits="" data-linenumber="61">
<code class="ruby"> &#39;pull_request_number&#39; =&gt; commit.pull_request_number</code>
</li>
<li class="missed" data-hits="0" data-linenumber="62">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="63">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="64">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="65">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="66">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="67">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="68">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="5b078e65cda2e46c4754334f975a5362fd4e47ac">
<div class="header">
<h3>lib/travis/api/v2/http/ssh_key.rb</h3>
<h4><span class="red">66.67 %</span> covered</h4>
<div>
<b>15</b> relevant lines.
<span class="green"><b>10</b> lines covered</span> and
<span class="red"><b>5</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;openssl&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/private_key&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="3">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> module Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> module V2</code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> module Http</code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> class SshKey &lt; Travis::Api::Serializer</code>
</li>
<li class="covered" data-hits="1" data-linenumber="9">
<span class="hits">1</span>
<code class="ruby"> attributes :id, :description, :fingerprint</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="11">
<span class="hits">1</span>
<code class="ruby"> def id</code>
</li>
<li class="missed" data-hits="0" data-linenumber="12">
<code class="ruby"> object.repository_id</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="15">
<span class="hits">1</span>
<code class="ruby"> def fingerprint</code>
</li>
<li class="missed" data-hits="0" data-linenumber="16">
<code class="ruby"> value = object.value.decrypt</code>
</li>
<li class="missed" data-hits="0" data-linenumber="17">
<code class="ruby"> return unless value</code>
</li>
<li class="missed" data-hits="0" data-linenumber="18">
<code class="ruby"> PrivateKey.new(value).fingerprint</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"> rescue OpenSSL::PKey::RSAError</code>
</li>
<li class="missed" data-hits="0" data-linenumber="20">
<code class="ruby"> nil</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="f9da561db1b52264c76f56f7164b6394902c3a2e">
<div class="header">
<h3>lib/travis/api/v2/http/ssl_key.rb</h3>
<h4><span class="red">75.0 %</span> covered</h4>
<div>
<b>12</b> relevant lines.
<span class="green"><b>9</b> lines covered</span> and
<span class="red"><b>3</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> module V2</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Http</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class SslKey</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> attr_reader :key</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> def initialize(key, options = {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="9">
<code class="ruby"> @key = key</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="12">
<span class="hits">1</span>
<code class="ruby"> def fingerprint</code>
</li>
<li class="missed" data-hits="0" data-linenumber="13">
<code class="ruby"> PrivateKey.new(key.private_key).fingerprint</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="16">
<span class="hits">1</span>
<code class="ruby"> def data</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"> &#39;key&#39; =&gt; key.public_key,</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"> &#39;fingerprint&#39; =&gt; fingerprint</code>
</li>
<li class="missed" data-hits="0" data-linenumber="20">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby">end</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"></code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="4fe5f748a2411310c3bf861101420669e9a8812e">
<div class="header">
<h3>lib/travis/api/v2/http/user.rb</h3>
<h4><span class="red">73.33 %</span> covered</h4>
<div>
<b>15</b> relevant lines.
<span class="green"><b>11</b> lines covered</span> and
<span class="red"><b>4</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> module V2</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Http</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class User</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> include Formats</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> attr_reader :user, :options</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> def initialize(user, options = {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="11">
<code class="ruby"> @user = user</code>
</li>
<li class="missed" data-hits="0" data-linenumber="12">
<code class="ruby"> @options = options</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="15">
<span class="hits">1</span>
<code class="ruby"> def data</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"> &#39;user&#39; =&gt; user_data,</code>
</li>
<li class="missed" data-hits="0" data-linenumber="18">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="21">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="23">
<span class="hits">1</span>
<code class="ruby"> def user_data</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> &#39;id&#39; =&gt; user.id,</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> &#39;name&#39; =&gt; user.name,</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"> &#39;login&#39; =&gt; user.login,</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"> &#39;email&#39; =&gt; user.email,</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> &#39;gravatar_id&#39; =&gt; user.email ? Digest::MD5.hexdigest(user.email) : &quot;&quot;,</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> &#39;locale&#39; =&gt; user.locale,</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> &#39;is_syncing&#39; =&gt; user.syncing?,</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> &#39;synced_at&#39; =&gt; format_date(user.synced_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"> &#39;correct_scopes&#39; =&gt; user.correct_scopes?,</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"> &#39;created_at&#39; =&gt; format_date(user.created_at),</code>
</li>
<li class="missed" data-hits="0" data-linenumber="35">
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="36">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="39">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="40">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="41">
<code class="ruby">end</code>
</li>
<li class="never" data-hits="" data-linenumber="42">
<code class="ruby"></code>
</li>
<li class="never" data-hits="" data-linenumber="43">
<code class="ruby"></code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="dd52431f41a7d9215be3e7f466926538b62b434a">
<div class="header">
<h3>lib/travis/api/v2/http/validation_error.rb</h3>
<h4><span class="red">47.37 %</span> covered</h4>
<div>
<b>19</b> relevant lines.
<span class="green"><b>9</b> lines covered</span> and
<span class="red"><b>10</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Api</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> module V2</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Http</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> class ValidationError</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> attr_reader :resource</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> def initialize(resource, options = {})</code>
</li>
<li class="missed" data-hits="0" data-linenumber="9">
<code class="ruby"> @resource = resource</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="12">
<span class="hits">1</span>
<code class="ruby"> def data</code>
</li>
<li class="missed" data-hits="0" data-linenumber="13">
<code class="ruby"> response = {</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"> message: &#39;Validation failed&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"> }</code>
</li>
<li class="missed" data-hits="0" data-linenumber="16">
<code class="ruby"> resource.errors.to_hash.each do |name, errors|</code>
</li>
<li class="missed" data-hits="0" data-linenumber="17">
<code class="ruby"> response[&#39;errors&#39;] ||= []</code>
</li>
<li class="missed" data-hits="0" data-linenumber="18">
<code class="ruby"> errors.each do |error_code|</code>
</li>
<li class="missed" data-hits="0" data-linenumber="19">
<code class="ruby"> response[&#39;errors&#39;] &lt;&lt; { field: name, code: code(error_code) }</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"></code>
</li>
<li class="missed" data-hits="0" data-linenumber="23">
<code class="ruby"> response</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="26">
<span class="hits">1</span>
<code class="ruby"> def code(error_code)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="27">
<code class="ruby"> case error_code</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"> when :blank</code>
</li>
<li class="missed" data-hits="0" data-linenumber="29">
<code class="ruby"> &#39;missing_field&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="31">
<code class="ruby"> error_code.to_s</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="36">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby">end</code>
</li>
<li class="never" data-hits="" data-linenumber="39">
<code class="ruby"></code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="ec916e10f6af10305ba62ae14eb26968f828b52d">
<div class="header">
<h3>lib/travis/api/v3.rb</h3>
<h4><span class="green">100.0 %</span> covered</h4>
<div>
<b>18</b> relevant lines.
<span class="green"><b>18</b> lines covered</span> and
<span class="red"><b>0</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module API</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> module V3</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> V3 = self</code>
</li>
<li class="never" data-hits="" data-linenumber="5">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> def load_dir(dir, recursive: true)</code>
</li>
<li class="covered" data-hits="49" data-linenumber="7">
<span class="hits">49</span>
<code class="ruby"> Dir.glob(&quot;#{dir}/*.rb&quot;).each { |f| require f[%r[(?&lt;=lib/).+(?=\.rb$)]] }</code>
</li>
<li class="covered" data-hits="53" data-linenumber="8">
<span class="hits">53</span>
<code class="ruby"> Dir.glob(&quot;#{dir}/*&quot;).each { |dir| load_dir(dir) } if recursive</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="11">
<span class="hits">1</span>
<code class="ruby"> def response(payload, headers = {}, content_type: &#39;application/json&#39;.freeze, status: 200)</code>
</li>
<li class="covered" data-hits="22" data-linenumber="12">
<span class="hits">22</span>
<code class="ruby"> payload = JSON.pretty_generate(payload) unless payload.is_a? String</code>
</li>
<li class="covered" data-hits="22" data-linenumber="13">
<span class="hits">22</span>
<code class="ruby"> headers = { &#39;Content-Type&#39;.freeze =&gt; content_type, &#39;Content-Length&#39;.freeze =&gt; payload.bytesize.to_s }.merge!(headers)</code>
</li>
<li class="covered" data-hits="22" data-linenumber="14">
<span class="hits">22</span>
<code class="ruby"> [status, headers, [payload] ]</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="17">
<span class="hits">1</span>
<code class="ruby"> extend self</code>
</li>
<li class="covered" data-hits="1" data-linenumber="18">
<span class="hits">1</span>
<code class="ruby"> load_dir(&quot;#{__dir__}/v3&quot;)</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="20">
<span class="hits">1</span>
<code class="ruby"> ClientError = Error .create(status: 400)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="21">
<span class="hits">1</span>
<code class="ruby"> NotFound = ClientError .create(:resource, status: 404, template: &#39;%s not found (or insufficient access)&#39;)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="22">
<span class="hits">1</span>
<code class="ruby"> EnitityMissing = NotFound .create(type: &#39;not_found&#39;)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="23">
<span class="hits">1</span>
<code class="ruby"> WrongCredentials = ClientError .create(&#39;access denied&#39;, status: 403)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="24">
<span class="hits">1</span>
<code class="ruby"> WrongParams = ClientError .create(&#39;wrong parameters&#39;)</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="130cf32796ab3cf4d5781313e44244a58973bbf8">
<div class="header">
<h3>lib/travis/api/v3/access_control.rb</h3>
<h4><span class="green">100.0 %</span> covered</h4>
<div>
<b>11</b> relevant lines.
<span class="green"><b>11</b> lines covered</span> and
<span class="red"><b>0</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis::API::V3</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module AccessControl</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> REGISTER = {}</code>
</li>
<li class="never" data-hits="" data-linenumber="4">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> def self.new(env)</code>
</li>
<li class="covered" data-hits="23" data-linenumber="6">
<span class="hits">23</span>
<code class="ruby"> type, payload = env[&#39;HTTP_AUTHORIZATION&#39;.freeze].to_s.split(&quot; &quot;, 2)</code>
</li>
<li class="covered" data-hits="23" data-linenumber="7">
<span class="hits">23</span>
<code class="ruby"> payload &amp;&amp;= payload.unpack(?m.freeze).first if type == &#39;basic&#39;.freeze</code>
</li>
<li class="covered" data-hits="23" data-linenumber="8">
<span class="hits">23</span>
<code class="ruby"> payload &amp;&amp;= type == &#39;token&#39;.freeze ? payload.gsub(/^&quot;(.+)&quot;$/, &#39;\1&#39;.freeze) : payload.split(?:.freeze)</code>
</li>
<li class="covered" data-hits="23" data-linenumber="9">
<span class="hits">23</span>
<code class="ruby"> modes = REGISTER.fetch(type, [])</code>
</li>
<li class="covered" data-hits="46" data-linenumber="10">
<span class="hits">46</span>
<code class="ruby"> access_control = modes.inject(nil) { |current, mode| current || mode.for_request(type, payload, env) }</code>
</li>
<li class="covered" data-hits="23" data-linenumber="11">
<span class="hits">23</span>
<code class="ruby"> raise WrongCredentials unless access_control</code>
</li>
<li class="covered" data-hits="23" data-linenumber="12">
<span class="hits">23</span>
<code class="ruby"> access_control</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="0c37cbeb8112d8c673c2de5e8d4a0bc4a54debad">
<div class="header">
<h3>lib/travis/api/v3/access_control/anonymous.rb</h3>
<h4><span class="green">100.0 %</span> covered</h4>
<div>
<b>6</b> relevant lines.
<span class="green"><b>6</b> lines covered</span> and
<span class="red"><b>0</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/v3/access_control/generic&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">module Travis::API::V3</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> class AccessControl::Anonymous &lt; AccessControl::Generic</code>
</li>
<li class="never" data-hits="" data-linenumber="5">
<code class="ruby"> # use when Authorization header is not set</code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> auth_type(nil)</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> def self.for_request(*)</code>
</li>
<li class="covered" data-hits="13" data-linenumber="9">
<span class="hits">13</span>
<code class="ruby"> new</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="0a4dcd743492bb72a7b2e02c986303e9b6a5f680">
<div class="header">
<h3>lib/travis/api/v3/access_control/application.rb</h3>
<h4><span class="green">93.33 %</span> covered</h4>
<div>
<b>15</b> relevant lines.
<span class="green"><b>14</b> lines covered</span> and
<span class="red"><b>1</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/v3/access_control/generic&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">module Travis::API::V3</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> class AccessControl::Application &lt; AccessControl::Generic</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> attr_reader :application_name, :config, :user</code>
</li>
<li class="never" data-hits="" data-linenumber="6">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> def initialize(application_name, user: nil)</code>
</li>
<li class="covered" data-hits="6" data-linenumber="8">
<span class="hits">6</span>
<code class="ruby"> @application_name = application_name</code>
</li>
<li class="covered" data-hits="6" data-linenumber="9">
<span class="hits">6</span>
<code class="ruby"> @config = Travis.config.applications[application_name]</code>
</li>
<li class="covered" data-hits="6" data-linenumber="10">
<span class="hits">6</span>
<code class="ruby"> @user = user</code>
</li>
<li class="covered" data-hits="6" data-linenumber="11">
<span class="hits">6</span>
<code class="ruby"> raise ArgumentError, &#39;unknown application %p&#39; % application_name unless config</code>
</li>
<li class="covered" data-hits="6" data-linenumber="12">
<span class="hits">6</span>
<code class="ruby"> raise ArgumentError, &#39;cannot use %p without a user&#39; % application_name if config.requires_user and not user</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="15">
<span class="hits">1</span>
<code class="ruby"> protected</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="17">
<span class="hits">1</span>
<code class="ruby"> def logged_in?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="18">
<code class="ruby"> !!user</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="21">
<span class="hits">1</span>
<code class="ruby"> def full_access?</code>
</li>
<li class="covered" data-hits="4" data-linenumber="22">
<span class="hits">4</span>
<code class="ruby"> config.full_access</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="3e4c532be49003dde82e2f143a6ec6abac0c0fa4">
<div class="header">
<h3>lib/travis/api/v3/access_control/generic.rb</h3>
<h4><span class="green">100.0 %</span> covered</h4>
<div>
<b>25</b> relevant lines.
<span class="green"><b>25</b> lines covered</span> and
<span class="red"><b>0</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis::API::V3</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> class AccessControl::Generic</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> def self.for_request(type, payload, env)</code>
</li>
<li class="never" data-hits="" data-linenumber="4">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="5">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> def self.auth_type(*list)</code>
</li>
<li class="covered" data-hits="7" data-linenumber="7">
<span class="hits">7</span>
<code class="ruby"> list.each { |e| (AccessControl::REGISTER[e] ||= []) &lt;&lt; self }</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> def visible?(object)</code>
</li>
<li class="covered" data-hits="18" data-linenumber="11">
<span class="hits">18</span>
<code class="ruby"> full_access? or dispatch(object)</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="14">
<span class="hits">1</span>
<code class="ruby"> protected</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="16">
<span class="hits">1</span>
<code class="ruby"> def repository_visible?(repository)</code>
</li>
<li class="covered" data-hits="14" data-linenumber="17">
<span class="hits">14</span>
<code class="ruby"> return true if unrestricted_api? and not repository.private?</code>
</li>
<li class="covered" data-hits="12" data-linenumber="18">
<span class="hits">12</span>
<code class="ruby"> private_repository_visible?(repository)</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="21">
<span class="hits">1</span>
<code class="ruby"> def private_repository_visible?(repository)</code>
</li>
<li class="covered" data-hits="4" data-linenumber="22">
<span class="hits">4</span>
<code class="ruby"> false</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="25">
<span class="hits">1</span>
<code class="ruby"> def full_access?</code>
</li>
<li class="covered" data-hits="28" data-linenumber="26">
<span class="hits">28</span>
<code class="ruby"> false</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="29">
<span class="hits">1</span>
<code class="ruby"> def logged_in?</code>
</li>
<li class="covered" data-hits="14" data-linenumber="30">
<span class="hits">14</span>
<code class="ruby"> false</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="33">
<span class="hits">1</span>
<code class="ruby"> def public_api?</code>
</li>
<li class="covered" data-hits="14" data-linenumber="34">
<span class="hits">14</span>
<code class="ruby"> !Travis.config.private_api</code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="36">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="37">
<span class="hits">1</span>
<code class="ruby"> def unrestricted_api?</code>
</li>
<li class="covered" data-hits="14" data-linenumber="38">
<span class="hits">14</span>
<code class="ruby"> full_access? or logged_in? or public_api?</code>
</li>
<li class="never" data-hits="" data-linenumber="39">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="40">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="41">
<span class="hits">1</span>
<code class="ruby"> private</code>
</li>
<li class="never" data-hits="" data-linenumber="42">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="43">
<span class="hits">1</span>
<code class="ruby"> def dispatch(object, method = caller_locations.first.base_label)</code>
</li>
<li class="covered" data-hits="14" data-linenumber="44">
<span class="hits">14</span>
<code class="ruby"> method = object.class.name.underscore + ?_.freeze + method</code>
</li>
<li class="covered" data-hits="14" data-linenumber="45">
<span class="hits">14</span>
<code class="ruby"> send(method, object) if respond_to?(method, true)</code>
</li>
<li class="never" data-hits="" data-linenumber="46">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="47">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="48">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="cc06bcaeb6af4b5039cc7be04f2dcf7d8cbc1656">
<div class="header">
<h3>lib/travis/api/v3/access_control/legacy_token.rb</h3>
<h4><span class="green">100.0 %</span> covered</h4>
<div>
<b>15</b> relevant lines.
<span class="green"><b>15</b> lines covered</span> and
<span class="red"><b>0</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app/access_token&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/v3/access_control/user&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="3">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby">module Travis::API::V3</code>
</li>
<li class="never" data-hits="" data-linenumber="5">
<code class="ruby"> # Using v2 API tokens to access v3 API.</code>
</li>
<li class="never" data-hits="" data-linenumber="6">
<code class="ruby"> # Allows us to later introduce a new way of storing tokens with more capabilities without API users having to know.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> class AccessControl::LegacyToken &lt; AccessControl::User</code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> auth_type(&#39;token&#39;, &#39;basic&#39;)</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> def self.for_request(type, payload, env)</code>
</li>
<li class="covered" data-hits="4" data-linenumber="11">
<span class="hits">4</span>
<code class="ruby"> payload = paylad.first if payload.is_a? Array</code>
</li>
<li class="covered" data-hits="4" data-linenumber="12">
<span class="hits">4</span>
<code class="ruby"> token = Travis::Api::App::AccessToken.find_by_token(payload)</code>
</li>
<li class="covered" data-hits="4" data-linenumber="13">
<span class="hits">4</span>
<code class="ruby"> new(token) if token</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="16">
<span class="hits">1</span>
<code class="ruby"> def initialize(token)</code>
</li>
<li class="covered" data-hits="4" data-linenumber="17">
<span class="hits">4</span>
<code class="ruby"> @token = token</code>
</li>
<li class="covered" data-hits="4" data-linenumber="18">
<span class="hits">4</span>
<code class="ruby"> super(token.user)</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="21">
<span class="hits">1</span>
<code class="ruby"> protected</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="23">
<span class="hits">1</span>
<code class="ruby"> def permission?(action, id)</code>
</li>
<li class="covered" data-hits="4" data-linenumber="24">
<span class="hits">4</span>
<code class="ruby"> super if @token.scopes.include? :private</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="53595a642e443774649a7e171c5987c76711acd2">
<div class="header">
<h3>lib/travis/api/v3/access_control/scoped.rb</h3>
<h4><span class="green">100.0 %</span> covered</h4>
<div>
<b>11</b> relevant lines.
<span class="green"><b>11</b> lines covered</span> and
<span class="red"><b>0</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/v3/access_control/generic&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">module Travis::API::V3</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> class AccessControl::Scoped &lt; AccessControl::Generic</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> attr_accessor :unscoped, :owner_name, :name</code>
</li>
<li class="never" data-hits="" data-linenumber="6">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> def initialize(scope, unscoped)</code>
</li>
<li class="covered" data-hits="4" data-linenumber="8">
<span class="hits">4</span>
<code class="ruby"> @owner_name, @name = scope.split(?/.freeze, 2)</code>
</li>
<li class="covered" data-hits="4" data-linenumber="9">
<span class="hits">4</span>
<code class="ruby"> @unscoped = unscoped</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="12">
<span class="hits">1</span>
<code class="ruby"> protected</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="14">
<span class="hits">1</span>
<code class="ruby"> def private_repository_visible?(repository)</code>
</li>
<li class="covered" data-hits="4" data-linenumber="15">
<span class="hits">4</span>
<code class="ruby"> return false if name and repository.name != name</code>
</li>
<li class="covered" data-hits="4" data-linenumber="16">
<span class="hits">4</span>
<code class="ruby"> unscoped.visible?(repository) if repository.owner_name == owner_name</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="79c75a7a3afdda48d239b26bfbce537aac5c7e87">
<div class="header">
<h3>lib/travis/api/v3/access_control/signature.rb</h3>
<h4><span class="yellow">81.25 %</span> covered</h4>
<div>
<b>32</b> relevant lines.
<span class="green"><b>26</b> lines covered</span> and
<span class="red"><b>6</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/v3/access_control/generic&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/app/access_token&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">require &#39;digest/sha1&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby">require &#39;openssl&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="5">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby">module Travis::API::V3</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"> # Support signed requests to not expose the secret to an untrusted environment.</code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> class AccessControl::Signature &lt; AccessControl::Generic</code>
</li>
<li class="covered" data-hits="1" data-linenumber="9">
<span class="hits">1</span>
<code class="ruby"> auth_type(&#39;signature&#39;)</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="11">
<span class="hits">1</span>
<code class="ruby"> def self.for_request(type, payload, env)</code>
</li>
<li class="covered" data-hits="6" data-linenumber="12">
<span class="hits">6</span>
<code class="ruby"> *args, signature = payload</code>
</li>
<li class="covered" data-hits="16" data-linenumber="13">
<span class="hits">16</span>
<code class="ruby"> options = Hash[args.map { |a| a.split(?=.freeze, 2) }]</code>
</li>
<li class="covered" data-hits="6" data-linenumber="14">
<span class="hits">6</span>
<code class="ruby"> challenge = &quot;&quot;</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="6" data-linenumber="16">
<span class="hits">6</span>
<code class="ruby"> if github_id = options[?u.freeze]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="17">
<code class="ruby"> return unless user = ::User.find_by_github_id(github_id)</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="6" data-linenumber="20">
<span class="hits">6</span>
<code class="ruby"> if application = options[?a.freeze]</code>
</li>
<li class="covered" data-hits="6" data-linenumber="21">
<span class="hits">6</span>
<code class="ruby"> return unless Travis.config.applications and app_config = Travis.config.applications[application]</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="6" data-linenumber="24">
<span class="hits">6</span>
<code class="ruby"> if c = options[?c.freeze]</code>
</li>
<li class="missed" data-hits="0" data-linenumber="25">
<code class="ruby"> challenge &lt;&lt; env[&#39;REQUEST_METHOD&#39;.freeze] &lt;&lt; &quot;\n&quot;.freeze if c.include?(?m.freeze)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="26">
<code class="ruby"> challenge &lt;&lt; env[&#39;SCRIPT_NAME&#39;.freeze] &lt;&lt; env[&#39;PATH_INFO&#39;.freeze] &lt;&lt; &quot;\n&quot; if c.include?(?p.freeze)</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="6" data-linenumber="29">
<span class="hits">6</span>
<code class="ruby"> challenge &lt;&lt; app_config[:secret] if app_config and user</code>
</li>
<li class="covered" data-hits="6" data-linenumber="30">
<span class="hits">6</span>
<code class="ruby"> challenge &lt;&lt; args.join(?:.freeze)</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="6" data-linenumber="32">
<span class="hits">6</span>
<code class="ruby"> if app_config</code>
</li>
<li class="covered" data-hits="6" data-linenumber="33">
<span class="hits">6</span>
<code class="ruby"> control = AccessControl::Application.new(application, user: user)</code>
</li>
<li class="covered" data-hits="6" data-linenumber="34">
<span class="hits">6</span>
<code class="ruby"> secrets = user ? secrets_for(user) : [app_config[:secret]]</code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"> else</code>
</li>
<li class="missed" data-hits="0" data-linenumber="36">
<code class="ruby"> control = AccessControl::User.new(user)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="37">
<code class="ruby"> secrets = secrets_for(user)</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="39">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="6" data-linenumber="40">
<span class="hits">6</span>
<code class="ruby"> if scope = options[?s.freeze]</code>
</li>
<li class="covered" data-hits="4" data-linenumber="41">
<span class="hits">4</span>
<code class="ruby"> control &amp;&amp;= AccessControl::Scoped.new(scope, control) </code>
</li>
<li class="never" data-hits="" data-linenumber="42">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="43">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="12" data-linenumber="44">
<span class="hits">12</span>
<code class="ruby"> control if secrets.any? { |secret| signed(challenge, secret) == signature }</code>
</li>
<li class="never" data-hits="" data-linenumber="45">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="46">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="47">
<span class="hits">1</span>
<code class="ruby"> def self.secrets_for(user)</code>
</li>
<li class="never" data-hits="" data-linenumber="48">
<code class="ruby"> [</code>
</li>
<li class="missed" data-hits="0" data-linenumber="49">
<code class="ruby"> Travis::Api::App::AccessToken.new(user: user, app_id: 1), # generated from github token</code>
</li>
<li class="never" data-hits="" data-linenumber="50">
<code class="ruby"> Travis::Api::App::AccessToken.new(user: user, app_id: 0) # used by web</code>
</li>
<li class="never" data-hits="" data-linenumber="51">
<code class="ruby"> ]</code>
</li>
<li class="never" data-hits="" data-linenumber="52">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="53">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="54">
<span class="hits">1</span>
<code class="ruby"> def self.signed(challenge, secret)</code>
</li>
<li class="covered" data-hits="6" data-linenumber="55">
<span class="hits">6</span>
<code class="ruby"> OpenSSL::HMAC.hexdigest(&#39;sha256&#39;.freeze, secret, challenge)</code>
</li>
<li class="never" data-hits="" data-linenumber="56">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="57">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="58">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="8ed530d2fb0e1b23faa65b796edd40391a551aff">
<div class="header">
<h3>lib/travis/api/v3/access_control/user.rb</h3>
<h4><span class="green">100.0 %</span> covered</h4>
<div>
<b>14</b> relevant lines.
<span class="green"><b>14</b> lines covered</span> and
<span class="red"><b>0</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/v3/access_control/generic&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">module Travis::API::V3</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> class AccessControl::User &lt; AccessControl::Generic</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> attr_reader :user, :permissions</code>
</li>
<li class="never" data-hits="" data-linenumber="6">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> def initialize(user)</code>
</li>
<li class="covered" data-hits="4" data-linenumber="8">
<span class="hits">4</span>
<code class="ruby"> @user = user</code>
</li>
<li class="covered" data-hits="4" data-linenumber="9">
<span class="hits">4</span>
<code class="ruby"> @permissions = user.permissions.where(user_id: user.id)</code>
</li>
<li class="covered" data-hits="4" data-linenumber="10">
<span class="hits">4</span>
<code class="ruby"> super()</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="13">
<span class="hits">1</span>
<code class="ruby"> protected</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="15">
<span class="hits">1</span>
<code class="ruby"> def private_repository_visible?(repository)</code>
</li>
<li class="covered" data-hits="4" data-linenumber="16">
<span class="hits">4</span>
<code class="ruby"> permission?(:pull, repository)</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="19">
<span class="hits">1</span>
<code class="ruby"> def permission?(type, id)</code>
</li>
<li class="covered" data-hits="4" data-linenumber="20">
<span class="hits">4</span>
<code class="ruby"> id = id.id if id.is_a? ::Repository</code>
</li>
<li class="covered" data-hits="4" data-linenumber="21">
<span class="hits">4</span>
<code class="ruby"> permissions.where(type =&gt; true, :repository_id =&gt; id).any?</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="e7d3951ce9217b83d561dc22cebb4194095eba79">
<div class="header">
<h3>lib/travis/api/v3/error.rb</h3>
<h4><span class="yellow">85.71 %</span> covered</h4>
<div>
<b>21</b> relevant lines.
<span class="green"><b>18</b> lines covered</span> and
<span class="red"><b>3</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;rack/utils&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">module Travis::API::V3</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> class Error &lt; StandardError</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> def self.create(default_message = nil, **options)</code>
</li>
<li class="covered" data-hits="5" data-linenumber="6">
<span class="hits">5</span>
<code class="ruby"> options[:default_message] = default_message if default_message</code>
</li>
<li class="covered" data-hits="38" data-linenumber="7">
<span class="hits">38</span>
<code class="ruby"> Class.new(self) { options.each { |key, value| define_singleton_method(key) { value } } }</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> def self.status</code>
</li>
<li class="missed" data-hits="0" data-linenumber="11">
<code class="ruby"> 500</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="14">
<span class="hits">1</span>
<code class="ruby"> def self.type</code>
</li>
<li class="covered" data-hits="10" data-linenumber="15">
<span class="hits">10</span>
<code class="ruby"> @type ||= name[/[^:]+$/].underscore</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="18">
<span class="hits">1</span>
<code class="ruby"> def self.template</code>
</li>
<li class="missed" data-hits="0" data-linenumber="19">
<code class="ruby"> &#39;%s&#39;.freeze</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="22">
<span class="hits">1</span>
<code class="ruby"> def self.default_message</code>
</li>
<li class="missed" data-hits="0" data-linenumber="23">
<code class="ruby"> @default_message ||= Rack::Utils::HTTP_STATUS_CODES.fetch(status, &#39;unknown error&#39;.freeze).downcase</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="26">
<span class="hits">1</span>
<code class="ruby"> attr_accessor :status, :type, :payload</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="28">
<span class="hits">1</span>
<code class="ruby"> def initialize(message = self.class.default_message, status: self.class.status, type: self.class.type, **payload)</code>
</li>
<li class="covered" data-hits="10" data-linenumber="29">
<span class="hits">10</span>
<code class="ruby"> if message.is_a? Symbol</code>
</li>
<li class="covered" data-hits="10" data-linenumber="30">
<span class="hits">10</span>
<code class="ruby"> payload[:resource_type] ||= message</code>
</li>
<li class="covered" data-hits="10" data-linenumber="31">
<span class="hits">10</span>
<code class="ruby"> message = self.class.template % message</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="10" data-linenumber="34">
<span class="hits">10</span>
<code class="ruby"> self.status, self.type, self.payload = status, type, payload</code>
</li>
<li class="covered" data-hits="10" data-linenumber="35">
<span class="hits">10</span>
<code class="ruby"> super(message)</code>
</li>
<li class="never" data-hits="" data-linenumber="36">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="31a1a8c991fef1e18b15080ccfcb0e9ba1d8c1a4">
<div class="header">
<h3>lib/travis/api/v3/opt_in.rb</h3>
<h4><span class="green">97.22 %</span> covered</h4>
<div>
<b>36</b> relevant lines.
<span class="green"><b>35</b> lines covered</span> and
<span class="red"><b>1</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis::API::V3</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> class OptIn</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> attr_reader :legacy_stack, :prefix, :router, :accept, :version_header</code>
</li>
<li class="never" data-hits="" data-linenumber="4">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> def initialize(legacy_stack, prefix: &#39;/v3&#39;, router: Router.new, accept: &#39;application/vnd.travis-ci.3+&#39;, version_header: &#39;Travis-API-Version&#39;)</code>
</li>
<li class="covered" data-hits="27" data-linenumber="6">
<span class="hits">27</span>
<code class="ruby"> @legacy_stack = legacy_stack</code>
</li>
<li class="covered" data-hits="27" data-linenumber="7">
<span class="hits">27</span>
<code class="ruby"> @prefix = prefix</code>
</li>
<li class="covered" data-hits="27" data-linenumber="8">
<span class="hits">27</span>
<code class="ruby"> @router = router</code>
</li>
<li class="covered" data-hits="27" data-linenumber="9">
<span class="hits">27</span>
<code class="ruby"> @accept = accept</code>
</li>
<li class="covered" data-hits="27" data-linenumber="10">
<span class="hits">27</span>
<code class="ruby"> @version_header = &quot;HTTP_#{version_header.upcase.gsub(/\W/, &#39;_&#39;)}&quot;</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="13">
<span class="hits">1</span>
<code class="ruby"> def call(env)</code>
</li>
<li class="covered" data-hits="23" data-linenumber="14">
<span class="hits">23</span>
<code class="ruby"> return redirect(env) if redirect?(env)</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="23" data-linenumber="16">
<span class="hits">23</span>
<code class="ruby"> if matched = matching_env(env)</code>
</li>
<li class="covered" data-hits="23" data-linenumber="17">
<span class="hits">23</span>
<code class="ruby"> result = @router.call(matched)</code>
</li>
<li class="covered" data-hits="23" data-linenumber="18">
<span class="hits">23</span>
<code class="ruby"> result, missing = nil, result if cascade?(*result)</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="23" data-linenumber="21">
<span class="hits">23</span>
<code class="ruby"> result = result || legacy_stack.call(env)</code>
</li>
<li class="covered" data-hits="23" data-linenumber="22">
<span class="hits">23</span>
<code class="ruby"> pick(result, missing)</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="25">
<span class="hits">1</span>
<code class="ruby"> def pick(result, missing)</code>
</li>
<li class="covered" data-hits="23" data-linenumber="26">
<span class="hits">23</span>
<code class="ruby"> return result if missing.nil?</code>
</li>
<li class="covered" data-hits="10" data-linenumber="27">
<span class="hits">10</span>
<code class="ruby"> return result if result[0] != 404</code>
</li>
<li class="covered" data-hits="10" data-linenumber="28">
<span class="hits">10</span>
<code class="ruby"> missing</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="31">
<span class="hits">1</span>
<code class="ruby"> def redirect?(env)</code>
</li>
<li class="covered" data-hits="23" data-linenumber="32">
<span class="hits">23</span>
<code class="ruby"> env[&#39;PATH_INFO&#39;.freeze] == prefix</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="35">
<span class="hits">1</span>
<code class="ruby"> def redirect(env)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="36">
<code class="ruby"> [307, {&#39;Location&#39;.freeze =&gt; env[&#39;SCRIPT_NAME&#39;.freeze] + prefix + ?/.freeze, &#39;Conent-Type&#39;.freeze =&gt; &#39;text/plain&#39;.freeze}, []]</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="38">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="39">
<span class="hits">1</span>
<code class="ruby"> def cascade?(status, headers, body)</code>
</li>
<li class="covered" data-hits="23" data-linenumber="40">
<span class="hits">23</span>
<code class="ruby"> status % 100 == 4 and headers[&#39;X-Cascade&#39;.freeze] == &#39;pass&#39;.freeze</code>
</li>
<li class="never" data-hits="" data-linenumber="41">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="42">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="43">
<span class="hits">1</span>
<code class="ruby"> def matching_env(env)</code>
</li>
<li class="covered" data-hits="23" data-linenumber="44">
<span class="hits">23</span>
<code class="ruby"> for_v3 = from_prefix(env) || from_accept(env) || from_version_header(env)</code>
</li>
<li class="covered" data-hits="23" data-linenumber="45">
<span class="hits">23</span>
<code class="ruby"> for_v3 == true ? env : for_v3</code>
</li>
<li class="never" data-hits="" data-linenumber="46">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="47">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="48">
<span class="hits">1</span>
<code class="ruby"> def from_prefix(env)</code>
</li>
<li class="covered" data-hits="23" data-linenumber="49">
<span class="hits">23</span>
<code class="ruby"> return unless prefix and env[&#39;PATH_INFO&#39;.freeze].start_with?(prefix + ?/.freeze)</code>
</li>
<li class="covered" data-hits="20" data-linenumber="50">
<span class="hits">20</span>
<code class="ruby"> env.merge({</code>
</li>
<li class="never" data-hits="" data-linenumber="51">
<code class="ruby"> &#39;SCRIPT_NAME&#39;.freeze =&gt; env[&#39;SCRIPT_NAME&#39;.freeze] + prefix,</code>
</li>
<li class="never" data-hits="" data-linenumber="52">
<code class="ruby"> &#39;PATH_INFO&#39;.freeze =&gt; env[&#39;PATH_INFO&#39;.freeze][prefix.size..-1]</code>
</li>
<li class="never" data-hits="" data-linenumber="53">
<code class="ruby"> })</code>
</li>
<li class="never" data-hits="" data-linenumber="54">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="55">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="56">
<span class="hits">1</span>
<code class="ruby"> def from_accept(env)</code>
</li>
<li class="covered" data-hits="3" data-linenumber="57">
<span class="hits">3</span>
<code class="ruby"> env[&#39;HTTP_ACCEPT&#39;.freeze].include?(accept) if accept and env.include?(&#39;HTTP_ACCEPT&#39;.freeze)</code>
</li>
<li class="never" data-hits="" data-linenumber="58">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="59">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="60">
<span class="hits">1</span>
<code class="ruby"> def from_version_header(env)</code>
</li>
<li class="covered" data-hits="2" data-linenumber="61">
<span class="hits">2</span>
<code class="ruby"> env[version_header] == &#39;3&#39;.freeze if version_header and env.include?(version_header)</code>
</li>
<li class="never" data-hits="" data-linenumber="62">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="63">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="64">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="8705c480fd77b20d19558856194eeee048030a20">
<div class="header">
<h3>lib/travis/api/v3/renderer.rb</h3>
<h4><span class="green">100.0 %</span> covered</h4>
<div>
<b>8</b> relevant lines.
<span class="green"><b>8</b> lines covered</span> and
<span class="red"><b>0</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis::API::V3</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Renderer</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> extend self</code>
</li>
<li class="never" data-hits="" data-linenumber="4">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> def [](key)</code>
</li>
<li class="covered" data-hits="18" data-linenumber="6">
<span class="hits">18</span>
<code class="ruby"> return key if key.respond_to? :render</code>
</li>
<li class="covered" data-hits="18" data-linenumber="7">
<span class="hits">18</span>
<code class="ruby"> const_get(key.to_s.camelize)</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> def format_date(date)</code>
</li>
<li class="covered" data-hits="16" data-linenumber="11">
<span class="hits">16</span>
<code class="ruby"> date &amp;&amp; date.strftime(&#39;%Y-%m-%dT%H:%M:%SZ&#39;)</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="1b1a35fbaa7ca2749c8e0b8b9c270d2424fa0183">
<div class="header">
<h3>lib/travis/api/v3/renderer/error.rb</h3>
<h4><span class="green">100.0 %</span> covered</h4>
<div>
<b>5</b> relevant lines.
<span class="green"><b>5</b> lines covered</span> and
<span class="red"><b>0</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis::API::V3</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Renderer::Error</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> extend self</code>
</li>
<li class="never" data-hits="" data-linenumber="4">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> def render(error)</code>
</li>
<li class="never" data-hits="" data-linenumber="6">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"> :@type =&gt; &#39;error&#39;.freeze,</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"> :error_type =&gt; error.type,</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"> :error_message =&gt; error.message,</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"> **error.payload</code>
</li>
<li class="covered" data-hits="10" data-linenumber="11">
<span class="hits">10</span>
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="cca5ed5e9f0a0d7cd46bb5427220ee36042a9e9c">
<div class="header">
<h3>lib/travis/api/v3/renderer/repository.rb</h3>
<h4><span class="green">100.0 %</span> covered</h4>
<div>
<b>10</b> relevant lines.
<span class="green"><b>10</b> lines covered</span> and
<span class="red"><b>0</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis::API::V3</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Renderer::Repository</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> DIRECT_ATTRIBUTES = %i[id name slug description github_language private]</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> extend self</code>
</li>
<li class="never" data-hits="" data-linenumber="5">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> def render(repository)</code>
</li>
<li class="covered" data-hits="8" data-linenumber="7">
<span class="hits">8</span>
<code class="ruby"> { :@type =&gt; &#39;repository&#39;.freeze, **direct_attributes(repository), **nested_resources(repository) }</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> def direct_attributes(repository)</code>
</li>
<li class="covered" data-hits="56" data-linenumber="11">
<span class="hits">56</span>
<code class="ruby"> DIRECT_ATTRIBUTES.map { |a| [a, repository.public_send(a)] }.to_h</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="14">
<span class="hits">1</span>
<code class="ruby"> def nested_resources(repository)</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"> {</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> owner: {</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"> :@type =&gt; repository.owner_type.downcase,</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"> :id =&gt; repository.owner_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"> :login =&gt; repository.owner_name</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"> },</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"> last_build: {</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"> :@type =&gt; &#39;build&#39;.freeze,</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> :id =&gt; repository.last_build_id,</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"> :number =&gt; repository.last_build_number,</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> :state =&gt; repository.last_build_state.to_s,</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> :duration =&gt; repository.last_build_duration,</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"> :started_at =&gt; Renderer.format_date(repository.last_build_started_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"> :finished_at =&gt; Renderer.format_date(repository.last_build_finished_at),</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> }</code>
</li>
<li class="covered" data-hits="8" data-linenumber="30">
<span class="hits">8</span>
<code class="ruby"> }</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="74ddbe2707d65e192759c48049f9527b65ce82db">
<div class="header">
<h3>lib/travis/api/v3/result.rb</h3>
<h4><span class="green">93.75 %</span> covered</h4>
<div>
<b>16</b> relevant lines.
<span class="green"><b>15</b> lines covered</span> and
<span class="red"><b>1</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis::API::V3</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> class Result</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> attr_accessor :type, :resource</code>
</li>
<li class="never" data-hits="" data-linenumber="4">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> def initialize(type, resource = [])</code>
</li>
<li class="covered" data-hits="22" data-linenumber="6">
<span class="hits">22</span>
<code class="ruby"> @type, @resource = type, resource</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="9">
<span class="hits">1</span>
<code class="ruby"> def respond_to_missing?(method, *)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="10">
<code class="ruby"> super or method.to_sym == type.to_sym</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="13">
<span class="hits">1</span>
<code class="ruby"> def &lt;&lt;(value)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="14">
<span class="hits">1</span>
<code class="ruby"> resource &lt;&lt; value</code>
</li>
<li class="covered" data-hits="1" data-linenumber="15">
<span class="hits">1</span>
<code class="ruby"> self</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="18">
<span class="hits">1</span>
<code class="ruby"> def render</code>
</li>
<li class="covered" data-hits="18" data-linenumber="19">
<span class="hits">18</span>
<code class="ruby"> Renderer[type].render(resource)</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="22">
<span class="hits">1</span>
<code class="ruby"> def method_missing(method, *args)</code>
</li>
<li class="covered" data-hits="2" data-linenumber="23">
<span class="hits">2</span>
<code class="ruby"> return super unless method.to_sym == type.to_sym</code>
</li>
<li class="covered" data-hits="2" data-linenumber="24">
<span class="hits">2</span>
<code class="ruby"> raise ArgumentError, &#39;wrong number of arguments (1 for 0)&#39;.freeze if args.any?</code>
</li>
<li class="covered" data-hits="2" data-linenumber="25">
<span class="hits">2</span>
<code class="ruby"> resource</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="31c7c96fc03fbcc205b874d99b9af9102c3400d7">
<div class="header">
<h3>lib/travis/api/v3/router.rb</h3>
<h4><span class="green">90.32 %</span> covered</h4>
<div>
<b>31</b> relevant lines.
<span class="green"><b>28</b> lines covered</span> and
<span class="red"><b>3</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis::API::V3</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> class Router</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> include Travis::API::V3</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> attr_accessor :routes</code>
</li>
<li class="never" data-hits="" data-linenumber="5">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> def initialize(routes = Routes)</code>
</li>
<li class="covered" data-hits="27" data-linenumber="7">
<span class="hits">27</span>
<code class="ruby"> @routes = routes</code>
</li>
<li class="covered" data-hits="27" data-linenumber="8">
<span class="hits">27</span>
<code class="ruby"> routes.draw_routes</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="11">
<span class="hits">1</span>
<code class="ruby"> def call(env)</code>
</li>
<li class="covered" data-hits="23" data-linenumber="12">
<span class="hits">23</span>
<code class="ruby"> return service_index(env) if env[&#39;PATH_INFO&#39;.freeze] == ?/.freeze</code>
</li>
<li class="covered" data-hits="18" data-linenumber="13">
<span class="hits">18</span>
<code class="ruby"> access_control = AccessControl.new(env)</code>
</li>
<li class="covered" data-hits="18" data-linenumber="14">
<span class="hits">18</span>
<code class="ruby"> factory, params = routes.factory_for(env[&#39;REQUEST_METHOD&#39;.freeze], env[&#39;PATH_INFO&#39;.freeze])</code>
</li>
<li class="covered" data-hits="18" data-linenumber="15">
<span class="hits">18</span>
<code class="ruby"> env_params = params(env)</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="18" data-linenumber="17">
<span class="hits">18</span>
<code class="ruby"> raise NotFound unless factory</code>
</li>
<li class="never" data-hits="" data-linenumber="18">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="18" data-linenumber="19">
<span class="hits">18</span>
<code class="ruby"> service = factory.new(access_control, env_params.merge(params))</code>
</li>
<li class="covered" data-hits="18" data-linenumber="20">
<span class="hits">18</span>
<code class="ruby"> result = service.run</code>
</li>
<li class="covered" data-hits="8" data-linenumber="21">
<span class="hits">8</span>
<code class="ruby"> render(result, env_params)</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"> rescue Error =&gt; error</code>
</li>
<li class="covered" data-hits="10" data-linenumber="23">
<span class="hits">10</span>
<code class="ruby"> result = Result.new(:error, error)</code>
</li>
<li class="covered" data-hits="10" data-linenumber="24">
<span class="hits">10</span>
<code class="ruby"> V3.response(result.render, &#39;X-Cascade&#39;.freeze =&gt; &#39;pass&#39;.freeze, status: error.status)</code>
</li>
<li class="never" data-hits="" data-linenumber="25">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="27">
<span class="hits">1</span>
<code class="ruby"> def render(result, env_params)</code>
</li>
<li class="covered" data-hits="8" data-linenumber="28">
<span class="hits">8</span>
<code class="ruby"> V3.response(result.render)</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="30">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="31">
<span class="hits">1</span>
<code class="ruby"> def service_index(env)</code>
</li>
<li class="covered" data-hits="5" data-linenumber="32">
<span class="hits">5</span>
<code class="ruby"> ServiceIndex.for(env, routes).render(env)</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="34">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="35">
<span class="hits">1</span>
<code class="ruby"> def params(env)</code>
</li>
<li class="covered" data-hits="18" data-linenumber="36">
<span class="hits">18</span>
<code class="ruby"> request = Rack::Request.new(env)</code>
</li>
<li class="covered" data-hits="18" data-linenumber="37">
<span class="hits">18</span>
<code class="ruby"> params = request.params</code>
</li>
<li class="covered" data-hits="18" data-linenumber="38">
<span class="hits">18</span>
<code class="ruby"> media_type = request.media_type</code>
</li>
<li class="never" data-hits="" data-linenumber="39">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="18" data-linenumber="40">
<span class="hits">18</span>
<code class="ruby"> if media_type == &#39;application/json&#39;.freeze or media_type == &#39;text/json&#39;.freeze</code>
</li>
<li class="missed" data-hits="0" data-linenumber="41">
<code class="ruby"> request.body.rewind</code>
</li>
<li class="missed" data-hits="0" data-linenumber="42">
<code class="ruby"> json_params = env[&#39;travis.input.json&#39;.freeze] ||= JSON.load(request.body)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="43">
<code class="ruby"> params.merge! json_params if json_params.is_a? Hash</code>
</li>
<li class="never" data-hits="" data-linenumber="44">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="45">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="18" data-linenumber="46">
<span class="hits">18</span>
<code class="ruby"> params</code>
</li>
<li class="never" data-hits="" data-linenumber="47">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="48">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="49">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="0e450b71a9d314b9765473a9783eafbc6ad24b88">
<div class="header">
<h3>lib/travis/api/v3/routes.rb</h3>
<h4><span class="green">100.0 %</span> covered</h4>
<div>
<b>7</b> relevant lines.
<span class="green"><b>7</b> lines covered</span> and
<span class="red"><b>0</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis::API::V3</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Routes</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> require &#39;travis/api/v3/routes/dsl&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> extend DSL</code>
</li>
<li class="never" data-hits="" data-linenumber="5">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> resource :repository do</code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> route &#39;/repo/:id&#39;</code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> get :find_repository</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="2e298b60191a32090a5982c87b6a53c75d24cb8c">
<div class="header">
<h3>lib/travis/api/v3/routes/dsl.rb</h3>
<h4><span class="green">97.22 %</span> covered</h4>
<div>
<b>36</b> relevant lines.
<span class="green"><b>35</b> lines covered</span> and
<span class="red"><b>1</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;travis/api/v3/routes/resource&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">module Travis::API::V3</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> module Routes::DSL</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> def routes</code>
</li>
<li class="covered" data-hits="126" data-linenumber="6">
<span class="hits">126</span>
<code class="ruby"> @routes ||= {}</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="9">
<span class="hits">1</span>
<code class="ruby"> def resources</code>
</li>
<li class="covered" data-hits="32" data-linenumber="10">
<span class="hits">32</span>
<code class="ruby"> @resources ||= []</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="13">
<span class="hits">1</span>
<code class="ruby"> def current_resource</code>
</li>
<li class="covered" data-hits="3" data-linenumber="14">
<span class="hits">3</span>
<code class="ruby"> @current_resource ||= nil</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="17">
<span class="hits">1</span>
<code class="ruby"> def resource(type, &amp;block)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="18">
<span class="hits">1</span>
<code class="ruby"> resource = Routes::Resource.new(type)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="19">
<span class="hits">1</span>
<code class="ruby"> with_resource(resource, &amp;block)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="20">
<span class="hits">1</span>
<code class="ruby"> resources &lt;&lt; resource</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="23">
<span class="hits">1</span>
<code class="ruby"> def with_resource(resource)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="24">
<span class="hits">1</span>
<code class="ruby"> resource_was, @current_resource = current_resource, resource</code>
</li>
<li class="covered" data-hits="1" data-linenumber="25">
<span class="hits">1</span>
<code class="ruby"> yield</code>
</li>
<li class="never" data-hits="" data-linenumber="26">
<code class="ruby"> ensure</code>
</li>
<li class="covered" data-hits="1" data-linenumber="27">
<span class="hits">1</span>
<code class="ruby"> @current_resource = resource_was</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="29">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="30">
<span class="hits">1</span>
<code class="ruby"> def route(value)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="31">
<span class="hits">1</span>
<code class="ruby"> current_resource.route = value</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="34">
<span class="hits">1</span>
<code class="ruby"> def get(*args)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="35">
<span class="hits">1</span>
<code class="ruby"> current_resource.add_service(&#39;GET&#39;.freeze, *args)</code>
</li>
<li class="never" data-hits="" data-linenumber="36">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="38">
<span class="hits">1</span>
<code class="ruby"> def post(*args)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="39">
<code class="ruby"> current_resource.add_service(&#39;POST&#39;.freeze, *args)</code>
</li>
<li class="never" data-hits="" data-linenumber="40">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="41">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="42">
<span class="hits">1</span>
<code class="ruby"> def draw_routes</code>
</li>
<li class="covered" data-hits="27" data-linenumber="43">
<span class="hits">27</span>
<code class="ruby"> resources.each do |resource|</code>
</li>
<li class="covered" data-hits="27" data-linenumber="44">
<span class="hits">27</span>
<code class="ruby"> prefix = resource.route</code>
</li>
<li class="covered" data-hits="27" data-linenumber="45">
<span class="hits">27</span>
<code class="ruby"> resource.services.each do |(request_method, sub_route), service|</code>
</li>
<li class="covered" data-hits="27" data-linenumber="46">
<span class="hits">27</span>
<code class="ruby"> route = sub_route ? prefix + sub_route : prefix</code>
</li>
<li class="covered" data-hits="27" data-linenumber="47">
<span class="hits">27</span>
<code class="ruby"> routes[route] ||= {}</code>
</li>
<li class="covered" data-hits="27" data-linenumber="48">
<span class="hits">27</span>
<code class="ruby"> routes[route][request_method] = Services[service]</code>
</li>
<li class="never" data-hits="" data-linenumber="49">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="50">
<code class="ruby"> end</code>
</li>
<li class="covered" data-hits="27" data-linenumber="51">
<span class="hits">27</span>
<code class="ruby"> self.routes.replace(routes)</code>
</li>
<li class="never" data-hits="" data-linenumber="52">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="53">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="54">
<span class="hits">1</span>
<code class="ruby"> def factory_for(request_method, path)</code>
</li>
<li class="covered" data-hits="18" data-linenumber="55">
<span class="hits">18</span>
<code class="ruby"> routes.each do |route, method_map|</code>
</li>
<li class="covered" data-hits="18" data-linenumber="56">
<span class="hits">18</span>
<code class="ruby"> next unless params = route.params(path)</code>
</li>
<li class="covered" data-hits="18" data-linenumber="57">
<span class="hits">18</span>
<code class="ruby"> raise MethodNotAllowed unless factory = method_map[request_method]</code>
</li>
<li class="covered" data-hits="18" data-linenumber="58">
<span class="hits">18</span>
<code class="ruby"> return [factory, params]</code>
</li>
<li class="never" data-hits="" data-linenumber="59">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="60">
<code class="ruby"> nil # nothing matched</code>
</li>
<li class="never" data-hits="" data-linenumber="61">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="62">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="63">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="f17bf0ade034477bfdb62ad253c6d587b77e5214">
<div class="header">
<h3>lib/travis/api/v3/routes/resource.rb</h3>
<h4><span class="green">100.0 %</span> covered</h4>
<div>
<b>12</b> relevant lines.
<span class="green"><b>12</b> lines covered</span> and
<span class="red"><b>0</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">require &#39;mustermann&#39;</code>
</li>
<li class="never" data-hits="" data-linenumber="2">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby">module Travis::API::V3</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> class Routes::Resource</code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> attr_accessor :identifier, :route, :services</code>
</li>
<li class="never" data-hits="" data-linenumber="6">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> def initialize(identifier)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> @identifier = identifier</code>
</li>
<li class="covered" data-hits="1" data-linenumber="9">
<span class="hits">1</span>
<code class="ruby"> @services = {}</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="12">
<span class="hits">1</span>
<code class="ruby"> def add_service(request_method, service, sub_route = nil)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="13">
<span class="hits">1</span>
<code class="ruby"> sub_route &amp;&amp;= Mustermann.new(sub_route)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="14">
<span class="hits">1</span>
<code class="ruby"> services[[request_method, sub_route]] = service</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="17">
<span class="hits">1</span>
<code class="ruby"> def route=(value)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="18">
<span class="hits">1</span>
<code class="ruby"> @route = value ? Mustermann.new(value) : value</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="847a0c89fe4c592228989215bbeb1143051d97b6">
<div class="header">
<h3>lib/travis/api/v3/service.rb</h3>
<h4><span class="yellow">85.0 %</span> covered</h4>
<div>
<b>20</b> relevant lines.
<span class="green"><b>17</b> lines covered</span> and
<span class="red"><b>3</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis::API::V3</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> class Service</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> def self.required_params</code>
</li>
<li class="missed" data-hits="0" data-linenumber="4">
<code class="ruby"> @required_params ||= []</code>
</li>
<li class="never" data-hits="" data-linenumber="5">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="6">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> def self.params(*list, optional: false)</code>
</li>
<li class="covered" data-hits="1" data-linenumber="8">
<span class="hits">1</span>
<code class="ruby"> @params ||= []</code>
</li>
<li class="covered" data-hits="1" data-linenumber="9">
<span class="hits">1</span>
<code class="ruby"> list.each do |param|</code>
</li>
<li class="covered" data-hits="3" data-linenumber="10">
<span class="hits">3</span>
<code class="ruby"> param = param.to_s</code>
</li>
<li class="covered" data-hits="39" data-linenumber="11">
<span class="hits">39</span>
<code class="ruby"> define_method(param) { params[param] }</code>
</li>
<li class="covered" data-hits="3" data-linenumber="12">
<span class="hits">3</span>
<code class="ruby"> required_params &lt;&lt; param unless optional</code>
</li>
<li class="covered" data-hits="3" data-linenumber="13">
<span class="hits">3</span>
<code class="ruby"> @params &lt;&lt; param</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"> end</code>
</li>
<li class="covered" data-hits="1" data-linenumber="15">
<span class="hits">1</span>
<code class="ruby"> @params</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="17">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="18">
<span class="hits">1</span>
<code class="ruby"> attr_accessor :access_control, :params</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="20">
<span class="hits">1</span>
<code class="ruby"> def initialize(access_control, params)</code>
</li>
<li class="covered" data-hits="18" data-linenumber="21">
<span class="hits">18</span>
<code class="ruby"> @access_control = access_control</code>
</li>
<li class="covered" data-hits="18" data-linenumber="22">
<span class="hits">18</span>
<code class="ruby"> @params = params</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="25">
<span class="hits">1</span>
<code class="ruby"> def required_params?</code>
</li>
<li class="missed" data-hits="0" data-linenumber="26">
<code class="ruby"> required_params.all? { |param| params.include? param }</code>
</li>
<li class="never" data-hits="" data-linenumber="27">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="28">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="29">
<span class="hits">1</span>
<code class="ruby"> def required_params</code>
</li>
<li class="missed" data-hits="0" data-linenumber="30">
<code class="ruby"> self.class.required_params</code>
</li>
<li class="never" data-hits="" data-linenumber="31">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="32">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="33">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="63648861eabe7693b10dd0f87b899dfb0a4ff38f">
<div class="header">
<h3>lib/travis/api/v3/service_index.rb</h3>
<h4><span class="green">91.53 %</span> covered</h4>
<div>
<b>59</b> relevant lines.
<span class="green"><b>54</b> lines covered</span> and
<span class="red"><b>5</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis::API::V3</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> class ServiceIndex</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> ALLOW_POST = [&#39;application/json&#39;, &#39;application/x-www-form-urlencoded&#39;, &#39;multipart/form-data&#39;]</code>
</li>
<li class="covered" data-hits="1" data-linenumber="4">
<span class="hits">1</span>
<code class="ruby"> @index_cache = {}</code>
</li>
<li class="never" data-hits="" data-linenumber="5">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="6">
<span class="hits">1</span>
<code class="ruby"> def self.for(env, routes)</code>
</li>
<li class="covered" data-hits="5" data-linenumber="7">
<span class="hits">5</span>
<code class="ruby"> access_factory = AccessControl.new(env).class</code>
</li>
<li class="covered" data-hits="5" data-linenumber="8">
<span class="hits">5</span>
<code class="ruby"> prefix = env[&#39;SCRIPT_NAME&#39;.freeze]</code>
</li>
<li class="covered" data-hits="5" data-linenumber="9">
<span class="hits">5</span>
<code class="ruby"> @index_cache[[access_factory, routes, prefix]] ||= new(access_factory, routes, prefix)</code>
</li>
<li class="never" data-hits="" data-linenumber="10">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="12">
<span class="hits">1</span>
<code class="ruby"> attr_reader :access_factory, :routes, :json_home_response, :json_response, :prefix</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="14">
<span class="hits">1</span>
<code class="ruby"> def initialize(access_factory, routes, prefix)</code>
</li>
<li class="covered" data-hits="2" data-linenumber="15">
<span class="hits">2</span>
<code class="ruby"> @prefix = prefix || &#39;&#39;</code>
</li>
<li class="covered" data-hits="2" data-linenumber="16">
<span class="hits">2</span>
<code class="ruby"> @access_factory, @routes = access_factory, routes</code>
</li>
<li class="covered" data-hits="2" data-linenumber="17">
<span class="hits">2</span>
<code class="ruby"> @json_response = V3.response(render_json, content_type: &#39;application/json&#39;.freeze)</code>
</li>
<li class="covered" data-hits="2" data-linenumber="18">
<span class="hits">2</span>
<code class="ruby"> @json_home_response = V3.response(render_json_home, content_type: &#39;application/json-home&#39;.freeze)</code>
</li>
<li class="never" data-hits="" data-linenumber="19">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="21">
<span class="hits">1</span>
<code class="ruby"> def render(env)</code>
</li>
<li class="covered" data-hits="5" data-linenumber="22">
<span class="hits">5</span>
<code class="ruby"> json_home?(env) ? json_home_response : json_response</code>
</li>
<li class="never" data-hits="" data-linenumber="23">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="24">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="25">
<span class="hits">1</span>
<code class="ruby"> def render_json</code>
</li>
<li class="covered" data-hits="2" data-linenumber="26">
<span class="hits">2</span>
<code class="ruby"> resources = { }</code>
</li>
<li class="covered" data-hits="2" data-linenumber="27">
<span class="hits">2</span>
<code class="ruby"> routes.resources.each do |resource|</code>
</li>
<li class="covered" data-hits="2" data-linenumber="28">
<span class="hits">2</span>
<code class="ruby"> resources[resource.identifier] ||= {}</code>
</li>
<li class="covered" data-hits="2" data-linenumber="29">
<span class="hits">2</span>
<code class="ruby"> resource.services.each do |(request_method, sub_route), service|</code>
</li>
<li class="covered" data-hits="2" data-linenumber="30">
<span class="hits">2</span>
<code class="ruby"> service &amp;&amp;= service.to_s.sub(/_#{resource.identifier}$/, &#39;&#39;.freeze)</code>
</li>
<li class="covered" data-hits="2" data-linenumber="31">
<span class="hits">2</span>
<code class="ruby"> list = resources[resource.identifier][service] ||= []</code>
</li>
<li class="covered" data-hits="2" data-linenumber="32">
<span class="hits">2</span>
<code class="ruby"> pattern = sub_route ? resource.route + sub_route : resource.route</code>
</li>
<li class="covered" data-hits="2" data-linenumber="33">
<span class="hits">2</span>
<code class="ruby"> pattern.to_templates.each do |template|</code>
</li>
<li class="covered" data-hits="2" data-linenumber="34">
<span class="hits">2</span>
<code class="ruby"> list &lt;&lt; { &#39;request-method&#39;.freeze =&gt; request_method, &#39;uri-template&#39;.freeze =&gt; prefix + template }</code>
</li>
<li class="never" data-hits="" data-linenumber="35">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="36">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="37">
<code class="ruby"> end</code>
</li>
<li class="covered" data-hits="2" data-linenumber="38">
<span class="hits">2</span>
<code class="ruby"> { resources: resources }</code>
</li>
<li class="never" data-hits="" data-linenumber="39">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="40">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="41">
<span class="hits">1</span>
<code class="ruby"> def render_json_home</code>
</li>
<li class="covered" data-hits="2" data-linenumber="42">
<span class="hits">2</span>
<code class="ruby"> relations = {}</code>
</li>
<li class="never" data-hits="" data-linenumber="43">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="2" data-linenumber="44">
<span class="hits">2</span>
<code class="ruby"> routes.resources.each do |resource|</code>
</li>
<li class="covered" data-hits="2" data-linenumber="45">
<span class="hits">2</span>
<code class="ruby"> resource.services.each do |(request_method, sub_route), service|</code>
</li>
<li class="covered" data-hits="2" data-linenumber="46">
<span class="hits">2</span>
<code class="ruby"> service &amp;&amp;= service.to_s.sub(/_#{resource.identifier}$/, &#39;&#39;.freeze)</code>
</li>
<li class="covered" data-hits="2" data-linenumber="47">
<span class="hits">2</span>
<code class="ruby"> pattern = sub_route ? resource.route + sub_route : resource.route</code>
</li>
<li class="covered" data-hits="2" data-linenumber="48">
<span class="hits">2</span>
<code class="ruby"> relation = &quot;http://schema.travis-ci.com/rel/#{resource.identifier}/#{service}&quot;</code>
</li>
<li class="covered" data-hits="2" data-linenumber="49">
<span class="hits">2</span>
<code class="ruby"> pattern.to_templates.each do |template|</code>
</li>
<li class="covered" data-hits="2" data-linenumber="50">
<span class="hits">2</span>
<code class="ruby"> relations[relation] ||= {}</code>
</li>
<li class="covered" data-hits="2" data-linenumber="51">
<span class="hits">2</span>
<code class="ruby"> relations[relation][template] ||= { allow: [], vars: template.scan(/{\+?([^}]+)}/).flatten }</code>
</li>
<li class="covered" data-hits="2" data-linenumber="52">
<span class="hits">2</span>
<code class="ruby"> relations[relation][template][:allow] &lt;&lt; request_method</code>
</li>
<li class="never" data-hits="" data-linenumber="53">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="54">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="55">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="56">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="2" data-linenumber="57">
<span class="hits">2</span>
<code class="ruby"> nested_relations = {}</code>
</li>
<li class="covered" data-hits="2" data-linenumber="58">
<span class="hits">2</span>
<code class="ruby"> relations.delete_if do |relation, request_map|</code>
</li>
<li class="covered" data-hits="2" data-linenumber="59">
<span class="hits">2</span>
<code class="ruby"> next if request_map.size &lt; 2</code>
</li>
<li class="missed" data-hits="0" data-linenumber="60">
<code class="ruby"> common_vars = request_map.values.map { |e| e[:vars] }.inject(:&amp;)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="61">
<code class="ruby"> request_map.each do |template, payload|</code>
</li>
<li class="missed" data-hits="0" data-linenumber="62">
<code class="ruby"> special_vars = payload[:vars] - common_vars</code>
</li>
<li class="missed" data-hits="0" data-linenumber="63">
<code class="ruby"> schema = special_vars.any? ? &quot;#{relation}/by_#{special_vars.join(?_)}&quot; : relation</code>
</li>
<li class="missed" data-hits="0" data-linenumber="64">
<code class="ruby"> nested_relations[schema] = { template =&gt; payload }</code>
</li>
<li class="never" data-hits="" data-linenumber="65">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="66">
<code class="ruby"> end</code>
</li>
<li class="covered" data-hits="2" data-linenumber="67">
<span class="hits">2</span>
<code class="ruby"> relations.merge! nested_relations</code>
</li>
<li class="never" data-hits="" data-linenumber="68">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="2" data-linenumber="69">
<span class="hits">2</span>
<code class="ruby"> resources = relations.map do |relation, payload|</code>
</li>
<li class="covered" data-hits="2" data-linenumber="70">
<span class="hits">2</span>
<code class="ruby"> template, payload = payload.first</code>
</li>
<li class="covered" data-hits="2" data-linenumber="71">
<span class="hits">2</span>
<code class="ruby"> hints = { &#39;allow&#39; =&gt; payload[:allow] }</code>
</li>
<li class="covered" data-hits="2" data-linenumber="72">
<span class="hits">2</span>
<code class="ruby"> hints[&#39;accept-post&#39;] = ALLOW_POST if payload[:allow].include? &#39;POST&#39;</code>
</li>
<li class="covered" data-hits="2" data-linenumber="73">
<span class="hits">2</span>
<code class="ruby"> hints[&#39;accept-patch&#39;] = ALLOW_POST if payload[:allow].include? &#39;PATCH&#39;</code>
</li>
<li class="covered" data-hits="2" data-linenumber="74">
<span class="hits">2</span>
<code class="ruby"> hints[&#39;accept-put&#39;] = ALLOW_POST if payload[:allow].include? &#39;PUT&#39;</code>
</li>
<li class="covered" data-hits="2" data-linenumber="75">
<span class="hits">2</span>
<code class="ruby"> hints[&#39;representations&#39;] = [&#39;application/json&#39;, &#39;application/vnd.travis-ci.3+json&#39;]</code>
</li>
<li class="covered" data-hits="2" data-linenumber="76">
<span class="hits">2</span>
<code class="ruby"> [relation, {</code>
</li>
<li class="never" data-hits="" data-linenumber="77">
<code class="ruby"> &#39;href-template&#39; =&gt; prefix + template,</code>
</li>
<li class="covered" data-hits="2" data-linenumber="78">
<span class="hits">2</span>
<code class="ruby"> &#39;href-vars&#39; =&gt; Hash[payload[:vars].map { |var| [var, &quot;http://schema.travis-ci.com/param/#{var}&quot;] }],</code>
</li>
<li class="never" data-hits="" data-linenumber="79">
<code class="ruby"> &#39;hints&#39; =&gt; hints</code>
</li>
<li class="never" data-hits="" data-linenumber="80">
<code class="ruby"> }]</code>
</li>
<li class="never" data-hits="" data-linenumber="81">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="82">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="2" data-linenumber="83">
<span class="hits">2</span>
<code class="ruby"> { resources: Hash[resources] }</code>
</li>
<li class="never" data-hits="" data-linenumber="84">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="85">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="86">
<span class="hits">1</span>
<code class="ruby"> def json_home?(env)</code>
</li>
<li class="covered" data-hits="5" data-linenumber="87">
<span class="hits">5</span>
<code class="ruby"> env[&#39;HTTP_ACCEPT&#39;.freeze] == &#39;application/json-home&#39;.freeze</code>
</li>
<li class="never" data-hits="" data-linenumber="88">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="89">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="90">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="4fa3e7e42191523754efec186ec8bfce3291040f">
<div class="header">
<h3>lib/travis/api/v3/services.rb</h3>
<h4><span class="green">100.0 %</span> covered</h4>
<div>
<b>5</b> relevant lines.
<span class="green"><b>5</b> lines covered</span> and
<span class="red"><b>0</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis::API::V3</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> module Services</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> def self.[](key)</code>
</li>
<li class="covered" data-hits="27" data-linenumber="4">
<span class="hits">27</span>
<code class="ruby"> return key if key.respond_to? :new</code>
</li>
<li class="covered" data-hits="27" data-linenumber="5">
<span class="hits">27</span>
<code class="ruby"> const_get(key.to_s.camelize)</code>
</li>
<li class="never" data-hits="" data-linenumber="6">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="7">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="a6bb60f0c77473ac7b1a29920833a93a5c2cd7f7">
<div class="header">
<h3>lib/travis/api/v3/services/find_repository.rb</h3>
<h4><span class="red">78.57 %</span> covered</h4>
<div>
<b>14</b> relevant lines.
<span class="green"><b>11</b> lines covered</span> and
<span class="red"><b>3</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">module Travis::API::V3</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> class Services::FindRepository &lt; Service</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> params :id, :github_id, :slug, optional: true</code>
</li>
<li class="never" data-hits="" data-linenumber="4">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="5">
<span class="hits">1</span>
<code class="ruby"> def run</code>
</li>
<li class="covered" data-hits="18" data-linenumber="6">
<span class="hits">18</span>
<code class="ruby"> raise NotFound, :repository unless repository and access_control.visible? repository</code>
</li>
<li class="covered" data-hits="8" data-linenumber="7">
<span class="hits">8</span>
<code class="ruby"> Result.new(:repository, repository)</code>
</li>
<li class="never" data-hits="" data-linenumber="8">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="9">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="10">
<span class="hits">1</span>
<code class="ruby"> def repository</code>
</li>
<li class="covered" data-hits="42" data-linenumber="11">
<span class="hits">42</span>
<code class="ruby"> raise EntityMissing, :repository if defined?(@repository) and @repository.nil?</code>
</li>
<li class="covered" data-hits="42" data-linenumber="12">
<span class="hits">42</span>
<code class="ruby"> @repository ||= find_repository</code>
</li>
<li class="never" data-hits="" data-linenumber="13">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="14">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="15">
<span class="hits">1</span>
<code class="ruby"> def find_repository</code>
</li>
<li class="covered" data-hits="18" data-linenumber="16">
<span class="hits">18</span>
<code class="ruby"> return ::Repository.find_by_id(id) if id</code>
</li>
<li class="missed" data-hits="0" data-linenumber="17">
<code class="ruby"> return ::Repository.find_by_github_id(github_id) if github_id</code>
</li>
<li class="missed" data-hits="0" data-linenumber="18">
<code class="ruby"> return ::Repository.by_slug(slug).first if slug</code>
</li>
<li class="missed" data-hits="0" data-linenumber="19">
<code class="ruby"> raise WrongParams</code>
</li>
<li class="never" data-hits="" data-linenumber="20">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="21">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="22">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
<div class="source_table" id="dc5349ac13a7e081565d2ad293a276d468fd8b0b">
<div class="header">
<h3>lib/travis/private_key.rb</h3>
<h4><span class="red">50.0 %</span> covered</h4>
<div>
<b>10</b> relevant lines.
<span class="green"><b>5</b> lines covered</span> and
<span class="red"><b>5</b> lines missed.</span>
</div>
</div>
<pre>
<ol>
<li class="covered" data-hits="1" data-linenumber="1">
<span class="hits">1</span>
<code class="ruby">class PrivateKey</code>
</li>
<li class="covered" data-hits="1" data-linenumber="2">
<span class="hits">1</span>
<code class="ruby"> attr_reader :key</code>
</li>
<li class="covered" data-hits="1" data-linenumber="3">
<span class="hits">1</span>
<code class="ruby"> def initialize(key)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="4">
<code class="ruby"> @key = key</code>
</li>
<li class="never" data-hits="" data-linenumber="5">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="6">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="7">
<span class="hits">1</span>
<code class="ruby"> def fingerprint</code>
</li>
<li class="missed" data-hits="0" data-linenumber="8">
<code class="ruby"> rsa_key = OpenSSL::PKey::RSA.new(key)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="9">
<code class="ruby"> public_ssh_rsa = &quot;\x00\x00\x00\x07ssh-rsa&quot; + rsa_key.e.to_s(0) + rsa_key.n.to_s(0)</code>
</li>
<li class="missed" data-hits="0" data-linenumber="10">
<code class="ruby"> OpenSSL::Digest::MD5.new(public_ssh_rsa).hexdigest.scan(/../).join(&#39;:&#39;)</code>
</li>
<li class="never" data-hits="" data-linenumber="11">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="12">
<code class="ruby"></code>
</li>
<li class="covered" data-hits="1" data-linenumber="13">
<span class="hits">1</span>
<code class="ruby"> def inspect</code>
</li>
<li class="missed" data-hits="0" data-linenumber="14">
<code class="ruby"> &quot;&lt;PrivateKey #{fingerprint}&gt;&quot;</code>
</li>
<li class="never" data-hits="" data-linenumber="15">
<code class="ruby"> end</code>
</li>
<li class="never" data-hits="" data-linenumber="16">
<code class="ruby">end</code>
</li>
</ol>
</pre>
</div>
</div>
</div>
</body>
</html>