Skip to content

Instantly share code, notes, and snippets.

@duyquangnguyenhac
Created June 14, 2020 01:08
Show Gist options
  • Save duyquangnguyenhac/2d342060d54b59149b6213135d49ad8d to your computer and use it in GitHub Desktop.
Save duyquangnguyenhac/2d342060d54b59149b6213135d49ad8d to your computer and use it in GitHub Desktop.
Error on pushing and yanking gems
JJames:gemstash quangnguyen$ gemstash authorize
Your new key is: 72b4857b4c60c2d0aec84092c4d89d07
JJames:gemstash quangnguyen$ gemstash authorize --key 72b4857b4c60c2d0aec84092c4d89d07
JJames:gemstash quangnguyen$ gem push --key 72b4857b4c60c2d0aec84092c4d89d07 --host http://localhost:9292/private pkg/private-example-0.1.0.gem
ERROR: While executing gem ... (Gem::Package::FormatError)
No such file or directory @ rb_sysopen - pkg/private-example-0.1.0.gem
JJames:gemstash quangnguyen$ gem push --key 72b4857b4c60c2d0aec84092c4d89d07 --host http://localhost:9292/private /Users/quangnguyen/Documents/Google_folders/Ruby - f/private_example/pkg/private_example-0.1.0.gem
ERROR: While executing gem ... (Gem::CommandLineError)
Too many gem names (/Users/quangnguyen/Documents/Google_folders/Ruby, -, f/private_example/pkg/private_example-0.1.0.gem); please specify only one
JJames:gemstash quangnguyen$ gem push --key 72b4857b4c60c2d0aec84092c4d89d07 --host http://localhost:9292/private /Users/quangnguyen/Documents/Google_folders/Ruby - f/private_example/pkg/private_example-0.1.0.gem
ERROR: While executing gem ... (Gem::CommandLineError)
Too many gem names (/Users/quangnguyen/Documents/Google_folders/Ruby, -, f/private_example/pkg/private_example-0.1.0.gem); please specify only one
JJames:gemstash quangnguyen$ gem push --key 72b4857b4c60c2d0aec84092c4d89d07 --host http://localhost:9292/private /Users/quangnguyen/Documents/Google_folders/Rubyf/private_example/pkg/private_example-0.1.0.gem
ERROR: No such API key. Please add it to your configuration (done automatically on initial `gem push`).
JJames:gemstash quangnguyen$ gem push --key test_key --host http://localhost:9292/private /Users/quangnguyen/Documents/Google_folders/Rubyf/private_example/pkg/private_example-0.1.0.gem
Pushing gem to http://localhost:9292/private...
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Gemstash::GemPusher::ExistingVersionError at &#x2F;api&#x2F;v1&#x2F;gems</title>
<script type="text/javascript">
//<!--
function toggle(id) {
var pre = document.getElementById("pre-" + id);
var post = document.getElementById("post-" + id);
var context = document.getElementById("context-" + id);
if (pre.style.display == 'block') {
pre.style.display = 'none';
post.style.display = 'none';
context.style.background = "none";
} else {
pre.style.display = 'block';
post.style.display = 'block';
context.style.background = "#fffed9";
}
}
function toggleBacktrace(){
var bt = document.getElementById("backtrace");
var toggler = document.getElementById("expando");
if (bt.className == 'condensed') {
bt.className = 'expanded';
toggler.innerHTML = "(condense)";
} else {
bt.className = 'condensed';
toggler.innerHTML = "(expand)";
}
}
//-->
</script>
<style type="text/css" media="screen">
* {margin: 0; padding: 0; border: 0; outline: 0;}
div.clear {clear: both;}
body {background: #EEEEEE; margin: 0; padding: 0;
font-family: 'Lucida Grande', 'Lucida Sans Unicode',
'Garuda';}
code {font-family: 'Lucida Console', monospace;
font-size: 12px;}
li {height: 18px;}
ul {list-style: none; margin: 0; padding: 0;}
ol:hover {cursor: pointer;}
ol li {white-space: pre;}
#explanation {font-size: 12px; color: #666666;
margin: 20px 0 0 100px;}
/* WRAP */
#wrap {width: 1000px; background: #FFFFFF; margin: 0 auto;
padding: 30px 50px 20px 50px;
border-left: 1px solid #DDDDDD;
border-right: 1px solid #DDDDDD;}
/* HEADER */
#header {margin: 0 auto 25px auto;}
#header img {float: left;}
#header #summary {float: left; margin: 12px 0 0 20px; width:660px;
font-family: 'Lucida Grande', 'Lucida Sans Unicode';}
h1 {margin: 0; font-size: 36px; color: #981919;}
h2 {margin: 0; font-size: 22px; color: #333333;}
#header ul {margin: 0; font-size: 12px; color: #666666;}
#header ul li strong{color: #444444;}
#header ul li {display: inline; padding: 0 10px;}
#header ul li.first {padding-left: 0;}
#header ul li.last {border: 0; padding-right: 0;}
/* BODY */
#backtrace,
#get,
#post,
#cookies,
#rack {width: 980px; margin: 0 auto 10px auto;}
p#nav {float: right; font-size: 14px;}
/* BACKTRACE */
a#expando {float: left; padding-left: 5px; color: #666666;
font-size: 14px; text-decoration: none; cursor: pointer;}
a#expando:hover {text-decoration: underline;}
h3 {float: left; width: 100px; margin-bottom: 10px;
color: #981919; font-size: 14px; font-weight: bold;}
#nav a {color: #666666; text-decoration: none; padding: 0 5px;}
#backtrace li.frame-info {background: #f7f7f7; padding-left: 10px;
font-size: 12px; color: #333333;}
#backtrace ul {list-style-position: outside; border: 1px solid #E9E9E9;
border-bottom: 0;}
#backtrace ol {width: 920px; margin-left: 50px;
font: 10px 'Lucida Console', monospace; color: #666666;}
#backtrace ol li {border: 0; border-left: 1px solid #E9E9E9;
padding: 2px 0;}
#backtrace ol code {font-size: 10px; color: #555555; padding-left: 5px;}
#backtrace-ul li {border-bottom: 1px solid #E9E9E9; height: auto;
padding: 3px 0;}
#backtrace-ul .code {padding: 6px 0 4px 0;}
#backtrace.condensed .system,
#backtrace.condensed .framework {display:none;}
/* REQUEST DATA */
p.no-data {padding-top: 2px; font-size: 12px; color: #666666;}
table.req {width: 980px; text-align: left; font-size: 12px;
color: #666666; padding: 0; border-spacing: 0;
border: 1px solid #EEEEEE; border-bottom: 0;
border-left: 0;
clear:both}
table.req tr th {padding: 2px 10px; font-weight: bold;
background: #F7F7F7; border-bottom: 1px solid #EEEEEE;
border-left: 1px solid #EEEEEE;}
table.req tr td {padding: 2px 20px 2px 10px;
border-bottom: 1px solid #EEEEEE;
border-left: 1px solid #EEEEEE;}
/* HIDE PRE/POST CODE AT START */
.pre-context,
.post-context {display: none;}
table td.code {width:750px}
table td.code div {width:750px;overflow:hidden}
</style>
</head>
<body>
<div id="wrap">
<div id="header">
<img src="/__sinatra__/500.png" alt="application error" height="161" width="313" />
<div id="summary">
<h1><strong>Gemstash::GemPusher::ExistingVersionError</strong> at <strong>&#x2F;api&#x2F;v1&#x2F;gems
</strong></h1>
<h2>Cannot push to an existing version!</h2>
<ul>
<li class="first"><strong>file:</strong> <code>
gem_pusher.rb</code></li>
<li><strong>location:</strong> <code>block in save_to_database
</code></li>
<li class="last"><strong>line:
</strong> 83</li>
</ul>
</div>
<div class="clear"></div>
</div>
<div id="backtrace" class='condensed'>
<h3>BACKTRACE</h3>
<p><a href="#" id="expando"
onclick="toggleBacktrace(); return false">(expand)</a></p>
<p id="nav"><strong>JUMP TO:</strong>
<a href="#get-info">GET</a>
<a href="#post-info">POST</a>
<a href="#cookie-info">COOKIES</a>
<a href="#env-info">ENV</a>
</p>
<div class="clear"></div>
<ul id="backtrace-ul">
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;gem_pusher.rb</code> in
<code><strong>block in save_to_database</strong></code>
</li>
<li class="code app">
<ol start="76"
class="pre-context" id="pre-1"
onclick="toggle(1);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def save_to_database
</code></li>
<li class="pre-context-line"><code> spec = gem.spec
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> gemstash_env.db.transaction do
</code></li>
<li class="pre-context-line"><code> gem_id = Gemstash::DB::Rubygem.find_or_insert(spec)
</code></li>
<li class="pre-context-line"><code> existing = Gemstash::DB::Version.find_by_spec(gem_id, spec)
</code></li>
</ol>
<ol start="83" class="context" id="1"
onclick="toggle(1);">
<li class="context-line" id="context-1"><code> raise ExistingVersionError, &quot;Cannot push to an existing version!&quot; if existing &amp;&amp; existing.indexed</code></li>
</ol>
<ol start="84" class="post-context"
id="post-1" onclick="toggle(1);">
<li class="post-context-line"><code> raise YankedVersionError, &quot;Cannot push to a yanked version!&quot; if existing &amp;&amp; !existing.indexed
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> version_id = Gemstash::DB::Version.insert_by_spec(gem_id, spec)
</code></li>
<li class="post-context-line"><code> Gemstash::DB::Dependency.insert_by_spec(version_id, spec)
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sequel-5.32.0&#x2F;lib&#x2F;sequel&#x2F;database&#x2F;transactions.rb</code> in
<code><strong>_transaction</strong></code>
</li>
<li class="code system">
<ol start="247"
class="pre-context" id="pre-2"
onclick="toggle(2);">
<li class="pre-context-line"><code> ret = yield(conn)
</code></li>
<li class="pre-context-line"><code> rescue Exception =&gt; e1
</code></li>
<li class="pre-context-line"><code> raise e1
</code></li>
<li class="pre-context-line"><code> ensure
</code></li>
<li class="pre-context-line"><code> raise ::Sequel::Rollback unless e1
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> else
</code></li>
</ol>
<ol start="254" class="context" id="2"
onclick="toggle(2);">
<li class="context-line" id="context-2"><code> yield(conn)</code></li>
</ol>
<ol start="255" class="post-context"
id="post-2" onclick="toggle(2);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> rescue Exception =&gt; e
</code></li>
<li class="post-context-line"><code> begin
</code></li>
<li class="post-context-line"><code> rollback_transaction(conn, opts)
</code></li>
<li class="post-context-line"><code> rescue Exception =&gt; e3
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> transaction_error(e, :conn=&gt;conn, :rollback=&gt;rollback)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sequel-5.32.0&#x2F;lib&#x2F;sequel&#x2F;database&#x2F;transactions.rb</code> in
<code><strong>block in transaction</strong></code>
</li>
<li class="code system">
<ol start="222"
class="pre-context" id="pre-3"
onclick="toggle(3);">
<li class="pre-context-line"><code> if opts[:retrying]
</code></li>
<li class="pre-context-line"><code> raise Sequel::Error, &quot;cannot set :retry_on options if you are already inside a transaction&quot;
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> return yield(conn)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
</ol>
<ol start="229" class="context" id="3"
onclick="toggle(3);">
<li class="context-line" id="context-3"><code> _transaction(conn, opts, &amp;block)</code></li>
</ol>
<ol start="230" class="post-context"
id="post-3" onclick="toggle(3);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> private
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # Internal generic transaction method. Any exception raised by the given
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sequel-5.32.0&#x2F;lib&#x2F;sequel&#x2F;connection_pool&#x2F;threaded.rb</code> in
<code><strong>hold</strong></code>
</li>
<li class="code system">
<ol start="85"
class="pre-context" id="pre-4"
onclick="toggle(4);">
<li class="pre-context-line"><code> def hold(server=nil)
</code></li>
<li class="pre-context-line"><code> t = Sequel.current
</code></li>
<li class="pre-context-line"><code> if conn = owned_connection(t)
</code></li>
<li class="pre-context-line"><code> return yield(conn)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> begin
</code></li>
<li class="pre-context-line"><code> conn = acquire(t)
</code></li>
</ol>
<ol start="92" class="context" id="4"
onclick="toggle(4);">
<li class="context-line" id="context-4"><code> yield conn</code></li>
</ol>
<ol start="93" class="post-context"
id="post-4" onclick="toggle(4);">
<li class="post-context-line"><code> rescue Sequel::DatabaseDisconnectError, *@error_classes =&gt; e
</code></li>
<li class="post-context-line"><code> if disconnect_error?(e)
</code></li>
<li class="post-context-line"><code> oconn = conn
</code></li>
<li class="post-context-line"><code> conn = nil
</code></li>
<li class="post-context-line"><code> disconnect_connection(oconn) if oconn
</code></li>
<li class="post-context-line"><code> sync do
</code></li>
<li class="post-context-line"><code> @allocated.delete(t)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sequel-5.32.0&#x2F;lib&#x2F;sequel&#x2F;database&#x2F;connecting.rb</code> in
<code><strong>synchronize</strong></code>
</li>
<li class="code system">
<ol start="263"
class="pre-context" id="pre-5"
onclick="toggle(5);">
<li class="pre-context-line"><code> # If a server option is given, acquires a connection for that specific
</code></li>
<li class="pre-context-line"><code> # server, instead of the :default server.
</code></li>
<li class="pre-context-line"><code> #
</code></li>
<li class="pre-context-line"><code> # DB.synchronize do |conn|
</code></li>
<li class="pre-context-line"><code> # # ...
</code></li>
<li class="pre-context-line"><code> # end
</code></li>
<li class="pre-context-line"><code> def synchronize(server=nil, &amp;block)
</code></li>
</ol>
<ol start="270" class="context" id="5"
onclick="toggle(5);">
<li class="context-line" id="context-5"><code> @pool.hold(server || :default, &amp;block)</code></li>
</ol>
<ol start="271" class="post-context"
id="post-5" onclick="toggle(5);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # Attempts to acquire a database connection. Returns true if successful.
</code></li>
<li class="post-context-line"><code> # Will probably raise an Error if unsuccessful. If a server argument
</code></li>
<li class="post-context-line"><code> # is given, attempts to acquire a database connection to the given
</code></li>
<li class="post-context-line"><code> # server&#x2F;shard.
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sequel-5.32.0&#x2F;lib&#x2F;sequel&#x2F;database&#x2F;transactions.rb</code> in
<code><strong>transaction</strong></code>
</li>
<li class="code system">
<ol start="188"
class="pre-context" id="pre-6"
onclick="toggle(6);">
<li class="pre-context-line"><code> if tot_retries.nil? || num_retries &lt;= tot_retries
</code></li>
<li class="pre-context-line"><code> opts[:before_retry].call(num_retries, e) if opts[:before_retry]
</code></li>
<li class="pre-context-line"><code> retry
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> raise
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> else
</code></li>
</ol>
<ol start="195" class="context" id="6"
onclick="toggle(6);">
<li class="context-line" id="context-6"><code> synchronize(opts[:server]) do |conn|</code></li>
</ol>
<ol start="196" class="post-context"
id="post-6" onclick="toggle(6);">
<li class="post-context-line"><code> if opts[:savepoint] == :only
</code></li>
<li class="post-context-line"><code> if supports_savepoints?
</code></li>
<li class="post-context-line"><code> if _trans(conn)
</code></li>
<li class="post-context-line"><code> opts[:savepoint] = true
</code></li>
<li class="post-context-line"><code> else
</code></li>
<li class="post-context-line"><code> return yield(conn)
</code></li>
<li class="post-context-line"><code> end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;gem_pusher.rb</code> in
<code><strong>save_to_database</strong></code>
</li>
<li class="code app">
<ol start="73"
class="pre-context" id="pre-7"
onclick="toggle(7);">
<li class="pre-context-line"><code> spec = Zlib::Deflate.deflate(spec)
</code></li>
<li class="pre-context-line"><code> storage.resource(full_name).save(spec: spec)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def save_to_database
</code></li>
<li class="pre-context-line"><code> spec = gem.spec
</code></li>
<li class="pre-context-line"><code>
</code></li>
</ol>
<ol start="80" class="context" id="7"
onclick="toggle(7);">
<li class="context-line" id="context-7"><code> gemstash_env.db.transaction do</code></li>
</ol>
<ol start="81" class="post-context"
id="post-7" onclick="toggle(7);">
<li class="post-context-line"><code> gem_id = Gemstash::DB::Rubygem.find_or_insert(spec)
</code></li>
<li class="post-context-line"><code> existing = Gemstash::DB::Version.find_by_spec(gem_id, spec)
</code></li>
<li class="post-context-line"><code> raise ExistingVersionError, &quot;Cannot push to an existing version!&quot; if existing &amp;&amp; existing.indexed
</code></li>
<li class="post-context-line"><code> raise YankedVersionError, &quot;Cannot push to a yanked version!&quot; if existing &amp;&amp; !existing.indexed
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> version_id = Gemstash::DB::Version.insert_by_spec(gem_id, spec)
</code></li>
<li class="post-context-line"><code> Gemstash::DB::Dependency.insert_by_spec(version_id, spec)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;gem_pusher.rb</code> in
<code><strong>serve</strong></code>
</li>
<li class="code app">
<ol start="28"
class="pre-context" id="pre-8"
onclick="toggle(8);">
<li class="pre-context-line"><code> @content = content
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def serve
</code></li>
<li class="pre-context-line"><code> check_auth
</code></li>
<li class="pre-context-line"><code> store_gem
</code></li>
<li class="pre-context-line"><code> store_gemspec
</code></li>
</ol>
<ol start="35" class="context" id="8"
onclick="toggle(8);">
<li class="context-line" id="context-8"><code> save_to_database</code></li>
</ol>
<ol start="36" class="post-context"
id="post-8" onclick="toggle(8);">
<li class="post-context-line"><code> invalidate_cache
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> private
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def gem
</code></li>
<li class="post-context-line"><code> @gem ||= Gem::Package.new(StringIO.new(@content))
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;gem_pusher.rb</code> in
<code><strong>serve</strong></code>
</li>
<li class="code app">
<ol start="16"
class="pre-context" id="pre-9"
onclick="toggle(9);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # This error is thrown when pushing to a yanked version.
</code></li>
<li class="pre-context-line"><code> class YankedVersionError &lt; ExistingVersionError
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def self.serve(app)
</code></li>
<li class="pre-context-line"><code> gem = app.request.body.read
</code></li>
</ol>
<ol start="23" class="context" id="9"
onclick="toggle(9);">
<li class="context-line" id="context-9"><code> new(app.auth, gem).serve</code></li>
</ol>
<ol start="24" class="post-context"
id="post-9" onclick="toggle(9);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def initialize(auth, content)
</code></li>
<li class="post-context-line"><code> @auth = auth
</code></li>
<li class="post-context-line"><code> @content = content
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;gem_source&#x2F;private_source.rb</code> in
<code><strong>block in protected</strong></code>
</li>
<li class="code app">
<ol start="93"
class="pre-context" id="pre-10"
onclick="toggle(10);">
<li class="pre-context-line"><code> params[:prerelease] = true
</code></li>
<li class="pre-context-line"><code> protected(Gemstash::SpecsBuilder)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> private
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def protected(servable)
</code></li>
</ol>
<ol start="100" class="context" id="10"
onclick="toggle(10);">
<li class="context-line" id="context-10"><code> authorization.protect(self) { servable.serve(self) }</code></li>
</ol>
<ol start="101" class="post-context"
id="post-10" onclick="toggle(10);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def authorization
</code></li>
<li class="post-context-line"><code> Gemstash::ApiKeyAuthorization
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def dependencies
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;api_key_authorization.rb</code> in
<code><strong>protect</strong></code>
</li>
<li class="code app">
<ol start="8"
class="pre-context" id="pre-11"
onclick="toggle(11);">
<li class="pre-context-line"><code> def initialize(key)
</code></li>
<li class="pre-context-line"><code> @key = key
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def self.protect(app, &amp;block)
</code></li>
<li class="pre-context-line"><code> key = parse_authorization(app.request.env)
</code></li>
<li class="pre-context-line"><code> app.auth = new(key)
</code></li>
</ol>
<ol start="15" class="context" id="11"
onclick="toggle(11);">
<li class="context-line" id="context-11"><code> yield</code></li>
</ol>
<ol start="16" class="post-context"
id="post-11" onclick="toggle(11);">
<li class="post-context-line"><code> rescue Gemstash::NotAuthorizedError =&gt; e
</code></li>
<li class="post-context-line"><code> app.headers[&quot;WWW-Authenticate&quot;] = &quot;Basic realm=\&quot;Gemstash Private Gems\&quot;&quot;
</code></li>
<li class="post-context-line"><code> app.halt 401, e.message
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def self.parse_authorization(request_env)
</code></li>
<li class="post-context-line"><code> http_auth = Rack::Auth::Basic::Request.new(request_env)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;gem_source&#x2F;private_source.rb</code> in
<code><strong>protected</strong></code>
</li>
<li class="code app">
<ol start="93"
class="pre-context" id="pre-12"
onclick="toggle(12);">
<li class="pre-context-line"><code> params[:prerelease] = true
</code></li>
<li class="pre-context-line"><code> protected(Gemstash::SpecsBuilder)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> private
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def protected(servable)
</code></li>
</ol>
<ol start="100" class="context" id="12"
onclick="toggle(12);">
<li class="context-line" id="context-12"><code> authorization.protect(self) { servable.serve(self) }</code></li>
</ol>
<ol start="101" class="post-context"
id="post-12" onclick="toggle(12);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def authorization
</code></li>
<li class="post-context-line"><code> Gemstash::ApiKeyAuthorization
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def dependencies
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;gem_source&#x2F;private_source.rb</code> in
<code><strong>serve_add_gem</strong></code>
</li>
<li class="code app">
<ol start="23"
class="pre-context" id="pre-13"
onclick="toggle(13);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def serve_root
</code></li>
<li class="pre-context-line"><code> halt 403, &quot;Not yet supported&quot;
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def serve_add_gem
</code></li>
</ol>
<ol start="30" class="context" id="13"
onclick="toggle(13);">
<li class="context-line" id="context-13"><code> protected(Gemstash::GemPusher)</code></li>
</ol>
<ol start="31" class="post-context"
id="post-13" onclick="toggle(13);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def serve_yank
</code></li>
<li class="post-context-line"><code> protected(Gemstash::GemYanker)
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def serve_add_spec_json
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;web.rb</code> in
<code><strong>block in &lt;class:Web&gt;</strong></code>
</li>
<li class="code app">
<ol start="42"
class="pre-context" id="pre-14"
onclick="toggle(14);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> get &quot;&#x2F;api&#x2F;v1&#x2F;dependencies.json&quot; do
</code></li>
<li class="pre-context-line"><code> @gem_source.serve_dependencies_json
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> post &quot;&#x2F;api&#x2F;v1&#x2F;gems&quot; do
</code></li>
</ol>
<ol start="49" class="context" id="14"
onclick="toggle(14);">
<li class="context-line" id="context-14"><code> @gem_source.serve_add_gem</code></li>
</ol>
<ol start="50" class="post-context"
id="post-14" onclick="toggle(14);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> delete &quot;&#x2F;api&#x2F;v1&#x2F;gems&#x2F;yank&quot; do
</code></li>
<li class="post-context-line"><code> @gem_source.serve_yank
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> post &quot;&#x2F;api&#x2F;v1&#x2F;add_spec.json&quot; do
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code framework">
<ol start="1629"
class="pre-context" id="pre-15"
onclick="toggle(15);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> pattern = compile(path, route_mustermann_opts)
</code></li>
<li class="pre-context-line"><code> method_name = &quot;#{verb} #{path}&quot;
</code></li>
<li class="pre-context-line"><code> unbound_method = generate_method(method_name, &amp;block)
</code></li>
<li class="pre-context-line"><code> conditions, @conditions = @conditions, []
</code></li>
<li class="pre-context-line"><code> wrapper = block.arity != 0 ?
</code></li>
<li class="pre-context-line"><code> proc { |a, p| unbound_method.bind(a).call(*p) } :
</code></li>
</ol>
<ol start="1636" class="context" id="15"
onclick="toggle(15);">
<li class="context-line" id="context-15"><code> proc { |a, p| unbound_method.bind(a).call }</code></li>
</ol>
<ol start="1637" class="post-context"
id="post-15" onclick="toggle(15);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> [ pattern, conditions, wrapper ]
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def compile(path, route_mustermann_opts = {})
</code></li>
<li class="post-context-line"><code> Mustermann.new(path, **mustermann_opts.merge(route_mustermann_opts))
</code></li>
<li class="post-context-line"><code> end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in compile!</strong></code>
</li>
<li class="code framework">
<ol start="1629"
class="pre-context" id="pre-16"
onclick="toggle(16);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> pattern = compile(path, route_mustermann_opts)
</code></li>
<li class="pre-context-line"><code> method_name = &quot;#{verb} #{path}&quot;
</code></li>
<li class="pre-context-line"><code> unbound_method = generate_method(method_name, &amp;block)
</code></li>
<li class="pre-context-line"><code> conditions, @conditions = @conditions, []
</code></li>
<li class="pre-context-line"><code> wrapper = block.arity != 0 ?
</code></li>
<li class="pre-context-line"><code> proc { |a, p| unbound_method.bind(a).call(*p) } :
</code></li>
</ol>
<ol start="1636" class="context" id="16"
onclick="toggle(16);">
<li class="context-line" id="context-16"><code> proc { |a, p| unbound_method.bind(a).call }</code></li>
</ol>
<ol start="1637" class="post-context"
id="post-16" onclick="toggle(16);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> [ pattern, conditions, wrapper ]
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def compile(path, route_mustermann_opts = {})
</code></li>
<li class="post-context-line"><code> Mustermann.new(path, **mustermann_opts.merge(route_mustermann_opts))
</code></li>
<li class="post-context-line"><code> end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block (3 levels) in route!</strong></code>
</li>
<li class="code framework">
<ol start="980"
class="pre-context" id="pre-17"
onclick="toggle(17);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run routes defined on the class and all superclasses.
</code></li>
<li class="pre-context-line"><code> def route!(base = settings, pass_block = nil)
</code></li>
<li class="pre-context-line"><code> if routes = base.routes[@request.request_method]
</code></li>
<li class="pre-context-line"><code> routes.each do |pattern, conditions, block|
</code></li>
<li class="pre-context-line"><code> returned_pass_block = process_route(pattern, conditions) do |*args|
</code></li>
<li class="pre-context-line"><code> env[&#x27;sinatra.route&#x27;] = &quot;#{@request.request_method} #{pattern}&quot;
</code></li>
</ol>
<ol start="987" class="context" id="17"
onclick="toggle(17);">
<li class="context-line" id="context-17"><code> route_eval { block[*args] }</code></li>
</ol>
<ol start="988" class="post-context"
id="post-17" onclick="toggle(17);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # don&#x27;t wipe out pass_block in superclass
</code></li>
<li class="post-context-line"><code> pass_block = returned_pass_block if returned_pass_block
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>route_eval</strong></code>
</li>
<li class="code framework">
<ol start="999"
class="pre-context" id="pre-18"
onclick="toggle(18);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> route_eval(&amp;pass_block) if pass_block
</code></li>
<li class="pre-context-line"><code> route_missing
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run a route block and throw :halt with the result.
</code></li>
<li class="pre-context-line"><code> def route_eval
</code></li>
</ol>
<ol start="1006" class="context" id="18"
onclick="toggle(18);">
<li class="context-line" id="context-18"><code> throw :halt, yield</code></li>
</ol>
<ol start="1007" class="post-context"
id="post-18" onclick="toggle(18);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # If the current request matches pattern and conditions, fill params
</code></li>
<li class="post-context-line"><code> # with keys and call the given block.
</code></li>
<li class="post-context-line"><code> # Revert params afterwards.
</code></li>
<li class="post-context-line"><code> #
</code></li>
<li class="post-context-line"><code> # Returns pass block.
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block (2 levels) in route!</strong></code>
</li>
<li class="code framework">
<ol start="980"
class="pre-context" id="pre-19"
onclick="toggle(19);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run routes defined on the class and all superclasses.
</code></li>
<li class="pre-context-line"><code> def route!(base = settings, pass_block = nil)
</code></li>
<li class="pre-context-line"><code> if routes = base.routes[@request.request_method]
</code></li>
<li class="pre-context-line"><code> routes.each do |pattern, conditions, block|
</code></li>
<li class="pre-context-line"><code> returned_pass_block = process_route(pattern, conditions) do |*args|
</code></li>
<li class="pre-context-line"><code> env[&#x27;sinatra.route&#x27;] = &quot;#{@request.request_method} #{pattern}&quot;
</code></li>
</ol>
<ol start="987" class="context" id="19"
onclick="toggle(19);">
<li class="context-line" id="context-19"><code> route_eval { block[*args] }</code></li>
</ol>
<ol start="988" class="post-context"
id="post-19" onclick="toggle(19);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # don&#x27;t wipe out pass_block in superclass
</code></li>
<li class="post-context-line"><code> pass_block = returned_pass_block if returned_pass_block
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in process_route</strong></code>
</li>
<li class="code framework">
<ol start="1028"
class="pre-context" id="pre-20"
onclick="toggle(20);">
<li class="pre-context-line"><code> @params[:captures] = force_encoding(captures) unless captures.nil? || captures.empty?
</code></li>
<li class="pre-context-line"><code> else
</code></li>
<li class="pre-context-line"><code> values += params.values.flatten
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> catch(:pass) do
</code></li>
<li class="pre-context-line"><code> conditions.each { |c| throw :pass if c.bind(self).call == false }
</code></li>
</ol>
<ol start="1035" class="context" id="20"
onclick="toggle(20);">
<li class="context-line" id="context-20"><code> block ? block[self, values] : yield(self, values)</code></li>
</ol>
<ol start="1036" class="post-context"
id="post-20" onclick="toggle(20);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> rescue
</code></li>
<li class="post-context-line"><code> @env[&#x27;sinatra.error.params&#x27;] = @params
</code></li>
<li class="post-context-line"><code> raise
</code></li>
<li class="post-context-line"><code> ensure
</code></li>
<li class="post-context-line"><code> params ||= {}
</code></li>
<li class="post-context-line"><code> params.each { |k, _| @params.delete(k) } unless @env[&#x27;sinatra.error.params&#x27;]
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>catch</strong></code>
</li>
<li class="code framework">
<ol start="1026"
class="pre-context" id="pre-21"
onclick="toggle(21);">
<li class="pre-context-line"><code> captures = pattern.match(route).captures.map { |c| URI_INSTANCE.unescape(c) if c }
</code></li>
<li class="pre-context-line"><code> values += captures
</code></li>
<li class="pre-context-line"><code> @params[:captures] = force_encoding(captures) unless captures.nil? || captures.empty?
</code></li>
<li class="pre-context-line"><code> else
</code></li>
<li class="pre-context-line"><code> values += params.values.flatten
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
</ol>
<ol start="1033" class="context" id="21"
onclick="toggle(21);">
<li class="context-line" id="context-21"><code> catch(:pass) do</code></li>
</ol>
<ol start="1034" class="post-context"
id="post-21" onclick="toggle(21);">
<li class="post-context-line"><code> conditions.each { |c| throw :pass if c.bind(self).call == false }
</code></li>
<li class="post-context-line"><code> block ? block[self, values] : yield(self, values)
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> rescue
</code></li>
<li class="post-context-line"><code> @env[&#x27;sinatra.error.params&#x27;] = @params
</code></li>
<li class="post-context-line"><code> raise
</code></li>
<li class="post-context-line"><code> ensure
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>process_route</strong></code>
</li>
<li class="code framework">
<ol start="1026"
class="pre-context" id="pre-22"
onclick="toggle(22);">
<li class="pre-context-line"><code> captures = pattern.match(route).captures.map { |c| URI_INSTANCE.unescape(c) if c }
</code></li>
<li class="pre-context-line"><code> values += captures
</code></li>
<li class="pre-context-line"><code> @params[:captures] = force_encoding(captures) unless captures.nil? || captures.empty?
</code></li>
<li class="pre-context-line"><code> else
</code></li>
<li class="pre-context-line"><code> values += params.values.flatten
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
</ol>
<ol start="1033" class="context" id="22"
onclick="toggle(22);">
<li class="context-line" id="context-22"><code> catch(:pass) do</code></li>
</ol>
<ol start="1034" class="post-context"
id="post-22" onclick="toggle(22);">
<li class="post-context-line"><code> conditions.each { |c| throw :pass if c.bind(self).call == false }
</code></li>
<li class="post-context-line"><code> block ? block[self, values] : yield(self, values)
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> rescue
</code></li>
<li class="post-context-line"><code> @env[&#x27;sinatra.error.params&#x27;] = @params
</code></li>
<li class="post-context-line"><code> raise
</code></li>
<li class="post-context-line"><code> ensure
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in route!</strong></code>
</li>
<li class="code framework">
<ol start="978"
class="pre-context" id="pre-23"
onclick="toggle(23);">
<li class="pre-context-line"><code> base.filters[type].each { |args| process_route(*args) }
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run routes defined on the class and all superclasses.
</code></li>
<li class="pre-context-line"><code> def route!(base = settings, pass_block = nil)
</code></li>
<li class="pre-context-line"><code> if routes = base.routes[@request.request_method]
</code></li>
<li class="pre-context-line"><code> routes.each do |pattern, conditions, block|
</code></li>
</ol>
<ol start="985" class="context" id="23"
onclick="toggle(23);">
<li class="context-line" id="context-23"><code> returned_pass_block = process_route(pattern, conditions) do |*args|</code></li>
</ol>
<ol start="986" class="post-context"
id="post-23" onclick="toggle(23);">
<li class="post-context-line"><code> env[&#x27;sinatra.route&#x27;] = &quot;#{@request.request_method} #{pattern}&quot;
</code></li>
<li class="post-context-line"><code> route_eval { block[*args] }
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # don&#x27;t wipe out pass_block in superclass
</code></li>
<li class="post-context-line"><code> pass_block = returned_pass_block if returned_pass_block
</code></li>
<li class="post-context-line"><code> end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>each</strong></code>
</li>
<li class="code framework">
<ol start="977"
class="pre-context" id="pre-24"
onclick="toggle(24);">
<li class="pre-context-line"><code> filter! type, base.superclass if base.superclass.respond_to?(:filters)
</code></li>
<li class="pre-context-line"><code> base.filters[type].each { |args| process_route(*args) }
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run routes defined on the class and all superclasses.
</code></li>
<li class="pre-context-line"><code> def route!(base = settings, pass_block = nil)
</code></li>
<li class="pre-context-line"><code> if routes = base.routes[@request.request_method]
</code></li>
</ol>
<ol start="984" class="context" id="24"
onclick="toggle(24);">
<li class="context-line" id="context-24"><code> routes.each do |pattern, conditions, block|</code></li>
</ol>
<ol start="985" class="post-context"
id="post-24" onclick="toggle(24);">
<li class="post-context-line"><code> returned_pass_block = process_route(pattern, conditions) do |*args|
</code></li>
<li class="post-context-line"><code> env[&#x27;sinatra.route&#x27;] = &quot;#{@request.request_method} #{pattern}&quot;
</code></li>
<li class="post-context-line"><code> route_eval { block[*args] }
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # don&#x27;t wipe out pass_block in superclass
</code></li>
<li class="post-context-line"><code> pass_block = returned_pass_block if returned_pass_block
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>route!</strong></code>
</li>
<li class="code framework">
<ol start="977"
class="pre-context" id="pre-25"
onclick="toggle(25);">
<li class="pre-context-line"><code> filter! type, base.superclass if base.superclass.respond_to?(:filters)
</code></li>
<li class="pre-context-line"><code> base.filters[type].each { |args| process_route(*args) }
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run routes defined on the class and all superclasses.
</code></li>
<li class="pre-context-line"><code> def route!(base = settings, pass_block = nil)
</code></li>
<li class="pre-context-line"><code> if routes = base.routes[@request.request_method]
</code></li>
</ol>
<ol start="984" class="context" id="25"
onclick="toggle(25);">
<li class="context-line" id="context-25"><code> routes.each do |pattern, conditions, block|</code></li>
</ol>
<ol start="985" class="post-context"
id="post-25" onclick="toggle(25);">
<li class="post-context-line"><code> returned_pass_block = process_route(pattern, conditions) do |*args|
</code></li>
<li class="post-context-line"><code> env[&#x27;sinatra.route&#x27;] = &quot;#{@request.request_method} #{pattern}&quot;
</code></li>
<li class="post-context-line"><code> route_eval { block[*args] }
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # don&#x27;t wipe out pass_block in superclass
</code></li>
<li class="post-context-line"><code> pass_block = returned_pass_block if returned_pass_block
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in dispatch!</strong></code>
</li>
<li class="code framework">
<ol start="1091"
class="pre-context" id="pre-26"
onclick="toggle(26);">
<li class="pre-context-line"><code> val = val.dup if val.frozen?
</code></li>
<li class="pre-context-line"><code> @params[key] = force_encoding(val)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> invoke do
</code></li>
<li class="pre-context-line"><code> static! if settings.static? &amp;&amp; (request.get? || request.head?)
</code></li>
<li class="pre-context-line"><code> filter! :before
</code></li>
</ol>
<ol start="1098" class="context" id="26"
onclick="toggle(26);">
<li class="context-line" id="context-26"><code> route!</code></li>
</ol>
<ol start="1099" class="post-context"
id="post-26" onclick="toggle(26);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> rescue ::Exception =&gt; boom
</code></li>
<li class="post-context-line"><code> invoke { handle_exception!(boom) }
</code></li>
<li class="post-context-line"><code> ensure
</code></li>
<li class="post-context-line"><code> begin
</code></li>
<li class="post-context-line"><code> filter! :after unless env[&#x27;sinatra.static_file&#x27;]
</code></li>
<li class="post-context-line"><code> rescue ::Exception =&gt; boom
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in invoke</strong></code>
</li>
<li class="code framework">
<ol start="1065"
class="pre-context" id="pre-27"
onclick="toggle(27);">
<li class="pre-context-line"><code> env[&#x27;sinatra.static_file&#x27;] = path
</code></li>
<li class="pre-context-line"><code> cache_control(*settings.static_cache_control) if settings.static_cache_control?
</code></li>
<li class="pre-context-line"><code> send_file path, options.merge(:disposition =&gt; nil)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run the block with &#x27;throw :halt&#x27; support and apply result to the response.
</code></li>
<li class="pre-context-line"><code> def invoke
</code></li>
</ol>
<ol start="1072" class="context" id="27"
onclick="toggle(27);">
<li class="context-line" id="context-27"><code> res = catch(:halt) { yield }</code></li>
</ol>
<ol start="1073" class="post-context"
id="post-27" onclick="toggle(27);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> res = [res] if Integer === res or String === res
</code></li>
<li class="post-context-line"><code> if Array === res and Integer === res.first
</code></li>
<li class="post-context-line"><code> res = res.dup
</code></li>
<li class="post-context-line"><code> status(res.shift)
</code></li>
<li class="post-context-line"><code> body(res.pop)
</code></li>
<li class="post-context-line"><code> headers(*res)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>catch</strong></code>
</li>
<li class="code framework">
<ol start="1065"
class="pre-context" id="pre-28"
onclick="toggle(28);">
<li class="pre-context-line"><code> env[&#x27;sinatra.static_file&#x27;] = path
</code></li>
<li class="pre-context-line"><code> cache_control(*settings.static_cache_control) if settings.static_cache_control?
</code></li>
<li class="pre-context-line"><code> send_file path, options.merge(:disposition =&gt; nil)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run the block with &#x27;throw :halt&#x27; support and apply result to the response.
</code></li>
<li class="pre-context-line"><code> def invoke
</code></li>
</ol>
<ol start="1072" class="context" id="28"
onclick="toggle(28);">
<li class="context-line" id="context-28"><code> res = catch(:halt) { yield }</code></li>
</ol>
<ol start="1073" class="post-context"
id="post-28" onclick="toggle(28);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> res = [res] if Integer === res or String === res
</code></li>
<li class="post-context-line"><code> if Array === res and Integer === res.first
</code></li>
<li class="post-context-line"><code> res = res.dup
</code></li>
<li class="post-context-line"><code> status(res.shift)
</code></li>
<li class="post-context-line"><code> body(res.pop)
</code></li>
<li class="post-context-line"><code> headers(*res)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>invoke</strong></code>
</li>
<li class="code framework">
<ol start="1065"
class="pre-context" id="pre-29"
onclick="toggle(29);">
<li class="pre-context-line"><code> env[&#x27;sinatra.static_file&#x27;] = path
</code></li>
<li class="pre-context-line"><code> cache_control(*settings.static_cache_control) if settings.static_cache_control?
</code></li>
<li class="pre-context-line"><code> send_file path, options.merge(:disposition =&gt; nil)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run the block with &#x27;throw :halt&#x27; support and apply result to the response.
</code></li>
<li class="pre-context-line"><code> def invoke
</code></li>
</ol>
<ol start="1072" class="context" id="29"
onclick="toggle(29);">
<li class="context-line" id="context-29"><code> res = catch(:halt) { yield }</code></li>
</ol>
<ol start="1073" class="post-context"
id="post-29" onclick="toggle(29);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> res = [res] if Integer === res or String === res
</code></li>
<li class="post-context-line"><code> if Array === res and Integer === res.first
</code></li>
<li class="post-context-line"><code> res = res.dup
</code></li>
<li class="post-context-line"><code> status(res.shift)
</code></li>
<li class="post-context-line"><code> body(res.pop)
</code></li>
<li class="post-context-line"><code> headers(*res)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>dispatch!</strong></code>
</li>
<li class="code framework">
<ol start="1088"
class="pre-context" id="pre-30"
onclick="toggle(30);">
<li class="pre-context-line"><code> # Avoid passing frozen string in force_encoding
</code></li>
<li class="pre-context-line"><code> @params.merge!(@request.params).each do |key, val|
</code></li>
<li class="pre-context-line"><code> next unless val.respond_to?(:force_encoding)
</code></li>
<li class="pre-context-line"><code> val = val.dup if val.frozen?
</code></li>
<li class="pre-context-line"><code> @params[key] = force_encoding(val)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
</ol>
<ol start="1095" class="context" id="30"
onclick="toggle(30);">
<li class="context-line" id="context-30"><code> invoke do</code></li>
</ol>
<ol start="1096" class="post-context"
id="post-30" onclick="toggle(30);">
<li class="post-context-line"><code> static! if settings.static? &amp;&amp; (request.get? || request.head?)
</code></li>
<li class="post-context-line"><code> filter! :before
</code></li>
<li class="post-context-line"><code> route!
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> rescue ::Exception =&gt; boom
</code></li>
<li class="post-context-line"><code> invoke { handle_exception!(boom) }
</code></li>
<li class="post-context-line"><code> ensure
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in call!</strong></code>
</li>
<li class="code framework">
<ol start="912"
class="pre-context" id="pre-31"
onclick="toggle(31);">
<li class="pre-context-line"><code> @env = env
</code></li>
<li class="pre-context-line"><code> @params = IndifferentHash.new
</code></li>
<li class="pre-context-line"><code> @request = Request.new(env)
</code></li>
<li class="pre-context-line"><code> @response = Response.new
</code></li>
<li class="pre-context-line"><code> template_cache.clear if settings.reload_templates
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> @response[&#x27;Content-Type&#x27;] = nil
</code></li>
</ol>
<ol start="919" class="context" id="31"
onclick="toggle(31);">
<li class="context-line" id="context-31"><code> invoke { dispatch! }</code></li>
</ol>
<ol start="920" class="post-context"
id="post-31" onclick="toggle(31);">
<li class="post-context-line"><code> invoke { error_block!(response.status) } unless @env[&#x27;sinatra.error&#x27;]
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> unless @response[&#x27;Content-Type&#x27;]
</code></li>
<li class="post-context-line"><code> if Array === body and body[0].respond_to? :content_type
</code></li>
<li class="post-context-line"><code> content_type body[0].content_type
</code></li>
<li class="post-context-line"><code> else
</code></li>
<li class="post-context-line"><code> content_type :html
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in invoke</strong></code>
</li>
<li class="code framework">
<ol start="1065"
class="pre-context" id="pre-32"
onclick="toggle(32);">
<li class="pre-context-line"><code> env[&#x27;sinatra.static_file&#x27;] = path
</code></li>
<li class="pre-context-line"><code> cache_control(*settings.static_cache_control) if settings.static_cache_control?
</code></li>
<li class="pre-context-line"><code> send_file path, options.merge(:disposition =&gt; nil)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run the block with &#x27;throw :halt&#x27; support and apply result to the response.
</code></li>
<li class="pre-context-line"><code> def invoke
</code></li>
</ol>
<ol start="1072" class="context" id="32"
onclick="toggle(32);">
<li class="context-line" id="context-32"><code> res = catch(:halt) { yield }</code></li>
</ol>
<ol start="1073" class="post-context"
id="post-32" onclick="toggle(32);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> res = [res] if Integer === res or String === res
</code></li>
<li class="post-context-line"><code> if Array === res and Integer === res.first
</code></li>
<li class="post-context-line"><code> res = res.dup
</code></li>
<li class="post-context-line"><code> status(res.shift)
</code></li>
<li class="post-context-line"><code> body(res.pop)
</code></li>
<li class="post-context-line"><code> headers(*res)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>catch</strong></code>
</li>
<li class="code framework">
<ol start="1065"
class="pre-context" id="pre-33"
onclick="toggle(33);">
<li class="pre-context-line"><code> env[&#x27;sinatra.static_file&#x27;] = path
</code></li>
<li class="pre-context-line"><code> cache_control(*settings.static_cache_control) if settings.static_cache_control?
</code></li>
<li class="pre-context-line"><code> send_file path, options.merge(:disposition =&gt; nil)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run the block with &#x27;throw :halt&#x27; support and apply result to the response.
</code></li>
<li class="pre-context-line"><code> def invoke
</code></li>
</ol>
<ol start="1072" class="context" id="33"
onclick="toggle(33);">
<li class="context-line" id="context-33"><code> res = catch(:halt) { yield }</code></li>
</ol>
<ol start="1073" class="post-context"
id="post-33" onclick="toggle(33);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> res = [res] if Integer === res or String === res
</code></li>
<li class="post-context-line"><code> if Array === res and Integer === res.first
</code></li>
<li class="post-context-line"><code> res = res.dup
</code></li>
<li class="post-context-line"><code> status(res.shift)
</code></li>
<li class="post-context-line"><code> body(res.pop)
</code></li>
<li class="post-context-line"><code> headers(*res)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>invoke</strong></code>
</li>
<li class="code framework">
<ol start="1065"
class="pre-context" id="pre-34"
onclick="toggle(34);">
<li class="pre-context-line"><code> env[&#x27;sinatra.static_file&#x27;] = path
</code></li>
<li class="pre-context-line"><code> cache_control(*settings.static_cache_control) if settings.static_cache_control?
</code></li>
<li class="pre-context-line"><code> send_file path, options.merge(:disposition =&gt; nil)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run the block with &#x27;throw :halt&#x27; support and apply result to the response.
</code></li>
<li class="pre-context-line"><code> def invoke
</code></li>
</ol>
<ol start="1072" class="context" id="34"
onclick="toggle(34);">
<li class="context-line" id="context-34"><code> res = catch(:halt) { yield }</code></li>
</ol>
<ol start="1073" class="post-context"
id="post-34" onclick="toggle(34);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> res = [res] if Integer === res or String === res
</code></li>
<li class="post-context-line"><code> if Array === res and Integer === res.first
</code></li>
<li class="post-context-line"><code> res = res.dup
</code></li>
<li class="post-context-line"><code> status(res.shift)
</code></li>
<li class="post-context-line"><code> body(res.pop)
</code></li>
<li class="post-context-line"><code> headers(*res)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>call!</strong></code>
</li>
<li class="code framework">
<ol start="912"
class="pre-context" id="pre-35"
onclick="toggle(35);">
<li class="pre-context-line"><code> @env = env
</code></li>
<li class="pre-context-line"><code> @params = IndifferentHash.new
</code></li>
<li class="pre-context-line"><code> @request = Request.new(env)
</code></li>
<li class="pre-context-line"><code> @response = Response.new
</code></li>
<li class="pre-context-line"><code> template_cache.clear if settings.reload_templates
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> @response[&#x27;Content-Type&#x27;] = nil
</code></li>
</ol>
<ol start="919" class="context" id="35"
onclick="toggle(35);">
<li class="context-line" id="context-35"><code> invoke { dispatch! }</code></li>
</ol>
<ol start="920" class="post-context"
id="post-35" onclick="toggle(35);">
<li class="post-context-line"><code> invoke { error_block!(response.status) } unless @env[&#x27;sinatra.error&#x27;]
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> unless @response[&#x27;Content-Type&#x27;]
</code></li>
<li class="post-context-line"><code> if Array === body and body[0].respond_to? :content_type
</code></li>
<li class="post-context-line"><code> content_type body[0].content_type
</code></li>
<li class="post-context-line"><code> else
</code></li>
<li class="post-context-line"><code> content_type :html
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code framework">
<ol start="901"
class="pre-context" id="pre-36"
onclick="toggle(36);">
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> @template_cache = Tilt::Cache.new
</code></li>
<li class="pre-context-line"><code> yield self if block_given?
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Rack call interface.
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="908" class="context" id="36"
onclick="toggle(36);">
<li class="context-line" id="context-36"><code> dup.call!(env)</code></li>
</ol>
<ol start="909" class="post-context"
id="post-36" onclick="toggle(36);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def call!(env) # :nodoc:
</code></li>
<li class="post-context-line"><code> @env = env
</code></li>
<li class="post-context-line"><code> @params = IndifferentHash.new
</code></li>
<li class="post-context-line"><code> @request = Request.new(env)
</code></li>
<li class="post-context-line"><code> @response = Response.new
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-protection-2.0.8.1&#x2F;lib&#x2F;rack&#x2F;protection&#x2F;xss_header.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="11"
class="pre-context" id="pre-37"
onclick="toggle(37);">
<li class="pre-context-line"><code> #
</code></li>
<li class="pre-context-line"><code> # Options:
</code></li>
<li class="pre-context-line"><code> # xss_mode:: How the browser should prevent the attack (default: :block)
</code></li>
<li class="pre-context-line"><code> class XSSHeader &lt; Base
</code></li>
<li class="pre-context-line"><code> default_options :xss_mode =&gt; :block, :nosniff =&gt; true
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="18" class="context" id="37"
onclick="toggle(37);">
<li class="context-line" id="context-37"><code> status, headers, body = @app.call(env)</code></li>
</ol>
<ol start="19" class="post-context"
id="post-37" onclick="toggle(37);">
<li class="post-context-line"><code> headers[&#x27;X-XSS-Protection&#x27;] ||= &quot;1; mode=#{options[:xss_mode]}&quot; if html? headers
</code></li>
<li class="post-context-line"><code> headers[&#x27;X-Content-Type-Options&#x27;] ||= &#x27;nosniff&#x27; if options[:nosniff]
</code></li>
<li class="post-context-line"><code> [status, headers, body]
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-protection-2.0.8.1&#x2F;lib&#x2F;rack&#x2F;protection&#x2F;path_traversal.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="9"
class="pre-context" id="pre-38"
onclick="toggle(38);">
<li class="pre-context-line"><code> #
</code></li>
<li class="pre-context-line"><code> # Unescapes &#x27;&#x2F;&#x27; and &#x27;.&#x27;, expands +path_info+.
</code></li>
<li class="pre-context-line"><code> # Thus &lt;tt&gt;GET &#x2F;foo&#x2F;%2e%2e%2fbar&lt;&#x2F;tt&gt; becomes &lt;tt&gt;GET &#x2F;bar&lt;&#x2F;tt&gt;.
</code></li>
<li class="pre-context-line"><code> class PathTraversal &lt; Base
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> path_was = env[&quot;PATH_INFO&quot;]
</code></li>
<li class="pre-context-line"><code> env[&quot;PATH_INFO&quot;] = cleanup path_was if path_was &amp;&amp; !path_was.empty?
</code></li>
</ol>
<ol start="16" class="context" id="38"
onclick="toggle(38);">
<li class="context-line" id="context-38"><code> app.call env</code></li>
</ol>
<ol start="17" class="post-context"
id="post-38" onclick="toggle(38);">
<li class="post-context-line"><code> ensure
</code></li>
<li class="post-context-line"><code> env[&quot;PATH_INFO&quot;] = path_was
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def cleanup(path)
</code></li>
<li class="post-context-line"><code> encoding = path.encoding
</code></li>
<li class="post-context-line"><code> dot = &#x27;.&#x27;.encode(encoding)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-protection-2.0.8.1&#x2F;lib&#x2F;rack&#x2F;protection&#x2F;json_csrf.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="19"
class="pre-context" id="pre-39"
onclick="toggle(39);">
<li class="pre-context-line"><code> class JsonCsrf &lt; Base
</code></li>
<li class="pre-context-line"><code> default_options :allow_if =&gt; nil
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> alias react deny
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> request = Request.new(env)
</code></li>
</ol>
<ol start="26" class="context" id="39"
onclick="toggle(39);">
<li class="context-line" id="context-39"><code> status, headers, body = app.call(env)</code></li>
</ol>
<ol start="27" class="post-context"
id="post-39" onclick="toggle(39);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> if has_vector?(request, headers)
</code></li>
<li class="post-context-line"><code> warn env, &quot;attack prevented by #{self.class}&quot;
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> react_and_close(env, body) or [status, headers, body]
</code></li>
<li class="post-context-line"><code> else
</code></li>
<li class="post-context-line"><code> [status, headers, body]
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-protection-2.0.8.1&#x2F;lib&#x2F;rack&#x2F;protection&#x2F;base.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="43"
class="pre-context" id="pre-40"
onclick="toggle(40);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> unless accepts? env
</code></li>
<li class="pre-context-line"><code> instrument env
</code></li>
<li class="pre-context-line"><code> result = react env
</code></li>
<li class="pre-context-line"><code> end
</code></li>
</ol>
<ol start="50" class="context" id="40"
onclick="toggle(40);">
<li class="context-line" id="context-40"><code> result or app.call(env)</code></li>
</ol>
<ol start="51" class="post-context"
id="post-40" onclick="toggle(40);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def react(env)
</code></li>
<li class="post-context-line"><code> result = send(options[:reaction], env)
</code></li>
<li class="post-context-line"><code> result if Array === result and result.size == 3
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-protection-2.0.8.1&#x2F;lib&#x2F;rack&#x2F;protection&#x2F;base.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="43"
class="pre-context" id="pre-41"
onclick="toggle(41);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> unless accepts? env
</code></li>
<li class="pre-context-line"><code> instrument env
</code></li>
<li class="pre-context-line"><code> result = react env
</code></li>
<li class="pre-context-line"><code> end
</code></li>
</ol>
<ol start="50" class="context" id="41"
onclick="toggle(41);">
<li class="context-line" id="context-41"><code> result or app.call(env)</code></li>
</ol>
<ol start="51" class="post-context"
id="post-41" onclick="toggle(41);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def react(env)
</code></li>
<li class="post-context-line"><code> result = send(options[:reaction], env)
</code></li>
<li class="post-context-line"><code> result if Array === result and result.size == 3
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-protection-2.0.8.1&#x2F;lib&#x2F;rack&#x2F;protection&#x2F;frame_options.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="24"
class="pre-context" id="pre-42"
onclick="toggle(42);">
<li class="pre-context-line"><code> frame_options = options[:frame_options]
</code></li>
<li class="pre-context-line"><code> frame_options = options[:frame_options].to_s.upcase unless frame_options.respond_to? :to_str
</code></li>
<li class="pre-context-line"><code> frame_options.to_str
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="31" class="context" id="42"
onclick="toggle(42);">
<li class="context-line" id="context-42"><code> status, headers, body = @app.call(env)</code></li>
</ol>
<ol start="32" class="post-context"
id="post-42" onclick="toggle(42);">
<li class="post-context-line"><code> headers[&#x27;X-Frame-Options&#x27;] ||= frame_options if html? headers
</code></li>
<li class="post-context-line"><code> [status, headers, body]
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-2.2.2&#x2F;lib&#x2F;rack&#x2F;null_logger.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="4"
class="pre-context" id="pre-43"
onclick="toggle(43);">
<li class="pre-context-line"><code> class NullLogger
</code></li>
<li class="pre-context-line"><code> def initialize(app)
</code></li>
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> env[RACK_LOGGER] = self
</code></li>
</ol>
<ol start="11" class="context" id="43"
onclick="toggle(43);">
<li class="context-line" id="context-43"><code> @app.call(env)</code></li>
</ol>
<ol start="12" class="post-context"
id="post-43" onclick="toggle(43);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def info(progname = nil, &amp;block); end
</code></li>
<li class="post-context-line"><code> def debug(progname = nil, &amp;block); end
</code></li>
<li class="post-context-line"><code> def warn(progname = nil, &amp;block); end
</code></li>
<li class="post-context-line"><code> def error(progname = nil, &amp;block); end
</code></li>
<li class="post-context-line"><code> def fatal(progname = nil, &amp;block); end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-2.2.2&#x2F;lib&#x2F;rack&#x2F;head.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="5"
class="pre-context" id="pre-44"
onclick="toggle(44);">
<li class="pre-context-line"><code> # all other requests unchanged.
</code></li>
<li class="pre-context-line"><code> class Head
</code></li>
<li class="pre-context-line"><code> def initialize(app)
</code></li>
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="12" class="context" id="44"
onclick="toggle(44);">
<li class="context-line" id="context-44"><code> status, headers, body = @app.call(env)</code></li>
</ol>
<ol start="13" class="post-context"
id="post-44" onclick="toggle(44);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> if env[REQUEST_METHOD] == HEAD
</code></li>
<li class="post-context-line"><code> [
</code></li>
<li class="post-context-line"><code> status, headers, Rack::BodyProxy.new([]) do
</code></li>
<li class="post-context-line"><code> body.close if body.respond_to? :close
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> ]
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;show_exceptions.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code framework">
<ol start="15"
class="pre-context" id="pre-45"
onclick="toggle(45);">
<li class="pre-context-line"><code> def @@eats_errors.puts(*) end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def initialize(app)
</code></li>
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="22" class="context" id="45"
onclick="toggle(45);">
<li class="context-line" id="context-45"><code> @app.call(env)</code></li>
</ol>
<ol start="23" class="post-context"
id="post-45" onclick="toggle(45);">
<li class="post-context-line"><code> rescue Exception =&gt; e
</code></li>
<li class="post-context-line"><code> errors, env[&quot;rack.errors&quot;] = env[&quot;rack.errors&quot;], @@eats_errors
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> if prefers_plain_text?(env)
</code></li>
<li class="post-context-line"><code> content_type = &quot;text&#x2F;plain&quot;
</code></li>
<li class="post-context-line"><code> body = dump_exception(e)
</code></li>
<li class="post-context-line"><code> else
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code framework">
<ol start="187"
class="pre-context" id="pre-46"
onclick="toggle(46);">
<li class="pre-context-line"><code> # Some Rack handlers (Thin, Rainbows!) implement an extended body object protocol, however,
</code></li>
<li class="pre-context-line"><code> # some middleware (namely Rack::Lint) will break it by not mirroring the methods in question.
</code></li>
<li class="pre-context-line"><code> # This middleware will detect an extended body object and will make sure it reaches the
</code></li>
<li class="pre-context-line"><code> # handler directly. We do this here, so our middleware and middleware set up by the app will
</code></li>
<li class="pre-context-line"><code> # still be able to run.
</code></li>
<li class="pre-context-line"><code> class ExtendedRack &lt; Struct.new(:app)
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="194" class="context" id="46"
onclick="toggle(46);">
<li class="context-line" id="context-46"><code> result, callback = app.call(env), env[&#x27;async.callback&#x27;]</code></li>
</ol>
<ol start="195" class="post-context"
id="post-46" onclick="toggle(46);">
<li class="post-context-line"><code> return result unless callback and async?(*result)
</code></li>
<li class="post-context-line"><code> after_response { callback.call result }
</code></li>
<li class="post-context-line"><code> setup_close(env, *result)
</code></li>
<li class="post-context-line"><code> throw :async
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> private
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code framework">
<ol start="1944"
class="pre-context" id="pre-47"
onclick="toggle(47);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def helpers
</code></li>
<li class="pre-context-line"><code> @instance
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="1951" class="context" id="47"
onclick="toggle(47);">
<li class="context-line" id="context-47"><code> @stack.call(env)</code></li>
</ol>
<ol start="1952" class="post-context"
id="post-47" onclick="toggle(47);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def inspect
</code></li>
<li class="post-context-line"><code> &quot;#&lt;#{@instance.class} app_file=#{settings.app_file.inspect}&gt;&quot;
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;server_health_check-rack-0.1.0&#x2F;lib&#x2F;server_health_check_rack&#x2F;middleware.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="5"
class="pre-context" id="pre-48"
onclick="toggle(48);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> if ServerHealthCheckRack::Config.path?(env[&quot;PATH_INFO&quot;])
</code></li>
<li class="pre-context-line"><code> check = health_check(env[&quot;PATH_INFO&quot;])
</code></li>
<li class="pre-context-line"><code> [check.http_status, response_headers, [check.to_json]]
</code></li>
<li class="pre-context-line"><code> else
</code></li>
</ol>
<ol start="12" class="context" id="48"
onclick="toggle(48);">
<li class="context-line" id="context-48"><code> @app.call(env)</code></li>
</ol>
<ol start="13" class="post-context"
id="post-48" onclick="toggle(48);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> private
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def health_check(rack_path_info)
</code></li>
<li class="post-context-line"><code> checks = ServerHealthCheckRack::Config.path_to_health_checks(rack_path_info)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;gem_source&#x2F;rack_middleware.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code app">
<ol start="14"
class="pre-context" id="pre-49"
onclick="toggle(49);">
<li class="pre-context-line"><code> Gemstash::GemSource.sources.each do |source|
</code></li>
<li class="pre-context-line"><code> next unless source.matches?(env)
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> env[&quot;gemstash.gem_source&quot;] = source
</code></li>
<li class="pre-context-line"><code> break
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
</ol>
<ol start="21" class="context" id="49"
onclick="toggle(49);">
<li class="context-line" id="context-49"><code> @app.call(env)</code></li>
</ol>
<ol start="22" class="post-context"
id="post-49" onclick="toggle(49);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;env.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code app">
<ol start="32"
class="pre-context" id="pre-50"
onclick="toggle(50);">
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> @gemstash_env = gemstash_env
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> env[&quot;gemstash.env&quot;] = @gemstash_env
</code></li>
<li class="pre-context-line"><code> Gemstash::Env.current = @gemstash_env
</code></li>
</ol>
<ol start="39" class="context" id="50"
onclick="toggle(50);">
<li class="context-line" id="context-50"><code> @app.call(env)</code></li>
</ol>
<ol start="40" class="post-context"
id="post-50" onclick="toggle(50);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def initialize(config = nil, cache: nil, db: nil)
</code></li>
<li class="post-context-line"><code> @config = config
</code></li>
<li class="post-context-line"><code> @cache = cache
</code></li>
<li class="post-context-line"><code> @db = db
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;puma-4.3.5&#x2F;lib&#x2F;puma&#x2F;commonlogger.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="33"
class="pre-context" id="pre-51"
onclick="toggle(51);">
<li class="pre-context-line"><code> def initialize(app, logger=nil)
</code></li>
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> @logger = logger
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> began_at = Time.now
</code></li>
</ol>
<ol start="40" class="context" id="51"
onclick="toggle(51);">
<li class="context-line" id="context-51"><code> status, header, body = @app.call(env)</code></li>
</ol>
<ol start="41" class="post-context"
id="post-51" onclick="toggle(51);">
<li class="post-context-line"><code> header = Util::HeaderHash.new(header)
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # If we&#x27;ve been hijacked, then output a special line
</code></li>
<li class="post-context-line"><code> if env[&#x27;rack.hijack_io&#x27;]
</code></li>
<li class="post-context-line"><code> log_hijacking(env, &#x27;HIJACK&#x27;, header, began_at)
</code></li>
<li class="post-context-line"><code> else
</code></li>
<li class="post-context-line"><code> ary = env[&#x27;rack.after_reply&#x27;]
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;logging.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code app">
<ol start="51"
class="pre-context" id="pre-52"
onclick="toggle(52);">
<li class="pre-context-line"><code> class RackMiddleware
</code></li>
<li class="pre-context-line"><code> def initialize(app)
</code></li>
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> env[&quot;rack.logger&quot;] = Gemstash::Logging.logger
</code></li>
</ol>
<ol start="58" class="context" id="52"
onclick="toggle(52);">
<li class="context-line" id="context-52"><code> @app.call(env)</code></li>
</ol>
<ol start="59" class="post-context"
id="post-52" onclick="toggle(52);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # Logger that looks like a stream, for Puma and Rack to log to.
</code></li>
<li class="post-context-line"><code> class StreamLogger
</code></li>
<li class="post-context-line"><code> def self.puma_events
</code></li>
<li class="post-context-line"><code> Puma::Events.new(for_stdout, for_stderr)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-2.2.2&#x2F;lib&#x2F;rack&#x2F;deflater.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="37"
class="pre-context" id="pre-53"
onclick="toggle(53);">
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> @condition = options[:if]
</code></li>
<li class="pre-context-line"><code> @compressible_types = options[:include]
</code></li>
<li class="pre-context-line"><code> @sync = options.fetch(:sync, true)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="44" class="context" id="53"
onclick="toggle(53);">
<li class="context-line" id="context-53"><code> status, headers, body = @app.call(env)</code></li>
</ol>
<ol start="45" class="post-context"
id="post-53" onclick="toggle(53);">
<li class="post-context-line"><code> headers = Utils::HeaderHash[headers]
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> unless should_deflate?(env, status, headers, body)
</code></li>
<li class="post-context-line"><code> return [status, headers, body]
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> request = Request.new(env)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;puma-4.3.5&#x2F;lib&#x2F;puma&#x2F;configuration.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="221"
class="pre-context" id="pre-54"
onclick="toggle(54);">
<li class="pre-context-line"><code> def initialize(config, app)
</code></li>
<li class="pre-context-line"><code> @config = config
</code></li>
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> env[Const::PUMA_CONFIG] = @config
</code></li>
</ol>
<ol start="228" class="context" id="54"
onclick="toggle(54);">
<li class="context-line" id="context-54"><code> @app.call(env)</code></li>
</ol>
<ol start="229" class="post-context"
id="post-54" onclick="toggle(54);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # Indicate if there is a properly configured app
</code></li>
<li class="post-context-line"><code> #
</code></li>
<li class="post-context-line"><code> def app_configured?
</code></li>
<li class="post-context-line"><code> @options[:app] || File.exist?(rackup)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;puma-4.3.5&#x2F;lib&#x2F;puma&#x2F;server.rb</code> in
<code><strong>handle_request</strong></code>
</li>
<li class="code system">
<ol start="706"
class="pre-context" id="pre-55"
onclick="toggle(55);">
<li class="pre-context-line"><code> # A rack extension. If the app writes #call&#x27;ables to this
</code></li>
<li class="pre-context-line"><code> # array, we will invoke them when the request is done.
</code></li>
<li class="pre-context-line"><code> #
</code></li>
<li class="pre-context-line"><code> after_reply = env[RACK_AFTER_REPLY] = []
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> begin
</code></li>
<li class="pre-context-line"><code> begin
</code></li>
</ol>
<ol start="713" class="context" id="55"
onclick="toggle(55);">
<li class="context-line" id="context-55"><code> status, headers, res_body = @app.call(env)</code></li>
</ol>
<ol start="714" class="post-context"
id="post-55" onclick="toggle(55);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> return :async if req.hijacked
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> status = status.to_i
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> if status == -1
</code></li>
<li class="post-context-line"><code> unless headers.empty? and res_body == []
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;puma-4.3.5&#x2F;lib&#x2F;puma&#x2F;server.rb</code> in
<code><strong>process_client</strong></code>
</li>
<li class="code system">
<ol start="465"
class="pre-context" id="pre-56"
onclick="toggle(56);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> clean_thread_locals = @options[:clean_thread_locals]
</code></li>
<li class="pre-context-line"><code> close_socket = true
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> requests = 0
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> while true
</code></li>
</ol>
<ol start="472" class="context" id="56"
onclick="toggle(56);">
<li class="context-line" id="context-56"><code> case handle_request(client, buffer)</code></li>
</ol>
<ol start="473" class="post-context"
id="post-56" onclick="toggle(56);">
<li class="post-context-line"><code> when false
</code></li>
<li class="post-context-line"><code> return
</code></li>
<li class="post-context-line"><code> when :async
</code></li>
<li class="post-context-line"><code> close_socket = false
</code></li>
<li class="post-context-line"><code> return
</code></li>
<li class="post-context-line"><code> when true
</code></li>
<li class="post-context-line"><code> return unless @queue_requests
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;puma-4.3.5&#x2F;lib&#x2F;puma&#x2F;server.rb</code> in
<code><strong>block in run</strong></code>
</li>
<li class="code system">
<ol start="321"
class="pre-context" id="pre-57"
onclick="toggle(57);">
<li class="pre-context-line"><code> client.close
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> @events.parse_error self, client.env, e
</code></li>
<li class="pre-context-line"><code> rescue ConnectionError, EOFError
</code></li>
<li class="pre-context-line"><code> client.close
</code></li>
<li class="pre-context-line"><code> else
</code></li>
<li class="pre-context-line"><code> if process_now
</code></li>
</ol>
<ol start="328" class="context" id="57"
onclick="toggle(57);">
<li class="context-line" id="context-57"><code> process_client client, buffer</code></li>
</ol>
<ol start="329" class="post-context"
id="post-57" onclick="toggle(57);">
<li class="post-context-line"><code> else
</code></li>
<li class="post-context-line"><code> client.set_timeout @first_data_timeout
</code></li>
<li class="post-context-line"><code> @reactor.add client
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;puma-4.3.5&#x2F;lib&#x2F;puma&#x2F;thread_pool.rb</code> in
<code><strong>block in spawn_thread</strong></code>
</li>
<li class="code system">
<ol start="127"
class="pre-context" id="pre-58"
onclick="toggle(58);">
<li class="pre-context-line"><code> break unless continue
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> if @clean_thread_locals
</code></li>
<li class="pre-context-line"><code> ThreadPool.clean_thread_locals
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> begin
</code></li>
</ol>
<ol start="134" class="context" id="58"
onclick="toggle(58);">
<li class="context-line" id="context-58"><code> block.call(work, *extra)</code></li>
</ol>
<ol start="135" class="post-context"
id="post-58" onclick="toggle(58);">
<li class="post-context-line"><code> rescue Exception =&gt; e
</code></li>
<li class="post-context-line"><code> STDERR.puts &quot;Error reached top of thread-pool: #{e.message} (#{e.class})&quot;
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> mutex.synchronize do
</code></li>
<li class="post-context-line"><code> @spawned -= 1
</code></li>
</ol>
<div class="clear"></div>
</li>
</ul>
</div> <!-- /BACKTRACE -->
<div id="get">
<h3 id="get-info">GET</h3>
<p class="no-data">No GET data.</p>
<div class="clear"></div>
</div> <!-- /GET -->
<div id="post">
<h3 id="post-info">POST</h3>
<p class="no-data">No POST data.</p>
<div class="clear"></div>
</div> <!-- /POST -->
<div id="cookies">
<h3 id="cookie-info">COOKIES</h3>
<p class="no-data">No cookie data.</p>
<div class="clear"></div>
</div> <!-- /COOKIES -->
<div id="rack">
<h3 id="env-info">Rack ENV</h3>
<table class="req">
<tr>
<th>Variable</th>
<th>Value</th>
</tr>
<tr>
<td>CONTENT_LENGTH</td>
<td class="code"><div>6144</div></td>
</tr>
<tr>
<td>CONTENT_TYPE</td>
<td class="code"><div>application&#x2F;octet-stream</div></td>
</tr>
<tr>
<td>GATEWAY_INTERFACE</td>
<td class="code"><div>CGI&#x2F;1.2</div></td>
</tr>
<tr>
<td>HTTP_ACCEPT</td>
<td class="code"><div>*&#x2F;*</div></td>
</tr>
<tr>
<td>HTTP_ACCEPT_ENCODING</td>
<td class="code"><div>gzip;q=1.0,deflate;q=0.6,identity;q=0.3</div></td>
</tr>
<tr>
<td>HTTP_AUTHORIZATION</td>
<td class="code"><div>72b4857b4c60c2d0aec84092c4d89d07</div></td>
</tr>
<tr>
<td>HTTP_CONNECTION</td>
<td class="code"><div>keep-alive</div></td>
</tr>
<tr>
<td>HTTP_HOST</td>
<td class="code"><div>localhost:9292</div></td>
</tr>
<tr>
<td>HTTP_KEEP_ALIVE</td>
<td class="code"><div>30</div></td>
</tr>
<tr>
<td>HTTP_USER_AGENT</td>
<td class="code"><div>Ruby, RubyGems&#x2F;3.0.3 x86_64-darwin-19 Ruby&#x2F;2.6.3 (2019-04-16 patchlevel 62)</div></td>
</tr>
<tr>
<td>HTTP_VERSION</td>
<td class="code"><div>HTTP&#x2F;1.1</div></td>
</tr>
<tr>
<td>PATH_INFO</td>
<td class="code"><div>&#x2F;api&#x2F;v1&#x2F;gems</div></td>
</tr>
<tr>
<td>QUERY_STRING</td>
<td class="code"><div></div></td>
</tr>
<tr>
<td>REMOTE_ADDR</td>
<td class="code"><div>127.0.0.1</div></td>
</tr>
<tr>
<td>REQUEST_METHOD</td>
<td class="code"><div>POST</div></td>
</tr>
<tr>
<td>REQUEST_PATH</td>
<td class="code"><div>&#x2F;private&#x2F;api&#x2F;v1&#x2F;gems</div></td>
</tr>
<tr>
<td>REQUEST_URI</td>
<td class="code"><div>&#x2F;api&#x2F;v1&#x2F;gems</div></td>
</tr>
<tr>
<td>SCRIPT_NAME</td>
<td class="code"><div></div></td>
</tr>
<tr>
<td>SERVER_NAME</td>
<td class="code"><div>localhost</div></td>
</tr>
<tr>
<td>SERVER_PORT</td>
<td class="code"><div>9292</div></td>
</tr>
<tr>
<td>SERVER_PROTOCOL</td>
<td class="code"><div>HTTP&#x2F;1.1</div></td>
</tr>
<tr>
<td>SERVER_SOFTWARE</td>
<td class="code"><div>puma 4.3.5 Mysterious Traveller</div></td>
</tr>
<tr>
<td>gemstash.env</td>
<td class="code"><div>#&lt;Gemstash::Env:0x00007fea97817b10 @config=#&lt;Gemstash::Configuration:0x00007fea963959a8 @config={:cache_type=&gt;&quot;memory&quot;, :base_path=&gt;&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;.gemstash&quot;, :db_adapter=&gt;&quot;sqlite3&quot;, :bind=&gt;&quot;tcp:&#x2F;&#x2F;0.0.0.0:9292&quot;, :rubygems_url=&gt;&quot;https:&#x2F;&#x2F;rubygems.org&quot;, :ignore_gemfile_source=&gt;false, :protected_fetch=&gt;false, :fetch_timeout=&gt;20, :db_connection_options=&gt;{}, :puma_threads=&gt;16, :puma_workers=&gt;1, :cache_expiration=&gt;1800, :cache_max_size=&gt;500, :storage_adapter=&gt;&quot;s3&quot;, :aws_access_key_id=&gt;&quot;AKIAXDAKXIODWSOIRIZ3&quot;, :aws_secret_access_key=&gt;&quot;4txhhFYTcYly7kSf+1bI1aolopZ9axZQVzhT&#x2F;66W&quot;, :bucket_name=&gt;&quot;testing16160303&quot;, :region=&gt;&quot;us-west-1&quot;, :s3_path=&gt;&quot;gemstash&#x2F;s3_storage&quot;}&gt;, @cache=#&lt;Gemstash::Cache:0x00007fea966ac3d0 @client=#&lt;Gemstash::LruReduxClient:0x00007fea966ac5d8 @cache=#&lt;LruRedux::TTL::ThreadSafeCache:0x00007fea966ac5b0 @max_size=500, @ttl=1800, @data_lru={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;#&lt;Gemstash::Authorization:0x00007fea95949d50 @auth_key=&quot;72b4857b4c60c2d0aec84092c4d89d07&quot;, @all=true, @permissions=#&lt;Set: {&quot;all&quot;}&gt;&gt;}, @data_ttl={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;1592018906.024399}, @mon_mutex=#&lt;Thread::Mutex:0x00007fea966ac3f8&gt;, @mon_mutex_owner_object_id=70322761327320, @mon_owner=nil, @mon_count=0&gt;&gt;&gt;, @db=#&lt;Sequel::SQLite::Database: &quot;sqlite:&#x2F;&#x2F;%2FUsers%2Fquangnguyen%2F.gemstash%2Fgemstash.db&quot; {:max_connections=&gt;1}&gt;, @cache_client=#&lt;Gemstash::LruReduxClient:0x00007fea966ac5d8 @cache=#&lt;LruRedux::TTL::ThreadSafeCache:0x00007fea966ac5b0 @max_size=500, @ttl=1800, @data_lru={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;#&lt;Gemstash::Authorization:0x00007fea95949d50 @auth_key=&quot;72b4857b4c60c2d0aec84092c4d89d07&quot;, @all=true, @permissions=#&lt;Set: {&quot;all&quot;}&gt;&gt;}, @data_ttl={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;1592018906.024399}, @mon_mutex=#&lt;Thread::Mutex:0x00007fea966ac3f8&gt;, @mon_mutex_owner_object_id=70322761327320, @mon_owner=nil, @mon_count=0&gt;&gt;&gt;</div></td>
</tr>
<tr>
<td>gemstash.gem_source</td>
<td class="code"><div>Gemstash::GemSource::PrivateSource</div></td>
</tr>
<tr>
<td>puma.config</td>
<td class="code"><div>#&lt;Puma::Configuration:0x00007fea964565b8 @options=#&lt;Puma::UserFileDefaultOptions:0x00007fea96455d48 @user_options={:pidfile=&gt;&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;.gemstash&#x2F;puma.pid&quot;, :daemon=&gt;true, :log_requests=&gt;false, :environment=&gt;&quot;development&quot;, :logger=&gt;#&lt;Puma::Events:0x00007fea96456810 @formatter=#&lt;Puma::Events::PidFormatter:0x00007fea96474f18&gt;, @stdout=#&lt;Gemstash::Logging::StreamLogger:0x00007fea964568d8 @level=1&gt;, @stderr=#&lt;Gemstash::Logging::StreamLogger:0x00007fea96456838 @level=3&gt;, @debug=false, @hooks={:state=&gt;[]}&gt;}, @file_options={:config_files=&gt;[&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;puma.rb&quot;], :min_threads=&gt;0, :max_threads=&gt;16, :binds=&gt;[&quot;tcp:&#x2F;&#x2F;0.0.0.0:9292&quot;], :workers=&gt;1, :rackup=&gt;&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;config.ru&quot;}, @default_options={:min_threads=&gt;0, :max_threads=&gt;16, :log_requests=&gt;false, :debug=&gt;false, :binds=&gt;[&quot;tcp:&#x2F;&#x2F;0.0.0.0:9292&quot;], :workers=&gt;0, :daemon=&gt;false, :mode=&gt;:http, :worker_timeout=&gt;60, :worker_boot_timeout=&gt;60, :worker_shutdown_timeout=&gt;30, :remote_address=&gt;:socket, :tag=&gt;&quot;gemstash&quot;, :environment=&gt;&quot;development&quot;, :rackup=&gt;&quot;config.ru&quot;, :logger=&gt;#&lt;IO:&lt;STDOUT&gt;&gt;, :persistent_timeout=&gt;20, :first_data_timeout=&gt;30, :raise_exception_on_sigterm=&gt;true}&gt;, @plugins=#&lt;Puma::PluginLoader:0x00007fea96455bb8 @instances=[]&gt;, @user_dsl=#&lt;Puma::DSL:0x00007fea96455a00 @config=#&lt;Puma::Configuration:0x00007fea964565b8 ...&gt;, @options={:pidfile=&gt;&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;.gemstash&#x2F;puma.pid&quot;, :daemon=&gt;true, :log_requests=&gt;false, :environment=&gt;&quot;development&quot;, :logger=&gt;#&lt;Puma::Events:0x00007fea96456810 @formatter=#&lt;Puma::Events::PidFormatter:0x00007fea96474f18&gt;, @stdout=#&lt;Gemstash::Logging::StreamLogger:0x00007fea964568d8 @level=1&gt;, @stderr=#&lt;Gemstash::Logging::StreamLogger:0x00007fea96456838 @level=3&gt;, @debug=false, @hooks={:state=&gt;[]}&gt;}, @plugins=[]&gt;, @file_dsl=#&lt;Puma::DSL:0x00007fea964557f8 @config=#&lt;Puma::Configuration:0x00007fea964565b8 ...&gt;, @options={:config_files=&gt;[&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;puma.rb&quot;], :min_threads=&gt;0, :max_threads=&gt;16, :binds=&gt;[&quot;tcp:&#x2F;&#x2F;0.0.0.0:9292&quot;], :workers=&gt;1, :rackup=&gt;&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;config.ru&quot;}, @plugins=[], @path=&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;puma.rb&quot;&gt;, @default_dsl=#&lt;Puma::DSL:0x00007fea96455668 @config=#&lt;Puma::Configuration:0x00007fea964565b8 ...&gt;, @options={:min_threads=&gt;0, :max_threads=&gt;16, :log_requests=&gt;false, :debug=&gt;false, :binds=&gt;[&quot;tcp:&#x2F;&#x2F;0.0.0.0:9292&quot;], :workers=&gt;0, :daemon=&gt;false, :mode=&gt;:http, :worker_timeout=&gt;60, :worker_boot_timeout=&gt;60, :worker_shutdown_timeout=&gt;30, :remote_address=&gt;:socket, :tag=&gt;&quot;gemstash&quot;, :environment=&gt;&quot;development&quot;, :rackup=&gt;&quot;config.ru&quot;, :logger=&gt;#&lt;IO:&lt;STDOUT&gt;&gt;, :persistent_timeout=&gt;20, :first_data_timeout=&gt;30, :raise_exception_on_sigterm=&gt;true}, @plugins=[]&gt;&gt;</div></td>
</tr>
<tr>
<td>puma.request_body_wait</td>
<td class="code"><div>0</div></td>
</tr>
<tr>
<td>puma.socket</td>
<td class="code"><div>#&lt;TCPSocket:fd 20, AF_INET, 127.0.0.1, 9292&gt;</div></td>
</tr>
<tr>
<td>rack.after_reply</td>
<td class="code"><div>[]</div></td>
</tr>
<tr>
<td>rack.errors</td>
<td class="code"><div>#&lt;Object:0x00007fea95931778&gt;</div></td>
</tr>
<tr>
<td>rack.hijack</td>
<td class="code"><div>#&lt;Puma::Client:0x3ff54b30bcd8 @ready=true&gt;</div></td>
</tr>
<tr>
<td>rack.hijack?</td>
<td class="code"><div>true</div></td>
</tr>
<tr>
<td>rack.input</td>
<td class="code"><div>#&lt;StringIO:0x00007fea966171e0&gt;</div></td>
</tr>
<tr>
<td>rack.logger</td>
<td class="code"><div>#&lt;Rack::NullLogger:0x00007fea95983d48 @app=#&lt;Rack::Protection::FrameOptions:0x00007fea95983de8 @app=#&lt;Rack::Protection::HttpOrigin:0x00007fea95983e88 @app=#&lt;Rack::Protection::IPSpoofing:0x00007fea95983f00 @app=#&lt;Rack::Protection::JsonCsrf:0x00007fea95983fa0 @app=#&lt;Rack::Protection::PathTraversal:0x00007fea95978060 @app=#&lt;Rack::Protection::XSSHeader:0x00007fea95978100 @app=#&lt;Gemstash::Web:0x00007fea9591b8d8 @gemstash_env=#&lt;Gemstash::Env:0x00007fea97817b10 @config=#&lt;Gemstash::Configuration:0x00007fea963959a8 @config={:cache_type=&gt;&quot;memory&quot;, :base_path=&gt;&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;.gemstash&quot;, :db_adapter=&gt;&quot;sqlite3&quot;, :bind=&gt;&quot;tcp:&#x2F;&#x2F;0.0.0.0:9292&quot;, :rubygems_url=&gt;&quot;https:&#x2F;&#x2F;rubygems.org&quot;, :ignore_gemfile_source=&gt;false, :protected_fetch=&gt;false, :fetch_timeout=&gt;20, :db_connection_options=&gt;{}, :puma_threads=&gt;16, :puma_workers=&gt;1, :cache_expiration=&gt;1800, :cache_max_size=&gt;500, :storage_adapter=&gt;&quot;s3&quot;, :aws_access_key_id=&gt;&quot;AKIAXDAKXIODWSOIRIZ3&quot;, :aws_secret_access_key=&gt;&quot;4txhhFYTcYly7kSf+1bI1aolopZ9axZQVzhT&#x2F;66W&quot;, :bucket_name=&gt;&quot;testing16160303&quot;, :region=&gt;&quot;us-west-1&quot;, :s3_path=&gt;&quot;gemstash&#x2F;s3_storage&quot;}&gt;, @cache=#&lt;Gemstash::Cache:0x00007fea966ac3d0 @client=#&lt;Gemstash::LruReduxClient:0x00007fea966ac5d8 @cache=#&lt;LruRedux::TTL::ThreadSafeCache:0x00007fea966ac5b0 @max_size=500, @ttl=1800, @data_lru={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;#&lt;Gemstash::Authorization:0x00007fea95949d50 @auth_key=&quot;72b4857b4c60c2d0aec84092c4d89d07&quot;, @all=true, @permissions=#&lt;Set: {&quot;all&quot;}&gt;&gt;}, @data_ttl={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;1592018906.024399}, @mon_mutex=#&lt;Thread::Mutex:0x00007fea966ac3f8&gt;, @mon_mutex_owner_object_id=70322761327320, @mon_owner=nil, @mon_count=0&gt;&gt;&gt;, @db=#&lt;Sequel::SQLite::Database: &quot;sqlite:&#x2F;&#x2F;%2FUsers%2Fquangnguyen%2F.gemstash%2Fgemstash.db&quot; {:max_connections=&gt;1}&gt;, @cache_client=#&lt;Gemstash::LruReduxClient:0x00007fea966ac5d8 @cache=#&lt;LruRedux::TTL::ThreadSafeCache:0x00007fea966ac5b0 @max_size=500, @ttl=1800, @data_lru={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;#&lt;Gemstash::Authorization:0x00007fea95949d50 @auth_key=&quot;72b4857b4c60c2d0aec84092c4d89d07&quot;, @all=true, @permissions=#&lt;Set: {&quot;all&quot;}&gt;&gt;}, @data_ttl={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;1592018906.024399}, @mon_mutex=#&lt;Thread::Mutex:0x00007fea966ac3f8&gt;, @mon_mutex_owner_object_id=70322761327320, @mon_owner=nil, @mon_count=0&gt;&gt;&gt;, @http_client_builder=Gemstash::HTTPClient, @default_layout=:layout, @preferred_extension=nil, @app=nil, @template_cache=#&lt;Tilt::Cache:0x00007fea9786a9f0 @cache={}&gt;&gt;, @options={:reaction=&gt;:drop_session, :logging=&gt;true, :message=&gt;&quot;Forbidden&quot;, :encryptor=&gt;Digest::SHA1, :session_key=&gt;&quot;rack.session&quot;, :status=&gt;403, :allow_empty_referrer=&gt;true, :report_key=&gt;&quot;protection.failed&quot;, :html_types=&gt;[&quot;text&#x2F;html&quot;, &quot;application&#x2F;xhtml&quot;, &quot;text&#x2F;xml&quot;, &quot;application&#x2F;xml&quot;], :xss_mode=&gt;:block, :nosniff=&gt;true, :img_src=&gt;&quot;&#x27;self&#x27; data:&quot;, :font_src=&gt;&quot;&#x27;self&#x27;&quot;, :without_session=&gt;true}&gt;, @options={:reaction=&gt;:drop_session, :logging=&gt;true, :message=&gt;&quot;Forbidden&quot;, :encryptor=&gt;Digest::SHA1, :session_key=&gt;&quot;rack.session&quot;, :status=&gt;403, :allow_empty_referrer=&gt;true, :report_key=&gt;&quot;protection.failed&quot;, :html_types=&gt;[&quot;text&#x2F;html&quot;, &quot;application&#x2F;xhtml&quot;, &quot;text&#x2F;xml&quot;, &quot;application&#x2F;xml&quot;], :img_src=&gt;&quot;&#x27;self&#x27; data:&quot;, :font_src=&gt;&quot;&#x27;self&#x27;&quot;, :without_session=&gt;true}&gt;, @options={:reaction=&gt;:drop_session, :logging=&gt;true, :message=&gt;&quot;Forbidden&quot;, :encryptor=&gt;Digest::SHA1, :session_key=&gt;&quot;rack.session&quot;, :status=&gt;403, :allow_empty_referrer=&gt;true, :report_key=&gt;&quot;protection.failed&quot;, :html_types=&gt;[&quot;text&#x2F;html&quot;, &quot;application&#x2F;xhtml&quot;, &quot;text&#x2F;xml&quot;, &quot;application&#x2F;xml&quot;], :allow_if=&gt;nil, :img_src=&gt;&quot;&#x27;self&#x27; data:&quot;, :font_src=&gt;&quot;&#x27;self&#x27;&quot;, :without_session=&gt;true}&gt;, @options={:reaction=&gt;:drop_session, :logging=&gt;true, :message=&gt;&quot;Forbidden&quot;, :encryptor=&gt;Digest::SHA1, :session_key=&gt;&quot;rack.session&quot;, :status=&gt;403, :allow_empty_referrer=&gt;true, :report_key=&gt;&quot;protection.failed&quot;, :html_types=&gt;[&quot;text&#x2F;html&quot;, &quot;application&#x2F;xhtml&quot;, &quot;text&#x2F;xml&quot;, &quot;application&#x2F;xml&quot;], :img_src=&gt;&quot;&#x27;self&#x27; data:&quot;, :font_src=&gt;&quot;&#x27;self&#x27;&quot;, :without_session=&gt;true}&gt;, @options={:reaction=&gt;:drop_session, :logging=&gt;true, :message=&gt;&quot;Forbidden&quot;, :encryptor=&gt;Digest::SHA1, :session_key=&gt;&quot;rack.session&quot;, :status=&gt;403, :allow_empty_referrer=&gt;true, :report_key=&gt;&quot;protection.failed&quot;, :html_types=&gt;[&quot;text&#x2F;html&quot;, &quot;application&#x2F;xhtml&quot;, &quot;text&#x2F;xml&quot;, &quot;application&#x2F;xml&quot;], :allow_if=&gt;nil, :img_src=&gt;&quot;&#x27;self&#x27; data:&quot;, :font_src=&gt;&quot;&#x27;self&#x27;&quot;, :without_session=&gt;true}&gt;, @options={:reaction=&gt;:drop_session, :logging=&gt;true, :message=&gt;&quot;Forbidden&quot;, :encryptor=&gt;Digest::SHA1, :session_key=&gt;&quot;rack.session&quot;, :status=&gt;403, :allow_empty_referrer=&gt;true, :report_key=&gt;&quot;protection.failed&quot;, :html_types=&gt;[&quot;text&#x2F;html&quot;, &quot;application&#x2F;xhtml&quot;, &quot;text&#x2F;xml&quot;, &quot;application&#x2F;xml&quot;], :frame_options=&gt;:sameorigin, :img_src=&gt;&quot;&#x27;self&#x27; data:&quot;, :font_src=&gt;&quot;&#x27;self&#x27;&quot;, :without_session=&gt;true}&gt;&gt;</div></td>
</tr>
<tr>
<td>rack.multiprocess</td>
<td class="code"><div>false</div></td>
</tr>
<tr>
<td>rack.multithread</td>
<td class="code"><div>true</div></td>
</tr>
<tr>
<td>rack.request.cookie_hash</td>
<td class="code"><div>{}</div></td>
</tr>
<tr>
<td>rack.request.query_hash</td>
<td class="code"><div>{}</div></td>
</tr>
<tr>
<td>rack.request.query_string</td>
<td class="code"><div></div></td>
</tr>
<tr>
<td>rack.run_once</td>
<td class="code"><div>false</div></td>
</tr>
<tr>
<td>rack.url_scheme</td>
<td class="code"><div>http</div></td>
</tr>
<tr>
<td>rack.version</td>
<td class="code"><div>[1, 3]</div></td>
</tr>
<tr>
<td>sinatra.accept</td>
<td class="code"><div>[#&lt;Sinatra::Request::AcceptEntry:0x00007fea97859c40 @entry=&quot;*&#x2F;*&quot;, @type=&quot;*&#x2F;*&quot;, @params={}, @q=1.0&gt;]</div></td>
</tr>
<tr>
<td>sinatra.error</td>
<td class="code"><div>#&lt;Gemstash::GemPusher::ExistingVersionError: Cannot push to an existing version!&gt;</div></td>
</tr>
<tr>
<td>sinatra.error.params</td>
<td class="code"><div>{}</div></td>
</tr>
<tr>
<td>sinatra.route</td>
<td class="code"><div>POST &#x2F;api&#x2F;v1&#x2F;gems</div></td>
</tr>
</table>
<div class="clear"></div>
</div> <!-- /RACK ENV -->
<p id="explanation">You're seeing this error because you have
enabled the <code>show_exceptions</code> setting.</p>
</div> <!-- /WRAP -->
</body>
</html>
JJames:gemstash quangnguyen$ gemstash stop
Command stop sent success
Gemstash stopped successfully!
JJames:gemstash quangnguyen$ gemstash start
Starting gemstash!
JJames:gemstash quangnguyen$ gemstash stop
bCommand stop sent success
Gemstash stopped successfully!
JJames:gemstash quangnguyen$ bin/gemstash start
Starting gemstash!
JJames:gemstash quangnguyen$ gemstash stop
Command stop sent success
Gemstash stopped successfully!
JJames:gemstash quangnguyen$ bin/gemstash start
Starting gemstash!
JJames:gemstash quangnguyen$ bin/gemstash yank --key test_key --host http://localhost:9292/private pkg/private-example-0.1.0.gem
Could not find command "yank".
JJames:gemstash quangnguyen$ gem yank --key test_key --host http://localhost:9292/private pkg/private-example-0.1.0.gem
A version argument is required: gem yank GEM -v VERSION [-p PLATFORM] [--key KEY_NAME] [--host HOST]
JJames:gemstash quangnguyen$ RUBYGEMS_HOST=http://localhost:9292/private gem yank --key test_key private-example --version 0.1.0
Yanking gem from http://localhost:9292/private...
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Gemstash::GemYanker::UnknownGemError at &#x2F;api&#x2F;v1&#x2F;gems&#x2F;yank</title>
<script type="text/javascript">
//<!--
function toggle(id) {
var pre = document.getElementById("pre-" + id);
var post = document.getElementById("post-" + id);
var context = document.getElementById("context-" + id);
if (pre.style.display == 'block') {
pre.style.display = 'none';
post.style.display = 'none';
context.style.background = "none";
} else {
pre.style.display = 'block';
post.style.display = 'block';
context.style.background = "#fffed9";
}
}
function toggleBacktrace(){
var bt = document.getElementById("backtrace");
var toggler = document.getElementById("expando");
if (bt.className == 'condensed') {
bt.className = 'expanded';
toggler.innerHTML = "(condense)";
} else {
bt.className = 'condensed';
toggler.innerHTML = "(expand)";
}
}
//-->
</script>
<style type="text/css" media="screen">
* {margin: 0; padding: 0; border: 0; outline: 0;}
div.clear {clear: both;}
body {background: #EEEEEE; margin: 0; padding: 0;
font-family: 'Lucida Grande', 'Lucida Sans Unicode',
'Garuda';}
code {font-family: 'Lucida Console', monospace;
font-size: 12px;}
li {height: 18px;}
ul {list-style: none; margin: 0; padding: 0;}
ol:hover {cursor: pointer;}
ol li {white-space: pre;}
#explanation {font-size: 12px; color: #666666;
margin: 20px 0 0 100px;}
/* WRAP */
#wrap {width: 1000px; background: #FFFFFF; margin: 0 auto;
padding: 30px 50px 20px 50px;
border-left: 1px solid #DDDDDD;
border-right: 1px solid #DDDDDD;}
/* HEADER */
#header {margin: 0 auto 25px auto;}
#header img {float: left;}
#header #summary {float: left; margin: 12px 0 0 20px; width:660px;
font-family: 'Lucida Grande', 'Lucida Sans Unicode';}
h1 {margin: 0; font-size: 36px; color: #981919;}
h2 {margin: 0; font-size: 22px; color: #333333;}
#header ul {margin: 0; font-size: 12px; color: #666666;}
#header ul li strong{color: #444444;}
#header ul li {display: inline; padding: 0 10px;}
#header ul li.first {padding-left: 0;}
#header ul li.last {border: 0; padding-right: 0;}
/* BODY */
#backtrace,
#get,
#post,
#cookies,
#rack {width: 980px; margin: 0 auto 10px auto;}
p#nav {float: right; font-size: 14px;}
/* BACKTRACE */
a#expando {float: left; padding-left: 5px; color: #666666;
font-size: 14px; text-decoration: none; cursor: pointer;}
a#expando:hover {text-decoration: underline;}
h3 {float: left; width: 100px; margin-bottom: 10px;
color: #981919; font-size: 14px; font-weight: bold;}
#nav a {color: #666666; text-decoration: none; padding: 0 5px;}
#backtrace li.frame-info {background: #f7f7f7; padding-left: 10px;
font-size: 12px; color: #333333;}
#backtrace ul {list-style-position: outside; border: 1px solid #E9E9E9;
border-bottom: 0;}
#backtrace ol {width: 920px; margin-left: 50px;
font: 10px 'Lucida Console', monospace; color: #666666;}
#backtrace ol li {border: 0; border-left: 1px solid #E9E9E9;
padding: 2px 0;}
#backtrace ol code {font-size: 10px; color: #555555; padding-left: 5px;}
#backtrace-ul li {border-bottom: 1px solid #E9E9E9; height: auto;
padding: 3px 0;}
#backtrace-ul .code {padding: 6px 0 4px 0;}
#backtrace.condensed .system,
#backtrace.condensed .framework {display:none;}
/* REQUEST DATA */
p.no-data {padding-top: 2px; font-size: 12px; color: #666666;}
table.req {width: 980px; text-align: left; font-size: 12px;
color: #666666; padding: 0; border-spacing: 0;
border: 1px solid #EEEEEE; border-bottom: 0;
border-left: 0;
clear:both}
table.req tr th {padding: 2px 10px; font-weight: bold;
background: #F7F7F7; border-bottom: 1px solid #EEEEEE;
border-left: 1px solid #EEEEEE;}
table.req tr td {padding: 2px 20px 2px 10px;
border-bottom: 1px solid #EEEEEE;
border-left: 1px solid #EEEEEE;}
/* HIDE PRE/POST CODE AT START */
.pre-context,
.post-context {display: none;}
table td.code {width:750px}
table td.code div {width:750px;overflow:hidden}
</style>
</head>
<body>
<div id="wrap">
<div id="header">
<img src="/__sinatra__/500.png" alt="application error" height="161" width="313" />
<div id="summary">
<h1><strong>Gemstash::GemYanker::UnknownGemError</strong> at <strong>&#x2F;api&#x2F;v1&#x2F;gems&#x2F;yank
</strong></h1>
<h2>Cannot yank an unknown gem!</h2>
<ul>
<li class="first"><strong>file:</strong> <code>
gem_yanker.rb</code></li>
<li><strong>location:</strong> <code>block in update_database
</code></li>
<li class="last"><strong>line:
</strong> 60</li>
</ul>
</div>
<div class="clear"></div>
</div>
<div id="backtrace" class='condensed'>
<h3>BACKTRACE</h3>
<p><a href="#" id="expando"
onclick="toggleBacktrace(); return false">(expand)</a></p>
<p id="nav"><strong>JUMP TO:</strong>
<a href="#get-info">GET</a>
<a href="#post-info">POST</a>
<a href="#cookie-info">COOKIES</a>
<a href="#env-info">ENV</a>
</p>
<div class="clear"></div>
<ul id="backtrace-ul">
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;gem_yanker.rb</code> in
<code><strong>block in update_database</strong></code>
</li>
<li class="code app">
<ol start="53"
class="pre-context" id="pre-1"
onclick="toggle(1);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def check_auth
</code></li>
<li class="pre-context-line"><code> @auth.check(&quot;yank&quot;)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def update_database
</code></li>
<li class="pre-context-line"><code> gemstash_env.db.transaction do
</code></li>
</ol>
<ol start="60" class="context" id="1"
onclick="toggle(1);">
<li class="context-line" id="context-1"><code> raise UnknownGemError, &quot;Cannot yank an unknown gem!&quot; unless Gemstash::DB::Rubygem[name: @gem_name]</code></li>
</ol>
<ol start="61" class="post-context"
id="post-1" onclick="toggle(1);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> version = Gemstash::DB::Version.find_by_full_name(full_name)
</code></li>
<li class="post-context-line"><code> raise UnknownVersionError, &quot;Cannot yank an unknown version!&quot; unless version
</code></li>
<li class="post-context-line"><code> raise YankedVersionError, &quot;Cannot yank an already yanked version!&quot; unless version.indexed
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> version.deindex
</code></li>
<li class="post-context-line"><code> storage.resource(version.storage_id).update_properties(indexed: false)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sequel-5.32.0&#x2F;lib&#x2F;sequel&#x2F;database&#x2F;transactions.rb</code> in
<code><strong>_transaction</strong></code>
</li>
<li class="code system">
<ol start="247"
class="pre-context" id="pre-2"
onclick="toggle(2);">
<li class="pre-context-line"><code> ret = yield(conn)
</code></li>
<li class="pre-context-line"><code> rescue Exception =&gt; e1
</code></li>
<li class="pre-context-line"><code> raise e1
</code></li>
<li class="pre-context-line"><code> ensure
</code></li>
<li class="pre-context-line"><code> raise ::Sequel::Rollback unless e1
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> else
</code></li>
</ol>
<ol start="254" class="context" id="2"
onclick="toggle(2);">
<li class="context-line" id="context-2"><code> yield(conn)</code></li>
</ol>
<ol start="255" class="post-context"
id="post-2" onclick="toggle(2);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> rescue Exception =&gt; e
</code></li>
<li class="post-context-line"><code> begin
</code></li>
<li class="post-context-line"><code> rollback_transaction(conn, opts)
</code></li>
<li class="post-context-line"><code> rescue Exception =&gt; e3
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> transaction_error(e, :conn=&gt;conn, :rollback=&gt;rollback)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sequel-5.32.0&#x2F;lib&#x2F;sequel&#x2F;database&#x2F;transactions.rb</code> in
<code><strong>block in transaction</strong></code>
</li>
<li class="code system">
<ol start="222"
class="pre-context" id="pre-3"
onclick="toggle(3);">
<li class="pre-context-line"><code> if opts[:retrying]
</code></li>
<li class="pre-context-line"><code> raise Sequel::Error, &quot;cannot set :retry_on options if you are already inside a transaction&quot;
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> return yield(conn)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
</ol>
<ol start="229" class="context" id="3"
onclick="toggle(3);">
<li class="context-line" id="context-3"><code> _transaction(conn, opts, &amp;block)</code></li>
</ol>
<ol start="230" class="post-context"
id="post-3" onclick="toggle(3);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> private
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # Internal generic transaction method. Any exception raised by the given
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sequel-5.32.0&#x2F;lib&#x2F;sequel&#x2F;connection_pool&#x2F;threaded.rb</code> in
<code><strong>hold</strong></code>
</li>
<li class="code system">
<ol start="85"
class="pre-context" id="pre-4"
onclick="toggle(4);">
<li class="pre-context-line"><code> def hold(server=nil)
</code></li>
<li class="pre-context-line"><code> t = Sequel.current
</code></li>
<li class="pre-context-line"><code> if conn = owned_connection(t)
</code></li>
<li class="pre-context-line"><code> return yield(conn)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> begin
</code></li>
<li class="pre-context-line"><code> conn = acquire(t)
</code></li>
</ol>
<ol start="92" class="context" id="4"
onclick="toggle(4);">
<li class="context-line" id="context-4"><code> yield conn</code></li>
</ol>
<ol start="93" class="post-context"
id="post-4" onclick="toggle(4);">
<li class="post-context-line"><code> rescue Sequel::DatabaseDisconnectError, *@error_classes =&gt; e
</code></li>
<li class="post-context-line"><code> if disconnect_error?(e)
</code></li>
<li class="post-context-line"><code> oconn = conn
</code></li>
<li class="post-context-line"><code> conn = nil
</code></li>
<li class="post-context-line"><code> disconnect_connection(oconn) if oconn
</code></li>
<li class="post-context-line"><code> sync do
</code></li>
<li class="post-context-line"><code> @allocated.delete(t)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sequel-5.32.0&#x2F;lib&#x2F;sequel&#x2F;database&#x2F;connecting.rb</code> in
<code><strong>synchronize</strong></code>
</li>
<li class="code system">
<ol start="263"
class="pre-context" id="pre-5"
onclick="toggle(5);">
<li class="pre-context-line"><code> # If a server option is given, acquires a connection for that specific
</code></li>
<li class="pre-context-line"><code> # server, instead of the :default server.
</code></li>
<li class="pre-context-line"><code> #
</code></li>
<li class="pre-context-line"><code> # DB.synchronize do |conn|
</code></li>
<li class="pre-context-line"><code> # # ...
</code></li>
<li class="pre-context-line"><code> # end
</code></li>
<li class="pre-context-line"><code> def synchronize(server=nil, &amp;block)
</code></li>
</ol>
<ol start="270" class="context" id="5"
onclick="toggle(5);">
<li class="context-line" id="context-5"><code> @pool.hold(server || :default, &amp;block)</code></li>
</ol>
<ol start="271" class="post-context"
id="post-5" onclick="toggle(5);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # Attempts to acquire a database connection. Returns true if successful.
</code></li>
<li class="post-context-line"><code> # Will probably raise an Error if unsuccessful. If a server argument
</code></li>
<li class="post-context-line"><code> # is given, attempts to acquire a database connection to the given
</code></li>
<li class="post-context-line"><code> # server&#x2F;shard.
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sequel-5.32.0&#x2F;lib&#x2F;sequel&#x2F;database&#x2F;transactions.rb</code> in
<code><strong>transaction</strong></code>
</li>
<li class="code system">
<ol start="188"
class="pre-context" id="pre-6"
onclick="toggle(6);">
<li class="pre-context-line"><code> if tot_retries.nil? || num_retries &lt;= tot_retries
</code></li>
<li class="pre-context-line"><code> opts[:before_retry].call(num_retries, e) if opts[:before_retry]
</code></li>
<li class="pre-context-line"><code> retry
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> raise
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> else
</code></li>
</ol>
<ol start="195" class="context" id="6"
onclick="toggle(6);">
<li class="context-line" id="context-6"><code> synchronize(opts[:server]) do |conn|</code></li>
</ol>
<ol start="196" class="post-context"
id="post-6" onclick="toggle(6);">
<li class="post-context-line"><code> if opts[:savepoint] == :only
</code></li>
<li class="post-context-line"><code> if supports_savepoints?
</code></li>
<li class="post-context-line"><code> if _trans(conn)
</code></li>
<li class="post-context-line"><code> opts[:savepoint] = true
</code></li>
<li class="post-context-line"><code> else
</code></li>
<li class="post-context-line"><code> return yield(conn)
</code></li>
<li class="post-context-line"><code> end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;gem_yanker.rb</code> in
<code><strong>update_database</strong></code>
</li>
<li class="code app">
<ol start="52"
class="pre-context" id="pre-7"
onclick="toggle(7);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def check_auth
</code></li>
<li class="pre-context-line"><code> @auth.check(&quot;yank&quot;)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def update_database
</code></li>
</ol>
<ol start="59" class="context" id="7"
onclick="toggle(7);">
<li class="context-line" id="context-7"><code> gemstash_env.db.transaction do</code></li>
</ol>
<ol start="60" class="post-context"
id="post-7" onclick="toggle(7);">
<li class="post-context-line"><code> raise UnknownGemError, &quot;Cannot yank an unknown gem!&quot; unless Gemstash::DB::Rubygem[name: @gem_name]
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> version = Gemstash::DB::Version.find_by_full_name(full_name)
</code></li>
<li class="post-context-line"><code> raise UnknownVersionError, &quot;Cannot yank an unknown version!&quot; unless version
</code></li>
<li class="post-context-line"><code> raise YankedVersionError, &quot;Cannot yank an already yanked version!&quot; unless version.indexed
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> version.deindex
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;gem_yanker.rb</code> in
<code><strong>serve</strong></code>
</li>
<li class="code app">
<ol start="29"
class="pre-context" id="pre-8"
onclick="toggle(8);">
<li class="pre-context-line"><code> @auth = auth
</code></li>
<li class="pre-context-line"><code> @gem_name = gem_name
</code></li>
<li class="pre-context-line"><code> @slug = slug
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def serve
</code></li>
<li class="pre-context-line"><code> check_auth
</code></li>
</ol>
<ol start="36" class="context" id="8"
onclick="toggle(8);">
<li class="context-line" id="context-8"><code> update_database</code></li>
</ol>
<ol start="37" class="post-context"
id="post-8" onclick="toggle(8);">
<li class="post-context-line"><code> invalidate_cache
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> private
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def storage
</code></li>
<li class="post-context-line"><code> if gemstash_env.config[:storage_adapter] == &#x27;local&#x27;
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;gem_yanker.rb</code> in
<code><strong>serve</strong></code>
</li>
<li class="code app">
<ol start="18"
class="pre-context" id="pre-9"
onclick="toggle(9);">
<li class="pre-context-line"><code> # This error is thrown when yanking an already yanked gem version.
</code></li>
<li class="pre-context-line"><code> class YankedVersionError &lt; StandardError
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def self.serve(app)
</code></li>
<li class="pre-context-line"><code> gem_name = app.params[:gem_name]
</code></li>
<li class="pre-context-line"><code> slug = Gemstash::DB::Version.slug(app.params)
</code></li>
</ol>
<ol start="25" class="context" id="9"
onclick="toggle(9);">
<li class="context-line" id="context-9"><code> new(app.auth, gem_name, slug).serve</code></li>
</ol>
<ol start="26" class="post-context"
id="post-9" onclick="toggle(9);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def initialize(auth, gem_name, slug)
</code></li>
<li class="post-context-line"><code> @auth = auth
</code></li>
<li class="post-context-line"><code> @gem_name = gem_name
</code></li>
<li class="post-context-line"><code> @slug = slug
</code></li>
<li class="post-context-line"><code> end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;gem_source&#x2F;private_source.rb</code> in
<code><strong>block in protected</strong></code>
</li>
<li class="code app">
<ol start="93"
class="pre-context" id="pre-10"
onclick="toggle(10);">
<li class="pre-context-line"><code> params[:prerelease] = true
</code></li>
<li class="pre-context-line"><code> protected(Gemstash::SpecsBuilder)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> private
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def protected(servable)
</code></li>
</ol>
<ol start="100" class="context" id="10"
onclick="toggle(10);">
<li class="context-line" id="context-10"><code> authorization.protect(self) { servable.serve(self) }</code></li>
</ol>
<ol start="101" class="post-context"
id="post-10" onclick="toggle(10);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def authorization
</code></li>
<li class="post-context-line"><code> Gemstash::ApiKeyAuthorization
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def dependencies
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;api_key_authorization.rb</code> in
<code><strong>protect</strong></code>
</li>
<li class="code app">
<ol start="8"
class="pre-context" id="pre-11"
onclick="toggle(11);">
<li class="pre-context-line"><code> def initialize(key)
</code></li>
<li class="pre-context-line"><code> @key = key
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def self.protect(app, &amp;block)
</code></li>
<li class="pre-context-line"><code> key = parse_authorization(app.request.env)
</code></li>
<li class="pre-context-line"><code> app.auth = new(key)
</code></li>
</ol>
<ol start="15" class="context" id="11"
onclick="toggle(11);">
<li class="context-line" id="context-11"><code> yield</code></li>
</ol>
<ol start="16" class="post-context"
id="post-11" onclick="toggle(11);">
<li class="post-context-line"><code> rescue Gemstash::NotAuthorizedError =&gt; e
</code></li>
<li class="post-context-line"><code> app.headers[&quot;WWW-Authenticate&quot;] = &quot;Basic realm=\&quot;Gemstash Private Gems\&quot;&quot;
</code></li>
<li class="post-context-line"><code> app.halt 401, e.message
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def self.parse_authorization(request_env)
</code></li>
<li class="post-context-line"><code> http_auth = Rack::Auth::Basic::Request.new(request_env)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;gem_source&#x2F;private_source.rb</code> in
<code><strong>protected</strong></code>
</li>
<li class="code app">
<ol start="93"
class="pre-context" id="pre-12"
onclick="toggle(12);">
<li class="pre-context-line"><code> params[:prerelease] = true
</code></li>
<li class="pre-context-line"><code> protected(Gemstash::SpecsBuilder)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> private
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def protected(servable)
</code></li>
</ol>
<ol start="100" class="context" id="12"
onclick="toggle(12);">
<li class="context-line" id="context-12"><code> authorization.protect(self) { servable.serve(self) }</code></li>
</ol>
<ol start="101" class="post-context"
id="post-12" onclick="toggle(12);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def authorization
</code></li>
<li class="post-context-line"><code> Gemstash::ApiKeyAuthorization
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def dependencies
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;gem_source&#x2F;private_source.rb</code> in
<code><strong>serve_yank</strong></code>
</li>
<li class="code app">
<ol start="27"
class="pre-context" id="pre-13"
onclick="toggle(13);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def serve_add_gem
</code></li>
<li class="pre-context-line"><code> protected(Gemstash::GemPusher)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def serve_yank
</code></li>
</ol>
<ol start="34" class="context" id="13"
onclick="toggle(13);">
<li class="context-line" id="context-13"><code> protected(Gemstash::GemYanker)</code></li>
</ol>
<ol start="35" class="post-context"
id="post-13" onclick="toggle(13);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def serve_add_spec_json
</code></li>
<li class="post-context-line"><code> halt 403, &quot;Not yet supported&quot;
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def serve_remove_spec_json
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;web.rb</code> in
<code><strong>block in &lt;class:Web&gt;</strong></code>
</li>
<li class="code app">
<ol start="46"
class="pre-context" id="pre-14"
onclick="toggle(14);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> post &quot;&#x2F;api&#x2F;v1&#x2F;gems&quot; do
</code></li>
<li class="pre-context-line"><code> @gem_source.serve_add_gem
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> delete &quot;&#x2F;api&#x2F;v1&#x2F;gems&#x2F;yank&quot; do
</code></li>
</ol>
<ol start="53" class="context" id="14"
onclick="toggle(14);">
<li class="context-line" id="context-14"><code> @gem_source.serve_yank</code></li>
</ol>
<ol start="54" class="post-context"
id="post-14" onclick="toggle(14);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> post &quot;&#x2F;api&#x2F;v1&#x2F;add_spec.json&quot; do
</code></li>
<li class="post-context-line"><code> @gem_source.serve_add_spec_json
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> post &quot;&#x2F;api&#x2F;v1&#x2F;remove_spec.json&quot; do
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code framework">
<ol start="1629"
class="pre-context" id="pre-15"
onclick="toggle(15);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> pattern = compile(path, route_mustermann_opts)
</code></li>
<li class="pre-context-line"><code> method_name = &quot;#{verb} #{path}&quot;
</code></li>
<li class="pre-context-line"><code> unbound_method = generate_method(method_name, &amp;block)
</code></li>
<li class="pre-context-line"><code> conditions, @conditions = @conditions, []
</code></li>
<li class="pre-context-line"><code> wrapper = block.arity != 0 ?
</code></li>
<li class="pre-context-line"><code> proc { |a, p| unbound_method.bind(a).call(*p) } :
</code></li>
</ol>
<ol start="1636" class="context" id="15"
onclick="toggle(15);">
<li class="context-line" id="context-15"><code> proc { |a, p| unbound_method.bind(a).call }</code></li>
</ol>
<ol start="1637" class="post-context"
id="post-15" onclick="toggle(15);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> [ pattern, conditions, wrapper ]
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def compile(path, route_mustermann_opts = {})
</code></li>
<li class="post-context-line"><code> Mustermann.new(path, **mustermann_opts.merge(route_mustermann_opts))
</code></li>
<li class="post-context-line"><code> end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in compile!</strong></code>
</li>
<li class="code framework">
<ol start="1629"
class="pre-context" id="pre-16"
onclick="toggle(16);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> pattern = compile(path, route_mustermann_opts)
</code></li>
<li class="pre-context-line"><code> method_name = &quot;#{verb} #{path}&quot;
</code></li>
<li class="pre-context-line"><code> unbound_method = generate_method(method_name, &amp;block)
</code></li>
<li class="pre-context-line"><code> conditions, @conditions = @conditions, []
</code></li>
<li class="pre-context-line"><code> wrapper = block.arity != 0 ?
</code></li>
<li class="pre-context-line"><code> proc { |a, p| unbound_method.bind(a).call(*p) } :
</code></li>
</ol>
<ol start="1636" class="context" id="16"
onclick="toggle(16);">
<li class="context-line" id="context-16"><code> proc { |a, p| unbound_method.bind(a).call }</code></li>
</ol>
<ol start="1637" class="post-context"
id="post-16" onclick="toggle(16);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> [ pattern, conditions, wrapper ]
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def compile(path, route_mustermann_opts = {})
</code></li>
<li class="post-context-line"><code> Mustermann.new(path, **mustermann_opts.merge(route_mustermann_opts))
</code></li>
<li class="post-context-line"><code> end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block (3 levels) in route!</strong></code>
</li>
<li class="code framework">
<ol start="980"
class="pre-context" id="pre-17"
onclick="toggle(17);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run routes defined on the class and all superclasses.
</code></li>
<li class="pre-context-line"><code> def route!(base = settings, pass_block = nil)
</code></li>
<li class="pre-context-line"><code> if routes = base.routes[@request.request_method]
</code></li>
<li class="pre-context-line"><code> routes.each do |pattern, conditions, block|
</code></li>
<li class="pre-context-line"><code> returned_pass_block = process_route(pattern, conditions) do |*args|
</code></li>
<li class="pre-context-line"><code> env[&#x27;sinatra.route&#x27;] = &quot;#{@request.request_method} #{pattern}&quot;
</code></li>
</ol>
<ol start="987" class="context" id="17"
onclick="toggle(17);">
<li class="context-line" id="context-17"><code> route_eval { block[*args] }</code></li>
</ol>
<ol start="988" class="post-context"
id="post-17" onclick="toggle(17);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # don&#x27;t wipe out pass_block in superclass
</code></li>
<li class="post-context-line"><code> pass_block = returned_pass_block if returned_pass_block
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>route_eval</strong></code>
</li>
<li class="code framework">
<ol start="999"
class="pre-context" id="pre-18"
onclick="toggle(18);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> route_eval(&amp;pass_block) if pass_block
</code></li>
<li class="pre-context-line"><code> route_missing
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run a route block and throw :halt with the result.
</code></li>
<li class="pre-context-line"><code> def route_eval
</code></li>
</ol>
<ol start="1006" class="context" id="18"
onclick="toggle(18);">
<li class="context-line" id="context-18"><code> throw :halt, yield</code></li>
</ol>
<ol start="1007" class="post-context"
id="post-18" onclick="toggle(18);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # If the current request matches pattern and conditions, fill params
</code></li>
<li class="post-context-line"><code> # with keys and call the given block.
</code></li>
<li class="post-context-line"><code> # Revert params afterwards.
</code></li>
<li class="post-context-line"><code> #
</code></li>
<li class="post-context-line"><code> # Returns pass block.
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block (2 levels) in route!</strong></code>
</li>
<li class="code framework">
<ol start="980"
class="pre-context" id="pre-19"
onclick="toggle(19);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run routes defined on the class and all superclasses.
</code></li>
<li class="pre-context-line"><code> def route!(base = settings, pass_block = nil)
</code></li>
<li class="pre-context-line"><code> if routes = base.routes[@request.request_method]
</code></li>
<li class="pre-context-line"><code> routes.each do |pattern, conditions, block|
</code></li>
<li class="pre-context-line"><code> returned_pass_block = process_route(pattern, conditions) do |*args|
</code></li>
<li class="pre-context-line"><code> env[&#x27;sinatra.route&#x27;] = &quot;#{@request.request_method} #{pattern}&quot;
</code></li>
</ol>
<ol start="987" class="context" id="19"
onclick="toggle(19);">
<li class="context-line" id="context-19"><code> route_eval { block[*args] }</code></li>
</ol>
<ol start="988" class="post-context"
id="post-19" onclick="toggle(19);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # don&#x27;t wipe out pass_block in superclass
</code></li>
<li class="post-context-line"><code> pass_block = returned_pass_block if returned_pass_block
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in process_route</strong></code>
</li>
<li class="code framework">
<ol start="1028"
class="pre-context" id="pre-20"
onclick="toggle(20);">
<li class="pre-context-line"><code> @params[:captures] = force_encoding(captures) unless captures.nil? || captures.empty?
</code></li>
<li class="pre-context-line"><code> else
</code></li>
<li class="pre-context-line"><code> values += params.values.flatten
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> catch(:pass) do
</code></li>
<li class="pre-context-line"><code> conditions.each { |c| throw :pass if c.bind(self).call == false }
</code></li>
</ol>
<ol start="1035" class="context" id="20"
onclick="toggle(20);">
<li class="context-line" id="context-20"><code> block ? block[self, values] : yield(self, values)</code></li>
</ol>
<ol start="1036" class="post-context"
id="post-20" onclick="toggle(20);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> rescue
</code></li>
<li class="post-context-line"><code> @env[&#x27;sinatra.error.params&#x27;] = @params
</code></li>
<li class="post-context-line"><code> raise
</code></li>
<li class="post-context-line"><code> ensure
</code></li>
<li class="post-context-line"><code> params ||= {}
</code></li>
<li class="post-context-line"><code> params.each { |k, _| @params.delete(k) } unless @env[&#x27;sinatra.error.params&#x27;]
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>catch</strong></code>
</li>
<li class="code framework">
<ol start="1026"
class="pre-context" id="pre-21"
onclick="toggle(21);">
<li class="pre-context-line"><code> captures = pattern.match(route).captures.map { |c| URI_INSTANCE.unescape(c) if c }
</code></li>
<li class="pre-context-line"><code> values += captures
</code></li>
<li class="pre-context-line"><code> @params[:captures] = force_encoding(captures) unless captures.nil? || captures.empty?
</code></li>
<li class="pre-context-line"><code> else
</code></li>
<li class="pre-context-line"><code> values += params.values.flatten
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
</ol>
<ol start="1033" class="context" id="21"
onclick="toggle(21);">
<li class="context-line" id="context-21"><code> catch(:pass) do</code></li>
</ol>
<ol start="1034" class="post-context"
id="post-21" onclick="toggle(21);">
<li class="post-context-line"><code> conditions.each { |c| throw :pass if c.bind(self).call == false }
</code></li>
<li class="post-context-line"><code> block ? block[self, values] : yield(self, values)
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> rescue
</code></li>
<li class="post-context-line"><code> @env[&#x27;sinatra.error.params&#x27;] = @params
</code></li>
<li class="post-context-line"><code> raise
</code></li>
<li class="post-context-line"><code> ensure
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>process_route</strong></code>
</li>
<li class="code framework">
<ol start="1026"
class="pre-context" id="pre-22"
onclick="toggle(22);">
<li class="pre-context-line"><code> captures = pattern.match(route).captures.map { |c| URI_INSTANCE.unescape(c) if c }
</code></li>
<li class="pre-context-line"><code> values += captures
</code></li>
<li class="pre-context-line"><code> @params[:captures] = force_encoding(captures) unless captures.nil? || captures.empty?
</code></li>
<li class="pre-context-line"><code> else
</code></li>
<li class="pre-context-line"><code> values += params.values.flatten
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
</ol>
<ol start="1033" class="context" id="22"
onclick="toggle(22);">
<li class="context-line" id="context-22"><code> catch(:pass) do</code></li>
</ol>
<ol start="1034" class="post-context"
id="post-22" onclick="toggle(22);">
<li class="post-context-line"><code> conditions.each { |c| throw :pass if c.bind(self).call == false }
</code></li>
<li class="post-context-line"><code> block ? block[self, values] : yield(self, values)
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> rescue
</code></li>
<li class="post-context-line"><code> @env[&#x27;sinatra.error.params&#x27;] = @params
</code></li>
<li class="post-context-line"><code> raise
</code></li>
<li class="post-context-line"><code> ensure
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in route!</strong></code>
</li>
<li class="code framework">
<ol start="978"
class="pre-context" id="pre-23"
onclick="toggle(23);">
<li class="pre-context-line"><code> base.filters[type].each { |args| process_route(*args) }
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run routes defined on the class and all superclasses.
</code></li>
<li class="pre-context-line"><code> def route!(base = settings, pass_block = nil)
</code></li>
<li class="pre-context-line"><code> if routes = base.routes[@request.request_method]
</code></li>
<li class="pre-context-line"><code> routes.each do |pattern, conditions, block|
</code></li>
</ol>
<ol start="985" class="context" id="23"
onclick="toggle(23);">
<li class="context-line" id="context-23"><code> returned_pass_block = process_route(pattern, conditions) do |*args|</code></li>
</ol>
<ol start="986" class="post-context"
id="post-23" onclick="toggle(23);">
<li class="post-context-line"><code> env[&#x27;sinatra.route&#x27;] = &quot;#{@request.request_method} #{pattern}&quot;
</code></li>
<li class="post-context-line"><code> route_eval { block[*args] }
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # don&#x27;t wipe out pass_block in superclass
</code></li>
<li class="post-context-line"><code> pass_block = returned_pass_block if returned_pass_block
</code></li>
<li class="post-context-line"><code> end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>each</strong></code>
</li>
<li class="code framework">
<ol start="977"
class="pre-context" id="pre-24"
onclick="toggle(24);">
<li class="pre-context-line"><code> filter! type, base.superclass if base.superclass.respond_to?(:filters)
</code></li>
<li class="pre-context-line"><code> base.filters[type].each { |args| process_route(*args) }
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run routes defined on the class and all superclasses.
</code></li>
<li class="pre-context-line"><code> def route!(base = settings, pass_block = nil)
</code></li>
<li class="pre-context-line"><code> if routes = base.routes[@request.request_method]
</code></li>
</ol>
<ol start="984" class="context" id="24"
onclick="toggle(24);">
<li class="context-line" id="context-24"><code> routes.each do |pattern, conditions, block|</code></li>
</ol>
<ol start="985" class="post-context"
id="post-24" onclick="toggle(24);">
<li class="post-context-line"><code> returned_pass_block = process_route(pattern, conditions) do |*args|
</code></li>
<li class="post-context-line"><code> env[&#x27;sinatra.route&#x27;] = &quot;#{@request.request_method} #{pattern}&quot;
</code></li>
<li class="post-context-line"><code> route_eval { block[*args] }
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # don&#x27;t wipe out pass_block in superclass
</code></li>
<li class="post-context-line"><code> pass_block = returned_pass_block if returned_pass_block
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>route!</strong></code>
</li>
<li class="code framework">
<ol start="977"
class="pre-context" id="pre-25"
onclick="toggle(25);">
<li class="pre-context-line"><code> filter! type, base.superclass if base.superclass.respond_to?(:filters)
</code></li>
<li class="pre-context-line"><code> base.filters[type].each { |args| process_route(*args) }
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run routes defined on the class and all superclasses.
</code></li>
<li class="pre-context-line"><code> def route!(base = settings, pass_block = nil)
</code></li>
<li class="pre-context-line"><code> if routes = base.routes[@request.request_method]
</code></li>
</ol>
<ol start="984" class="context" id="25"
onclick="toggle(25);">
<li class="context-line" id="context-25"><code> routes.each do |pattern, conditions, block|</code></li>
</ol>
<ol start="985" class="post-context"
id="post-25" onclick="toggle(25);">
<li class="post-context-line"><code> returned_pass_block = process_route(pattern, conditions) do |*args|
</code></li>
<li class="post-context-line"><code> env[&#x27;sinatra.route&#x27;] = &quot;#{@request.request_method} #{pattern}&quot;
</code></li>
<li class="post-context-line"><code> route_eval { block[*args] }
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # don&#x27;t wipe out pass_block in superclass
</code></li>
<li class="post-context-line"><code> pass_block = returned_pass_block if returned_pass_block
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in dispatch!</strong></code>
</li>
<li class="code framework">
<ol start="1091"
class="pre-context" id="pre-26"
onclick="toggle(26);">
<li class="pre-context-line"><code> val = val.dup if val.frozen?
</code></li>
<li class="pre-context-line"><code> @params[key] = force_encoding(val)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> invoke do
</code></li>
<li class="pre-context-line"><code> static! if settings.static? &amp;&amp; (request.get? || request.head?)
</code></li>
<li class="pre-context-line"><code> filter! :before
</code></li>
</ol>
<ol start="1098" class="context" id="26"
onclick="toggle(26);">
<li class="context-line" id="context-26"><code> route!</code></li>
</ol>
<ol start="1099" class="post-context"
id="post-26" onclick="toggle(26);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> rescue ::Exception =&gt; boom
</code></li>
<li class="post-context-line"><code> invoke { handle_exception!(boom) }
</code></li>
<li class="post-context-line"><code> ensure
</code></li>
<li class="post-context-line"><code> begin
</code></li>
<li class="post-context-line"><code> filter! :after unless env[&#x27;sinatra.static_file&#x27;]
</code></li>
<li class="post-context-line"><code> rescue ::Exception =&gt; boom
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in invoke</strong></code>
</li>
<li class="code framework">
<ol start="1065"
class="pre-context" id="pre-27"
onclick="toggle(27);">
<li class="pre-context-line"><code> env[&#x27;sinatra.static_file&#x27;] = path
</code></li>
<li class="pre-context-line"><code> cache_control(*settings.static_cache_control) if settings.static_cache_control?
</code></li>
<li class="pre-context-line"><code> send_file path, options.merge(:disposition =&gt; nil)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run the block with &#x27;throw :halt&#x27; support and apply result to the response.
</code></li>
<li class="pre-context-line"><code> def invoke
</code></li>
</ol>
<ol start="1072" class="context" id="27"
onclick="toggle(27);">
<li class="context-line" id="context-27"><code> res = catch(:halt) { yield }</code></li>
</ol>
<ol start="1073" class="post-context"
id="post-27" onclick="toggle(27);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> res = [res] if Integer === res or String === res
</code></li>
<li class="post-context-line"><code> if Array === res and Integer === res.first
</code></li>
<li class="post-context-line"><code> res = res.dup
</code></li>
<li class="post-context-line"><code> status(res.shift)
</code></li>
<li class="post-context-line"><code> body(res.pop)
</code></li>
<li class="post-context-line"><code> headers(*res)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>catch</strong></code>
</li>
<li class="code framework">
<ol start="1065"
class="pre-context" id="pre-28"
onclick="toggle(28);">
<li class="pre-context-line"><code> env[&#x27;sinatra.static_file&#x27;] = path
</code></li>
<li class="pre-context-line"><code> cache_control(*settings.static_cache_control) if settings.static_cache_control?
</code></li>
<li class="pre-context-line"><code> send_file path, options.merge(:disposition =&gt; nil)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run the block with &#x27;throw :halt&#x27; support and apply result to the response.
</code></li>
<li class="pre-context-line"><code> def invoke
</code></li>
</ol>
<ol start="1072" class="context" id="28"
onclick="toggle(28);">
<li class="context-line" id="context-28"><code> res = catch(:halt) { yield }</code></li>
</ol>
<ol start="1073" class="post-context"
id="post-28" onclick="toggle(28);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> res = [res] if Integer === res or String === res
</code></li>
<li class="post-context-line"><code> if Array === res and Integer === res.first
</code></li>
<li class="post-context-line"><code> res = res.dup
</code></li>
<li class="post-context-line"><code> status(res.shift)
</code></li>
<li class="post-context-line"><code> body(res.pop)
</code></li>
<li class="post-context-line"><code> headers(*res)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>invoke</strong></code>
</li>
<li class="code framework">
<ol start="1065"
class="pre-context" id="pre-29"
onclick="toggle(29);">
<li class="pre-context-line"><code> env[&#x27;sinatra.static_file&#x27;] = path
</code></li>
<li class="pre-context-line"><code> cache_control(*settings.static_cache_control) if settings.static_cache_control?
</code></li>
<li class="pre-context-line"><code> send_file path, options.merge(:disposition =&gt; nil)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run the block with &#x27;throw :halt&#x27; support and apply result to the response.
</code></li>
<li class="pre-context-line"><code> def invoke
</code></li>
</ol>
<ol start="1072" class="context" id="29"
onclick="toggle(29);">
<li class="context-line" id="context-29"><code> res = catch(:halt) { yield }</code></li>
</ol>
<ol start="1073" class="post-context"
id="post-29" onclick="toggle(29);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> res = [res] if Integer === res or String === res
</code></li>
<li class="post-context-line"><code> if Array === res and Integer === res.first
</code></li>
<li class="post-context-line"><code> res = res.dup
</code></li>
<li class="post-context-line"><code> status(res.shift)
</code></li>
<li class="post-context-line"><code> body(res.pop)
</code></li>
<li class="post-context-line"><code> headers(*res)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>dispatch!</strong></code>
</li>
<li class="code framework">
<ol start="1088"
class="pre-context" id="pre-30"
onclick="toggle(30);">
<li class="pre-context-line"><code> # Avoid passing frozen string in force_encoding
</code></li>
<li class="pre-context-line"><code> @params.merge!(@request.params).each do |key, val|
</code></li>
<li class="pre-context-line"><code> next unless val.respond_to?(:force_encoding)
</code></li>
<li class="pre-context-line"><code> val = val.dup if val.frozen?
</code></li>
<li class="pre-context-line"><code> @params[key] = force_encoding(val)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
</ol>
<ol start="1095" class="context" id="30"
onclick="toggle(30);">
<li class="context-line" id="context-30"><code> invoke do</code></li>
</ol>
<ol start="1096" class="post-context"
id="post-30" onclick="toggle(30);">
<li class="post-context-line"><code> static! if settings.static? &amp;&amp; (request.get? || request.head?)
</code></li>
<li class="post-context-line"><code> filter! :before
</code></li>
<li class="post-context-line"><code> route!
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> rescue ::Exception =&gt; boom
</code></li>
<li class="post-context-line"><code> invoke { handle_exception!(boom) }
</code></li>
<li class="post-context-line"><code> ensure
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in call!</strong></code>
</li>
<li class="code framework">
<ol start="912"
class="pre-context" id="pre-31"
onclick="toggle(31);">
<li class="pre-context-line"><code> @env = env
</code></li>
<li class="pre-context-line"><code> @params = IndifferentHash.new
</code></li>
<li class="pre-context-line"><code> @request = Request.new(env)
</code></li>
<li class="pre-context-line"><code> @response = Response.new
</code></li>
<li class="pre-context-line"><code> template_cache.clear if settings.reload_templates
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> @response[&#x27;Content-Type&#x27;] = nil
</code></li>
</ol>
<ol start="919" class="context" id="31"
onclick="toggle(31);">
<li class="context-line" id="context-31"><code> invoke { dispatch! }</code></li>
</ol>
<ol start="920" class="post-context"
id="post-31" onclick="toggle(31);">
<li class="post-context-line"><code> invoke { error_block!(response.status) } unless @env[&#x27;sinatra.error&#x27;]
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> unless @response[&#x27;Content-Type&#x27;]
</code></li>
<li class="post-context-line"><code> if Array === body and body[0].respond_to? :content_type
</code></li>
<li class="post-context-line"><code> content_type body[0].content_type
</code></li>
<li class="post-context-line"><code> else
</code></li>
<li class="post-context-line"><code> content_type :html
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in invoke</strong></code>
</li>
<li class="code framework">
<ol start="1065"
class="pre-context" id="pre-32"
onclick="toggle(32);">
<li class="pre-context-line"><code> env[&#x27;sinatra.static_file&#x27;] = path
</code></li>
<li class="pre-context-line"><code> cache_control(*settings.static_cache_control) if settings.static_cache_control?
</code></li>
<li class="pre-context-line"><code> send_file path, options.merge(:disposition =&gt; nil)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run the block with &#x27;throw :halt&#x27; support and apply result to the response.
</code></li>
<li class="pre-context-line"><code> def invoke
</code></li>
</ol>
<ol start="1072" class="context" id="32"
onclick="toggle(32);">
<li class="context-line" id="context-32"><code> res = catch(:halt) { yield }</code></li>
</ol>
<ol start="1073" class="post-context"
id="post-32" onclick="toggle(32);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> res = [res] if Integer === res or String === res
</code></li>
<li class="post-context-line"><code> if Array === res and Integer === res.first
</code></li>
<li class="post-context-line"><code> res = res.dup
</code></li>
<li class="post-context-line"><code> status(res.shift)
</code></li>
<li class="post-context-line"><code> body(res.pop)
</code></li>
<li class="post-context-line"><code> headers(*res)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>catch</strong></code>
</li>
<li class="code framework">
<ol start="1065"
class="pre-context" id="pre-33"
onclick="toggle(33);">
<li class="pre-context-line"><code> env[&#x27;sinatra.static_file&#x27;] = path
</code></li>
<li class="pre-context-line"><code> cache_control(*settings.static_cache_control) if settings.static_cache_control?
</code></li>
<li class="pre-context-line"><code> send_file path, options.merge(:disposition =&gt; nil)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run the block with &#x27;throw :halt&#x27; support and apply result to the response.
</code></li>
<li class="pre-context-line"><code> def invoke
</code></li>
</ol>
<ol start="1072" class="context" id="33"
onclick="toggle(33);">
<li class="context-line" id="context-33"><code> res = catch(:halt) { yield }</code></li>
</ol>
<ol start="1073" class="post-context"
id="post-33" onclick="toggle(33);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> res = [res] if Integer === res or String === res
</code></li>
<li class="post-context-line"><code> if Array === res and Integer === res.first
</code></li>
<li class="post-context-line"><code> res = res.dup
</code></li>
<li class="post-context-line"><code> status(res.shift)
</code></li>
<li class="post-context-line"><code> body(res.pop)
</code></li>
<li class="post-context-line"><code> headers(*res)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>invoke</strong></code>
</li>
<li class="code framework">
<ol start="1065"
class="pre-context" id="pre-34"
onclick="toggle(34);">
<li class="pre-context-line"><code> env[&#x27;sinatra.static_file&#x27;] = path
</code></li>
<li class="pre-context-line"><code> cache_control(*settings.static_cache_control) if settings.static_cache_control?
</code></li>
<li class="pre-context-line"><code> send_file path, options.merge(:disposition =&gt; nil)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run the block with &#x27;throw :halt&#x27; support and apply result to the response.
</code></li>
<li class="pre-context-line"><code> def invoke
</code></li>
</ol>
<ol start="1072" class="context" id="34"
onclick="toggle(34);">
<li class="context-line" id="context-34"><code> res = catch(:halt) { yield }</code></li>
</ol>
<ol start="1073" class="post-context"
id="post-34" onclick="toggle(34);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> res = [res] if Integer === res or String === res
</code></li>
<li class="post-context-line"><code> if Array === res and Integer === res.first
</code></li>
<li class="post-context-line"><code> res = res.dup
</code></li>
<li class="post-context-line"><code> status(res.shift)
</code></li>
<li class="post-context-line"><code> body(res.pop)
</code></li>
<li class="post-context-line"><code> headers(*res)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>call!</strong></code>
</li>
<li class="code framework">
<ol start="912"
class="pre-context" id="pre-35"
onclick="toggle(35);">
<li class="pre-context-line"><code> @env = env
</code></li>
<li class="pre-context-line"><code> @params = IndifferentHash.new
</code></li>
<li class="pre-context-line"><code> @request = Request.new(env)
</code></li>
<li class="pre-context-line"><code> @response = Response.new
</code></li>
<li class="pre-context-line"><code> template_cache.clear if settings.reload_templates
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> @response[&#x27;Content-Type&#x27;] = nil
</code></li>
</ol>
<ol start="919" class="context" id="35"
onclick="toggle(35);">
<li class="context-line" id="context-35"><code> invoke { dispatch! }</code></li>
</ol>
<ol start="920" class="post-context"
id="post-35" onclick="toggle(35);">
<li class="post-context-line"><code> invoke { error_block!(response.status) } unless @env[&#x27;sinatra.error&#x27;]
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> unless @response[&#x27;Content-Type&#x27;]
</code></li>
<li class="post-context-line"><code> if Array === body and body[0].respond_to? :content_type
</code></li>
<li class="post-context-line"><code> content_type body[0].content_type
</code></li>
<li class="post-context-line"><code> else
</code></li>
<li class="post-context-line"><code> content_type :html
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code framework">
<ol start="901"
class="pre-context" id="pre-36"
onclick="toggle(36);">
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> @template_cache = Tilt::Cache.new
</code></li>
<li class="pre-context-line"><code> yield self if block_given?
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Rack call interface.
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="908" class="context" id="36"
onclick="toggle(36);">
<li class="context-line" id="context-36"><code> dup.call!(env)</code></li>
</ol>
<ol start="909" class="post-context"
id="post-36" onclick="toggle(36);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def call!(env) # :nodoc:
</code></li>
<li class="post-context-line"><code> @env = env
</code></li>
<li class="post-context-line"><code> @params = IndifferentHash.new
</code></li>
<li class="post-context-line"><code> @request = Request.new(env)
</code></li>
<li class="post-context-line"><code> @response = Response.new
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-protection-2.0.8.1&#x2F;lib&#x2F;rack&#x2F;protection&#x2F;xss_header.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="11"
class="pre-context" id="pre-37"
onclick="toggle(37);">
<li class="pre-context-line"><code> #
</code></li>
<li class="pre-context-line"><code> # Options:
</code></li>
<li class="pre-context-line"><code> # xss_mode:: How the browser should prevent the attack (default: :block)
</code></li>
<li class="pre-context-line"><code> class XSSHeader &lt; Base
</code></li>
<li class="pre-context-line"><code> default_options :xss_mode =&gt; :block, :nosniff =&gt; true
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="18" class="context" id="37"
onclick="toggle(37);">
<li class="context-line" id="context-37"><code> status, headers, body = @app.call(env)</code></li>
</ol>
<ol start="19" class="post-context"
id="post-37" onclick="toggle(37);">
<li class="post-context-line"><code> headers[&#x27;X-XSS-Protection&#x27;] ||= &quot;1; mode=#{options[:xss_mode]}&quot; if html? headers
</code></li>
<li class="post-context-line"><code> headers[&#x27;X-Content-Type-Options&#x27;] ||= &#x27;nosniff&#x27; if options[:nosniff]
</code></li>
<li class="post-context-line"><code> [status, headers, body]
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-protection-2.0.8.1&#x2F;lib&#x2F;rack&#x2F;protection&#x2F;path_traversal.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="9"
class="pre-context" id="pre-38"
onclick="toggle(38);">
<li class="pre-context-line"><code> #
</code></li>
<li class="pre-context-line"><code> # Unescapes &#x27;&#x2F;&#x27; and &#x27;.&#x27;, expands +path_info+.
</code></li>
<li class="pre-context-line"><code> # Thus &lt;tt&gt;GET &#x2F;foo&#x2F;%2e%2e%2fbar&lt;&#x2F;tt&gt; becomes &lt;tt&gt;GET &#x2F;bar&lt;&#x2F;tt&gt;.
</code></li>
<li class="pre-context-line"><code> class PathTraversal &lt; Base
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> path_was = env[&quot;PATH_INFO&quot;]
</code></li>
<li class="pre-context-line"><code> env[&quot;PATH_INFO&quot;] = cleanup path_was if path_was &amp;&amp; !path_was.empty?
</code></li>
</ol>
<ol start="16" class="context" id="38"
onclick="toggle(38);">
<li class="context-line" id="context-38"><code> app.call env</code></li>
</ol>
<ol start="17" class="post-context"
id="post-38" onclick="toggle(38);">
<li class="post-context-line"><code> ensure
</code></li>
<li class="post-context-line"><code> env[&quot;PATH_INFO&quot;] = path_was
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def cleanup(path)
</code></li>
<li class="post-context-line"><code> encoding = path.encoding
</code></li>
<li class="post-context-line"><code> dot = &#x27;.&#x27;.encode(encoding)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-protection-2.0.8.1&#x2F;lib&#x2F;rack&#x2F;protection&#x2F;json_csrf.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="19"
class="pre-context" id="pre-39"
onclick="toggle(39);">
<li class="pre-context-line"><code> class JsonCsrf &lt; Base
</code></li>
<li class="pre-context-line"><code> default_options :allow_if =&gt; nil
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> alias react deny
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> request = Request.new(env)
</code></li>
</ol>
<ol start="26" class="context" id="39"
onclick="toggle(39);">
<li class="context-line" id="context-39"><code> status, headers, body = app.call(env)</code></li>
</ol>
<ol start="27" class="post-context"
id="post-39" onclick="toggle(39);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> if has_vector?(request, headers)
</code></li>
<li class="post-context-line"><code> warn env, &quot;attack prevented by #{self.class}&quot;
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> react_and_close(env, body) or [status, headers, body]
</code></li>
<li class="post-context-line"><code> else
</code></li>
<li class="post-context-line"><code> [status, headers, body]
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-protection-2.0.8.1&#x2F;lib&#x2F;rack&#x2F;protection&#x2F;base.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="43"
class="pre-context" id="pre-40"
onclick="toggle(40);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> unless accepts? env
</code></li>
<li class="pre-context-line"><code> instrument env
</code></li>
<li class="pre-context-line"><code> result = react env
</code></li>
<li class="pre-context-line"><code> end
</code></li>
</ol>
<ol start="50" class="context" id="40"
onclick="toggle(40);">
<li class="context-line" id="context-40"><code> result or app.call(env)</code></li>
</ol>
<ol start="51" class="post-context"
id="post-40" onclick="toggle(40);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def react(env)
</code></li>
<li class="post-context-line"><code> result = send(options[:reaction], env)
</code></li>
<li class="post-context-line"><code> result if Array === result and result.size == 3
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-protection-2.0.8.1&#x2F;lib&#x2F;rack&#x2F;protection&#x2F;base.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="43"
class="pre-context" id="pre-41"
onclick="toggle(41);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> unless accepts? env
</code></li>
<li class="pre-context-line"><code> instrument env
</code></li>
<li class="pre-context-line"><code> result = react env
</code></li>
<li class="pre-context-line"><code> end
</code></li>
</ol>
<ol start="50" class="context" id="41"
onclick="toggle(41);">
<li class="context-line" id="context-41"><code> result or app.call(env)</code></li>
</ol>
<ol start="51" class="post-context"
id="post-41" onclick="toggle(41);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def react(env)
</code></li>
<li class="post-context-line"><code> result = send(options[:reaction], env)
</code></li>
<li class="post-context-line"><code> result if Array === result and result.size == 3
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-protection-2.0.8.1&#x2F;lib&#x2F;rack&#x2F;protection&#x2F;frame_options.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="24"
class="pre-context" id="pre-42"
onclick="toggle(42);">
<li class="pre-context-line"><code> frame_options = options[:frame_options]
</code></li>
<li class="pre-context-line"><code> frame_options = options[:frame_options].to_s.upcase unless frame_options.respond_to? :to_str
</code></li>
<li class="pre-context-line"><code> frame_options.to_str
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="31" class="context" id="42"
onclick="toggle(42);">
<li class="context-line" id="context-42"><code> status, headers, body = @app.call(env)</code></li>
</ol>
<ol start="32" class="post-context"
id="post-42" onclick="toggle(42);">
<li class="post-context-line"><code> headers[&#x27;X-Frame-Options&#x27;] ||= frame_options if html? headers
</code></li>
<li class="post-context-line"><code> [status, headers, body]
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-2.2.2&#x2F;lib&#x2F;rack&#x2F;null_logger.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="4"
class="pre-context" id="pre-43"
onclick="toggle(43);">
<li class="pre-context-line"><code> class NullLogger
</code></li>
<li class="pre-context-line"><code> def initialize(app)
</code></li>
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> env[RACK_LOGGER] = self
</code></li>
</ol>
<ol start="11" class="context" id="43"
onclick="toggle(43);">
<li class="context-line" id="context-43"><code> @app.call(env)</code></li>
</ol>
<ol start="12" class="post-context"
id="post-43" onclick="toggle(43);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def info(progname = nil, &amp;block); end
</code></li>
<li class="post-context-line"><code> def debug(progname = nil, &amp;block); end
</code></li>
<li class="post-context-line"><code> def warn(progname = nil, &amp;block); end
</code></li>
<li class="post-context-line"><code> def error(progname = nil, &amp;block); end
</code></li>
<li class="post-context-line"><code> def fatal(progname = nil, &amp;block); end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-2.2.2&#x2F;lib&#x2F;rack&#x2F;head.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="5"
class="pre-context" id="pre-44"
onclick="toggle(44);">
<li class="pre-context-line"><code> # all other requests unchanged.
</code></li>
<li class="pre-context-line"><code> class Head
</code></li>
<li class="pre-context-line"><code> def initialize(app)
</code></li>
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="12" class="context" id="44"
onclick="toggle(44);">
<li class="context-line" id="context-44"><code> status, headers, body = @app.call(env)</code></li>
</ol>
<ol start="13" class="post-context"
id="post-44" onclick="toggle(44);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> if env[REQUEST_METHOD] == HEAD
</code></li>
<li class="post-context-line"><code> [
</code></li>
<li class="post-context-line"><code> status, headers, Rack::BodyProxy.new([]) do
</code></li>
<li class="post-context-line"><code> body.close if body.respond_to? :close
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> ]
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;show_exceptions.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code framework">
<ol start="15"
class="pre-context" id="pre-45"
onclick="toggle(45);">
<li class="pre-context-line"><code> def @@eats_errors.puts(*) end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def initialize(app)
</code></li>
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="22" class="context" id="45"
onclick="toggle(45);">
<li class="context-line" id="context-45"><code> @app.call(env)</code></li>
</ol>
<ol start="23" class="post-context"
id="post-45" onclick="toggle(45);">
<li class="post-context-line"><code> rescue Exception =&gt; e
</code></li>
<li class="post-context-line"><code> errors, env[&quot;rack.errors&quot;] = env[&quot;rack.errors&quot;], @@eats_errors
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> if prefers_plain_text?(env)
</code></li>
<li class="post-context-line"><code> content_type = &quot;text&#x2F;plain&quot;
</code></li>
<li class="post-context-line"><code> body = dump_exception(e)
</code></li>
<li class="post-context-line"><code> else
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code framework">
<ol start="187"
class="pre-context" id="pre-46"
onclick="toggle(46);">
<li class="pre-context-line"><code> # Some Rack handlers (Thin, Rainbows!) implement an extended body object protocol, however,
</code></li>
<li class="pre-context-line"><code> # some middleware (namely Rack::Lint) will break it by not mirroring the methods in question.
</code></li>
<li class="pre-context-line"><code> # This middleware will detect an extended body object and will make sure it reaches the
</code></li>
<li class="pre-context-line"><code> # handler directly. We do this here, so our middleware and middleware set up by the app will
</code></li>
<li class="pre-context-line"><code> # still be able to run.
</code></li>
<li class="pre-context-line"><code> class ExtendedRack &lt; Struct.new(:app)
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="194" class="context" id="46"
onclick="toggle(46);">
<li class="context-line" id="context-46"><code> result, callback = app.call(env), env[&#x27;async.callback&#x27;]</code></li>
</ol>
<ol start="195" class="post-context"
id="post-46" onclick="toggle(46);">
<li class="post-context-line"><code> return result unless callback and async?(*result)
</code></li>
<li class="post-context-line"><code> after_response { callback.call result }
</code></li>
<li class="post-context-line"><code> setup_close(env, *result)
</code></li>
<li class="post-context-line"><code> throw :async
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> private
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code framework">
<ol start="1944"
class="pre-context" id="pre-47"
onclick="toggle(47);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def helpers
</code></li>
<li class="pre-context-line"><code> @instance
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="1951" class="context" id="47"
onclick="toggle(47);">
<li class="context-line" id="context-47"><code> @stack.call(env)</code></li>
</ol>
<ol start="1952" class="post-context"
id="post-47" onclick="toggle(47);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def inspect
</code></li>
<li class="post-context-line"><code> &quot;#&lt;#{@instance.class} app_file=#{settings.app_file.inspect}&gt;&quot;
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;server_health_check-rack-0.1.0&#x2F;lib&#x2F;server_health_check_rack&#x2F;middleware.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="5"
class="pre-context" id="pre-48"
onclick="toggle(48);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> if ServerHealthCheckRack::Config.path?(env[&quot;PATH_INFO&quot;])
</code></li>
<li class="pre-context-line"><code> check = health_check(env[&quot;PATH_INFO&quot;])
</code></li>
<li class="pre-context-line"><code> [check.http_status, response_headers, [check.to_json]]
</code></li>
<li class="pre-context-line"><code> else
</code></li>
</ol>
<ol start="12" class="context" id="48"
onclick="toggle(48);">
<li class="context-line" id="context-48"><code> @app.call(env)</code></li>
</ol>
<ol start="13" class="post-context"
id="post-48" onclick="toggle(48);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> private
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def health_check(rack_path_info)
</code></li>
<li class="post-context-line"><code> checks = ServerHealthCheckRack::Config.path_to_health_checks(rack_path_info)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;gem_source&#x2F;rack_middleware.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code app">
<ol start="14"
class="pre-context" id="pre-49"
onclick="toggle(49);">
<li class="pre-context-line"><code> Gemstash::GemSource.sources.each do |source|
</code></li>
<li class="pre-context-line"><code> next unless source.matches?(env)
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> env[&quot;gemstash.gem_source&quot;] = source
</code></li>
<li class="pre-context-line"><code> break
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
</ol>
<ol start="21" class="context" id="49"
onclick="toggle(49);">
<li class="context-line" id="context-49"><code> @app.call(env)</code></li>
</ol>
<ol start="22" class="post-context"
id="post-49" onclick="toggle(49);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;env.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code app">
<ol start="32"
class="pre-context" id="pre-50"
onclick="toggle(50);">
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> @gemstash_env = gemstash_env
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> env[&quot;gemstash.env&quot;] = @gemstash_env
</code></li>
<li class="pre-context-line"><code> Gemstash::Env.current = @gemstash_env
</code></li>
</ol>
<ol start="39" class="context" id="50"
onclick="toggle(50);">
<li class="context-line" id="context-50"><code> @app.call(env)</code></li>
</ol>
<ol start="40" class="post-context"
id="post-50" onclick="toggle(50);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def initialize(config = nil, cache: nil, db: nil)
</code></li>
<li class="post-context-line"><code> @config = config
</code></li>
<li class="post-context-line"><code> @cache = cache
</code></li>
<li class="post-context-line"><code> @db = db
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;puma-4.3.5&#x2F;lib&#x2F;puma&#x2F;commonlogger.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="33"
class="pre-context" id="pre-51"
onclick="toggle(51);">
<li class="pre-context-line"><code> def initialize(app, logger=nil)
</code></li>
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> @logger = logger
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> began_at = Time.now
</code></li>
</ol>
<ol start="40" class="context" id="51"
onclick="toggle(51);">
<li class="context-line" id="context-51"><code> status, header, body = @app.call(env)</code></li>
</ol>
<ol start="41" class="post-context"
id="post-51" onclick="toggle(51);">
<li class="post-context-line"><code> header = Util::HeaderHash.new(header)
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # If we&#x27;ve been hijacked, then output a special line
</code></li>
<li class="post-context-line"><code> if env[&#x27;rack.hijack_io&#x27;]
</code></li>
<li class="post-context-line"><code> log_hijacking(env, &#x27;HIJACK&#x27;, header, began_at)
</code></li>
<li class="post-context-line"><code> else
</code></li>
<li class="post-context-line"><code> ary = env[&#x27;rack.after_reply&#x27;]
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;logging.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code app">
<ol start="51"
class="pre-context" id="pre-52"
onclick="toggle(52);">
<li class="pre-context-line"><code> class RackMiddleware
</code></li>
<li class="pre-context-line"><code> def initialize(app)
</code></li>
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> env[&quot;rack.logger&quot;] = Gemstash::Logging.logger
</code></li>
</ol>
<ol start="58" class="context" id="52"
onclick="toggle(52);">
<li class="context-line" id="context-52"><code> @app.call(env)</code></li>
</ol>
<ol start="59" class="post-context"
id="post-52" onclick="toggle(52);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # Logger that looks like a stream, for Puma and Rack to log to.
</code></li>
<li class="post-context-line"><code> class StreamLogger
</code></li>
<li class="post-context-line"><code> def self.puma_events
</code></li>
<li class="post-context-line"><code> Puma::Events.new(for_stdout, for_stderr)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-2.2.2&#x2F;lib&#x2F;rack&#x2F;deflater.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="37"
class="pre-context" id="pre-53"
onclick="toggle(53);">
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> @condition = options[:if]
</code></li>
<li class="pre-context-line"><code> @compressible_types = options[:include]
</code></li>
<li class="pre-context-line"><code> @sync = options.fetch(:sync, true)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="44" class="context" id="53"
onclick="toggle(53);">
<li class="context-line" id="context-53"><code> status, headers, body = @app.call(env)</code></li>
</ol>
<ol start="45" class="post-context"
id="post-53" onclick="toggle(53);">
<li class="post-context-line"><code> headers = Utils::HeaderHash[headers]
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> unless should_deflate?(env, status, headers, body)
</code></li>
<li class="post-context-line"><code> return [status, headers, body]
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> request = Request.new(env)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;puma-4.3.5&#x2F;lib&#x2F;puma&#x2F;configuration.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="221"
class="pre-context" id="pre-54"
onclick="toggle(54);">
<li class="pre-context-line"><code> def initialize(config, app)
</code></li>
<li class="pre-context-line"><code> @config = config
</code></li>
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> env[Const::PUMA_CONFIG] = @config
</code></li>
</ol>
<ol start="228" class="context" id="54"
onclick="toggle(54);">
<li class="context-line" id="context-54"><code> @app.call(env)</code></li>
</ol>
<ol start="229" class="post-context"
id="post-54" onclick="toggle(54);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # Indicate if there is a properly configured app
</code></li>
<li class="post-context-line"><code> #
</code></li>
<li class="post-context-line"><code> def app_configured?
</code></li>
<li class="post-context-line"><code> @options[:app] || File.exist?(rackup)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;puma-4.3.5&#x2F;lib&#x2F;puma&#x2F;server.rb</code> in
<code><strong>handle_request</strong></code>
</li>
<li class="code system">
<ol start="706"
class="pre-context" id="pre-55"
onclick="toggle(55);">
<li class="pre-context-line"><code> # A rack extension. If the app writes #call&#x27;ables to this
</code></li>
<li class="pre-context-line"><code> # array, we will invoke them when the request is done.
</code></li>
<li class="pre-context-line"><code> #
</code></li>
<li class="pre-context-line"><code> after_reply = env[RACK_AFTER_REPLY] = []
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> begin
</code></li>
<li class="pre-context-line"><code> begin
</code></li>
</ol>
<ol start="713" class="context" id="55"
onclick="toggle(55);">
<li class="context-line" id="context-55"><code> status, headers, res_body = @app.call(env)</code></li>
</ol>
<ol start="714" class="post-context"
id="post-55" onclick="toggle(55);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> return :async if req.hijacked
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> status = status.to_i
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> if status == -1
</code></li>
<li class="post-context-line"><code> unless headers.empty? and res_body == []
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;puma-4.3.5&#x2F;lib&#x2F;puma&#x2F;server.rb</code> in
<code><strong>process_client</strong></code>
</li>
<li class="code system">
<ol start="465"
class="pre-context" id="pre-56"
onclick="toggle(56);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> clean_thread_locals = @options[:clean_thread_locals]
</code></li>
<li class="pre-context-line"><code> close_socket = true
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> requests = 0
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> while true
</code></li>
</ol>
<ol start="472" class="context" id="56"
onclick="toggle(56);">
<li class="context-line" id="context-56"><code> case handle_request(client, buffer)</code></li>
</ol>
<ol start="473" class="post-context"
id="post-56" onclick="toggle(56);">
<li class="post-context-line"><code> when false
</code></li>
<li class="post-context-line"><code> return
</code></li>
<li class="post-context-line"><code> when :async
</code></li>
<li class="post-context-line"><code> close_socket = false
</code></li>
<li class="post-context-line"><code> return
</code></li>
<li class="post-context-line"><code> when true
</code></li>
<li class="post-context-line"><code> return unless @queue_requests
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;puma-4.3.5&#x2F;lib&#x2F;puma&#x2F;server.rb</code> in
<code><strong>block in run</strong></code>
</li>
<li class="code system">
<ol start="321"
class="pre-context" id="pre-57"
onclick="toggle(57);">
<li class="pre-context-line"><code> client.close
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> @events.parse_error self, client.env, e
</code></li>
<li class="pre-context-line"><code> rescue ConnectionError, EOFError
</code></li>
<li class="pre-context-line"><code> client.close
</code></li>
<li class="pre-context-line"><code> else
</code></li>
<li class="pre-context-line"><code> if process_now
</code></li>
</ol>
<ol start="328" class="context" id="57"
onclick="toggle(57);">
<li class="context-line" id="context-57"><code> process_client client, buffer</code></li>
</ol>
<ol start="329" class="post-context"
id="post-57" onclick="toggle(57);">
<li class="post-context-line"><code> else
</code></li>
<li class="post-context-line"><code> client.set_timeout @first_data_timeout
</code></li>
<li class="post-context-line"><code> @reactor.add client
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;puma-4.3.5&#x2F;lib&#x2F;puma&#x2F;thread_pool.rb</code> in
<code><strong>block in spawn_thread</strong></code>
</li>
<li class="code system">
<ol start="127"
class="pre-context" id="pre-58"
onclick="toggle(58);">
<li class="pre-context-line"><code> break unless continue
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> if @clean_thread_locals
</code></li>
<li class="pre-context-line"><code> ThreadPool.clean_thread_locals
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> begin
</code></li>
</ol>
<ol start="134" class="context" id="58"
onclick="toggle(58);">
<li class="context-line" id="context-58"><code> block.call(work, *extra)</code></li>
</ol>
<ol start="135" class="post-context"
id="post-58" onclick="toggle(58);">
<li class="post-context-line"><code> rescue Exception =&gt; e
</code></li>
<li class="post-context-line"><code> STDERR.puts &quot;Error reached top of thread-pool: #{e.message} (#{e.class})&quot;
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> mutex.synchronize do
</code></li>
<li class="post-context-line"><code> @spawned -= 1
</code></li>
</ol>
<div class="clear"></div>
</li>
</ul>
</div> <!-- /BACKTRACE -->
<div id="get">
<h3 id="get-info">GET</h3>
<p class="no-data">No GET data.</p>
<div class="clear"></div>
</div> <!-- /GET -->
<div id="post">
<h3 id="post-info">POST</h3>
<table class="req">
<tr>
<th>Variable</th>
<th>Value</th>
</tr>
<tr>
<td>gem_name</td>
<td class="code"><div>&quot;private-example&quot;</div></td>
</tr>
<tr>
<td>version</td>
<td class="code"><div>&quot;0.1.0&quot;</div></td>
</tr>
</table>
<div class="clear"></div>
</div> <!-- /POST -->
<div id="cookies">
<h3 id="cookie-info">COOKIES</h3>
<p class="no-data">No cookie data.</p>
<div class="clear"></div>
</div> <!-- /COOKIES -->
<div id="rack">
<h3 id="env-info">Rack ENV</h3>
<table class="req">
<tr>
<th>Variable</th>
<th>Value</th>
</tr>
<tr>
<td>CONTENT_LENGTH</td>
<td class="code"><div>38</div></td>
</tr>
<tr>
<td>CONTENT_TYPE</td>
<td class="code"><div>application&#x2F;x-www-form-urlencoded</div></td>
</tr>
<tr>
<td>GATEWAY_INTERFACE</td>
<td class="code"><div>CGI&#x2F;1.2</div></td>
</tr>
<tr>
<td>HTTP_ACCEPT</td>
<td class="code"><div>*&#x2F;*</div></td>
</tr>
<tr>
<td>HTTP_ACCEPT_ENCODING</td>
<td class="code"><div>gzip;q=1.0,deflate;q=0.6,identity;q=0.3</div></td>
</tr>
<tr>
<td>HTTP_AUTHORIZATION</td>
<td class="code"><div>72b4857b4c60c2d0aec84092c4d89d07</div></td>
</tr>
<tr>
<td>HTTP_CONNECTION</td>
<td class="code"><div>keep-alive</div></td>
</tr>
<tr>
<td>HTTP_HOST</td>
<td class="code"><div>localhost:9292</div></td>
</tr>
<tr>
<td>HTTP_KEEP_ALIVE</td>
<td class="code"><div>30</div></td>
</tr>
<tr>
<td>HTTP_USER_AGENT</td>
<td class="code"><div>Ruby, RubyGems&#x2F;3.0.3 x86_64-darwin-19 Ruby&#x2F;2.6.3 (2019-04-16 patchlevel 62)</div></td>
</tr>
<tr>
<td>HTTP_VERSION</td>
<td class="code"><div>HTTP&#x2F;1.1</div></td>
</tr>
<tr>
<td>PATH_INFO</td>
<td class="code"><div>&#x2F;api&#x2F;v1&#x2F;gems&#x2F;yank</div></td>
</tr>
<tr>
<td>QUERY_STRING</td>
<td class="code"><div></div></td>
</tr>
<tr>
<td>REMOTE_ADDR</td>
<td class="code"><div>127.0.0.1</div></td>
</tr>
<tr>
<td>REQUEST_METHOD</td>
<td class="code"><div>DELETE</div></td>
</tr>
<tr>
<td>REQUEST_PATH</td>
<td class="code"><div>&#x2F;private&#x2F;api&#x2F;v1&#x2F;gems&#x2F;yank</div></td>
</tr>
<tr>
<td>REQUEST_URI</td>
<td class="code"><div>&#x2F;api&#x2F;v1&#x2F;gems&#x2F;yank</div></td>
</tr>
<tr>
<td>SCRIPT_NAME</td>
<td class="code"><div></div></td>
</tr>
<tr>
<td>SERVER_NAME</td>
<td class="code"><div>localhost</div></td>
</tr>
<tr>
<td>SERVER_PORT</td>
<td class="code"><div>9292</div></td>
</tr>
<tr>
<td>SERVER_PROTOCOL</td>
<td class="code"><div>HTTP&#x2F;1.1</div></td>
</tr>
<tr>
<td>SERVER_SOFTWARE</td>
<td class="code"><div>puma 4.3.5 Mysterious Traveller</div></td>
</tr>
<tr>
<td>gemstash.env</td>
<td class="code"><div>#&lt;Gemstash::Env:0x00007fcb5253f960 @config=#&lt;Gemstash::Configuration:0x00007fcb5230f3c0 @config={:cache_type=&gt;&quot;memory&quot;, :base_path=&gt;&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;.gemstash&quot;, :db_adapter=&gt;&quot;sqlite3&quot;, :bind=&gt;&quot;tcp:&#x2F;&#x2F;0.0.0.0:9292&quot;, :rubygems_url=&gt;&quot;https:&#x2F;&#x2F;rubygems.org&quot;, :ignore_gemfile_source=&gt;false, :protected_fetch=&gt;false, :fetch_timeout=&gt;20, :db_connection_options=&gt;{}, :puma_threads=&gt;16, :puma_workers=&gt;1, :cache_expiration=&gt;1800, :cache_max_size=&gt;500, :storage_adapter=&gt;&quot;s3&quot;, :aws_access_key_id=&gt;&quot;AKIAXDAKXIODWSOIRIZ3&quot;, :aws_secret_access_key=&gt;&quot;4txhhFYTcYly7kSf+1bI1aolopZ9axZQVzhT&#x2F;66W&quot;, :bucket_name=&gt;&quot;testing16160303&quot;, :region=&gt;&quot;us-west-1&quot;, :s3_path=&gt;&quot;gemstash&#x2F;s3_storage&quot;}&gt;, @cache=#&lt;Gemstash::Cache:0x00007fcb5274e378 @client=#&lt;Gemstash::LruReduxClient:0x00007fcb5274e558 @cache=#&lt;LruRedux::TTL::ThreadSafeCache:0x00007fcb5274e530 @max_size=500, @ttl=1800, @data_lru={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;#&lt;Gemstash::Authorization:0x00007fcb5275e9d0 @auth_key=&quot;72b4857b4c60c2d0aec84092c4d89d07&quot;, @all=true, @permissions=#&lt;Set: {&quot;all&quot;}&gt;&gt;}, @data_ttl={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;1592022925.389683}, @mon_mutex=#&lt;Thread::Mutex:0x00007fcb5274e3a0&gt;, @mon_mutex_owner_object_id=70255619240600, @mon_owner=nil, @mon_count=0&gt;&gt;&gt;, @db=#&lt;Sequel::SQLite::Database: &quot;sqlite:&#x2F;&#x2F;%2FUsers%2Fquangnguyen%2F.gemstash%2Fgemstash.db&quot; {:max_connections=&gt;1}&gt;, @cache_client=#&lt;Gemstash::LruReduxClient:0x00007fcb5274e558 @cache=#&lt;LruRedux::TTL::ThreadSafeCache:0x00007fcb5274e530 @max_size=500, @ttl=1800, @data_lru={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;#&lt;Gemstash::Authorization:0x00007fcb5275e9d0 @auth_key=&quot;72b4857b4c60c2d0aec84092c4d89d07&quot;, @all=true, @permissions=#&lt;Set: {&quot;all&quot;}&gt;&gt;}, @data_ttl={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;1592022925.389683}, @mon_mutex=#&lt;Thread::Mutex:0x00007fcb5274e3a0&gt;, @mon_mutex_owner_object_id=70255619240600, @mon_owner=nil, @mon_count=0&gt;&gt;&gt;</div></td>
</tr>
<tr>
<td>gemstash.gem_source</td>
<td class="code"><div>Gemstash::GemSource::PrivateSource</div></td>
</tr>
<tr>
<td>puma.config</td>
<td class="code"><div>#&lt;Puma::Configuration:0x00007fcb523c5c38 @options=#&lt;Puma::UserFileDefaultOptions:0x00007fcb523c55a8 @user_options={:pidfile=&gt;&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;.gemstash&#x2F;puma.pid&quot;, :daemon=&gt;true, :log_requests=&gt;false, :environment=&gt;&quot;development&quot;, :logger=&gt;#&lt;Puma::Events:0x00007fcb523c60e8 @formatter=#&lt;Puma::Events::PidFormatter:0x00007fcb523ecef0&gt;, @stdout=#&lt;Gemstash::Logging::StreamLogger:0x00007fcb523c6160 @level=1&gt;, @stderr=#&lt;Gemstash::Logging::StreamLogger:0x00007fcb523c6110 @level=3&gt;, @debug=false, @hooks={:state=&gt;[]}&gt;}, @file_options={:config_files=&gt;[&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;puma.rb&quot;], :min_threads=&gt;0, :max_threads=&gt;16, :binds=&gt;[&quot;tcp:&#x2F;&#x2F;0.0.0.0:9292&quot;], :workers=&gt;1, :rackup=&gt;&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;config.ru&quot;}, @default_options={:min_threads=&gt;0, :max_threads=&gt;16, :log_requests=&gt;false, :debug=&gt;false, :binds=&gt;[&quot;tcp:&#x2F;&#x2F;0.0.0.0:9292&quot;], :workers=&gt;0, :daemon=&gt;false, :mode=&gt;:http, :worker_timeout=&gt;60, :worker_boot_timeout=&gt;60, :worker_shutdown_timeout=&gt;30, :remote_address=&gt;:socket, :tag=&gt;&quot;gemstash&quot;, :environment=&gt;&quot;development&quot;, :rackup=&gt;&quot;config.ru&quot;, :logger=&gt;#&lt;IO:&lt;STDOUT&gt;&gt;, :persistent_timeout=&gt;20, :first_data_timeout=&gt;30, :raise_exception_on_sigterm=&gt;true}&gt;, @plugins=#&lt;Puma::PluginLoader:0x00007fcb523c5468 @instances=[]&gt;, @user_dsl=#&lt;Puma::DSL:0x00007fcb523c5300 @config=#&lt;Puma::Configuration:0x00007fcb523c5c38 ...&gt;, @options={:pidfile=&gt;&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;.gemstash&#x2F;puma.pid&quot;, :daemon=&gt;true, :log_requests=&gt;false, :environment=&gt;&quot;development&quot;, :logger=&gt;#&lt;Puma::Events:0x00007fcb523c60e8 @formatter=#&lt;Puma::Events::PidFormatter:0x00007fcb523ecef0&gt;, @stdout=#&lt;Gemstash::Logging::StreamLogger:0x00007fcb523c6160 @level=1&gt;, @stderr=#&lt;Gemstash::Logging::StreamLogger:0x00007fcb523c6110 @level=3&gt;, @debug=false, @hooks={:state=&gt;[]}&gt;}, @plugins=[]&gt;, @file_dsl=#&lt;Puma::DSL:0x00007fcb523c5148 @config=#&lt;Puma::Configuration:0x00007fcb523c5c38 ...&gt;, @options={:config_files=&gt;[&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;puma.rb&quot;], :min_threads=&gt;0, :max_threads=&gt;16, :binds=&gt;[&quot;tcp:&#x2F;&#x2F;0.0.0.0:9292&quot;], :workers=&gt;1, :rackup=&gt;&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;config.ru&quot;}, @plugins=[], @path=&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;puma.rb&quot;&gt;, @default_dsl=#&lt;Puma::DSL:0x00007fcb523c5008 @config=#&lt;Puma::Configuration:0x00007fcb523c5c38 ...&gt;, @options={:min_threads=&gt;0, :max_threads=&gt;16, :log_requests=&gt;false, :debug=&gt;false, :binds=&gt;[&quot;tcp:&#x2F;&#x2F;0.0.0.0:9292&quot;], :workers=&gt;0, :daemon=&gt;false, :mode=&gt;:http, :worker_timeout=&gt;60, :worker_boot_timeout=&gt;60, :worker_shutdown_timeout=&gt;30, :remote_address=&gt;:socket, :tag=&gt;&quot;gemstash&quot;, :environment=&gt;&quot;development&quot;, :rackup=&gt;&quot;config.ru&quot;, :logger=&gt;#&lt;IO:&lt;STDOUT&gt;&gt;, :persistent_timeout=&gt;20, :first_data_timeout=&gt;30, :raise_exception_on_sigterm=&gt;true}, @plugins=[]&gt;&gt;</div></td>
</tr>
<tr>
<td>puma.request_body_wait</td>
<td class="code"><div>0</div></td>
</tr>
<tr>
<td>puma.socket</td>
<td class="code"><div>#&lt;TCPSocket:fd 20, AF_INET, 127.0.0.1, 9292&gt;</div></td>
</tr>
<tr>
<td>rack.after_reply</td>
<td class="code"><div>[]</div></td>
</tr>
<tr>
<td>rack.errors</td>
<td class="code"><div>#&lt;Object:0x00007fcb5245d8f8&gt;</div></td>
</tr>
<tr>
<td>rack.hijack</td>
<td class="code"><div>#&lt;Puma::Client:0x3fe5a9233e20 @ready=true&gt;</div></td>
</tr>
<tr>
<td>rack.hijack?</td>
<td class="code"><div>true</div></td>
</tr>
<tr>
<td>rack.input</td>
<td class="code"><div>#&lt;StringIO:0x00007fcb52466c28&gt;</div></td>
</tr>
<tr>
<td>rack.logger</td>
<td class="code"><div>#&lt;Rack::NullLogger:0x00007fcb524564b8 @app=#&lt;Rack::Protection::FrameOptions:0x00007fcb524565a8 @app=#&lt;Rack::Protection::HttpOrigin:0x00007fcb52456670 @app=#&lt;Rack::Protection::IPSpoofing:0x00007fcb524566e8 @app=#&lt;Rack::Protection::JsonCsrf:0x00007fcb524567b0 @app=#&lt;Rack::Protection::PathTraversal:0x00007fcb524568a0 @app=#&lt;Rack::Protection::XSSHeader:0x00007fcb52456990 @app=#&lt;Gemstash::Web:0x00007fcb5255d9d8 @gemstash_env=#&lt;Gemstash::Env:0x00007fcb5253f960 @config=#&lt;Gemstash::Configuration:0x00007fcb5230f3c0 @config={:cache_type=&gt;&quot;memory&quot;, :base_path=&gt;&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;.gemstash&quot;, :db_adapter=&gt;&quot;sqlite3&quot;, :bind=&gt;&quot;tcp:&#x2F;&#x2F;0.0.0.0:9292&quot;, :rubygems_url=&gt;&quot;https:&#x2F;&#x2F;rubygems.org&quot;, :ignore_gemfile_source=&gt;false, :protected_fetch=&gt;false, :fetch_timeout=&gt;20, :db_connection_options=&gt;{}, :puma_threads=&gt;16, :puma_workers=&gt;1, :cache_expiration=&gt;1800, :cache_max_size=&gt;500, :storage_adapter=&gt;&quot;s3&quot;, :aws_access_key_id=&gt;&quot;AKIAXDAKXIODWSOIRIZ3&quot;, :aws_secret_access_key=&gt;&quot;4txhhFYTcYly7kSf+1bI1aolopZ9axZQVzhT&#x2F;66W&quot;, :bucket_name=&gt;&quot;testing16160303&quot;, :region=&gt;&quot;us-west-1&quot;, :s3_path=&gt;&quot;gemstash&#x2F;s3_storage&quot;}&gt;, @cache=#&lt;Gemstash::Cache:0x00007fcb5274e378 @client=#&lt;Gemstash::LruReduxClient:0x00007fcb5274e558 @cache=#&lt;LruRedux::TTL::ThreadSafeCache:0x00007fcb5274e530 @max_size=500, @ttl=1800, @data_lru={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;#&lt;Gemstash::Authorization:0x00007fcb5275e9d0 @auth_key=&quot;72b4857b4c60c2d0aec84092c4d89d07&quot;, @all=true, @permissions=#&lt;Set: {&quot;all&quot;}&gt;&gt;}, @data_ttl={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;1592022925.389683}, @mon_mutex=#&lt;Thread::Mutex:0x00007fcb5274e3a0&gt;, @mon_mutex_owner_object_id=70255619240600, @mon_owner=nil, @mon_count=0&gt;&gt;&gt;, @db=#&lt;Sequel::SQLite::Database: &quot;sqlite:&#x2F;&#x2F;%2FUsers%2Fquangnguyen%2F.gemstash%2Fgemstash.db&quot; {:max_connections=&gt;1}&gt;, @cache_client=#&lt;Gemstash::LruReduxClient:0x00007fcb5274e558 @cache=#&lt;LruRedux::TTL::ThreadSafeCache:0x00007fcb5274e530 @max_size=500, @ttl=1800, @data_lru={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;#&lt;Gemstash::Authorization:0x00007fcb5275e9d0 @auth_key=&quot;72b4857b4c60c2d0aec84092c4d89d07&quot;, @all=true, @permissions=#&lt;Set: {&quot;all&quot;}&gt;&gt;}, @data_ttl={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;1592022925.389683}, @mon_mutex=#&lt;Thread::Mutex:0x00007fcb5274e3a0&gt;, @mon_mutex_owner_object_id=70255619240600, @mon_owner=nil, @mon_count=0&gt;&gt;&gt;, @http_client_builder=Gemstash::HTTPClient, @default_layout=:layout, @preferred_extension=nil, @app=nil, @template_cache=#&lt;Tilt::Cache:0x00007fcb5240db28 @cache={}&gt;&gt;, @options={:reaction=&gt;:drop_session, :logging=&gt;true, :message=&gt;&quot;Forbidden&quot;, :encryptor=&gt;Digest::SHA1, :session_key=&gt;&quot;rack.session&quot;, :status=&gt;403, :allow_empty_referrer=&gt;true, :report_key=&gt;&quot;protection.failed&quot;, :html_types=&gt;[&quot;text&#x2F;html&quot;, &quot;application&#x2F;xhtml&quot;, &quot;text&#x2F;xml&quot;, &quot;application&#x2F;xml&quot;], :xss_mode=&gt;:block, :nosniff=&gt;true, :img_src=&gt;&quot;&#x27;self&#x27; data:&quot;, :font_src=&gt;&quot;&#x27;self&#x27;&quot;, :without_session=&gt;true}&gt;, @options={:reaction=&gt;:drop_session, :logging=&gt;true, :message=&gt;&quot;Forbidden&quot;, :encryptor=&gt;Digest::SHA1, :session_key=&gt;&quot;rack.session&quot;, :status=&gt;403, :allow_empty_referrer=&gt;true, :report_key=&gt;&quot;protection.failed&quot;, :html_types=&gt;[&quot;text&#x2F;html&quot;, &quot;application&#x2F;xhtml&quot;, &quot;text&#x2F;xml&quot;, &quot;application&#x2F;xml&quot;], :img_src=&gt;&quot;&#x27;self&#x27; data:&quot;, :font_src=&gt;&quot;&#x27;self&#x27;&quot;, :without_session=&gt;true}&gt;, @options={:reaction=&gt;:drop_session, :logging=&gt;true, :message=&gt;&quot;Forbidden&quot;, :encryptor=&gt;Digest::SHA1, :session_key=&gt;&quot;rack.session&quot;, :status=&gt;403, :allow_empty_referrer=&gt;true, :report_key=&gt;&quot;protection.failed&quot;, :html_types=&gt;[&quot;text&#x2F;html&quot;, &quot;application&#x2F;xhtml&quot;, &quot;text&#x2F;xml&quot;, &quot;application&#x2F;xml&quot;], :allow_if=&gt;nil, :img_src=&gt;&quot;&#x27;self&#x27; data:&quot;, :font_src=&gt;&quot;&#x27;self&#x27;&quot;, :without_session=&gt;true}&gt;, @options={:reaction=&gt;:drop_session, :logging=&gt;true, :message=&gt;&quot;Forbidden&quot;, :encryptor=&gt;Digest::SHA1, :session_key=&gt;&quot;rack.session&quot;, :status=&gt;403, :allow_empty_referrer=&gt;true, :report_key=&gt;&quot;protection.failed&quot;, :html_types=&gt;[&quot;text&#x2F;html&quot;, &quot;application&#x2F;xhtml&quot;, &quot;text&#x2F;xml&quot;, &quot;application&#x2F;xml&quot;], :img_src=&gt;&quot;&#x27;self&#x27; data:&quot;, :font_src=&gt;&quot;&#x27;self&#x27;&quot;, :without_session=&gt;true}&gt;, @options={:reaction=&gt;:drop_session, :logging=&gt;true, :message=&gt;&quot;Forbidden&quot;, :encryptor=&gt;Digest::SHA1, :session_key=&gt;&quot;rack.session&quot;, :status=&gt;403, :allow_empty_referrer=&gt;true, :report_key=&gt;&quot;protection.failed&quot;, :html_types=&gt;[&quot;text&#x2F;html&quot;, &quot;application&#x2F;xhtml&quot;, &quot;text&#x2F;xml&quot;, &quot;application&#x2F;xml&quot;], :allow_if=&gt;nil, :img_src=&gt;&quot;&#x27;self&#x27; data:&quot;, :font_src=&gt;&quot;&#x27;self&#x27;&quot;, :without_session=&gt;true}&gt;, @options={:reaction=&gt;:drop_session, :logging=&gt;true, :message=&gt;&quot;Forbidden&quot;, :encryptor=&gt;Digest::SHA1, :session_key=&gt;&quot;rack.session&quot;, :status=&gt;403, :allow_empty_referrer=&gt;true, :report_key=&gt;&quot;protection.failed&quot;, :html_types=&gt;[&quot;text&#x2F;html&quot;, &quot;application&#x2F;xhtml&quot;, &quot;text&#x2F;xml&quot;, &quot;application&#x2F;xml&quot;], :frame_options=&gt;:sameorigin, :img_src=&gt;&quot;&#x27;self&#x27; data:&quot;, :font_src=&gt;&quot;&#x27;self&#x27;&quot;, :without_session=&gt;true}&gt;&gt;</div></td>
</tr>
<tr>
<td>rack.multiprocess</td>
<td class="code"><div>false</div></td>
</tr>
<tr>
<td>rack.multithread</td>
<td class="code"><div>true</div></td>
</tr>
<tr>
<td>rack.request.cookie_hash</td>
<td class="code"><div>{}</div></td>
</tr>
<tr>
<td>rack.request.form_hash</td>
<td class="code"><div>{&quot;gem_name&quot;=&gt;&quot;private-example&quot;, &quot;version&quot;=&gt;&quot;0.1.0&quot;}</div></td>
</tr>
<tr>
<td>rack.request.form_input</td>
<td class="code"><div>#&lt;StringIO:0x00007fcb52466c28&gt;</div></td>
</tr>
<tr>
<td>rack.request.form_vars</td>
<td class="code"><div>gem_name=private-example&amp;version=0.1.0</div></td>
</tr>
<tr>
<td>rack.request.query_hash</td>
<td class="code"><div>{}</div></td>
</tr>
<tr>
<td>rack.request.query_string</td>
<td class="code"><div></div></td>
</tr>
<tr>
<td>rack.run_once</td>
<td class="code"><div>false</div></td>
</tr>
<tr>
<td>rack.tempfiles</td>
<td class="code"><div>[]</div></td>
</tr>
<tr>
<td>rack.url_scheme</td>
<td class="code"><div>http</div></td>
</tr>
<tr>
<td>rack.version</td>
<td class="code"><div>[1, 3]</div></td>
</tr>
<tr>
<td>sinatra.accept</td>
<td class="code"><div>[#&lt;Sinatra::Request::AcceptEntry:0x00007fcb5276f4b0 @entry=&quot;*&#x2F;*&quot;, @type=&quot;*&#x2F;*&quot;, @params={}, @q=1.0&gt;]</div></td>
</tr>
<tr>
<td>sinatra.error</td>
<td class="code"><div>#&lt;Gemstash::GemYanker::UnknownGemError: Cannot yank an unknown gem!&gt;</div></td>
</tr>
<tr>
<td>sinatra.error.params</td>
<td class="code"><div>{&quot;gem_name&quot;=&gt;&quot;private-example&quot;, &quot;version&quot;=&gt;&quot;0.1.0&quot;}</div></td>
</tr>
<tr>
<td>sinatra.route</td>
<td class="code"><div>DELETE &#x2F;api&#x2F;v1&#x2F;gems&#x2F;yank</div></td>
</tr>
</table>
<div class="clear"></div>
</div> <!-- /RACK ENV -->
<p id="explanation">You're seeing this error because you have
enabled the <code>show_exceptions</code> setting.</p>
</div> <!-- /WRAP -->
</body>
</html>
JJames:gemstash quangnguyen$ RUBYGEMS_HOST=http://localhost:9292/private gem yank --key test_key private_example --version 0.1.0
Yanking gem from http://localhost:9292/private...
JJames:gemstash quangnguyen$ gem fetch
ERROR: While executing gem ... (Gem::CommandLineError)
Please specify at least one gem name (e.g. gem build GEMNAME)
JJames:gemstash quangnguyen$ gem fetch private_example
ERROR: Could not find a valid gem 'private_example' (>= 0) in any repository
ERROR: Possible alternatives: private_eye, private-bam, rust_example, sinatra-example, private-dumper
JJames:gemstash quangnguyen$ gemstash stop
Command stop sent success
Gemstash stopped successfully!
JJames:gemstash quangnguyen$ gemstash status
Puma is not running
JJames:gemstash quangnguyen$ bin/gemstash start
Starting gemstash!
JJames:gemstash quangnguyen$ bin/gemstash status
Puma is started
JJames:gemstash quangnguyen$ RUBYGEMS_HOST=http://localhost:9292/private gem yank --key test_key private_example --version 0.1.0
Yanking gem from http://localhost:9292/private...
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Gemstash::GemYanker::YankedVersionError at &#x2F;api&#x2F;v1&#x2F;gems&#x2F;yank</title>
<script type="text/javascript">
//<!--
function toggle(id) {
var pre = document.getElementById("pre-" + id);
var post = document.getElementById("post-" + id);
var context = document.getElementById("context-" + id);
if (pre.style.display == 'block') {
pre.style.display = 'none';
post.style.display = 'none';
context.style.background = "none";
} else {
pre.style.display = 'block';
post.style.display = 'block';
context.style.background = "#fffed9";
}
}
function toggleBacktrace(){
var bt = document.getElementById("backtrace");
var toggler = document.getElementById("expando");
if (bt.className == 'condensed') {
bt.className = 'expanded';
toggler.innerHTML = "(condense)";
} else {
bt.className = 'condensed';
toggler.innerHTML = "(expand)";
}
}
//-->
</script>
<style type="text/css" media="screen">
* {margin: 0; padding: 0; border: 0; outline: 0;}
div.clear {clear: both;}
body {background: #EEEEEE; margin: 0; padding: 0;
font-family: 'Lucida Grande', 'Lucida Sans Unicode',
'Garuda';}
code {font-family: 'Lucida Console', monospace;
font-size: 12px;}
li {height: 18px;}
ul {list-style: none; margin: 0; padding: 0;}
ol:hover {cursor: pointer;}
ol li {white-space: pre;}
#explanation {font-size: 12px; color: #666666;
margin: 20px 0 0 100px;}
/* WRAP */
#wrap {width: 1000px; background: #FFFFFF; margin: 0 auto;
padding: 30px 50px 20px 50px;
border-left: 1px solid #DDDDDD;
border-right: 1px solid #DDDDDD;}
/* HEADER */
#header {margin: 0 auto 25px auto;}
#header img {float: left;}
#header #summary {float: left; margin: 12px 0 0 20px; width:660px;
font-family: 'Lucida Grande', 'Lucida Sans Unicode';}
h1 {margin: 0; font-size: 36px; color: #981919;}
h2 {margin: 0; font-size: 22px; color: #333333;}
#header ul {margin: 0; font-size: 12px; color: #666666;}
#header ul li strong{color: #444444;}
#header ul li {display: inline; padding: 0 10px;}
#header ul li.first {padding-left: 0;}
#header ul li.last {border: 0; padding-right: 0;}
/* BODY */
#backtrace,
#get,
#post,
#cookies,
#rack {width: 980px; margin: 0 auto 10px auto;}
p#nav {float: right; font-size: 14px;}
/* BACKTRACE */
a#expando {float: left; padding-left: 5px; color: #666666;
font-size: 14px; text-decoration: none; cursor: pointer;}
a#expando:hover {text-decoration: underline;}
h3 {float: left; width: 100px; margin-bottom: 10px;
color: #981919; font-size: 14px; font-weight: bold;}
#nav a {color: #666666; text-decoration: none; padding: 0 5px;}
#backtrace li.frame-info {background: #f7f7f7; padding-left: 10px;
font-size: 12px; color: #333333;}
#backtrace ul {list-style-position: outside; border: 1px solid #E9E9E9;
border-bottom: 0;}
#backtrace ol {width: 920px; margin-left: 50px;
font: 10px 'Lucida Console', monospace; color: #666666;}
#backtrace ol li {border: 0; border-left: 1px solid #E9E9E9;
padding: 2px 0;}
#backtrace ol code {font-size: 10px; color: #555555; padding-left: 5px;}
#backtrace-ul li {border-bottom: 1px solid #E9E9E9; height: auto;
padding: 3px 0;}
#backtrace-ul .code {padding: 6px 0 4px 0;}
#backtrace.condensed .system,
#backtrace.condensed .framework {display:none;}
/* REQUEST DATA */
p.no-data {padding-top: 2px; font-size: 12px; color: #666666;}
table.req {width: 980px; text-align: left; font-size: 12px;
color: #666666; padding: 0; border-spacing: 0;
border: 1px solid #EEEEEE; border-bottom: 0;
border-left: 0;
clear:both}
table.req tr th {padding: 2px 10px; font-weight: bold;
background: #F7F7F7; border-bottom: 1px solid #EEEEEE;
border-left: 1px solid #EEEEEE;}
table.req tr td {padding: 2px 20px 2px 10px;
border-bottom: 1px solid #EEEEEE;
border-left: 1px solid #EEEEEE;}
/* HIDE PRE/POST CODE AT START */
.pre-context,
.post-context {display: none;}
table td.code {width:750px}
table td.code div {width:750px;overflow:hidden}
</style>
</head>
<body>
<div id="wrap">
<div id="header">
<img src="/__sinatra__/500.png" alt="application error" height="161" width="313" />
<div id="summary">
<h1><strong>Gemstash::GemYanker::YankedVersionError</strong> at <strong>&#x2F;api&#x2F;v1&#x2F;gems&#x2F;yank
</strong></h1>
<h2>Cannot yank an already yanked version!</h2>
<ul>
<li class="first"><strong>file:</strong> <code>
gem_yanker.rb</code></li>
<li><strong>location:</strong> <code>block in update_database
</code></li>
<li class="last"><strong>line:
</strong> 64</li>
</ul>
</div>
<div class="clear"></div>
</div>
<div id="backtrace" class='condensed'>
<h3>BACKTRACE</h3>
<p><a href="#" id="expando"
onclick="toggleBacktrace(); return false">(expand)</a></p>
<p id="nav"><strong>JUMP TO:</strong>
<a href="#get-info">GET</a>
<a href="#post-info">POST</a>
<a href="#cookie-info">COOKIES</a>
<a href="#env-info">ENV</a>
</p>
<div class="clear"></div>
<ul id="backtrace-ul">
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;gem_yanker.rb</code> in
<code><strong>block in update_database</strong></code>
</li>
<li class="code app">
<ol start="57"
class="pre-context" id="pre-1"
onclick="toggle(1);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def update_database
</code></li>
<li class="pre-context-line"><code> gemstash_env.db.transaction do
</code></li>
<li class="pre-context-line"><code> raise UnknownGemError, &quot;Cannot yank an unknown gem!&quot; unless Gemstash::DB::Rubygem[name: @gem_name]
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> version = Gemstash::DB::Version.find_by_full_name(full_name)
</code></li>
<li class="pre-context-line"><code> raise UnknownVersionError, &quot;Cannot yank an unknown version!&quot; unless version
</code></li>
</ol>
<ol start="64" class="context" id="1"
onclick="toggle(1);">
<li class="context-line" id="context-1"><code> raise YankedVersionError, &quot;Cannot yank an already yanked version!&quot; unless version.indexed</code></li>
</ol>
<ol start="65" class="post-context"
id="post-1" onclick="toggle(1);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> version.deindex
</code></li>
<li class="post-context-line"><code> storage.resource(version.storage_id).update_properties(indexed: false)
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def invalidate_cache
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sequel-5.32.0&#x2F;lib&#x2F;sequel&#x2F;database&#x2F;transactions.rb</code> in
<code><strong>_transaction</strong></code>
</li>
<li class="code system">
<ol start="247"
class="pre-context" id="pre-2"
onclick="toggle(2);">
<li class="pre-context-line"><code> ret = yield(conn)
</code></li>
<li class="pre-context-line"><code> rescue Exception =&gt; e1
</code></li>
<li class="pre-context-line"><code> raise e1
</code></li>
<li class="pre-context-line"><code> ensure
</code></li>
<li class="pre-context-line"><code> raise ::Sequel::Rollback unless e1
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> else
</code></li>
</ol>
<ol start="254" class="context" id="2"
onclick="toggle(2);">
<li class="context-line" id="context-2"><code> yield(conn)</code></li>
</ol>
<ol start="255" class="post-context"
id="post-2" onclick="toggle(2);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> rescue Exception =&gt; e
</code></li>
<li class="post-context-line"><code> begin
</code></li>
<li class="post-context-line"><code> rollback_transaction(conn, opts)
</code></li>
<li class="post-context-line"><code> rescue Exception =&gt; e3
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> transaction_error(e, :conn=&gt;conn, :rollback=&gt;rollback)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sequel-5.32.0&#x2F;lib&#x2F;sequel&#x2F;database&#x2F;transactions.rb</code> in
<code><strong>block in transaction</strong></code>
</li>
<li class="code system">
<ol start="222"
class="pre-context" id="pre-3"
onclick="toggle(3);">
<li class="pre-context-line"><code> if opts[:retrying]
</code></li>
<li class="pre-context-line"><code> raise Sequel::Error, &quot;cannot set :retry_on options if you are already inside a transaction&quot;
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> return yield(conn)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
</ol>
<ol start="229" class="context" id="3"
onclick="toggle(3);">
<li class="context-line" id="context-3"><code> _transaction(conn, opts, &amp;block)</code></li>
</ol>
<ol start="230" class="post-context"
id="post-3" onclick="toggle(3);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> private
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # Internal generic transaction method. Any exception raised by the given
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sequel-5.32.0&#x2F;lib&#x2F;sequel&#x2F;connection_pool&#x2F;threaded.rb</code> in
<code><strong>hold</strong></code>
</li>
<li class="code system">
<ol start="85"
class="pre-context" id="pre-4"
onclick="toggle(4);">
<li class="pre-context-line"><code> def hold(server=nil)
</code></li>
<li class="pre-context-line"><code> t = Sequel.current
</code></li>
<li class="pre-context-line"><code> if conn = owned_connection(t)
</code></li>
<li class="pre-context-line"><code> return yield(conn)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> begin
</code></li>
<li class="pre-context-line"><code> conn = acquire(t)
</code></li>
</ol>
<ol start="92" class="context" id="4"
onclick="toggle(4);">
<li class="context-line" id="context-4"><code> yield conn</code></li>
</ol>
<ol start="93" class="post-context"
id="post-4" onclick="toggle(4);">
<li class="post-context-line"><code> rescue Sequel::DatabaseDisconnectError, *@error_classes =&gt; e
</code></li>
<li class="post-context-line"><code> if disconnect_error?(e)
</code></li>
<li class="post-context-line"><code> oconn = conn
</code></li>
<li class="post-context-line"><code> conn = nil
</code></li>
<li class="post-context-line"><code> disconnect_connection(oconn) if oconn
</code></li>
<li class="post-context-line"><code> sync do
</code></li>
<li class="post-context-line"><code> @allocated.delete(t)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sequel-5.32.0&#x2F;lib&#x2F;sequel&#x2F;database&#x2F;connecting.rb</code> in
<code><strong>synchronize</strong></code>
</li>
<li class="code system">
<ol start="263"
class="pre-context" id="pre-5"
onclick="toggle(5);">
<li class="pre-context-line"><code> # If a server option is given, acquires a connection for that specific
</code></li>
<li class="pre-context-line"><code> # server, instead of the :default server.
</code></li>
<li class="pre-context-line"><code> #
</code></li>
<li class="pre-context-line"><code> # DB.synchronize do |conn|
</code></li>
<li class="pre-context-line"><code> # # ...
</code></li>
<li class="pre-context-line"><code> # end
</code></li>
<li class="pre-context-line"><code> def synchronize(server=nil, &amp;block)
</code></li>
</ol>
<ol start="270" class="context" id="5"
onclick="toggle(5);">
<li class="context-line" id="context-5"><code> @pool.hold(server || :default, &amp;block)</code></li>
</ol>
<ol start="271" class="post-context"
id="post-5" onclick="toggle(5);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # Attempts to acquire a database connection. Returns true if successful.
</code></li>
<li class="post-context-line"><code> # Will probably raise an Error if unsuccessful. If a server argument
</code></li>
<li class="post-context-line"><code> # is given, attempts to acquire a database connection to the given
</code></li>
<li class="post-context-line"><code> # server&#x2F;shard.
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sequel-5.32.0&#x2F;lib&#x2F;sequel&#x2F;database&#x2F;transactions.rb</code> in
<code><strong>transaction</strong></code>
</li>
<li class="code system">
<ol start="188"
class="pre-context" id="pre-6"
onclick="toggle(6);">
<li class="pre-context-line"><code> if tot_retries.nil? || num_retries &lt;= tot_retries
</code></li>
<li class="pre-context-line"><code> opts[:before_retry].call(num_retries, e) if opts[:before_retry]
</code></li>
<li class="pre-context-line"><code> retry
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> raise
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> else
</code></li>
</ol>
<ol start="195" class="context" id="6"
onclick="toggle(6);">
<li class="context-line" id="context-6"><code> synchronize(opts[:server]) do |conn|</code></li>
</ol>
<ol start="196" class="post-context"
id="post-6" onclick="toggle(6);">
<li class="post-context-line"><code> if opts[:savepoint] == :only
</code></li>
<li class="post-context-line"><code> if supports_savepoints?
</code></li>
<li class="post-context-line"><code> if _trans(conn)
</code></li>
<li class="post-context-line"><code> opts[:savepoint] = true
</code></li>
<li class="post-context-line"><code> else
</code></li>
<li class="post-context-line"><code> return yield(conn)
</code></li>
<li class="post-context-line"><code> end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;gem_yanker.rb</code> in
<code><strong>update_database</strong></code>
</li>
<li class="code app">
<ol start="52"
class="pre-context" id="pre-7"
onclick="toggle(7);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def check_auth
</code></li>
<li class="pre-context-line"><code> @auth.check(&quot;yank&quot;)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def update_database
</code></li>
</ol>
<ol start="59" class="context" id="7"
onclick="toggle(7);">
<li class="context-line" id="context-7"><code> gemstash_env.db.transaction do</code></li>
</ol>
<ol start="60" class="post-context"
id="post-7" onclick="toggle(7);">
<li class="post-context-line"><code> raise UnknownGemError, &quot;Cannot yank an unknown gem!&quot; unless Gemstash::DB::Rubygem[name: @gem_name]
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> version = Gemstash::DB::Version.find_by_full_name(full_name)
</code></li>
<li class="post-context-line"><code> raise UnknownVersionError, &quot;Cannot yank an unknown version!&quot; unless version
</code></li>
<li class="post-context-line"><code> raise YankedVersionError, &quot;Cannot yank an already yanked version!&quot; unless version.indexed
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> version.deindex
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;gem_yanker.rb</code> in
<code><strong>serve</strong></code>
</li>
<li class="code app">
<ol start="29"
class="pre-context" id="pre-8"
onclick="toggle(8);">
<li class="pre-context-line"><code> @auth = auth
</code></li>
<li class="pre-context-line"><code> @gem_name = gem_name
</code></li>
<li class="pre-context-line"><code> @slug = slug
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def serve
</code></li>
<li class="pre-context-line"><code> check_auth
</code></li>
</ol>
<ol start="36" class="context" id="8"
onclick="toggle(8);">
<li class="context-line" id="context-8"><code> update_database</code></li>
</ol>
<ol start="37" class="post-context"
id="post-8" onclick="toggle(8);">
<li class="post-context-line"><code> invalidate_cache
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> private
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def storage
</code></li>
<li class="post-context-line"><code> if gemstash_env.config[:storage_adapter] == &#x27;local&#x27;
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;gem_yanker.rb</code> in
<code><strong>serve</strong></code>
</li>
<li class="code app">
<ol start="18"
class="pre-context" id="pre-9"
onclick="toggle(9);">
<li class="pre-context-line"><code> # This error is thrown when yanking an already yanked gem version.
</code></li>
<li class="pre-context-line"><code> class YankedVersionError &lt; StandardError
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def self.serve(app)
</code></li>
<li class="pre-context-line"><code> gem_name = app.params[:gem_name]
</code></li>
<li class="pre-context-line"><code> slug = Gemstash::DB::Version.slug(app.params)
</code></li>
</ol>
<ol start="25" class="context" id="9"
onclick="toggle(9);">
<li class="context-line" id="context-9"><code> new(app.auth, gem_name, slug).serve</code></li>
</ol>
<ol start="26" class="post-context"
id="post-9" onclick="toggle(9);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def initialize(auth, gem_name, slug)
</code></li>
<li class="post-context-line"><code> @auth = auth
</code></li>
<li class="post-context-line"><code> @gem_name = gem_name
</code></li>
<li class="post-context-line"><code> @slug = slug
</code></li>
<li class="post-context-line"><code> end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;gem_source&#x2F;private_source.rb</code> in
<code><strong>block in protected</strong></code>
</li>
<li class="code app">
<ol start="93"
class="pre-context" id="pre-10"
onclick="toggle(10);">
<li class="pre-context-line"><code> params[:prerelease] = true
</code></li>
<li class="pre-context-line"><code> protected(Gemstash::SpecsBuilder)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> private
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def protected(servable)
</code></li>
</ol>
<ol start="100" class="context" id="10"
onclick="toggle(10);">
<li class="context-line" id="context-10"><code> authorization.protect(self) { servable.serve(self) }</code></li>
</ol>
<ol start="101" class="post-context"
id="post-10" onclick="toggle(10);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def authorization
</code></li>
<li class="post-context-line"><code> Gemstash::ApiKeyAuthorization
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def dependencies
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;api_key_authorization.rb</code> in
<code><strong>protect</strong></code>
</li>
<li class="code app">
<ol start="8"
class="pre-context" id="pre-11"
onclick="toggle(11);">
<li class="pre-context-line"><code> def initialize(key)
</code></li>
<li class="pre-context-line"><code> @key = key
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def self.protect(app, &amp;block)
</code></li>
<li class="pre-context-line"><code> key = parse_authorization(app.request.env)
</code></li>
<li class="pre-context-line"><code> app.auth = new(key)
</code></li>
</ol>
<ol start="15" class="context" id="11"
onclick="toggle(11);">
<li class="context-line" id="context-11"><code> yield</code></li>
</ol>
<ol start="16" class="post-context"
id="post-11" onclick="toggle(11);">
<li class="post-context-line"><code> rescue Gemstash::NotAuthorizedError =&gt; e
</code></li>
<li class="post-context-line"><code> app.headers[&quot;WWW-Authenticate&quot;] = &quot;Basic realm=\&quot;Gemstash Private Gems\&quot;&quot;
</code></li>
<li class="post-context-line"><code> app.halt 401, e.message
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def self.parse_authorization(request_env)
</code></li>
<li class="post-context-line"><code> http_auth = Rack::Auth::Basic::Request.new(request_env)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;gem_source&#x2F;private_source.rb</code> in
<code><strong>protected</strong></code>
</li>
<li class="code app">
<ol start="93"
class="pre-context" id="pre-12"
onclick="toggle(12);">
<li class="pre-context-line"><code> params[:prerelease] = true
</code></li>
<li class="pre-context-line"><code> protected(Gemstash::SpecsBuilder)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> private
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def protected(servable)
</code></li>
</ol>
<ol start="100" class="context" id="12"
onclick="toggle(12);">
<li class="context-line" id="context-12"><code> authorization.protect(self) { servable.serve(self) }</code></li>
</ol>
<ol start="101" class="post-context"
id="post-12" onclick="toggle(12);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def authorization
</code></li>
<li class="post-context-line"><code> Gemstash::ApiKeyAuthorization
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def dependencies
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;gem_source&#x2F;private_source.rb</code> in
<code><strong>serve_yank</strong></code>
</li>
<li class="code app">
<ol start="27"
class="pre-context" id="pre-13"
onclick="toggle(13);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def serve_add_gem
</code></li>
<li class="pre-context-line"><code> protected(Gemstash::GemPusher)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def serve_yank
</code></li>
</ol>
<ol start="34" class="context" id="13"
onclick="toggle(13);">
<li class="context-line" id="context-13"><code> protected(Gemstash::GemYanker)</code></li>
</ol>
<ol start="35" class="post-context"
id="post-13" onclick="toggle(13);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def serve_add_spec_json
</code></li>
<li class="post-context-line"><code> halt 403, &quot;Not yet supported&quot;
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def serve_remove_spec_json
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;web.rb</code> in
<code><strong>block in &lt;class:Web&gt;</strong></code>
</li>
<li class="code app">
<ol start="46"
class="pre-context" id="pre-14"
onclick="toggle(14);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> post &quot;&#x2F;api&#x2F;v1&#x2F;gems&quot; do
</code></li>
<li class="pre-context-line"><code> @gem_source.serve_add_gem
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> delete &quot;&#x2F;api&#x2F;v1&#x2F;gems&#x2F;yank&quot; do
</code></li>
</ol>
<ol start="53" class="context" id="14"
onclick="toggle(14);">
<li class="context-line" id="context-14"><code> @gem_source.serve_yank</code></li>
</ol>
<ol start="54" class="post-context"
id="post-14" onclick="toggle(14);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> post &quot;&#x2F;api&#x2F;v1&#x2F;add_spec.json&quot; do
</code></li>
<li class="post-context-line"><code> @gem_source.serve_add_spec_json
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> post &quot;&#x2F;api&#x2F;v1&#x2F;remove_spec.json&quot; do
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code framework">
<ol start="1629"
class="pre-context" id="pre-15"
onclick="toggle(15);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> pattern = compile(path, route_mustermann_opts)
</code></li>
<li class="pre-context-line"><code> method_name = &quot;#{verb} #{path}&quot;
</code></li>
<li class="pre-context-line"><code> unbound_method = generate_method(method_name, &amp;block)
</code></li>
<li class="pre-context-line"><code> conditions, @conditions = @conditions, []
</code></li>
<li class="pre-context-line"><code> wrapper = block.arity != 0 ?
</code></li>
<li class="pre-context-line"><code> proc { |a, p| unbound_method.bind(a).call(*p) } :
</code></li>
</ol>
<ol start="1636" class="context" id="15"
onclick="toggle(15);">
<li class="context-line" id="context-15"><code> proc { |a, p| unbound_method.bind(a).call }</code></li>
</ol>
<ol start="1637" class="post-context"
id="post-15" onclick="toggle(15);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> [ pattern, conditions, wrapper ]
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def compile(path, route_mustermann_opts = {})
</code></li>
<li class="post-context-line"><code> Mustermann.new(path, **mustermann_opts.merge(route_mustermann_opts))
</code></li>
<li class="post-context-line"><code> end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in compile!</strong></code>
</li>
<li class="code framework">
<ol start="1629"
class="pre-context" id="pre-16"
onclick="toggle(16);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> pattern = compile(path, route_mustermann_opts)
</code></li>
<li class="pre-context-line"><code> method_name = &quot;#{verb} #{path}&quot;
</code></li>
<li class="pre-context-line"><code> unbound_method = generate_method(method_name, &amp;block)
</code></li>
<li class="pre-context-line"><code> conditions, @conditions = @conditions, []
</code></li>
<li class="pre-context-line"><code> wrapper = block.arity != 0 ?
</code></li>
<li class="pre-context-line"><code> proc { |a, p| unbound_method.bind(a).call(*p) } :
</code></li>
</ol>
<ol start="1636" class="context" id="16"
onclick="toggle(16);">
<li class="context-line" id="context-16"><code> proc { |a, p| unbound_method.bind(a).call }</code></li>
</ol>
<ol start="1637" class="post-context"
id="post-16" onclick="toggle(16);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> [ pattern, conditions, wrapper ]
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def compile(path, route_mustermann_opts = {})
</code></li>
<li class="post-context-line"><code> Mustermann.new(path, **mustermann_opts.merge(route_mustermann_opts))
</code></li>
<li class="post-context-line"><code> end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block (3 levels) in route!</strong></code>
</li>
<li class="code framework">
<ol start="980"
class="pre-context" id="pre-17"
onclick="toggle(17);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run routes defined on the class and all superclasses.
</code></li>
<li class="pre-context-line"><code> def route!(base = settings, pass_block = nil)
</code></li>
<li class="pre-context-line"><code> if routes = base.routes[@request.request_method]
</code></li>
<li class="pre-context-line"><code> routes.each do |pattern, conditions, block|
</code></li>
<li class="pre-context-line"><code> returned_pass_block = process_route(pattern, conditions) do |*args|
</code></li>
<li class="pre-context-line"><code> env[&#x27;sinatra.route&#x27;] = &quot;#{@request.request_method} #{pattern}&quot;
</code></li>
</ol>
<ol start="987" class="context" id="17"
onclick="toggle(17);">
<li class="context-line" id="context-17"><code> route_eval { block[*args] }</code></li>
</ol>
<ol start="988" class="post-context"
id="post-17" onclick="toggle(17);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # don&#x27;t wipe out pass_block in superclass
</code></li>
<li class="post-context-line"><code> pass_block = returned_pass_block if returned_pass_block
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>route_eval</strong></code>
</li>
<li class="code framework">
<ol start="999"
class="pre-context" id="pre-18"
onclick="toggle(18);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> route_eval(&amp;pass_block) if pass_block
</code></li>
<li class="pre-context-line"><code> route_missing
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run a route block and throw :halt with the result.
</code></li>
<li class="pre-context-line"><code> def route_eval
</code></li>
</ol>
<ol start="1006" class="context" id="18"
onclick="toggle(18);">
<li class="context-line" id="context-18"><code> throw :halt, yield</code></li>
</ol>
<ol start="1007" class="post-context"
id="post-18" onclick="toggle(18);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # If the current request matches pattern and conditions, fill params
</code></li>
<li class="post-context-line"><code> # with keys and call the given block.
</code></li>
<li class="post-context-line"><code> # Revert params afterwards.
</code></li>
<li class="post-context-line"><code> #
</code></li>
<li class="post-context-line"><code> # Returns pass block.
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block (2 levels) in route!</strong></code>
</li>
<li class="code framework">
<ol start="980"
class="pre-context" id="pre-19"
onclick="toggle(19);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run routes defined on the class and all superclasses.
</code></li>
<li class="pre-context-line"><code> def route!(base = settings, pass_block = nil)
</code></li>
<li class="pre-context-line"><code> if routes = base.routes[@request.request_method]
</code></li>
<li class="pre-context-line"><code> routes.each do |pattern, conditions, block|
</code></li>
<li class="pre-context-line"><code> returned_pass_block = process_route(pattern, conditions) do |*args|
</code></li>
<li class="pre-context-line"><code> env[&#x27;sinatra.route&#x27;] = &quot;#{@request.request_method} #{pattern}&quot;
</code></li>
</ol>
<ol start="987" class="context" id="19"
onclick="toggle(19);">
<li class="context-line" id="context-19"><code> route_eval { block[*args] }</code></li>
</ol>
<ol start="988" class="post-context"
id="post-19" onclick="toggle(19);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # don&#x27;t wipe out pass_block in superclass
</code></li>
<li class="post-context-line"><code> pass_block = returned_pass_block if returned_pass_block
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in process_route</strong></code>
</li>
<li class="code framework">
<ol start="1028"
class="pre-context" id="pre-20"
onclick="toggle(20);">
<li class="pre-context-line"><code> @params[:captures] = force_encoding(captures) unless captures.nil? || captures.empty?
</code></li>
<li class="pre-context-line"><code> else
</code></li>
<li class="pre-context-line"><code> values += params.values.flatten
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> catch(:pass) do
</code></li>
<li class="pre-context-line"><code> conditions.each { |c| throw :pass if c.bind(self).call == false }
</code></li>
</ol>
<ol start="1035" class="context" id="20"
onclick="toggle(20);">
<li class="context-line" id="context-20"><code> block ? block[self, values] : yield(self, values)</code></li>
</ol>
<ol start="1036" class="post-context"
id="post-20" onclick="toggle(20);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> rescue
</code></li>
<li class="post-context-line"><code> @env[&#x27;sinatra.error.params&#x27;] = @params
</code></li>
<li class="post-context-line"><code> raise
</code></li>
<li class="post-context-line"><code> ensure
</code></li>
<li class="post-context-line"><code> params ||= {}
</code></li>
<li class="post-context-line"><code> params.each { |k, _| @params.delete(k) } unless @env[&#x27;sinatra.error.params&#x27;]
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>catch</strong></code>
</li>
<li class="code framework">
<ol start="1026"
class="pre-context" id="pre-21"
onclick="toggle(21);">
<li class="pre-context-line"><code> captures = pattern.match(route).captures.map { |c| URI_INSTANCE.unescape(c) if c }
</code></li>
<li class="pre-context-line"><code> values += captures
</code></li>
<li class="pre-context-line"><code> @params[:captures] = force_encoding(captures) unless captures.nil? || captures.empty?
</code></li>
<li class="pre-context-line"><code> else
</code></li>
<li class="pre-context-line"><code> values += params.values.flatten
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
</ol>
<ol start="1033" class="context" id="21"
onclick="toggle(21);">
<li class="context-line" id="context-21"><code> catch(:pass) do</code></li>
</ol>
<ol start="1034" class="post-context"
id="post-21" onclick="toggle(21);">
<li class="post-context-line"><code> conditions.each { |c| throw :pass if c.bind(self).call == false }
</code></li>
<li class="post-context-line"><code> block ? block[self, values] : yield(self, values)
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> rescue
</code></li>
<li class="post-context-line"><code> @env[&#x27;sinatra.error.params&#x27;] = @params
</code></li>
<li class="post-context-line"><code> raise
</code></li>
<li class="post-context-line"><code> ensure
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>process_route</strong></code>
</li>
<li class="code framework">
<ol start="1026"
class="pre-context" id="pre-22"
onclick="toggle(22);">
<li class="pre-context-line"><code> captures = pattern.match(route).captures.map { |c| URI_INSTANCE.unescape(c) if c }
</code></li>
<li class="pre-context-line"><code> values += captures
</code></li>
<li class="pre-context-line"><code> @params[:captures] = force_encoding(captures) unless captures.nil? || captures.empty?
</code></li>
<li class="pre-context-line"><code> else
</code></li>
<li class="pre-context-line"><code> values += params.values.flatten
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
</ol>
<ol start="1033" class="context" id="22"
onclick="toggle(22);">
<li class="context-line" id="context-22"><code> catch(:pass) do</code></li>
</ol>
<ol start="1034" class="post-context"
id="post-22" onclick="toggle(22);">
<li class="post-context-line"><code> conditions.each { |c| throw :pass if c.bind(self).call == false }
</code></li>
<li class="post-context-line"><code> block ? block[self, values] : yield(self, values)
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> rescue
</code></li>
<li class="post-context-line"><code> @env[&#x27;sinatra.error.params&#x27;] = @params
</code></li>
<li class="post-context-line"><code> raise
</code></li>
<li class="post-context-line"><code> ensure
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in route!</strong></code>
</li>
<li class="code framework">
<ol start="978"
class="pre-context" id="pre-23"
onclick="toggle(23);">
<li class="pre-context-line"><code> base.filters[type].each { |args| process_route(*args) }
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run routes defined on the class and all superclasses.
</code></li>
<li class="pre-context-line"><code> def route!(base = settings, pass_block = nil)
</code></li>
<li class="pre-context-line"><code> if routes = base.routes[@request.request_method]
</code></li>
<li class="pre-context-line"><code> routes.each do |pattern, conditions, block|
</code></li>
</ol>
<ol start="985" class="context" id="23"
onclick="toggle(23);">
<li class="context-line" id="context-23"><code> returned_pass_block = process_route(pattern, conditions) do |*args|</code></li>
</ol>
<ol start="986" class="post-context"
id="post-23" onclick="toggle(23);">
<li class="post-context-line"><code> env[&#x27;sinatra.route&#x27;] = &quot;#{@request.request_method} #{pattern}&quot;
</code></li>
<li class="post-context-line"><code> route_eval { block[*args] }
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # don&#x27;t wipe out pass_block in superclass
</code></li>
<li class="post-context-line"><code> pass_block = returned_pass_block if returned_pass_block
</code></li>
<li class="post-context-line"><code> end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>each</strong></code>
</li>
<li class="code framework">
<ol start="977"
class="pre-context" id="pre-24"
onclick="toggle(24);">
<li class="pre-context-line"><code> filter! type, base.superclass if base.superclass.respond_to?(:filters)
</code></li>
<li class="pre-context-line"><code> base.filters[type].each { |args| process_route(*args) }
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run routes defined on the class and all superclasses.
</code></li>
<li class="pre-context-line"><code> def route!(base = settings, pass_block = nil)
</code></li>
<li class="pre-context-line"><code> if routes = base.routes[@request.request_method]
</code></li>
</ol>
<ol start="984" class="context" id="24"
onclick="toggle(24);">
<li class="context-line" id="context-24"><code> routes.each do |pattern, conditions, block|</code></li>
</ol>
<ol start="985" class="post-context"
id="post-24" onclick="toggle(24);">
<li class="post-context-line"><code> returned_pass_block = process_route(pattern, conditions) do |*args|
</code></li>
<li class="post-context-line"><code> env[&#x27;sinatra.route&#x27;] = &quot;#{@request.request_method} #{pattern}&quot;
</code></li>
<li class="post-context-line"><code> route_eval { block[*args] }
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # don&#x27;t wipe out pass_block in superclass
</code></li>
<li class="post-context-line"><code> pass_block = returned_pass_block if returned_pass_block
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>route!</strong></code>
</li>
<li class="code framework">
<ol start="977"
class="pre-context" id="pre-25"
onclick="toggle(25);">
<li class="pre-context-line"><code> filter! type, base.superclass if base.superclass.respond_to?(:filters)
</code></li>
<li class="pre-context-line"><code> base.filters[type].each { |args| process_route(*args) }
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run routes defined on the class and all superclasses.
</code></li>
<li class="pre-context-line"><code> def route!(base = settings, pass_block = nil)
</code></li>
<li class="pre-context-line"><code> if routes = base.routes[@request.request_method]
</code></li>
</ol>
<ol start="984" class="context" id="25"
onclick="toggle(25);">
<li class="context-line" id="context-25"><code> routes.each do |pattern, conditions, block|</code></li>
</ol>
<ol start="985" class="post-context"
id="post-25" onclick="toggle(25);">
<li class="post-context-line"><code> returned_pass_block = process_route(pattern, conditions) do |*args|
</code></li>
<li class="post-context-line"><code> env[&#x27;sinatra.route&#x27;] = &quot;#{@request.request_method} #{pattern}&quot;
</code></li>
<li class="post-context-line"><code> route_eval { block[*args] }
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # don&#x27;t wipe out pass_block in superclass
</code></li>
<li class="post-context-line"><code> pass_block = returned_pass_block if returned_pass_block
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in dispatch!</strong></code>
</li>
<li class="code framework">
<ol start="1091"
class="pre-context" id="pre-26"
onclick="toggle(26);">
<li class="pre-context-line"><code> val = val.dup if val.frozen?
</code></li>
<li class="pre-context-line"><code> @params[key] = force_encoding(val)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> invoke do
</code></li>
<li class="pre-context-line"><code> static! if settings.static? &amp;&amp; (request.get? || request.head?)
</code></li>
<li class="pre-context-line"><code> filter! :before
</code></li>
</ol>
<ol start="1098" class="context" id="26"
onclick="toggle(26);">
<li class="context-line" id="context-26"><code> route!</code></li>
</ol>
<ol start="1099" class="post-context"
id="post-26" onclick="toggle(26);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> rescue ::Exception =&gt; boom
</code></li>
<li class="post-context-line"><code> invoke { handle_exception!(boom) }
</code></li>
<li class="post-context-line"><code> ensure
</code></li>
<li class="post-context-line"><code> begin
</code></li>
<li class="post-context-line"><code> filter! :after unless env[&#x27;sinatra.static_file&#x27;]
</code></li>
<li class="post-context-line"><code> rescue ::Exception =&gt; boom
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in invoke</strong></code>
</li>
<li class="code framework">
<ol start="1065"
class="pre-context" id="pre-27"
onclick="toggle(27);">
<li class="pre-context-line"><code> env[&#x27;sinatra.static_file&#x27;] = path
</code></li>
<li class="pre-context-line"><code> cache_control(*settings.static_cache_control) if settings.static_cache_control?
</code></li>
<li class="pre-context-line"><code> send_file path, options.merge(:disposition =&gt; nil)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run the block with &#x27;throw :halt&#x27; support and apply result to the response.
</code></li>
<li class="pre-context-line"><code> def invoke
</code></li>
</ol>
<ol start="1072" class="context" id="27"
onclick="toggle(27);">
<li class="context-line" id="context-27"><code> res = catch(:halt) { yield }</code></li>
</ol>
<ol start="1073" class="post-context"
id="post-27" onclick="toggle(27);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> res = [res] if Integer === res or String === res
</code></li>
<li class="post-context-line"><code> if Array === res and Integer === res.first
</code></li>
<li class="post-context-line"><code> res = res.dup
</code></li>
<li class="post-context-line"><code> status(res.shift)
</code></li>
<li class="post-context-line"><code> body(res.pop)
</code></li>
<li class="post-context-line"><code> headers(*res)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>catch</strong></code>
</li>
<li class="code framework">
<ol start="1065"
class="pre-context" id="pre-28"
onclick="toggle(28);">
<li class="pre-context-line"><code> env[&#x27;sinatra.static_file&#x27;] = path
</code></li>
<li class="pre-context-line"><code> cache_control(*settings.static_cache_control) if settings.static_cache_control?
</code></li>
<li class="pre-context-line"><code> send_file path, options.merge(:disposition =&gt; nil)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run the block with &#x27;throw :halt&#x27; support and apply result to the response.
</code></li>
<li class="pre-context-line"><code> def invoke
</code></li>
</ol>
<ol start="1072" class="context" id="28"
onclick="toggle(28);">
<li class="context-line" id="context-28"><code> res = catch(:halt) { yield }</code></li>
</ol>
<ol start="1073" class="post-context"
id="post-28" onclick="toggle(28);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> res = [res] if Integer === res or String === res
</code></li>
<li class="post-context-line"><code> if Array === res and Integer === res.first
</code></li>
<li class="post-context-line"><code> res = res.dup
</code></li>
<li class="post-context-line"><code> status(res.shift)
</code></li>
<li class="post-context-line"><code> body(res.pop)
</code></li>
<li class="post-context-line"><code> headers(*res)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>invoke</strong></code>
</li>
<li class="code framework">
<ol start="1065"
class="pre-context" id="pre-29"
onclick="toggle(29);">
<li class="pre-context-line"><code> env[&#x27;sinatra.static_file&#x27;] = path
</code></li>
<li class="pre-context-line"><code> cache_control(*settings.static_cache_control) if settings.static_cache_control?
</code></li>
<li class="pre-context-line"><code> send_file path, options.merge(:disposition =&gt; nil)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run the block with &#x27;throw :halt&#x27; support and apply result to the response.
</code></li>
<li class="pre-context-line"><code> def invoke
</code></li>
</ol>
<ol start="1072" class="context" id="29"
onclick="toggle(29);">
<li class="context-line" id="context-29"><code> res = catch(:halt) { yield }</code></li>
</ol>
<ol start="1073" class="post-context"
id="post-29" onclick="toggle(29);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> res = [res] if Integer === res or String === res
</code></li>
<li class="post-context-line"><code> if Array === res and Integer === res.first
</code></li>
<li class="post-context-line"><code> res = res.dup
</code></li>
<li class="post-context-line"><code> status(res.shift)
</code></li>
<li class="post-context-line"><code> body(res.pop)
</code></li>
<li class="post-context-line"><code> headers(*res)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>dispatch!</strong></code>
</li>
<li class="code framework">
<ol start="1088"
class="pre-context" id="pre-30"
onclick="toggle(30);">
<li class="pre-context-line"><code> # Avoid passing frozen string in force_encoding
</code></li>
<li class="pre-context-line"><code> @params.merge!(@request.params).each do |key, val|
</code></li>
<li class="pre-context-line"><code> next unless val.respond_to?(:force_encoding)
</code></li>
<li class="pre-context-line"><code> val = val.dup if val.frozen?
</code></li>
<li class="pre-context-line"><code> @params[key] = force_encoding(val)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
</ol>
<ol start="1095" class="context" id="30"
onclick="toggle(30);">
<li class="context-line" id="context-30"><code> invoke do</code></li>
</ol>
<ol start="1096" class="post-context"
id="post-30" onclick="toggle(30);">
<li class="post-context-line"><code> static! if settings.static? &amp;&amp; (request.get? || request.head?)
</code></li>
<li class="post-context-line"><code> filter! :before
</code></li>
<li class="post-context-line"><code> route!
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> rescue ::Exception =&gt; boom
</code></li>
<li class="post-context-line"><code> invoke { handle_exception!(boom) }
</code></li>
<li class="post-context-line"><code> ensure
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in call!</strong></code>
</li>
<li class="code framework">
<ol start="912"
class="pre-context" id="pre-31"
onclick="toggle(31);">
<li class="pre-context-line"><code> @env = env
</code></li>
<li class="pre-context-line"><code> @params = IndifferentHash.new
</code></li>
<li class="pre-context-line"><code> @request = Request.new(env)
</code></li>
<li class="pre-context-line"><code> @response = Response.new
</code></li>
<li class="pre-context-line"><code> template_cache.clear if settings.reload_templates
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> @response[&#x27;Content-Type&#x27;] = nil
</code></li>
</ol>
<ol start="919" class="context" id="31"
onclick="toggle(31);">
<li class="context-line" id="context-31"><code> invoke { dispatch! }</code></li>
</ol>
<ol start="920" class="post-context"
id="post-31" onclick="toggle(31);">
<li class="post-context-line"><code> invoke { error_block!(response.status) } unless @env[&#x27;sinatra.error&#x27;]
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> unless @response[&#x27;Content-Type&#x27;]
</code></li>
<li class="post-context-line"><code> if Array === body and body[0].respond_to? :content_type
</code></li>
<li class="post-context-line"><code> content_type body[0].content_type
</code></li>
<li class="post-context-line"><code> else
</code></li>
<li class="post-context-line"><code> content_type :html
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in invoke</strong></code>
</li>
<li class="code framework">
<ol start="1065"
class="pre-context" id="pre-32"
onclick="toggle(32);">
<li class="pre-context-line"><code> env[&#x27;sinatra.static_file&#x27;] = path
</code></li>
<li class="pre-context-line"><code> cache_control(*settings.static_cache_control) if settings.static_cache_control?
</code></li>
<li class="pre-context-line"><code> send_file path, options.merge(:disposition =&gt; nil)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run the block with &#x27;throw :halt&#x27; support and apply result to the response.
</code></li>
<li class="pre-context-line"><code> def invoke
</code></li>
</ol>
<ol start="1072" class="context" id="32"
onclick="toggle(32);">
<li class="context-line" id="context-32"><code> res = catch(:halt) { yield }</code></li>
</ol>
<ol start="1073" class="post-context"
id="post-32" onclick="toggle(32);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> res = [res] if Integer === res or String === res
</code></li>
<li class="post-context-line"><code> if Array === res and Integer === res.first
</code></li>
<li class="post-context-line"><code> res = res.dup
</code></li>
<li class="post-context-line"><code> status(res.shift)
</code></li>
<li class="post-context-line"><code> body(res.pop)
</code></li>
<li class="post-context-line"><code> headers(*res)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>catch</strong></code>
</li>
<li class="code framework">
<ol start="1065"
class="pre-context" id="pre-33"
onclick="toggle(33);">
<li class="pre-context-line"><code> env[&#x27;sinatra.static_file&#x27;] = path
</code></li>
<li class="pre-context-line"><code> cache_control(*settings.static_cache_control) if settings.static_cache_control?
</code></li>
<li class="pre-context-line"><code> send_file path, options.merge(:disposition =&gt; nil)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run the block with &#x27;throw :halt&#x27; support and apply result to the response.
</code></li>
<li class="pre-context-line"><code> def invoke
</code></li>
</ol>
<ol start="1072" class="context" id="33"
onclick="toggle(33);">
<li class="context-line" id="context-33"><code> res = catch(:halt) { yield }</code></li>
</ol>
<ol start="1073" class="post-context"
id="post-33" onclick="toggle(33);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> res = [res] if Integer === res or String === res
</code></li>
<li class="post-context-line"><code> if Array === res and Integer === res.first
</code></li>
<li class="post-context-line"><code> res = res.dup
</code></li>
<li class="post-context-line"><code> status(res.shift)
</code></li>
<li class="post-context-line"><code> body(res.pop)
</code></li>
<li class="post-context-line"><code> headers(*res)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>invoke</strong></code>
</li>
<li class="code framework">
<ol start="1065"
class="pre-context" id="pre-34"
onclick="toggle(34);">
<li class="pre-context-line"><code> env[&#x27;sinatra.static_file&#x27;] = path
</code></li>
<li class="pre-context-line"><code> cache_control(*settings.static_cache_control) if settings.static_cache_control?
</code></li>
<li class="pre-context-line"><code> send_file path, options.merge(:disposition =&gt; nil)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run the block with &#x27;throw :halt&#x27; support and apply result to the response.
</code></li>
<li class="pre-context-line"><code> def invoke
</code></li>
</ol>
<ol start="1072" class="context" id="34"
onclick="toggle(34);">
<li class="context-line" id="context-34"><code> res = catch(:halt) { yield }</code></li>
</ol>
<ol start="1073" class="post-context"
id="post-34" onclick="toggle(34);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> res = [res] if Integer === res or String === res
</code></li>
<li class="post-context-line"><code> if Array === res and Integer === res.first
</code></li>
<li class="post-context-line"><code> res = res.dup
</code></li>
<li class="post-context-line"><code> status(res.shift)
</code></li>
<li class="post-context-line"><code> body(res.pop)
</code></li>
<li class="post-context-line"><code> headers(*res)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>call!</strong></code>
</li>
<li class="code framework">
<ol start="912"
class="pre-context" id="pre-35"
onclick="toggle(35);">
<li class="pre-context-line"><code> @env = env
</code></li>
<li class="pre-context-line"><code> @params = IndifferentHash.new
</code></li>
<li class="pre-context-line"><code> @request = Request.new(env)
</code></li>
<li class="pre-context-line"><code> @response = Response.new
</code></li>
<li class="pre-context-line"><code> template_cache.clear if settings.reload_templates
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> @response[&#x27;Content-Type&#x27;] = nil
</code></li>
</ol>
<ol start="919" class="context" id="35"
onclick="toggle(35);">
<li class="context-line" id="context-35"><code> invoke { dispatch! }</code></li>
</ol>
<ol start="920" class="post-context"
id="post-35" onclick="toggle(35);">
<li class="post-context-line"><code> invoke { error_block!(response.status) } unless @env[&#x27;sinatra.error&#x27;]
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> unless @response[&#x27;Content-Type&#x27;]
</code></li>
<li class="post-context-line"><code> if Array === body and body[0].respond_to? :content_type
</code></li>
<li class="post-context-line"><code> content_type body[0].content_type
</code></li>
<li class="post-context-line"><code> else
</code></li>
<li class="post-context-line"><code> content_type :html
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code framework">
<ol start="901"
class="pre-context" id="pre-36"
onclick="toggle(36);">
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> @template_cache = Tilt::Cache.new
</code></li>
<li class="pre-context-line"><code> yield self if block_given?
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Rack call interface.
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="908" class="context" id="36"
onclick="toggle(36);">
<li class="context-line" id="context-36"><code> dup.call!(env)</code></li>
</ol>
<ol start="909" class="post-context"
id="post-36" onclick="toggle(36);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def call!(env) # :nodoc:
</code></li>
<li class="post-context-line"><code> @env = env
</code></li>
<li class="post-context-line"><code> @params = IndifferentHash.new
</code></li>
<li class="post-context-line"><code> @request = Request.new(env)
</code></li>
<li class="post-context-line"><code> @response = Response.new
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-protection-2.0.8.1&#x2F;lib&#x2F;rack&#x2F;protection&#x2F;xss_header.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="11"
class="pre-context" id="pre-37"
onclick="toggle(37);">
<li class="pre-context-line"><code> #
</code></li>
<li class="pre-context-line"><code> # Options:
</code></li>
<li class="pre-context-line"><code> # xss_mode:: How the browser should prevent the attack (default: :block)
</code></li>
<li class="pre-context-line"><code> class XSSHeader &lt; Base
</code></li>
<li class="pre-context-line"><code> default_options :xss_mode =&gt; :block, :nosniff =&gt; true
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="18" class="context" id="37"
onclick="toggle(37);">
<li class="context-line" id="context-37"><code> status, headers, body = @app.call(env)</code></li>
</ol>
<ol start="19" class="post-context"
id="post-37" onclick="toggle(37);">
<li class="post-context-line"><code> headers[&#x27;X-XSS-Protection&#x27;] ||= &quot;1; mode=#{options[:xss_mode]}&quot; if html? headers
</code></li>
<li class="post-context-line"><code> headers[&#x27;X-Content-Type-Options&#x27;] ||= &#x27;nosniff&#x27; if options[:nosniff]
</code></li>
<li class="post-context-line"><code> [status, headers, body]
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-protection-2.0.8.1&#x2F;lib&#x2F;rack&#x2F;protection&#x2F;path_traversal.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="9"
class="pre-context" id="pre-38"
onclick="toggle(38);">
<li class="pre-context-line"><code> #
</code></li>
<li class="pre-context-line"><code> # Unescapes &#x27;&#x2F;&#x27; and &#x27;.&#x27;, expands +path_info+.
</code></li>
<li class="pre-context-line"><code> # Thus &lt;tt&gt;GET &#x2F;foo&#x2F;%2e%2e%2fbar&lt;&#x2F;tt&gt; becomes &lt;tt&gt;GET &#x2F;bar&lt;&#x2F;tt&gt;.
</code></li>
<li class="pre-context-line"><code> class PathTraversal &lt; Base
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> path_was = env[&quot;PATH_INFO&quot;]
</code></li>
<li class="pre-context-line"><code> env[&quot;PATH_INFO&quot;] = cleanup path_was if path_was &amp;&amp; !path_was.empty?
</code></li>
</ol>
<ol start="16" class="context" id="38"
onclick="toggle(38);">
<li class="context-line" id="context-38"><code> app.call env</code></li>
</ol>
<ol start="17" class="post-context"
id="post-38" onclick="toggle(38);">
<li class="post-context-line"><code> ensure
</code></li>
<li class="post-context-line"><code> env[&quot;PATH_INFO&quot;] = path_was
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def cleanup(path)
</code></li>
<li class="post-context-line"><code> encoding = path.encoding
</code></li>
<li class="post-context-line"><code> dot = &#x27;.&#x27;.encode(encoding)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-protection-2.0.8.1&#x2F;lib&#x2F;rack&#x2F;protection&#x2F;json_csrf.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="19"
class="pre-context" id="pre-39"
onclick="toggle(39);">
<li class="pre-context-line"><code> class JsonCsrf &lt; Base
</code></li>
<li class="pre-context-line"><code> default_options :allow_if =&gt; nil
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> alias react deny
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> request = Request.new(env)
</code></li>
</ol>
<ol start="26" class="context" id="39"
onclick="toggle(39);">
<li class="context-line" id="context-39"><code> status, headers, body = app.call(env)</code></li>
</ol>
<ol start="27" class="post-context"
id="post-39" onclick="toggle(39);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> if has_vector?(request, headers)
</code></li>
<li class="post-context-line"><code> warn env, &quot;attack prevented by #{self.class}&quot;
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> react_and_close(env, body) or [status, headers, body]
</code></li>
<li class="post-context-line"><code> else
</code></li>
<li class="post-context-line"><code> [status, headers, body]
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-protection-2.0.8.1&#x2F;lib&#x2F;rack&#x2F;protection&#x2F;base.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="43"
class="pre-context" id="pre-40"
onclick="toggle(40);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> unless accepts? env
</code></li>
<li class="pre-context-line"><code> instrument env
</code></li>
<li class="pre-context-line"><code> result = react env
</code></li>
<li class="pre-context-line"><code> end
</code></li>
</ol>
<ol start="50" class="context" id="40"
onclick="toggle(40);">
<li class="context-line" id="context-40"><code> result or app.call(env)</code></li>
</ol>
<ol start="51" class="post-context"
id="post-40" onclick="toggle(40);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def react(env)
</code></li>
<li class="post-context-line"><code> result = send(options[:reaction], env)
</code></li>
<li class="post-context-line"><code> result if Array === result and result.size == 3
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-protection-2.0.8.1&#x2F;lib&#x2F;rack&#x2F;protection&#x2F;base.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="43"
class="pre-context" id="pre-41"
onclick="toggle(41);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> unless accepts? env
</code></li>
<li class="pre-context-line"><code> instrument env
</code></li>
<li class="pre-context-line"><code> result = react env
</code></li>
<li class="pre-context-line"><code> end
</code></li>
</ol>
<ol start="50" class="context" id="41"
onclick="toggle(41);">
<li class="context-line" id="context-41"><code> result or app.call(env)</code></li>
</ol>
<ol start="51" class="post-context"
id="post-41" onclick="toggle(41);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def react(env)
</code></li>
<li class="post-context-line"><code> result = send(options[:reaction], env)
</code></li>
<li class="post-context-line"><code> result if Array === result and result.size == 3
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-protection-2.0.8.1&#x2F;lib&#x2F;rack&#x2F;protection&#x2F;frame_options.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="24"
class="pre-context" id="pre-42"
onclick="toggle(42);">
<li class="pre-context-line"><code> frame_options = options[:frame_options]
</code></li>
<li class="pre-context-line"><code> frame_options = options[:frame_options].to_s.upcase unless frame_options.respond_to? :to_str
</code></li>
<li class="pre-context-line"><code> frame_options.to_str
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="31" class="context" id="42"
onclick="toggle(42);">
<li class="context-line" id="context-42"><code> status, headers, body = @app.call(env)</code></li>
</ol>
<ol start="32" class="post-context"
id="post-42" onclick="toggle(42);">
<li class="post-context-line"><code> headers[&#x27;X-Frame-Options&#x27;] ||= frame_options if html? headers
</code></li>
<li class="post-context-line"><code> [status, headers, body]
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-2.2.2&#x2F;lib&#x2F;rack&#x2F;null_logger.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="4"
class="pre-context" id="pre-43"
onclick="toggle(43);">
<li class="pre-context-line"><code> class NullLogger
</code></li>
<li class="pre-context-line"><code> def initialize(app)
</code></li>
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> env[RACK_LOGGER] = self
</code></li>
</ol>
<ol start="11" class="context" id="43"
onclick="toggle(43);">
<li class="context-line" id="context-43"><code> @app.call(env)</code></li>
</ol>
<ol start="12" class="post-context"
id="post-43" onclick="toggle(43);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def info(progname = nil, &amp;block); end
</code></li>
<li class="post-context-line"><code> def debug(progname = nil, &amp;block); end
</code></li>
<li class="post-context-line"><code> def warn(progname = nil, &amp;block); end
</code></li>
<li class="post-context-line"><code> def error(progname = nil, &amp;block); end
</code></li>
<li class="post-context-line"><code> def fatal(progname = nil, &amp;block); end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-2.2.2&#x2F;lib&#x2F;rack&#x2F;head.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="5"
class="pre-context" id="pre-44"
onclick="toggle(44);">
<li class="pre-context-line"><code> # all other requests unchanged.
</code></li>
<li class="pre-context-line"><code> class Head
</code></li>
<li class="pre-context-line"><code> def initialize(app)
</code></li>
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="12" class="context" id="44"
onclick="toggle(44);">
<li class="context-line" id="context-44"><code> status, headers, body = @app.call(env)</code></li>
</ol>
<ol start="13" class="post-context"
id="post-44" onclick="toggle(44);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> if env[REQUEST_METHOD] == HEAD
</code></li>
<li class="post-context-line"><code> [
</code></li>
<li class="post-context-line"><code> status, headers, Rack::BodyProxy.new([]) do
</code></li>
<li class="post-context-line"><code> body.close if body.respond_to? :close
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> ]
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;show_exceptions.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code framework">
<ol start="15"
class="pre-context" id="pre-45"
onclick="toggle(45);">
<li class="pre-context-line"><code> def @@eats_errors.puts(*) end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def initialize(app)
</code></li>
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="22" class="context" id="45"
onclick="toggle(45);">
<li class="context-line" id="context-45"><code> @app.call(env)</code></li>
</ol>
<ol start="23" class="post-context"
id="post-45" onclick="toggle(45);">
<li class="post-context-line"><code> rescue Exception =&gt; e
</code></li>
<li class="post-context-line"><code> errors, env[&quot;rack.errors&quot;] = env[&quot;rack.errors&quot;], @@eats_errors
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> if prefers_plain_text?(env)
</code></li>
<li class="post-context-line"><code> content_type = &quot;text&#x2F;plain&quot;
</code></li>
<li class="post-context-line"><code> body = dump_exception(e)
</code></li>
<li class="post-context-line"><code> else
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code framework">
<ol start="187"
class="pre-context" id="pre-46"
onclick="toggle(46);">
<li class="pre-context-line"><code> # Some Rack handlers (Thin, Rainbows!) implement an extended body object protocol, however,
</code></li>
<li class="pre-context-line"><code> # some middleware (namely Rack::Lint) will break it by not mirroring the methods in question.
</code></li>
<li class="pre-context-line"><code> # This middleware will detect an extended body object and will make sure it reaches the
</code></li>
<li class="pre-context-line"><code> # handler directly. We do this here, so our middleware and middleware set up by the app will
</code></li>
<li class="pre-context-line"><code> # still be able to run.
</code></li>
<li class="pre-context-line"><code> class ExtendedRack &lt; Struct.new(:app)
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="194" class="context" id="46"
onclick="toggle(46);">
<li class="context-line" id="context-46"><code> result, callback = app.call(env), env[&#x27;async.callback&#x27;]</code></li>
</ol>
<ol start="195" class="post-context"
id="post-46" onclick="toggle(46);">
<li class="post-context-line"><code> return result unless callback and async?(*result)
</code></li>
<li class="post-context-line"><code> after_response { callback.call result }
</code></li>
<li class="post-context-line"><code> setup_close(env, *result)
</code></li>
<li class="post-context-line"><code> throw :async
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> private
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code framework">
<ol start="1944"
class="pre-context" id="pre-47"
onclick="toggle(47);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def helpers
</code></li>
<li class="pre-context-line"><code> @instance
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="1951" class="context" id="47"
onclick="toggle(47);">
<li class="context-line" id="context-47"><code> @stack.call(env)</code></li>
</ol>
<ol start="1952" class="post-context"
id="post-47" onclick="toggle(47);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def inspect
</code></li>
<li class="post-context-line"><code> &quot;#&lt;#{@instance.class} app_file=#{settings.app_file.inspect}&gt;&quot;
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;server_health_check-rack-0.1.0&#x2F;lib&#x2F;server_health_check_rack&#x2F;middleware.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="5"
class="pre-context" id="pre-48"
onclick="toggle(48);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> if ServerHealthCheckRack::Config.path?(env[&quot;PATH_INFO&quot;])
</code></li>
<li class="pre-context-line"><code> check = health_check(env[&quot;PATH_INFO&quot;])
</code></li>
<li class="pre-context-line"><code> [check.http_status, response_headers, [check.to_json]]
</code></li>
<li class="pre-context-line"><code> else
</code></li>
</ol>
<ol start="12" class="context" id="48"
onclick="toggle(48);">
<li class="context-line" id="context-48"><code> @app.call(env)</code></li>
</ol>
<ol start="13" class="post-context"
id="post-48" onclick="toggle(48);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> private
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def health_check(rack_path_info)
</code></li>
<li class="post-context-line"><code> checks = ServerHealthCheckRack::Config.path_to_health_checks(rack_path_info)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;gem_source&#x2F;rack_middleware.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code app">
<ol start="14"
class="pre-context" id="pre-49"
onclick="toggle(49);">
<li class="pre-context-line"><code> Gemstash::GemSource.sources.each do |source|
</code></li>
<li class="pre-context-line"><code> next unless source.matches?(env)
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> env[&quot;gemstash.gem_source&quot;] = source
</code></li>
<li class="pre-context-line"><code> break
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
</ol>
<ol start="21" class="context" id="49"
onclick="toggle(49);">
<li class="context-line" id="context-49"><code> @app.call(env)</code></li>
</ol>
<ol start="22" class="post-context"
id="post-49" onclick="toggle(49);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;env.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code app">
<ol start="32"
class="pre-context" id="pre-50"
onclick="toggle(50);">
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> @gemstash_env = gemstash_env
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> env[&quot;gemstash.env&quot;] = @gemstash_env
</code></li>
<li class="pre-context-line"><code> Gemstash::Env.current = @gemstash_env
</code></li>
</ol>
<ol start="39" class="context" id="50"
onclick="toggle(50);">
<li class="context-line" id="context-50"><code> @app.call(env)</code></li>
</ol>
<ol start="40" class="post-context"
id="post-50" onclick="toggle(50);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def initialize(config = nil, cache: nil, db: nil)
</code></li>
<li class="post-context-line"><code> @config = config
</code></li>
<li class="post-context-line"><code> @cache = cache
</code></li>
<li class="post-context-line"><code> @db = db
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;puma-4.3.5&#x2F;lib&#x2F;puma&#x2F;commonlogger.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="33"
class="pre-context" id="pre-51"
onclick="toggle(51);">
<li class="pre-context-line"><code> def initialize(app, logger=nil)
</code></li>
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> @logger = logger
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> began_at = Time.now
</code></li>
</ol>
<ol start="40" class="context" id="51"
onclick="toggle(51);">
<li class="context-line" id="context-51"><code> status, header, body = @app.call(env)</code></li>
</ol>
<ol start="41" class="post-context"
id="post-51" onclick="toggle(51);">
<li class="post-context-line"><code> header = Util::HeaderHash.new(header)
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # If we&#x27;ve been hijacked, then output a special line
</code></li>
<li class="post-context-line"><code> if env[&#x27;rack.hijack_io&#x27;]
</code></li>
<li class="post-context-line"><code> log_hijacking(env, &#x27;HIJACK&#x27;, header, began_at)
</code></li>
<li class="post-context-line"><code> else
</code></li>
<li class="post-context-line"><code> ary = env[&#x27;rack.after_reply&#x27;]
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info app">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;logging.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code app">
<ol start="51"
class="pre-context" id="pre-52"
onclick="toggle(52);">
<li class="pre-context-line"><code> class RackMiddleware
</code></li>
<li class="pre-context-line"><code> def initialize(app)
</code></li>
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> env[&quot;rack.logger&quot;] = Gemstash::Logging.logger
</code></li>
</ol>
<ol start="58" class="context" id="52"
onclick="toggle(52);">
<li class="context-line" id="context-52"><code> @app.call(env)</code></li>
</ol>
<ol start="59" class="post-context"
id="post-52" onclick="toggle(52);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # Logger that looks like a stream, for Puma and Rack to log to.
</code></li>
<li class="post-context-line"><code> class StreamLogger
</code></li>
<li class="post-context-line"><code> def self.puma_events
</code></li>
<li class="post-context-line"><code> Puma::Events.new(for_stdout, for_stderr)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-2.2.2&#x2F;lib&#x2F;rack&#x2F;deflater.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="37"
class="pre-context" id="pre-53"
onclick="toggle(53);">
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> @condition = options[:if]
</code></li>
<li class="pre-context-line"><code> @compressible_types = options[:include]
</code></li>
<li class="pre-context-line"><code> @sync = options.fetch(:sync, true)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="44" class="context" id="53"
onclick="toggle(53);">
<li class="context-line" id="context-53"><code> status, headers, body = @app.call(env)</code></li>
</ol>
<ol start="45" class="post-context"
id="post-53" onclick="toggle(53);">
<li class="post-context-line"><code> headers = Utils::HeaderHash[headers]
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> unless should_deflate?(env, status, headers, body)
</code></li>
<li class="post-context-line"><code> return [status, headers, body]
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> request = Request.new(env)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;puma-4.3.5&#x2F;lib&#x2F;puma&#x2F;configuration.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="221"
class="pre-context" id="pre-54"
onclick="toggle(54);">
<li class="pre-context-line"><code> def initialize(config, app)
</code></li>
<li class="pre-context-line"><code> @config = config
</code></li>
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> env[Const::PUMA_CONFIG] = @config
</code></li>
</ol>
<ol start="228" class="context" id="54"
onclick="toggle(54);">
<li class="context-line" id="context-54"><code> @app.call(env)</code></li>
</ol>
<ol start="229" class="post-context"
id="post-54" onclick="toggle(54);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # Indicate if there is a properly configured app
</code></li>
<li class="post-context-line"><code> #
</code></li>
<li class="post-context-line"><code> def app_configured?
</code></li>
<li class="post-context-line"><code> @options[:app] || File.exist?(rackup)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;puma-4.3.5&#x2F;lib&#x2F;puma&#x2F;server.rb</code> in
<code><strong>handle_request</strong></code>
</li>
<li class="code system">
<ol start="706"
class="pre-context" id="pre-55"
onclick="toggle(55);">
<li class="pre-context-line"><code> # A rack extension. If the app writes #call&#x27;ables to this
</code></li>
<li class="pre-context-line"><code> # array, we will invoke them when the request is done.
</code></li>
<li class="pre-context-line"><code> #
</code></li>
<li class="pre-context-line"><code> after_reply = env[RACK_AFTER_REPLY] = []
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> begin
</code></li>
<li class="pre-context-line"><code> begin
</code></li>
</ol>
<ol start="713" class="context" id="55"
onclick="toggle(55);">
<li class="context-line" id="context-55"><code> status, headers, res_body = @app.call(env)</code></li>
</ol>
<ol start="714" class="post-context"
id="post-55" onclick="toggle(55);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> return :async if req.hijacked
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> status = status.to_i
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> if status == -1
</code></li>
<li class="post-context-line"><code> unless headers.empty? and res_body == []
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;puma-4.3.5&#x2F;lib&#x2F;puma&#x2F;server.rb</code> in
<code><strong>process_client</strong></code>
</li>
<li class="code system">
<ol start="465"
class="pre-context" id="pre-56"
onclick="toggle(56);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> clean_thread_locals = @options[:clean_thread_locals]
</code></li>
<li class="pre-context-line"><code> close_socket = true
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> requests = 0
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> while true
</code></li>
</ol>
<ol start="472" class="context" id="56"
onclick="toggle(56);">
<li class="context-line" id="context-56"><code> case handle_request(client, buffer)</code></li>
</ol>
<ol start="473" class="post-context"
id="post-56" onclick="toggle(56);">
<li class="post-context-line"><code> when false
</code></li>
<li class="post-context-line"><code> return
</code></li>
<li class="post-context-line"><code> when :async
</code></li>
<li class="post-context-line"><code> close_socket = false
</code></li>
<li class="post-context-line"><code> return
</code></li>
<li class="post-context-line"><code> when true
</code></li>
<li class="post-context-line"><code> return unless @queue_requests
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;puma-4.3.5&#x2F;lib&#x2F;puma&#x2F;server.rb</code> in
<code><strong>block in run</strong></code>
</li>
<li class="code system">
<ol start="321"
class="pre-context" id="pre-57"
onclick="toggle(57);">
<li class="pre-context-line"><code> client.close
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> @events.parse_error self, client.env, e
</code></li>
<li class="pre-context-line"><code> rescue ConnectionError, EOFError
</code></li>
<li class="pre-context-line"><code> client.close
</code></li>
<li class="pre-context-line"><code> else
</code></li>
<li class="pre-context-line"><code> if process_now
</code></li>
</ol>
<ol start="328" class="context" id="57"
onclick="toggle(57);">
<li class="context-line" id="context-57"><code> process_client client, buffer</code></li>
</ol>
<ol start="329" class="post-context"
id="post-57" onclick="toggle(57);">
<li class="post-context-line"><code> else
</code></li>
<li class="post-context-line"><code> client.set_timeout @first_data_timeout
</code></li>
<li class="post-context-line"><code> @reactor.add client
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;puma-4.3.5&#x2F;lib&#x2F;puma&#x2F;thread_pool.rb</code> in
<code><strong>block in spawn_thread</strong></code>
</li>
<li class="code system">
<ol start="127"
class="pre-context" id="pre-58"
onclick="toggle(58);">
<li class="pre-context-line"><code> break unless continue
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> if @clean_thread_locals
</code></li>
<li class="pre-context-line"><code> ThreadPool.clean_thread_locals
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> begin
</code></li>
</ol>
<ol start="134" class="context" id="58"
onclick="toggle(58);">
<li class="context-line" id="context-58"><code> block.call(work, *extra)</code></li>
</ol>
<ol start="135" class="post-context"
id="post-58" onclick="toggle(58);">
<li class="post-context-line"><code> rescue Exception =&gt; e
</code></li>
<li class="post-context-line"><code> STDERR.puts &quot;Error reached top of thread-pool: #{e.message} (#{e.class})&quot;
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> mutex.synchronize do
</code></li>
<li class="post-context-line"><code> @spawned -= 1
</code></li>
</ol>
<div class="clear"></div>
</li>
</ul>
</div> <!-- /BACKTRACE -->
<div id="get">
<h3 id="get-info">GET</h3>
<p class="no-data">No GET data.</p>
<div class="clear"></div>
</div> <!-- /GET -->
<div id="post">
<h3 id="post-info">POST</h3>
<table class="req">
<tr>
<th>Variable</th>
<th>Value</th>
</tr>
<tr>
<td>gem_name</td>
<td class="code"><div>&quot;private_example&quot;</div></td>
</tr>
<tr>
<td>version</td>
<td class="code"><div>&quot;0.1.0&quot;</div></td>
</tr>
</table>
<div class="clear"></div>
</div> <!-- /POST -->
<div id="cookies">
<h3 id="cookie-info">COOKIES</h3>
<p class="no-data">No cookie data.</p>
<div class="clear"></div>
</div> <!-- /COOKIES -->
<div id="rack">
<h3 id="env-info">Rack ENV</h3>
<table class="req">
<tr>
<th>Variable</th>
<th>Value</th>
</tr>
<tr>
<td>CONTENT_LENGTH</td>
<td class="code"><div>38</div></td>
</tr>
<tr>
<td>CONTENT_TYPE</td>
<td class="code"><div>application&#x2F;x-www-form-urlencoded</div></td>
</tr>
<tr>
<td>GATEWAY_INTERFACE</td>
<td class="code"><div>CGI&#x2F;1.2</div></td>
</tr>
<tr>
<td>HTTP_ACCEPT</td>
<td class="code"><div>*&#x2F;*</div></td>
</tr>
<tr>
<td>HTTP_ACCEPT_ENCODING</td>
<td class="code"><div>gzip;q=1.0,deflate;q=0.6,identity;q=0.3</div></td>
</tr>
<tr>
<td>HTTP_AUTHORIZATION</td>
<td class="code"><div>72b4857b4c60c2d0aec84092c4d89d07</div></td>
</tr>
<tr>
<td>HTTP_CONNECTION</td>
<td class="code"><div>keep-alive</div></td>
</tr>
<tr>
<td>HTTP_HOST</td>
<td class="code"><div>localhost:9292</div></td>
</tr>
<tr>
<td>HTTP_KEEP_ALIVE</td>
<td class="code"><div>30</div></td>
</tr>
<tr>
<td>HTTP_USER_AGENT</td>
<td class="code"><div>Ruby, RubyGems&#x2F;3.0.3 x86_64-darwin-19 Ruby&#x2F;2.6.3 (2019-04-16 patchlevel 62)</div></td>
</tr>
<tr>
<td>HTTP_VERSION</td>
<td class="code"><div>HTTP&#x2F;1.1</div></td>
</tr>
<tr>
<td>PATH_INFO</td>
<td class="code"><div>&#x2F;api&#x2F;v1&#x2F;gems&#x2F;yank</div></td>
</tr>
<tr>
<td>QUERY_STRING</td>
<td class="code"><div></div></td>
</tr>
<tr>
<td>REMOTE_ADDR</td>
<td class="code"><div>127.0.0.1</div></td>
</tr>
<tr>
<td>REQUEST_METHOD</td>
<td class="code"><div>DELETE</div></td>
</tr>
<tr>
<td>REQUEST_PATH</td>
<td class="code"><div>&#x2F;private&#x2F;api&#x2F;v1&#x2F;gems&#x2F;yank</div></td>
</tr>
<tr>
<td>REQUEST_URI</td>
<td class="code"><div>&#x2F;api&#x2F;v1&#x2F;gems&#x2F;yank</div></td>
</tr>
<tr>
<td>SCRIPT_NAME</td>
<td class="code"><div></div></td>
</tr>
<tr>
<td>SERVER_NAME</td>
<td class="code"><div>localhost</div></td>
</tr>
<tr>
<td>SERVER_PORT</td>
<td class="code"><div>9292</div></td>
</tr>
<tr>
<td>SERVER_PROTOCOL</td>
<td class="code"><div>HTTP&#x2F;1.1</div></td>
</tr>
<tr>
<td>SERVER_SOFTWARE</td>
<td class="code"><div>puma 4.3.5 Mysterious Traveller</div></td>
</tr>
<tr>
<td>gemstash.env</td>
<td class="code"><div>#&lt;Gemstash::Env:0x00007ff68f9ff870 @config=#&lt;Gemstash::Configuration:0x00007ff68d0a2f40 @config={:cache_type=&gt;&quot;memory&quot;, :base_path=&gt;&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;.gemstash&quot;, :db_adapter=&gt;&quot;sqlite3&quot;, :bind=&gt;&quot;tcp:&#x2F;&#x2F;0.0.0.0:9292&quot;, :rubygems_url=&gt;&quot;https:&#x2F;&#x2F;rubygems.org&quot;, :ignore_gemfile_source=&gt;false, :protected_fetch=&gt;false, :fetch_timeout=&gt;20, :db_connection_options=&gt;{}, :puma_threads=&gt;16, :puma_workers=&gt;1, :cache_expiration=&gt;1800, :cache_max_size=&gt;500, :storage_adapter=&gt;&quot;s3&quot;, :aws_access_key_id=&gt;&quot;AKIAXDAKXIODWSOIRIZ3&quot;, :aws_secret_access_key=&gt;&quot;4txhhFYTcYly7kSf+1bI1aolopZ9axZQVzhT&#x2F;66W&quot;, :bucket_name=&gt;&quot;testing16160303&quot;, :region=&gt;&quot;us-west-1&quot;, :s3_path=&gt;&quot;gemstash&#x2F;s3_storage&quot;}&gt;, @cache=#&lt;Gemstash::Cache:0x00007ff68fc05ae8 @client=#&lt;Gemstash::LruReduxClient:0x00007ff68fc05d68 @cache=#&lt;LruRedux::TTL::ThreadSafeCache:0x00007ff68fc05d18 @max_size=500, @ttl=1800, @data_lru={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;#&lt;Gemstash::Authorization:0x00007ff68d0d9a18 @auth_key=&quot;72b4857b4c60c2d0aec84092c4d89d07&quot;, @all=true, @permissions=#&lt;Set: {&quot;all&quot;}&gt;&gt;}, @data_ttl={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;1592023797.76449}, @mon_mutex=#&lt;Thread::Mutex:0x00007ff68fc05b10&gt;, @mon_mutex_owner_object_id=70348475215500, @mon_owner=nil, @mon_count=0&gt;&gt;&gt;, @db=#&lt;Sequel::SQLite::Database: &quot;sqlite:&#x2F;&#x2F;%2FUsers%2Fquangnguyen%2F.gemstash%2Fgemstash.db&quot; {:max_connections=&gt;1}&gt;, @cache_client=#&lt;Gemstash::LruReduxClient:0x00007ff68fc05d68 @cache=#&lt;LruRedux::TTL::ThreadSafeCache:0x00007ff68fc05d18 @max_size=500, @ttl=1800, @data_lru={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;#&lt;Gemstash::Authorization:0x00007ff68d0d9a18 @auth_key=&quot;72b4857b4c60c2d0aec84092c4d89d07&quot;, @all=true, @permissions=#&lt;Set: {&quot;all&quot;}&gt;&gt;}, @data_ttl={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;1592023797.76449}, @mon_mutex=#&lt;Thread::Mutex:0x00007ff68fc05b10&gt;, @mon_mutex_owner_object_id=70348475215500, @mon_owner=nil, @mon_count=0&gt;&gt;&gt;</div></td>
</tr>
<tr>
<td>gemstash.gem_source</td>
<td class="code"><div>Gemstash::GemSource::PrivateSource</div></td>
</tr>
<tr>
<td>puma.config</td>
<td class="code"><div>#&lt;Puma::Configuration:0x00007ff68fbf78d0 @options=#&lt;Puma::UserFileDefaultOptions:0x00007ff68fbf76f0 @user_options={:pidfile=&gt;&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;.gemstash&#x2F;puma.pid&quot;, :daemon=&gt;true, :log_requests=&gt;false, :environment=&gt;&quot;development&quot;, :logger=&gt;#&lt;Puma::Events:0x00007ff68fbf7a38 @formatter=#&lt;Puma::Events::PidFormatter:0x00007ff68fc0d6d0&gt;, @stdout=#&lt;Gemstash::Logging::StreamLogger:0x00007ff68fbf7a88 @level=1&gt;, @stderr=#&lt;Gemstash::Logging::StreamLogger:0x00007ff68fbf7a60 @level=3&gt;, @debug=false, @hooks={:state=&gt;[]}&gt;}, @file_options={:config_files=&gt;[&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;puma.rb&quot;], :min_threads=&gt;0, :max_threads=&gt;16, :binds=&gt;[&quot;tcp:&#x2F;&#x2F;0.0.0.0:9292&quot;], :workers=&gt;1, :rackup=&gt;&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;config.ru&quot;}, @default_options={:min_threads=&gt;0, :max_threads=&gt;16, :log_requests=&gt;false, :debug=&gt;false, :binds=&gt;[&quot;tcp:&#x2F;&#x2F;0.0.0.0:9292&quot;], :workers=&gt;0, :daemon=&gt;false, :mode=&gt;:http, :worker_timeout=&gt;60, :worker_boot_timeout=&gt;60, :worker_shutdown_timeout=&gt;30, :remote_address=&gt;:socket, :tag=&gt;&quot;gemstash&quot;, :environment=&gt;&quot;development&quot;, :rackup=&gt;&quot;config.ru&quot;, :logger=&gt;#&lt;IO:&lt;STDOUT&gt;&gt;, :persistent_timeout=&gt;20, :first_data_timeout=&gt;30, :raise_exception_on_sigterm=&gt;true}&gt;, @plugins=#&lt;Puma::PluginLoader:0x00007ff68fbf76a0 @instances=[]&gt;, @user_dsl=#&lt;Puma::DSL:0x00007ff68fbf7650 @config=#&lt;Puma::Configuration:0x00007ff68fbf78d0 ...&gt;, @options={:pidfile=&gt;&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;.gemstash&#x2F;puma.pid&quot;, :daemon=&gt;true, :log_requests=&gt;false, :environment=&gt;&quot;development&quot;, :logger=&gt;#&lt;Puma::Events:0x00007ff68fbf7a38 @formatter=#&lt;Puma::Events::PidFormatter:0x00007ff68fc0d6d0&gt;, @stdout=#&lt;Gemstash::Logging::StreamLogger:0x00007ff68fbf7a88 @level=1&gt;, @stderr=#&lt;Gemstash::Logging::StreamLogger:0x00007ff68fbf7a60 @level=3&gt;, @debug=false, @hooks={:state=&gt;[]}&gt;}, @plugins=[]&gt;, @file_dsl=#&lt;Puma::DSL:0x00007ff68fbf7600 @config=#&lt;Puma::Configuration:0x00007ff68fbf78d0 ...&gt;, @options={:config_files=&gt;[&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;puma.rb&quot;], :min_threads=&gt;0, :max_threads=&gt;16, :binds=&gt;[&quot;tcp:&#x2F;&#x2F;0.0.0.0:9292&quot;], :workers=&gt;1, :rackup=&gt;&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;config.ru&quot;}, @plugins=[], @path=&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;Documents&#x2F;Google_folders&#x2F;RubyWork&#x2F;gemstash&#x2F;lib&#x2F;gemstash&#x2F;puma.rb&quot;&gt;, @default_dsl=#&lt;Puma::DSL:0x00007ff68fbf75b0 @config=#&lt;Puma::Configuration:0x00007ff68fbf78d0 ...&gt;, @options={:min_threads=&gt;0, :max_threads=&gt;16, :log_requests=&gt;false, :debug=&gt;false, :binds=&gt;[&quot;tcp:&#x2F;&#x2F;0.0.0.0:9292&quot;], :workers=&gt;0, :daemon=&gt;false, :mode=&gt;:http, :worker_timeout=&gt;60, :worker_boot_timeout=&gt;60, :worker_shutdown_timeout=&gt;30, :remote_address=&gt;:socket, :tag=&gt;&quot;gemstash&quot;, :environment=&gt;&quot;development&quot;, :rackup=&gt;&quot;config.ru&quot;, :logger=&gt;#&lt;IO:&lt;STDOUT&gt;&gt;, :persistent_timeout=&gt;20, :first_data_timeout=&gt;30, :raise_exception_on_sigterm=&gt;true}, @plugins=[]&gt;&gt;</div></td>
</tr>
<tr>
<td>puma.request_body_wait</td>
<td class="code"><div>0</div></td>
</tr>
<tr>
<td>puma.socket</td>
<td class="code"><div>#&lt;TCPSocket:fd 20, AF_INET, 127.0.0.1, 9292&gt;</div></td>
</tr>
<tr>
<td>rack.after_reply</td>
<td class="code"><div>[]</div></td>
</tr>
<tr>
<td>rack.errors</td>
<td class="code"><div>#&lt;Object:0x00007ff68fba5008&gt;</div></td>
</tr>
<tr>
<td>rack.hijack</td>
<td class="code"><div>#&lt;Puma::Client:0x3ffb47d8e370 @ready=true&gt;</div></td>
</tr>
<tr>
<td>rack.hijack?</td>
<td class="code"><div>true</div></td>
</tr>
<tr>
<td>rack.input</td>
<td class="code"><div>#&lt;StringIO:0x00007ff68fb26960&gt;</div></td>
</tr>
<tr>
<td>rack.logger</td>
<td class="code"><div>#&lt;Rack::NullLogger:0x00007ff68fb172a8 @app=#&lt;Rack::Protection::FrameOptions:0x00007ff68fb17488 @app=#&lt;Rack::Protection::HttpOrigin:0x00007ff68fb17690 @app=#&lt;Rack::Protection::IPSpoofing:0x00007ff68fb17870 @app=#&lt;Rack::Protection::JsonCsrf:0x00007ff68fb17a50 @app=#&lt;Rack::Protection::PathTraversal:0x00007ff68fb17be0 @app=#&lt;Rack::Protection::XSSHeader:0x00007ff68fb17d48 @app=#&lt;Gemstash::Web:0x00007ff68fbd6b58 @gemstash_env=#&lt;Gemstash::Env:0x00007ff68f9ff870 @config=#&lt;Gemstash::Configuration:0x00007ff68d0a2f40 @config={:cache_type=&gt;&quot;memory&quot;, :base_path=&gt;&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;.gemstash&quot;, :db_adapter=&gt;&quot;sqlite3&quot;, :bind=&gt;&quot;tcp:&#x2F;&#x2F;0.0.0.0:9292&quot;, :rubygems_url=&gt;&quot;https:&#x2F;&#x2F;rubygems.org&quot;, :ignore_gemfile_source=&gt;false, :protected_fetch=&gt;false, :fetch_timeout=&gt;20, :db_connection_options=&gt;{}, :puma_threads=&gt;16, :puma_workers=&gt;1, :cache_expiration=&gt;1800, :cache_max_size=&gt;500, :storage_adapter=&gt;&quot;s3&quot;, :aws_access_key_id=&gt;&quot;AKIAXDAKXIODWSOIRIZ3&quot;, :aws_secret_access_key=&gt;&quot;4txhhFYTcYly7kSf+1bI1aolopZ9axZQVzhT&#x2F;66W&quot;, :bucket_name=&gt;&quot;testing16160303&quot;, :region=&gt;&quot;us-west-1&quot;, :s3_path=&gt;&quot;gemstash&#x2F;s3_storage&quot;}&gt;, @cache=#&lt;Gemstash::Cache:0x00007ff68fc05ae8 @client=#&lt;Gemstash::LruReduxClient:0x00007ff68fc05d68 @cache=#&lt;LruRedux::TTL::ThreadSafeCache:0x00007ff68fc05d18 @max_size=500, @ttl=1800, @data_lru={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;#&lt;Gemstash::Authorization:0x00007ff68d0d9a18 @auth_key=&quot;72b4857b4c60c2d0aec84092c4d89d07&quot;, @all=true, @permissions=#&lt;Set: {&quot;all&quot;}&gt;&gt;}, @data_ttl={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;1592023797.76449}, @mon_mutex=#&lt;Thread::Mutex:0x00007ff68fc05b10&gt;, @mon_mutex_owner_object_id=70348475215500, @mon_owner=nil, @mon_count=0&gt;&gt;&gt;, @db=#&lt;Sequel::SQLite::Database: &quot;sqlite:&#x2F;&#x2F;%2FUsers%2Fquangnguyen%2F.gemstash%2Fgemstash.db&quot; {:max_connections=&gt;1}&gt;, @cache_client=#&lt;Gemstash::LruReduxClient:0x00007ff68fc05d68 @cache=#&lt;LruRedux::TTL::ThreadSafeCache:0x00007ff68fc05d18 @max_size=500, @ttl=1800, @data_lru={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;#&lt;Gemstash::Authorization:0x00007ff68d0d9a18 @auth_key=&quot;72b4857b4c60c2d0aec84092c4d89d07&quot;, @all=true, @permissions=#&lt;Set: {&quot;all&quot;}&gt;&gt;}, @data_ttl={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;1592023797.76449}, @mon_mutex=#&lt;Thread::Mutex:0x00007ff68fc05b10&gt;, @mon_mutex_owner_object_id=70348475215500, @mon_owner=nil, @mon_count=0&gt;&gt;&gt;, @http_client_builder=Gemstash::HTTPClient, @default_layout=:layout, @preferred_extension=nil, @app=nil, @template_cache=#&lt;Tilt::Cache:0x00007ff68e0656a8 @cache={}&gt;&gt;, @options={:reaction=&gt;:drop_session, :logging=&gt;true, :message=&gt;&quot;Forbidden&quot;, :encryptor=&gt;Digest::SHA1, :session_key=&gt;&quot;rack.session&quot;, :status=&gt;403, :allow_empty_referrer=&gt;true, :report_key=&gt;&quot;protection.failed&quot;, :html_types=&gt;[&quot;text&#x2F;html&quot;, &quot;application&#x2F;xhtml&quot;, &quot;text&#x2F;xml&quot;, &quot;application&#x2F;xml&quot;], :xss_mode=&gt;:block, :nosniff=&gt;true, :img_src=&gt;&quot;&#x27;self&#x27; data:&quot;, :font_src=&gt;&quot;&#x27;self&#x27;&quot;, :without_session=&gt;true}&gt;, @options={:reaction=&gt;:drop_session, :logging=&gt;true, :message=&gt;&quot;Forbidden&quot;, :encryptor=&gt;Digest::SHA1, :session_key=&gt;&quot;rack.session&quot;, :status=&gt;403, :allow_empty_referrer=&gt;true, :report_key=&gt;&quot;protection.failed&quot;, :html_types=&gt;[&quot;text&#x2F;html&quot;, &quot;application&#x2F;xhtml&quot;, &quot;text&#x2F;xml&quot;, &quot;application&#x2F;xml&quot;], :img_src=&gt;&quot;&#x27;self&#x27; data:&quot;, :font_src=&gt;&quot;&#x27;self&#x27;&quot;, :without_session=&gt;true}&gt;, @options={:reaction=&gt;:drop_session, :logging=&gt;true, :message=&gt;&quot;Forbidden&quot;, :encryptor=&gt;Digest::SHA1, :session_key=&gt;&quot;rack.session&quot;, :status=&gt;403, :allow_empty_referrer=&gt;true, :report_key=&gt;&quot;protection.failed&quot;, :html_types=&gt;[&quot;text&#x2F;html&quot;, &quot;application&#x2F;xhtml&quot;, &quot;text&#x2F;xml&quot;, &quot;application&#x2F;xml&quot;], :allow_if=&gt;nil, :img_src=&gt;&quot;&#x27;self&#x27; data:&quot;, :font_src=&gt;&quot;&#x27;self&#x27;&quot;, :without_session=&gt;true}&gt;, @options={:reaction=&gt;:drop_session, :logging=&gt;true, :message=&gt;&quot;Forbidden&quot;, :encryptor=&gt;Digest::SHA1, :session_key=&gt;&quot;rack.session&quot;, :status=&gt;403, :allow_empty_referrer=&gt;true, :report_key=&gt;&quot;protection.failed&quot;, :html_types=&gt;[&quot;text&#x2F;html&quot;, &quot;application&#x2F;xhtml&quot;, &quot;text&#x2F;xml&quot;, &quot;application&#x2F;xml&quot;], :img_src=&gt;&quot;&#x27;self&#x27; data:&quot;, :font_src=&gt;&quot;&#x27;self&#x27;&quot;, :without_session=&gt;true}&gt;, @options={:reaction=&gt;:drop_session, :logging=&gt;true, :message=&gt;&quot;Forbidden&quot;, :encryptor=&gt;Digest::SHA1, :session_key=&gt;&quot;rack.session&quot;, :status=&gt;403, :allow_empty_referrer=&gt;true, :report_key=&gt;&quot;protection.failed&quot;, :html_types=&gt;[&quot;text&#x2F;html&quot;, &quot;application&#x2F;xhtml&quot;, &quot;text&#x2F;xml&quot;, &quot;application&#x2F;xml&quot;], :allow_if=&gt;nil, :img_src=&gt;&quot;&#x27;self&#x27; data:&quot;, :font_src=&gt;&quot;&#x27;self&#x27;&quot;, :without_session=&gt;true}&gt;, @options={:reaction=&gt;:drop_session, :logging=&gt;true, :message=&gt;&quot;Forbidden&quot;, :encryptor=&gt;Digest::SHA1, :session_key=&gt;&quot;rack.session&quot;, :status=&gt;403, :allow_empty_referrer=&gt;true, :report_key=&gt;&quot;protection.failed&quot;, :html_types=&gt;[&quot;text&#x2F;html&quot;, &quot;application&#x2F;xhtml&quot;, &quot;text&#x2F;xml&quot;, &quot;application&#x2F;xml&quot;], :frame_options=&gt;:sameorigin, :img_src=&gt;&quot;&#x27;self&#x27; data:&quot;, :font_src=&gt;&quot;&#x27;self&#x27;&quot;, :without_session=&gt;true}&gt;&gt;</div></td>
</tr>
<tr>
<td>rack.multiprocess</td>
<td class="code"><div>false</div></td>
</tr>
<tr>
<td>rack.multithread</td>
<td class="code"><div>true</div></td>
</tr>
<tr>
<td>rack.request.cookie_hash</td>
<td class="code"><div>{}</div></td>
</tr>
<tr>
<td>rack.request.form_hash</td>
<td class="code"><div>{&quot;gem_name&quot;=&gt;&quot;private_example&quot;, &quot;version&quot;=&gt;&quot;0.1.0&quot;}</div></td>
</tr>
<tr>
<td>rack.request.form_input</td>
<td class="code"><div>#&lt;StringIO:0x00007ff68fb26960&gt;</div></td>
</tr>
<tr>
<td>rack.request.form_vars</td>
<td class="code"><div>gem_name=private_example&amp;version=0.1.0</div></td>
</tr>
<tr>
<td>rack.request.query_hash</td>
<td class="code"><div>{}</div></td>
</tr>
<tr>
<td>rack.request.query_string</td>
<td class="code"><div></div></td>
</tr>
<tr>
<td>rack.run_once</td>
<td class="code"><div>false</div></td>
</tr>
<tr>
<td>rack.tempfiles</td>
<td class="code"><div>[]</div></td>
</tr>
<tr>
<td>rack.url_scheme</td>
<td class="code"><div>http</div></td>
</tr>
<tr>
<td>rack.version</td>
<td class="code"><div>[1, 3]</div></td>
</tr>
<tr>
<td>sinatra.accept</td>
<td class="code"><div>[#&lt;Sinatra::Request::AcceptEntry:0x00007ff68fc641b0 @entry=&quot;*&#x2F;*&quot;, @type=&quot;*&#x2F;*&quot;, @params={}, @q=1.0&gt;]</div></td>
</tr>
<tr>
<td>sinatra.error</td>
<td class="code"><div>#&lt;Gemstash::GemYanker::YankedVersionError: Cannot yank an already yanked version!&gt;</div></td>
</tr>
<tr>
<td>sinatra.error.params</td>
<td class="code"><div>{&quot;gem_name&quot;=&gt;&quot;private_example&quot;, &quot;version&quot;=&gt;&quot;0.1.0&quot;}</div></td>
</tr>
<tr>
<td>sinatra.route</td>
<td class="code"><div>DELETE &#x2F;api&#x2F;v1&#x2F;gems&#x2F;yank</div></td>
</tr>
</table>
<div class="clear"></div>
</div> <!-- /RACK ENV -->
<p id="explanation">You're seeing this error because you have
enabled the <code>show_exceptions</code> setting.</p>
</div> <!-- /WRAP -->
</body>
</html>
JJames:gemstash quangnguyen$ gemstash stop
Command stop sent success
Gemstash stopped successfully!
JJames:gemstash quangnguyen$ bin/gemstash setup --redo
Current storage service: s3
What storage service will you use? [LOCAL, s3] local
Where should files go? [~/.gemstash]
Cache with what? [MEMORY, memcached, redis]
What database adapter? [SQLITE3, postgres, mysql, mysql2]
Use Protected Fetch for Private Gems? [y/N]
How many seconds to wait when fetching a gem? [20]
Checking that the cache is available
Checking that the database is available
You are all setup!
JJames:gemstash quangnguyen$ RUBYGEMS_HOST=http://localhost:9292/private gem yank --key test_key private_example --version 0.1.0
Yanking gem from http://localhost:9292/private...
ERROR: While executing gem ... (Errno::ECONNREFUSED)
Failed to open TCP connection to localhost:9292 (Connection refused - connect(2) for "localhost" port 9292)
JJames:gemstash quangnguyen$ gemstash start
Starting gemstash!
JJames:gemstash quangnguyen$ RUBYGEMS_HOST=http://localhost:9292/private gem yank --key test_key private_example --version 0.1.0
Yanking gem from http://localhost:9292/private...
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Gemstash::GemYanker::YankedVersionError at &#x2F;api&#x2F;v1&#x2F;gems&#x2F;yank</title>
<script type="text/javascript">
//<!--
function toggle(id) {
var pre = document.getElementById("pre-" + id);
var post = document.getElementById("post-" + id);
var context = document.getElementById("context-" + id);
if (pre.style.display == 'block') {
pre.style.display = 'none';
post.style.display = 'none';
context.style.background = "none";
} else {
pre.style.display = 'block';
post.style.display = 'block';
context.style.background = "#fffed9";
}
}
function toggleBacktrace(){
var bt = document.getElementById("backtrace");
var toggler = document.getElementById("expando");
if (bt.className == 'condensed') {
bt.className = 'expanded';
toggler.innerHTML = "(condense)";
} else {
bt.className = 'condensed';
toggler.innerHTML = "(expand)";
}
}
//-->
</script>
<style type="text/css" media="screen">
* {margin: 0; padding: 0; border: 0; outline: 0;}
div.clear {clear: both;}
body {background: #EEEEEE; margin: 0; padding: 0;
font-family: 'Lucida Grande', 'Lucida Sans Unicode',
'Garuda';}
code {font-family: 'Lucida Console', monospace;
font-size: 12px;}
li {height: 18px;}
ul {list-style: none; margin: 0; padding: 0;}
ol:hover {cursor: pointer;}
ol li {white-space: pre;}
#explanation {font-size: 12px; color: #666666;
margin: 20px 0 0 100px;}
/* WRAP */
#wrap {width: 1000px; background: #FFFFFF; margin: 0 auto;
padding: 30px 50px 20px 50px;
border-left: 1px solid #DDDDDD;
border-right: 1px solid #DDDDDD;}
/* HEADER */
#header {margin: 0 auto 25px auto;}
#header img {float: left;}
#header #summary {float: left; margin: 12px 0 0 20px; width:660px;
font-family: 'Lucida Grande', 'Lucida Sans Unicode';}
h1 {margin: 0; font-size: 36px; color: #981919;}
h2 {margin: 0; font-size: 22px; color: #333333;}
#header ul {margin: 0; font-size: 12px; color: #666666;}
#header ul li strong{color: #444444;}
#header ul li {display: inline; padding: 0 10px;}
#header ul li.first {padding-left: 0;}
#header ul li.last {border: 0; padding-right: 0;}
/* BODY */
#backtrace,
#get,
#post,
#cookies,
#rack {width: 980px; margin: 0 auto 10px auto;}
p#nav {float: right; font-size: 14px;}
/* BACKTRACE */
a#expando {float: left; padding-left: 5px; color: #666666;
font-size: 14px; text-decoration: none; cursor: pointer;}
a#expando:hover {text-decoration: underline;}
h3 {float: left; width: 100px; margin-bottom: 10px;
color: #981919; font-size: 14px; font-weight: bold;}
#nav a {color: #666666; text-decoration: none; padding: 0 5px;}
#backtrace li.frame-info {background: #f7f7f7; padding-left: 10px;
font-size: 12px; color: #333333;}
#backtrace ul {list-style-position: outside; border: 1px solid #E9E9E9;
border-bottom: 0;}
#backtrace ol {width: 920px; margin-left: 50px;
font: 10px 'Lucida Console', monospace; color: #666666;}
#backtrace ol li {border: 0; border-left: 1px solid #E9E9E9;
padding: 2px 0;}
#backtrace ol code {font-size: 10px; color: #555555; padding-left: 5px;}
#backtrace-ul li {border-bottom: 1px solid #E9E9E9; height: auto;
padding: 3px 0;}
#backtrace-ul .code {padding: 6px 0 4px 0;}
#backtrace.condensed .system,
#backtrace.condensed .framework {display:none;}
/* REQUEST DATA */
p.no-data {padding-top: 2px; font-size: 12px; color: #666666;}
table.req {width: 980px; text-align: left; font-size: 12px;
color: #666666; padding: 0; border-spacing: 0;
border: 1px solid #EEEEEE; border-bottom: 0;
border-left: 0;
clear:both}
table.req tr th {padding: 2px 10px; font-weight: bold;
background: #F7F7F7; border-bottom: 1px solid #EEEEEE;
border-left: 1px solid #EEEEEE;}
table.req tr td {padding: 2px 20px 2px 10px;
border-bottom: 1px solid #EEEEEE;
border-left: 1px solid #EEEEEE;}
/* HIDE PRE/POST CODE AT START */
.pre-context,
.post-context {display: none;}
table td.code {width:750px}
table td.code div {width:750px;overflow:hidden}
</style>
</head>
<body>
<div id="wrap">
<div id="header">
<img src="/__sinatra__/500.png" alt="application error" height="161" width="313" />
<div id="summary">
<h1><strong>Gemstash::GemYanker::YankedVersionError</strong> at <strong>&#x2F;api&#x2F;v1&#x2F;gems&#x2F;yank
</strong></h1>
<h2>Cannot yank an already yanked version!</h2>
<ul>
<li class="first"><strong>file:</strong> <code>
gem_yanker.rb</code></li>
<li><strong>location:</strong> <code>block in update_database
</code></li>
<li class="last"><strong>line:
</strong> 60</li>
</ul>
</div>
<div class="clear"></div>
</div>
<div id="backtrace" class='condensed'>
<h3>BACKTRACE</h3>
<p><a href="#" id="expando"
onclick="toggleBacktrace(); return false">(expand)</a></p>
<p id="nav"><strong>JUMP TO:</strong>
<a href="#get-info">GET</a>
<a href="#post-info">POST</a>
<a href="#cookie-info">COOKIES</a>
<a href="#env-info">ENV</a>
</p>
<div class="clear"></div>
<ul id="backtrace-ul">
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;gemstash-2.1.0&#x2F;lib&#x2F;gemstash&#x2F;gem_yanker.rb</code> in
<code><strong>block in update_database</strong></code>
</li>
<li class="code system">
<ol start="53"
class="pre-context" id="pre-1"
onclick="toggle(1);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def update_database
</code></li>
<li class="pre-context-line"><code> gemstash_env.db.transaction do
</code></li>
<li class="pre-context-line"><code> raise UnknownGemError, &quot;Cannot yank an unknown gem!&quot; unless Gemstash::DB::Rubygem[name: @gem_name]
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> version = Gemstash::DB::Version.find_by_full_name(full_name)
</code></li>
<li class="pre-context-line"><code> raise UnknownVersionError, &quot;Cannot yank an unknown version!&quot; unless version
</code></li>
</ol>
<ol start="60" class="context" id="1"
onclick="toggle(1);">
<li class="context-line" id="context-1"><code> raise YankedVersionError, &quot;Cannot yank an already yanked version!&quot; unless version.indexed</code></li>
</ol>
<ol start="61" class="post-context"
id="post-1" onclick="toggle(1);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> version.deindex
</code></li>
<li class="post-context-line"><code> storage.resource(version.storage_id).update_properties(indexed: false)
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def invalidate_cache
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sequel-5.32.0&#x2F;lib&#x2F;sequel&#x2F;database&#x2F;transactions.rb</code> in
<code><strong>_transaction</strong></code>
</li>
<li class="code system">
<ol start="247"
class="pre-context" id="pre-2"
onclick="toggle(2);">
<li class="pre-context-line"><code> ret = yield(conn)
</code></li>
<li class="pre-context-line"><code> rescue Exception =&gt; e1
</code></li>
<li class="pre-context-line"><code> raise e1
</code></li>
<li class="pre-context-line"><code> ensure
</code></li>
<li class="pre-context-line"><code> raise ::Sequel::Rollback unless e1
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> else
</code></li>
</ol>
<ol start="254" class="context" id="2"
onclick="toggle(2);">
<li class="context-line" id="context-2"><code> yield(conn)</code></li>
</ol>
<ol start="255" class="post-context"
id="post-2" onclick="toggle(2);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> rescue Exception =&gt; e
</code></li>
<li class="post-context-line"><code> begin
</code></li>
<li class="post-context-line"><code> rollback_transaction(conn, opts)
</code></li>
<li class="post-context-line"><code> rescue Exception =&gt; e3
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> transaction_error(e, :conn=&gt;conn, :rollback=&gt;rollback)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sequel-5.32.0&#x2F;lib&#x2F;sequel&#x2F;database&#x2F;transactions.rb</code> in
<code><strong>block in transaction</strong></code>
</li>
<li class="code system">
<ol start="222"
class="pre-context" id="pre-3"
onclick="toggle(3);">
<li class="pre-context-line"><code> if opts[:retrying]
</code></li>
<li class="pre-context-line"><code> raise Sequel::Error, &quot;cannot set :retry_on options if you are already inside a transaction&quot;
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> return yield(conn)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
</ol>
<ol start="229" class="context" id="3"
onclick="toggle(3);">
<li class="context-line" id="context-3"><code> _transaction(conn, opts, &amp;block)</code></li>
</ol>
<ol start="230" class="post-context"
id="post-3" onclick="toggle(3);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> private
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # Internal generic transaction method. Any exception raised by the given
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sequel-5.32.0&#x2F;lib&#x2F;sequel&#x2F;connection_pool&#x2F;threaded.rb</code> in
<code><strong>hold</strong></code>
</li>
<li class="code system">
<ol start="85"
class="pre-context" id="pre-4"
onclick="toggle(4);">
<li class="pre-context-line"><code> def hold(server=nil)
</code></li>
<li class="pre-context-line"><code> t = Sequel.current
</code></li>
<li class="pre-context-line"><code> if conn = owned_connection(t)
</code></li>
<li class="pre-context-line"><code> return yield(conn)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> begin
</code></li>
<li class="pre-context-line"><code> conn = acquire(t)
</code></li>
</ol>
<ol start="92" class="context" id="4"
onclick="toggle(4);">
<li class="context-line" id="context-4"><code> yield conn</code></li>
</ol>
<ol start="93" class="post-context"
id="post-4" onclick="toggle(4);">
<li class="post-context-line"><code> rescue Sequel::DatabaseDisconnectError, *@error_classes =&gt; e
</code></li>
<li class="post-context-line"><code> if disconnect_error?(e)
</code></li>
<li class="post-context-line"><code> oconn = conn
</code></li>
<li class="post-context-line"><code> conn = nil
</code></li>
<li class="post-context-line"><code> disconnect_connection(oconn) if oconn
</code></li>
<li class="post-context-line"><code> sync do
</code></li>
<li class="post-context-line"><code> @allocated.delete(t)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sequel-5.32.0&#x2F;lib&#x2F;sequel&#x2F;database&#x2F;connecting.rb</code> in
<code><strong>synchronize</strong></code>
</li>
<li class="code system">
<ol start="263"
class="pre-context" id="pre-5"
onclick="toggle(5);">
<li class="pre-context-line"><code> # If a server option is given, acquires a connection for that specific
</code></li>
<li class="pre-context-line"><code> # server, instead of the :default server.
</code></li>
<li class="pre-context-line"><code> #
</code></li>
<li class="pre-context-line"><code> # DB.synchronize do |conn|
</code></li>
<li class="pre-context-line"><code> # # ...
</code></li>
<li class="pre-context-line"><code> # end
</code></li>
<li class="pre-context-line"><code> def synchronize(server=nil, &amp;block)
</code></li>
</ol>
<ol start="270" class="context" id="5"
onclick="toggle(5);">
<li class="context-line" id="context-5"><code> @pool.hold(server || :default, &amp;block)</code></li>
</ol>
<ol start="271" class="post-context"
id="post-5" onclick="toggle(5);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # Attempts to acquire a database connection. Returns true if successful.
</code></li>
<li class="post-context-line"><code> # Will probably raise an Error if unsuccessful. If a server argument
</code></li>
<li class="post-context-line"><code> # is given, attempts to acquire a database connection to the given
</code></li>
<li class="post-context-line"><code> # server&#x2F;shard.
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sequel-5.32.0&#x2F;lib&#x2F;sequel&#x2F;database&#x2F;transactions.rb</code> in
<code><strong>transaction</strong></code>
</li>
<li class="code system">
<ol start="188"
class="pre-context" id="pre-6"
onclick="toggle(6);">
<li class="pre-context-line"><code> if tot_retries.nil? || num_retries &lt;= tot_retries
</code></li>
<li class="pre-context-line"><code> opts[:before_retry].call(num_retries, e) if opts[:before_retry]
</code></li>
<li class="pre-context-line"><code> retry
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> raise
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> else
</code></li>
</ol>
<ol start="195" class="context" id="6"
onclick="toggle(6);">
<li class="context-line" id="context-6"><code> synchronize(opts[:server]) do |conn|</code></li>
</ol>
<ol start="196" class="post-context"
id="post-6" onclick="toggle(6);">
<li class="post-context-line"><code> if opts[:savepoint] == :only
</code></li>
<li class="post-context-line"><code> if supports_savepoints?
</code></li>
<li class="post-context-line"><code> if _trans(conn)
</code></li>
<li class="post-context-line"><code> opts[:savepoint] = true
</code></li>
<li class="post-context-line"><code> else
</code></li>
<li class="post-context-line"><code> return yield(conn)
</code></li>
<li class="post-context-line"><code> end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;gemstash-2.1.0&#x2F;lib&#x2F;gemstash&#x2F;gem_yanker.rb</code> in
<code><strong>update_database</strong></code>
</li>
<li class="code system">
<ol start="48"
class="pre-context" id="pre-7"
onclick="toggle(7);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def check_auth
</code></li>
<li class="pre-context-line"><code> @auth.check(&quot;yank&quot;)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def update_database
</code></li>
</ol>
<ol start="55" class="context" id="7"
onclick="toggle(7);">
<li class="context-line" id="context-7"><code> gemstash_env.db.transaction do</code></li>
</ol>
<ol start="56" class="post-context"
id="post-7" onclick="toggle(7);">
<li class="post-context-line"><code> raise UnknownGemError, &quot;Cannot yank an unknown gem!&quot; unless Gemstash::DB::Rubygem[name: @gem_name]
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> version = Gemstash::DB::Version.find_by_full_name(full_name)
</code></li>
<li class="post-context-line"><code> raise UnknownVersionError, &quot;Cannot yank an unknown version!&quot; unless version
</code></li>
<li class="post-context-line"><code> raise YankedVersionError, &quot;Cannot yank an already yanked version!&quot; unless version.indexed
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> version.deindex
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;gemstash-2.1.0&#x2F;lib&#x2F;gemstash&#x2F;gem_yanker.rb</code> in
<code><strong>serve</strong></code>
</li>
<li class="code system">
<ol start="29"
class="pre-context" id="pre-8"
onclick="toggle(8);">
<li class="pre-context-line"><code> @auth = auth
</code></li>
<li class="pre-context-line"><code> @gem_name = gem_name
</code></li>
<li class="pre-context-line"><code> @slug = slug
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def serve
</code></li>
<li class="pre-context-line"><code> check_auth
</code></li>
</ol>
<ol start="36" class="context" id="8"
onclick="toggle(8);">
<li class="context-line" id="context-8"><code> update_database</code></li>
</ol>
<ol start="37" class="post-context"
id="post-8" onclick="toggle(8);">
<li class="post-context-line"><code> invalidate_cache
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> private
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def storage
</code></li>
<li class="post-context-line"><code> @storage ||= Gemstash::Storage.for(&quot;private&quot;).for(&quot;gems&quot;)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;gemstash-2.1.0&#x2F;lib&#x2F;gemstash&#x2F;gem_yanker.rb</code> in
<code><strong>serve</strong></code>
</li>
<li class="code system">
<ol start="18"
class="pre-context" id="pre-9"
onclick="toggle(9);">
<li class="pre-context-line"><code> # This error is thrown when yanking an already yanked gem version.
</code></li>
<li class="pre-context-line"><code> class YankedVersionError &lt; StandardError
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def self.serve(app)
</code></li>
<li class="pre-context-line"><code> gem_name = app.params[:gem_name]
</code></li>
<li class="pre-context-line"><code> slug = Gemstash::DB::Version.slug(app.params)
</code></li>
</ol>
<ol start="25" class="context" id="9"
onclick="toggle(9);">
<li class="context-line" id="context-9"><code> new(app.auth, gem_name, slug).serve</code></li>
</ol>
<ol start="26" class="post-context"
id="post-9" onclick="toggle(9);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def initialize(auth, gem_name, slug)
</code></li>
<li class="post-context-line"><code> @auth = auth
</code></li>
<li class="post-context-line"><code> @gem_name = gem_name
</code></li>
<li class="post-context-line"><code> @slug = slug
</code></li>
<li class="post-context-line"><code> end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;gemstash-2.1.0&#x2F;lib&#x2F;gemstash&#x2F;gem_source&#x2F;private_source.rb</code> in
<code><strong>block in protected</strong></code>
</li>
<li class="code system">
<ol start="93"
class="pre-context" id="pre-10"
onclick="toggle(10);">
<li class="pre-context-line"><code> params[:prerelease] = true
</code></li>
<li class="pre-context-line"><code> protected(Gemstash::SpecsBuilder)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> private
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def protected(servable)
</code></li>
</ol>
<ol start="100" class="context" id="10"
onclick="toggle(10);">
<li class="context-line" id="context-10"><code> authorization.protect(self) { servable.serve(self) }</code></li>
</ol>
<ol start="101" class="post-context"
id="post-10" onclick="toggle(10);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def authorization
</code></li>
<li class="post-context-line"><code> Gemstash::ApiKeyAuthorization
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def dependencies
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;gemstash-2.1.0&#x2F;lib&#x2F;gemstash&#x2F;api_key_authorization.rb</code> in
<code><strong>protect</strong></code>
</li>
<li class="code system">
<ol start="8"
class="pre-context" id="pre-11"
onclick="toggle(11);">
<li class="pre-context-line"><code> def initialize(key)
</code></li>
<li class="pre-context-line"><code> @key = key
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def self.protect(app, &amp;block)
</code></li>
<li class="pre-context-line"><code> key = parse_authorization(app.request.env)
</code></li>
<li class="pre-context-line"><code> app.auth = new(key)
</code></li>
</ol>
<ol start="15" class="context" id="11"
onclick="toggle(11);">
<li class="context-line" id="context-11"><code> yield</code></li>
</ol>
<ol start="16" class="post-context"
id="post-11" onclick="toggle(11);">
<li class="post-context-line"><code> rescue Gemstash::NotAuthorizedError =&gt; e
</code></li>
<li class="post-context-line"><code> app.headers[&quot;WWW-Authenticate&quot;] = &quot;Basic realm=\&quot;Gemstash Private Gems\&quot;&quot;
</code></li>
<li class="post-context-line"><code> app.halt 401, e.message
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def self.parse_authorization(request_env)
</code></li>
<li class="post-context-line"><code> http_auth = Rack::Auth::Basic::Request.new(request_env)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;gemstash-2.1.0&#x2F;lib&#x2F;gemstash&#x2F;gem_source&#x2F;private_source.rb</code> in
<code><strong>protected</strong></code>
</li>
<li class="code system">
<ol start="93"
class="pre-context" id="pre-12"
onclick="toggle(12);">
<li class="pre-context-line"><code> params[:prerelease] = true
</code></li>
<li class="pre-context-line"><code> protected(Gemstash::SpecsBuilder)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> private
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def protected(servable)
</code></li>
</ol>
<ol start="100" class="context" id="12"
onclick="toggle(12);">
<li class="context-line" id="context-12"><code> authorization.protect(self) { servable.serve(self) }</code></li>
</ol>
<ol start="101" class="post-context"
id="post-12" onclick="toggle(12);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def authorization
</code></li>
<li class="post-context-line"><code> Gemstash::ApiKeyAuthorization
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def dependencies
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;gemstash-2.1.0&#x2F;lib&#x2F;gemstash&#x2F;gem_source&#x2F;private_source.rb</code> in
<code><strong>serve_yank</strong></code>
</li>
<li class="code system">
<ol start="27"
class="pre-context" id="pre-13"
onclick="toggle(13);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def serve_add_gem
</code></li>
<li class="pre-context-line"><code> protected(Gemstash::GemPusher)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def serve_yank
</code></li>
</ol>
<ol start="34" class="context" id="13"
onclick="toggle(13);">
<li class="context-line" id="context-13"><code> protected(Gemstash::GemYanker)</code></li>
</ol>
<ol start="35" class="post-context"
id="post-13" onclick="toggle(13);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def serve_add_spec_json
</code></li>
<li class="post-context-line"><code> halt 403, &quot;Not yet supported&quot;
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def serve_remove_spec_json
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;gemstash-2.1.0&#x2F;lib&#x2F;gemstash&#x2F;web.rb</code> in
<code><strong>block in &lt;class:Web&gt;</strong></code>
</li>
<li class="code system">
<ol start="46"
class="pre-context" id="pre-14"
onclick="toggle(14);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> post &quot;&#x2F;api&#x2F;v1&#x2F;gems&quot; do
</code></li>
<li class="pre-context-line"><code> @gem_source.serve_add_gem
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> delete &quot;&#x2F;api&#x2F;v1&#x2F;gems&#x2F;yank&quot; do
</code></li>
</ol>
<ol start="53" class="context" id="14"
onclick="toggle(14);">
<li class="context-line" id="context-14"><code> @gem_source.serve_yank</code></li>
</ol>
<ol start="54" class="post-context"
id="post-14" onclick="toggle(14);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> post &quot;&#x2F;api&#x2F;v1&#x2F;add_spec.json&quot; do
</code></li>
<li class="post-context-line"><code> @gem_source.serve_add_spec_json
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> post &quot;&#x2F;api&#x2F;v1&#x2F;remove_spec.json&quot; do
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code framework">
<ol start="1629"
class="pre-context" id="pre-15"
onclick="toggle(15);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> pattern = compile(path, route_mustermann_opts)
</code></li>
<li class="pre-context-line"><code> method_name = &quot;#{verb} #{path}&quot;
</code></li>
<li class="pre-context-line"><code> unbound_method = generate_method(method_name, &amp;block)
</code></li>
<li class="pre-context-line"><code> conditions, @conditions = @conditions, []
</code></li>
<li class="pre-context-line"><code> wrapper = block.arity != 0 ?
</code></li>
<li class="pre-context-line"><code> proc { |a, p| unbound_method.bind(a).call(*p) } :
</code></li>
</ol>
<ol start="1636" class="context" id="15"
onclick="toggle(15);">
<li class="context-line" id="context-15"><code> proc { |a, p| unbound_method.bind(a).call }</code></li>
</ol>
<ol start="1637" class="post-context"
id="post-15" onclick="toggle(15);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> [ pattern, conditions, wrapper ]
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def compile(path, route_mustermann_opts = {})
</code></li>
<li class="post-context-line"><code> Mustermann.new(path, **mustermann_opts.merge(route_mustermann_opts))
</code></li>
<li class="post-context-line"><code> end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in compile!</strong></code>
</li>
<li class="code framework">
<ol start="1629"
class="pre-context" id="pre-16"
onclick="toggle(16);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> pattern = compile(path, route_mustermann_opts)
</code></li>
<li class="pre-context-line"><code> method_name = &quot;#{verb} #{path}&quot;
</code></li>
<li class="pre-context-line"><code> unbound_method = generate_method(method_name, &amp;block)
</code></li>
<li class="pre-context-line"><code> conditions, @conditions = @conditions, []
</code></li>
<li class="pre-context-line"><code> wrapper = block.arity != 0 ?
</code></li>
<li class="pre-context-line"><code> proc { |a, p| unbound_method.bind(a).call(*p) } :
</code></li>
</ol>
<ol start="1636" class="context" id="16"
onclick="toggle(16);">
<li class="context-line" id="context-16"><code> proc { |a, p| unbound_method.bind(a).call }</code></li>
</ol>
<ol start="1637" class="post-context"
id="post-16" onclick="toggle(16);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> [ pattern, conditions, wrapper ]
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def compile(path, route_mustermann_opts = {})
</code></li>
<li class="post-context-line"><code> Mustermann.new(path, **mustermann_opts.merge(route_mustermann_opts))
</code></li>
<li class="post-context-line"><code> end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block (3 levels) in route!</strong></code>
</li>
<li class="code framework">
<ol start="980"
class="pre-context" id="pre-17"
onclick="toggle(17);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run routes defined on the class and all superclasses.
</code></li>
<li class="pre-context-line"><code> def route!(base = settings, pass_block = nil)
</code></li>
<li class="pre-context-line"><code> if routes = base.routes[@request.request_method]
</code></li>
<li class="pre-context-line"><code> routes.each do |pattern, conditions, block|
</code></li>
<li class="pre-context-line"><code> returned_pass_block = process_route(pattern, conditions) do |*args|
</code></li>
<li class="pre-context-line"><code> env[&#x27;sinatra.route&#x27;] = &quot;#{@request.request_method} #{pattern}&quot;
</code></li>
</ol>
<ol start="987" class="context" id="17"
onclick="toggle(17);">
<li class="context-line" id="context-17"><code> route_eval { block[*args] }</code></li>
</ol>
<ol start="988" class="post-context"
id="post-17" onclick="toggle(17);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # don&#x27;t wipe out pass_block in superclass
</code></li>
<li class="post-context-line"><code> pass_block = returned_pass_block if returned_pass_block
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>route_eval</strong></code>
</li>
<li class="code framework">
<ol start="999"
class="pre-context" id="pre-18"
onclick="toggle(18);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> route_eval(&amp;pass_block) if pass_block
</code></li>
<li class="pre-context-line"><code> route_missing
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run a route block and throw :halt with the result.
</code></li>
<li class="pre-context-line"><code> def route_eval
</code></li>
</ol>
<ol start="1006" class="context" id="18"
onclick="toggle(18);">
<li class="context-line" id="context-18"><code> throw :halt, yield</code></li>
</ol>
<ol start="1007" class="post-context"
id="post-18" onclick="toggle(18);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # If the current request matches pattern and conditions, fill params
</code></li>
<li class="post-context-line"><code> # with keys and call the given block.
</code></li>
<li class="post-context-line"><code> # Revert params afterwards.
</code></li>
<li class="post-context-line"><code> #
</code></li>
<li class="post-context-line"><code> # Returns pass block.
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block (2 levels) in route!</strong></code>
</li>
<li class="code framework">
<ol start="980"
class="pre-context" id="pre-19"
onclick="toggle(19);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run routes defined on the class and all superclasses.
</code></li>
<li class="pre-context-line"><code> def route!(base = settings, pass_block = nil)
</code></li>
<li class="pre-context-line"><code> if routes = base.routes[@request.request_method]
</code></li>
<li class="pre-context-line"><code> routes.each do |pattern, conditions, block|
</code></li>
<li class="pre-context-line"><code> returned_pass_block = process_route(pattern, conditions) do |*args|
</code></li>
<li class="pre-context-line"><code> env[&#x27;sinatra.route&#x27;] = &quot;#{@request.request_method} #{pattern}&quot;
</code></li>
</ol>
<ol start="987" class="context" id="19"
onclick="toggle(19);">
<li class="context-line" id="context-19"><code> route_eval { block[*args] }</code></li>
</ol>
<ol start="988" class="post-context"
id="post-19" onclick="toggle(19);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # don&#x27;t wipe out pass_block in superclass
</code></li>
<li class="post-context-line"><code> pass_block = returned_pass_block if returned_pass_block
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in process_route</strong></code>
</li>
<li class="code framework">
<ol start="1028"
class="pre-context" id="pre-20"
onclick="toggle(20);">
<li class="pre-context-line"><code> @params[:captures] = force_encoding(captures) unless captures.nil? || captures.empty?
</code></li>
<li class="pre-context-line"><code> else
</code></li>
<li class="pre-context-line"><code> values += params.values.flatten
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> catch(:pass) do
</code></li>
<li class="pre-context-line"><code> conditions.each { |c| throw :pass if c.bind(self).call == false }
</code></li>
</ol>
<ol start="1035" class="context" id="20"
onclick="toggle(20);">
<li class="context-line" id="context-20"><code> block ? block[self, values] : yield(self, values)</code></li>
</ol>
<ol start="1036" class="post-context"
id="post-20" onclick="toggle(20);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> rescue
</code></li>
<li class="post-context-line"><code> @env[&#x27;sinatra.error.params&#x27;] = @params
</code></li>
<li class="post-context-line"><code> raise
</code></li>
<li class="post-context-line"><code> ensure
</code></li>
<li class="post-context-line"><code> params ||= {}
</code></li>
<li class="post-context-line"><code> params.each { |k, _| @params.delete(k) } unless @env[&#x27;sinatra.error.params&#x27;]
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>catch</strong></code>
</li>
<li class="code framework">
<ol start="1026"
class="pre-context" id="pre-21"
onclick="toggle(21);">
<li class="pre-context-line"><code> captures = pattern.match(route).captures.map { |c| URI_INSTANCE.unescape(c) if c }
</code></li>
<li class="pre-context-line"><code> values += captures
</code></li>
<li class="pre-context-line"><code> @params[:captures] = force_encoding(captures) unless captures.nil? || captures.empty?
</code></li>
<li class="pre-context-line"><code> else
</code></li>
<li class="pre-context-line"><code> values += params.values.flatten
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
</ol>
<ol start="1033" class="context" id="21"
onclick="toggle(21);">
<li class="context-line" id="context-21"><code> catch(:pass) do</code></li>
</ol>
<ol start="1034" class="post-context"
id="post-21" onclick="toggle(21);">
<li class="post-context-line"><code> conditions.each { |c| throw :pass if c.bind(self).call == false }
</code></li>
<li class="post-context-line"><code> block ? block[self, values] : yield(self, values)
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> rescue
</code></li>
<li class="post-context-line"><code> @env[&#x27;sinatra.error.params&#x27;] = @params
</code></li>
<li class="post-context-line"><code> raise
</code></li>
<li class="post-context-line"><code> ensure
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>process_route</strong></code>
</li>
<li class="code framework">
<ol start="1026"
class="pre-context" id="pre-22"
onclick="toggle(22);">
<li class="pre-context-line"><code> captures = pattern.match(route).captures.map { |c| URI_INSTANCE.unescape(c) if c }
</code></li>
<li class="pre-context-line"><code> values += captures
</code></li>
<li class="pre-context-line"><code> @params[:captures] = force_encoding(captures) unless captures.nil? || captures.empty?
</code></li>
<li class="pre-context-line"><code> else
</code></li>
<li class="pre-context-line"><code> values += params.values.flatten
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
</ol>
<ol start="1033" class="context" id="22"
onclick="toggle(22);">
<li class="context-line" id="context-22"><code> catch(:pass) do</code></li>
</ol>
<ol start="1034" class="post-context"
id="post-22" onclick="toggle(22);">
<li class="post-context-line"><code> conditions.each { |c| throw :pass if c.bind(self).call == false }
</code></li>
<li class="post-context-line"><code> block ? block[self, values] : yield(self, values)
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> rescue
</code></li>
<li class="post-context-line"><code> @env[&#x27;sinatra.error.params&#x27;] = @params
</code></li>
<li class="post-context-line"><code> raise
</code></li>
<li class="post-context-line"><code> ensure
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in route!</strong></code>
</li>
<li class="code framework">
<ol start="978"
class="pre-context" id="pre-23"
onclick="toggle(23);">
<li class="pre-context-line"><code> base.filters[type].each { |args| process_route(*args) }
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run routes defined on the class and all superclasses.
</code></li>
<li class="pre-context-line"><code> def route!(base = settings, pass_block = nil)
</code></li>
<li class="pre-context-line"><code> if routes = base.routes[@request.request_method]
</code></li>
<li class="pre-context-line"><code> routes.each do |pattern, conditions, block|
</code></li>
</ol>
<ol start="985" class="context" id="23"
onclick="toggle(23);">
<li class="context-line" id="context-23"><code> returned_pass_block = process_route(pattern, conditions) do |*args|</code></li>
</ol>
<ol start="986" class="post-context"
id="post-23" onclick="toggle(23);">
<li class="post-context-line"><code> env[&#x27;sinatra.route&#x27;] = &quot;#{@request.request_method} #{pattern}&quot;
</code></li>
<li class="post-context-line"><code> route_eval { block[*args] }
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # don&#x27;t wipe out pass_block in superclass
</code></li>
<li class="post-context-line"><code> pass_block = returned_pass_block if returned_pass_block
</code></li>
<li class="post-context-line"><code> end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>each</strong></code>
</li>
<li class="code framework">
<ol start="977"
class="pre-context" id="pre-24"
onclick="toggle(24);">
<li class="pre-context-line"><code> filter! type, base.superclass if base.superclass.respond_to?(:filters)
</code></li>
<li class="pre-context-line"><code> base.filters[type].each { |args| process_route(*args) }
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run routes defined on the class and all superclasses.
</code></li>
<li class="pre-context-line"><code> def route!(base = settings, pass_block = nil)
</code></li>
<li class="pre-context-line"><code> if routes = base.routes[@request.request_method]
</code></li>
</ol>
<ol start="984" class="context" id="24"
onclick="toggle(24);">
<li class="context-line" id="context-24"><code> routes.each do |pattern, conditions, block|</code></li>
</ol>
<ol start="985" class="post-context"
id="post-24" onclick="toggle(24);">
<li class="post-context-line"><code> returned_pass_block = process_route(pattern, conditions) do |*args|
</code></li>
<li class="post-context-line"><code> env[&#x27;sinatra.route&#x27;] = &quot;#{@request.request_method} #{pattern}&quot;
</code></li>
<li class="post-context-line"><code> route_eval { block[*args] }
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # don&#x27;t wipe out pass_block in superclass
</code></li>
<li class="post-context-line"><code> pass_block = returned_pass_block if returned_pass_block
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>route!</strong></code>
</li>
<li class="code framework">
<ol start="977"
class="pre-context" id="pre-25"
onclick="toggle(25);">
<li class="pre-context-line"><code> filter! type, base.superclass if base.superclass.respond_to?(:filters)
</code></li>
<li class="pre-context-line"><code> base.filters[type].each { |args| process_route(*args) }
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run routes defined on the class and all superclasses.
</code></li>
<li class="pre-context-line"><code> def route!(base = settings, pass_block = nil)
</code></li>
<li class="pre-context-line"><code> if routes = base.routes[@request.request_method]
</code></li>
</ol>
<ol start="984" class="context" id="25"
onclick="toggle(25);">
<li class="context-line" id="context-25"><code> routes.each do |pattern, conditions, block|</code></li>
</ol>
<ol start="985" class="post-context"
id="post-25" onclick="toggle(25);">
<li class="post-context-line"><code> returned_pass_block = process_route(pattern, conditions) do |*args|
</code></li>
<li class="post-context-line"><code> env[&#x27;sinatra.route&#x27;] = &quot;#{@request.request_method} #{pattern}&quot;
</code></li>
<li class="post-context-line"><code> route_eval { block[*args] }
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # don&#x27;t wipe out pass_block in superclass
</code></li>
<li class="post-context-line"><code> pass_block = returned_pass_block if returned_pass_block
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in dispatch!</strong></code>
</li>
<li class="code framework">
<ol start="1091"
class="pre-context" id="pre-26"
onclick="toggle(26);">
<li class="pre-context-line"><code> val = val.dup if val.frozen?
</code></li>
<li class="pre-context-line"><code> @params[key] = force_encoding(val)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> invoke do
</code></li>
<li class="pre-context-line"><code> static! if settings.static? &amp;&amp; (request.get? || request.head?)
</code></li>
<li class="pre-context-line"><code> filter! :before
</code></li>
</ol>
<ol start="1098" class="context" id="26"
onclick="toggle(26);">
<li class="context-line" id="context-26"><code> route!</code></li>
</ol>
<ol start="1099" class="post-context"
id="post-26" onclick="toggle(26);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> rescue ::Exception =&gt; boom
</code></li>
<li class="post-context-line"><code> invoke { handle_exception!(boom) }
</code></li>
<li class="post-context-line"><code> ensure
</code></li>
<li class="post-context-line"><code> begin
</code></li>
<li class="post-context-line"><code> filter! :after unless env[&#x27;sinatra.static_file&#x27;]
</code></li>
<li class="post-context-line"><code> rescue ::Exception =&gt; boom
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in invoke</strong></code>
</li>
<li class="code framework">
<ol start="1065"
class="pre-context" id="pre-27"
onclick="toggle(27);">
<li class="pre-context-line"><code> env[&#x27;sinatra.static_file&#x27;] = path
</code></li>
<li class="pre-context-line"><code> cache_control(*settings.static_cache_control) if settings.static_cache_control?
</code></li>
<li class="pre-context-line"><code> send_file path, options.merge(:disposition =&gt; nil)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run the block with &#x27;throw :halt&#x27; support and apply result to the response.
</code></li>
<li class="pre-context-line"><code> def invoke
</code></li>
</ol>
<ol start="1072" class="context" id="27"
onclick="toggle(27);">
<li class="context-line" id="context-27"><code> res = catch(:halt) { yield }</code></li>
</ol>
<ol start="1073" class="post-context"
id="post-27" onclick="toggle(27);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> res = [res] if Integer === res or String === res
</code></li>
<li class="post-context-line"><code> if Array === res and Integer === res.first
</code></li>
<li class="post-context-line"><code> res = res.dup
</code></li>
<li class="post-context-line"><code> status(res.shift)
</code></li>
<li class="post-context-line"><code> body(res.pop)
</code></li>
<li class="post-context-line"><code> headers(*res)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>catch</strong></code>
</li>
<li class="code framework">
<ol start="1065"
class="pre-context" id="pre-28"
onclick="toggle(28);">
<li class="pre-context-line"><code> env[&#x27;sinatra.static_file&#x27;] = path
</code></li>
<li class="pre-context-line"><code> cache_control(*settings.static_cache_control) if settings.static_cache_control?
</code></li>
<li class="pre-context-line"><code> send_file path, options.merge(:disposition =&gt; nil)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run the block with &#x27;throw :halt&#x27; support and apply result to the response.
</code></li>
<li class="pre-context-line"><code> def invoke
</code></li>
</ol>
<ol start="1072" class="context" id="28"
onclick="toggle(28);">
<li class="context-line" id="context-28"><code> res = catch(:halt) { yield }</code></li>
</ol>
<ol start="1073" class="post-context"
id="post-28" onclick="toggle(28);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> res = [res] if Integer === res or String === res
</code></li>
<li class="post-context-line"><code> if Array === res and Integer === res.first
</code></li>
<li class="post-context-line"><code> res = res.dup
</code></li>
<li class="post-context-line"><code> status(res.shift)
</code></li>
<li class="post-context-line"><code> body(res.pop)
</code></li>
<li class="post-context-line"><code> headers(*res)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>invoke</strong></code>
</li>
<li class="code framework">
<ol start="1065"
class="pre-context" id="pre-29"
onclick="toggle(29);">
<li class="pre-context-line"><code> env[&#x27;sinatra.static_file&#x27;] = path
</code></li>
<li class="pre-context-line"><code> cache_control(*settings.static_cache_control) if settings.static_cache_control?
</code></li>
<li class="pre-context-line"><code> send_file path, options.merge(:disposition =&gt; nil)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run the block with &#x27;throw :halt&#x27; support and apply result to the response.
</code></li>
<li class="pre-context-line"><code> def invoke
</code></li>
</ol>
<ol start="1072" class="context" id="29"
onclick="toggle(29);">
<li class="context-line" id="context-29"><code> res = catch(:halt) { yield }</code></li>
</ol>
<ol start="1073" class="post-context"
id="post-29" onclick="toggle(29);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> res = [res] if Integer === res or String === res
</code></li>
<li class="post-context-line"><code> if Array === res and Integer === res.first
</code></li>
<li class="post-context-line"><code> res = res.dup
</code></li>
<li class="post-context-line"><code> status(res.shift)
</code></li>
<li class="post-context-line"><code> body(res.pop)
</code></li>
<li class="post-context-line"><code> headers(*res)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>dispatch!</strong></code>
</li>
<li class="code framework">
<ol start="1088"
class="pre-context" id="pre-30"
onclick="toggle(30);">
<li class="pre-context-line"><code> # Avoid passing frozen string in force_encoding
</code></li>
<li class="pre-context-line"><code> @params.merge!(@request.params).each do |key, val|
</code></li>
<li class="pre-context-line"><code> next unless val.respond_to?(:force_encoding)
</code></li>
<li class="pre-context-line"><code> val = val.dup if val.frozen?
</code></li>
<li class="pre-context-line"><code> @params[key] = force_encoding(val)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
</ol>
<ol start="1095" class="context" id="30"
onclick="toggle(30);">
<li class="context-line" id="context-30"><code> invoke do</code></li>
</ol>
<ol start="1096" class="post-context"
id="post-30" onclick="toggle(30);">
<li class="post-context-line"><code> static! if settings.static? &amp;&amp; (request.get? || request.head?)
</code></li>
<li class="post-context-line"><code> filter! :before
</code></li>
<li class="post-context-line"><code> route!
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> rescue ::Exception =&gt; boom
</code></li>
<li class="post-context-line"><code> invoke { handle_exception!(boom) }
</code></li>
<li class="post-context-line"><code> ensure
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in call!</strong></code>
</li>
<li class="code framework">
<ol start="912"
class="pre-context" id="pre-31"
onclick="toggle(31);">
<li class="pre-context-line"><code> @env = env
</code></li>
<li class="pre-context-line"><code> @params = IndifferentHash.new
</code></li>
<li class="pre-context-line"><code> @request = Request.new(env)
</code></li>
<li class="pre-context-line"><code> @response = Response.new
</code></li>
<li class="pre-context-line"><code> template_cache.clear if settings.reload_templates
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> @response[&#x27;Content-Type&#x27;] = nil
</code></li>
</ol>
<ol start="919" class="context" id="31"
onclick="toggle(31);">
<li class="context-line" id="context-31"><code> invoke { dispatch! }</code></li>
</ol>
<ol start="920" class="post-context"
id="post-31" onclick="toggle(31);">
<li class="post-context-line"><code> invoke { error_block!(response.status) } unless @env[&#x27;sinatra.error&#x27;]
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> unless @response[&#x27;Content-Type&#x27;]
</code></li>
<li class="post-context-line"><code> if Array === body and body[0].respond_to? :content_type
</code></li>
<li class="post-context-line"><code> content_type body[0].content_type
</code></li>
<li class="post-context-line"><code> else
</code></li>
<li class="post-context-line"><code> content_type :html
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>block in invoke</strong></code>
</li>
<li class="code framework">
<ol start="1065"
class="pre-context" id="pre-32"
onclick="toggle(32);">
<li class="pre-context-line"><code> env[&#x27;sinatra.static_file&#x27;] = path
</code></li>
<li class="pre-context-line"><code> cache_control(*settings.static_cache_control) if settings.static_cache_control?
</code></li>
<li class="pre-context-line"><code> send_file path, options.merge(:disposition =&gt; nil)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run the block with &#x27;throw :halt&#x27; support and apply result to the response.
</code></li>
<li class="pre-context-line"><code> def invoke
</code></li>
</ol>
<ol start="1072" class="context" id="32"
onclick="toggle(32);">
<li class="context-line" id="context-32"><code> res = catch(:halt) { yield }</code></li>
</ol>
<ol start="1073" class="post-context"
id="post-32" onclick="toggle(32);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> res = [res] if Integer === res or String === res
</code></li>
<li class="post-context-line"><code> if Array === res and Integer === res.first
</code></li>
<li class="post-context-line"><code> res = res.dup
</code></li>
<li class="post-context-line"><code> status(res.shift)
</code></li>
<li class="post-context-line"><code> body(res.pop)
</code></li>
<li class="post-context-line"><code> headers(*res)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>catch</strong></code>
</li>
<li class="code framework">
<ol start="1065"
class="pre-context" id="pre-33"
onclick="toggle(33);">
<li class="pre-context-line"><code> env[&#x27;sinatra.static_file&#x27;] = path
</code></li>
<li class="pre-context-line"><code> cache_control(*settings.static_cache_control) if settings.static_cache_control?
</code></li>
<li class="pre-context-line"><code> send_file path, options.merge(:disposition =&gt; nil)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run the block with &#x27;throw :halt&#x27; support and apply result to the response.
</code></li>
<li class="pre-context-line"><code> def invoke
</code></li>
</ol>
<ol start="1072" class="context" id="33"
onclick="toggle(33);">
<li class="context-line" id="context-33"><code> res = catch(:halt) { yield }</code></li>
</ol>
<ol start="1073" class="post-context"
id="post-33" onclick="toggle(33);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> res = [res] if Integer === res or String === res
</code></li>
<li class="post-context-line"><code> if Array === res and Integer === res.first
</code></li>
<li class="post-context-line"><code> res = res.dup
</code></li>
<li class="post-context-line"><code> status(res.shift)
</code></li>
<li class="post-context-line"><code> body(res.pop)
</code></li>
<li class="post-context-line"><code> headers(*res)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>invoke</strong></code>
</li>
<li class="code framework">
<ol start="1065"
class="pre-context" id="pre-34"
onclick="toggle(34);">
<li class="pre-context-line"><code> env[&#x27;sinatra.static_file&#x27;] = path
</code></li>
<li class="pre-context-line"><code> cache_control(*settings.static_cache_control) if settings.static_cache_control?
</code></li>
<li class="pre-context-line"><code> send_file path, options.merge(:disposition =&gt; nil)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Run the block with &#x27;throw :halt&#x27; support and apply result to the response.
</code></li>
<li class="pre-context-line"><code> def invoke
</code></li>
</ol>
<ol start="1072" class="context" id="34"
onclick="toggle(34);">
<li class="context-line" id="context-34"><code> res = catch(:halt) { yield }</code></li>
</ol>
<ol start="1073" class="post-context"
id="post-34" onclick="toggle(34);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> res = [res] if Integer === res or String === res
</code></li>
<li class="post-context-line"><code> if Array === res and Integer === res.first
</code></li>
<li class="post-context-line"><code> res = res.dup
</code></li>
<li class="post-context-line"><code> status(res.shift)
</code></li>
<li class="post-context-line"><code> body(res.pop)
</code></li>
<li class="post-context-line"><code> headers(*res)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>call!</strong></code>
</li>
<li class="code framework">
<ol start="912"
class="pre-context" id="pre-35"
onclick="toggle(35);">
<li class="pre-context-line"><code> @env = env
</code></li>
<li class="pre-context-line"><code> @params = IndifferentHash.new
</code></li>
<li class="pre-context-line"><code> @request = Request.new(env)
</code></li>
<li class="pre-context-line"><code> @response = Response.new
</code></li>
<li class="pre-context-line"><code> template_cache.clear if settings.reload_templates
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> @response[&#x27;Content-Type&#x27;] = nil
</code></li>
</ol>
<ol start="919" class="context" id="35"
onclick="toggle(35);">
<li class="context-line" id="context-35"><code> invoke { dispatch! }</code></li>
</ol>
<ol start="920" class="post-context"
id="post-35" onclick="toggle(35);">
<li class="post-context-line"><code> invoke { error_block!(response.status) } unless @env[&#x27;sinatra.error&#x27;]
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> unless @response[&#x27;Content-Type&#x27;]
</code></li>
<li class="post-context-line"><code> if Array === body and body[0].respond_to? :content_type
</code></li>
<li class="post-context-line"><code> content_type body[0].content_type
</code></li>
<li class="post-context-line"><code> else
</code></li>
<li class="post-context-line"><code> content_type :html
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code framework">
<ol start="901"
class="pre-context" id="pre-36"
onclick="toggle(36);">
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> @template_cache = Tilt::Cache.new
</code></li>
<li class="pre-context-line"><code> yield self if block_given?
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> # Rack call interface.
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="908" class="context" id="36"
onclick="toggle(36);">
<li class="context-line" id="context-36"><code> dup.call!(env)</code></li>
</ol>
<ol start="909" class="post-context"
id="post-36" onclick="toggle(36);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def call!(env) # :nodoc:
</code></li>
<li class="post-context-line"><code> @env = env
</code></li>
<li class="post-context-line"><code> @params = IndifferentHash.new
</code></li>
<li class="post-context-line"><code> @request = Request.new(env)
</code></li>
<li class="post-context-line"><code> @response = Response.new
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-protection-2.0.8.1&#x2F;lib&#x2F;rack&#x2F;protection&#x2F;xss_header.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="11"
class="pre-context" id="pre-37"
onclick="toggle(37);">
<li class="pre-context-line"><code> #
</code></li>
<li class="pre-context-line"><code> # Options:
</code></li>
<li class="pre-context-line"><code> # xss_mode:: How the browser should prevent the attack (default: :block)
</code></li>
<li class="pre-context-line"><code> class XSSHeader &lt; Base
</code></li>
<li class="pre-context-line"><code> default_options :xss_mode =&gt; :block, :nosniff =&gt; true
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="18" class="context" id="37"
onclick="toggle(37);">
<li class="context-line" id="context-37"><code> status, headers, body = @app.call(env)</code></li>
</ol>
<ol start="19" class="post-context"
id="post-37" onclick="toggle(37);">
<li class="post-context-line"><code> headers[&#x27;X-XSS-Protection&#x27;] ||= &quot;1; mode=#{options[:xss_mode]}&quot; if html? headers
</code></li>
<li class="post-context-line"><code> headers[&#x27;X-Content-Type-Options&#x27;] ||= &#x27;nosniff&#x27; if options[:nosniff]
</code></li>
<li class="post-context-line"><code> [status, headers, body]
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-protection-2.0.8.1&#x2F;lib&#x2F;rack&#x2F;protection&#x2F;path_traversal.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="9"
class="pre-context" id="pre-38"
onclick="toggle(38);">
<li class="pre-context-line"><code> #
</code></li>
<li class="pre-context-line"><code> # Unescapes &#x27;&#x2F;&#x27; and &#x27;.&#x27;, expands +path_info+.
</code></li>
<li class="pre-context-line"><code> # Thus &lt;tt&gt;GET &#x2F;foo&#x2F;%2e%2e%2fbar&lt;&#x2F;tt&gt; becomes &lt;tt&gt;GET &#x2F;bar&lt;&#x2F;tt&gt;.
</code></li>
<li class="pre-context-line"><code> class PathTraversal &lt; Base
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> path_was = env[&quot;PATH_INFO&quot;]
</code></li>
<li class="pre-context-line"><code> env[&quot;PATH_INFO&quot;] = cleanup path_was if path_was &amp;&amp; !path_was.empty?
</code></li>
</ol>
<ol start="16" class="context" id="38"
onclick="toggle(38);">
<li class="context-line" id="context-38"><code> app.call env</code></li>
</ol>
<ol start="17" class="post-context"
id="post-38" onclick="toggle(38);">
<li class="post-context-line"><code> ensure
</code></li>
<li class="post-context-line"><code> env[&quot;PATH_INFO&quot;] = path_was
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def cleanup(path)
</code></li>
<li class="post-context-line"><code> encoding = path.encoding
</code></li>
<li class="post-context-line"><code> dot = &#x27;.&#x27;.encode(encoding)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-protection-2.0.8.1&#x2F;lib&#x2F;rack&#x2F;protection&#x2F;json_csrf.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="19"
class="pre-context" id="pre-39"
onclick="toggle(39);">
<li class="pre-context-line"><code> class JsonCsrf &lt; Base
</code></li>
<li class="pre-context-line"><code> default_options :allow_if =&gt; nil
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> alias react deny
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> request = Request.new(env)
</code></li>
</ol>
<ol start="26" class="context" id="39"
onclick="toggle(39);">
<li class="context-line" id="context-39"><code> status, headers, body = app.call(env)</code></li>
</ol>
<ol start="27" class="post-context"
id="post-39" onclick="toggle(39);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> if has_vector?(request, headers)
</code></li>
<li class="post-context-line"><code> warn env, &quot;attack prevented by #{self.class}&quot;
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> react_and_close(env, body) or [status, headers, body]
</code></li>
<li class="post-context-line"><code> else
</code></li>
<li class="post-context-line"><code> [status, headers, body]
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-protection-2.0.8.1&#x2F;lib&#x2F;rack&#x2F;protection&#x2F;base.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="43"
class="pre-context" id="pre-40"
onclick="toggle(40);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> unless accepts? env
</code></li>
<li class="pre-context-line"><code> instrument env
</code></li>
<li class="pre-context-line"><code> result = react env
</code></li>
<li class="pre-context-line"><code> end
</code></li>
</ol>
<ol start="50" class="context" id="40"
onclick="toggle(40);">
<li class="context-line" id="context-40"><code> result or app.call(env)</code></li>
</ol>
<ol start="51" class="post-context"
id="post-40" onclick="toggle(40);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def react(env)
</code></li>
<li class="post-context-line"><code> result = send(options[:reaction], env)
</code></li>
<li class="post-context-line"><code> result if Array === result and result.size == 3
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-protection-2.0.8.1&#x2F;lib&#x2F;rack&#x2F;protection&#x2F;base.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="43"
class="pre-context" id="pre-41"
onclick="toggle(41);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> unless accepts? env
</code></li>
<li class="pre-context-line"><code> instrument env
</code></li>
<li class="pre-context-line"><code> result = react env
</code></li>
<li class="pre-context-line"><code> end
</code></li>
</ol>
<ol start="50" class="context" id="41"
onclick="toggle(41);">
<li class="context-line" id="context-41"><code> result or app.call(env)</code></li>
</ol>
<ol start="51" class="post-context"
id="post-41" onclick="toggle(41);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def react(env)
</code></li>
<li class="post-context-line"><code> result = send(options[:reaction], env)
</code></li>
<li class="post-context-line"><code> result if Array === result and result.size == 3
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-protection-2.0.8.1&#x2F;lib&#x2F;rack&#x2F;protection&#x2F;frame_options.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="24"
class="pre-context" id="pre-42"
onclick="toggle(42);">
<li class="pre-context-line"><code> frame_options = options[:frame_options]
</code></li>
<li class="pre-context-line"><code> frame_options = options[:frame_options].to_s.upcase unless frame_options.respond_to? :to_str
</code></li>
<li class="pre-context-line"><code> frame_options.to_str
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="31" class="context" id="42"
onclick="toggle(42);">
<li class="context-line" id="context-42"><code> status, headers, body = @app.call(env)</code></li>
</ol>
<ol start="32" class="post-context"
id="post-42" onclick="toggle(42);">
<li class="post-context-line"><code> headers[&#x27;X-Frame-Options&#x27;] ||= frame_options if html? headers
</code></li>
<li class="post-context-line"><code> [status, headers, body]
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-2.2.2&#x2F;lib&#x2F;rack&#x2F;null_logger.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="4"
class="pre-context" id="pre-43"
onclick="toggle(43);">
<li class="pre-context-line"><code> class NullLogger
</code></li>
<li class="pre-context-line"><code> def initialize(app)
</code></li>
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> env[RACK_LOGGER] = self
</code></li>
</ol>
<ol start="11" class="context" id="43"
onclick="toggle(43);">
<li class="context-line" id="context-43"><code> @app.call(env)</code></li>
</ol>
<ol start="12" class="post-context"
id="post-43" onclick="toggle(43);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def info(progname = nil, &amp;block); end
</code></li>
<li class="post-context-line"><code> def debug(progname = nil, &amp;block); end
</code></li>
<li class="post-context-line"><code> def warn(progname = nil, &amp;block); end
</code></li>
<li class="post-context-line"><code> def error(progname = nil, &amp;block); end
</code></li>
<li class="post-context-line"><code> def fatal(progname = nil, &amp;block); end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-2.2.2&#x2F;lib&#x2F;rack&#x2F;head.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="5"
class="pre-context" id="pre-44"
onclick="toggle(44);">
<li class="pre-context-line"><code> # all other requests unchanged.
</code></li>
<li class="pre-context-line"><code> class Head
</code></li>
<li class="pre-context-line"><code> def initialize(app)
</code></li>
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="12" class="context" id="44"
onclick="toggle(44);">
<li class="context-line" id="context-44"><code> status, headers, body = @app.call(env)</code></li>
</ol>
<ol start="13" class="post-context"
id="post-44" onclick="toggle(44);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> if env[REQUEST_METHOD] == HEAD
</code></li>
<li class="post-context-line"><code> [
</code></li>
<li class="post-context-line"><code> status, headers, Rack::BodyProxy.new([]) do
</code></li>
<li class="post-context-line"><code> body.close if body.respond_to? :close
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> ]
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;show_exceptions.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code framework">
<ol start="15"
class="pre-context" id="pre-45"
onclick="toggle(45);">
<li class="pre-context-line"><code> def @@eats_errors.puts(*) end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def initialize(app)
</code></li>
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="22" class="context" id="45"
onclick="toggle(45);">
<li class="context-line" id="context-45"><code> @app.call(env)</code></li>
</ol>
<ol start="23" class="post-context"
id="post-45" onclick="toggle(45);">
<li class="post-context-line"><code> rescue Exception =&gt; e
</code></li>
<li class="post-context-line"><code> errors, env[&quot;rack.errors&quot;] = env[&quot;rack.errors&quot;], @@eats_errors
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> if prefers_plain_text?(env)
</code></li>
<li class="post-context-line"><code> content_type = &quot;text&#x2F;plain&quot;
</code></li>
<li class="post-context-line"><code> body = dump_exception(e)
</code></li>
<li class="post-context-line"><code> else
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code framework">
<ol start="187"
class="pre-context" id="pre-46"
onclick="toggle(46);">
<li class="pre-context-line"><code> # Some Rack handlers (Thin, Rainbows!) implement an extended body object protocol, however,
</code></li>
<li class="pre-context-line"><code> # some middleware (namely Rack::Lint) will break it by not mirroring the methods in question.
</code></li>
<li class="pre-context-line"><code> # This middleware will detect an extended body object and will make sure it reaches the
</code></li>
<li class="pre-context-line"><code> # handler directly. We do this here, so our middleware and middleware set up by the app will
</code></li>
<li class="pre-context-line"><code> # still be able to run.
</code></li>
<li class="pre-context-line"><code> class ExtendedRack &lt; Struct.new(:app)
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="194" class="context" id="46"
onclick="toggle(46);">
<li class="context-line" id="context-46"><code> result, callback = app.call(env), env[&#x27;async.callback&#x27;]</code></li>
</ol>
<ol start="195" class="post-context"
id="post-46" onclick="toggle(46);">
<li class="post-context-line"><code> return result unless callback and async?(*result)
</code></li>
<li class="post-context-line"><code> after_response { callback.call result }
</code></li>
<li class="post-context-line"><code> setup_close(env, *result)
</code></li>
<li class="post-context-line"><code> throw :async
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> private
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info framework">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;sinatra-2.0.8.1&#x2F;lib&#x2F;sinatra&#x2F;base.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code framework">
<ol start="1944"
class="pre-context" id="pre-47"
onclick="toggle(47);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def helpers
</code></li>
<li class="pre-context-line"><code> @instance
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="1951" class="context" id="47"
onclick="toggle(47);">
<li class="context-line" id="context-47"><code> @stack.call(env)</code></li>
</ol>
<ol start="1952" class="post-context"
id="post-47" onclick="toggle(47);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def inspect
</code></li>
<li class="post-context-line"><code> &quot;#&lt;#{@instance.class} app_file=#{settings.app_file.inspect}&gt;&quot;
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;server_health_check-rack-0.1.0&#x2F;lib&#x2F;server_health_check_rack&#x2F;middleware.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="5"
class="pre-context" id="pre-48"
onclick="toggle(48);">
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> if ServerHealthCheckRack::Config.path?(env[&quot;PATH_INFO&quot;])
</code></li>
<li class="pre-context-line"><code> check = health_check(env[&quot;PATH_INFO&quot;])
</code></li>
<li class="pre-context-line"><code> [check.http_status, response_headers, [check.to_json]]
</code></li>
<li class="pre-context-line"><code> else
</code></li>
</ol>
<ol start="12" class="context" id="48"
onclick="toggle(48);">
<li class="context-line" id="context-48"><code> @app.call(env)</code></li>
</ol>
<ol start="13" class="post-context"
id="post-48" onclick="toggle(48);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> private
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def health_check(rack_path_info)
</code></li>
<li class="post-context-line"><code> checks = ServerHealthCheckRack::Config.path_to_health_checks(rack_path_info)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;gemstash-2.1.0&#x2F;lib&#x2F;gemstash&#x2F;gem_source&#x2F;rack_middleware.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="14"
class="pre-context" id="pre-49"
onclick="toggle(49);">
<li class="pre-context-line"><code> Gemstash::GemSource.sources.each do |source|
</code></li>
<li class="pre-context-line"><code> next unless source.matches?(env)
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> env[&quot;gemstash.gem_source&quot;] = source
</code></li>
<li class="pre-context-line"><code> break
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
</ol>
<ol start="21" class="context" id="49"
onclick="toggle(49);">
<li class="context-line" id="context-49"><code> @app.call(env)</code></li>
</ol>
<ol start="22" class="post-context"
id="post-49" onclick="toggle(49);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>end
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;gemstash-2.1.0&#x2F;lib&#x2F;gemstash&#x2F;env.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="31"
class="pre-context" id="pre-50"
onclick="toggle(50);">
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> @gemstash_env = gemstash_env
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> env[&quot;gemstash.env&quot;] = @gemstash_env
</code></li>
<li class="pre-context-line"><code> Gemstash::Env.current = @gemstash_env
</code></li>
</ol>
<ol start="38" class="context" id="50"
onclick="toggle(50);">
<li class="context-line" id="context-50"><code> @app.call(env)</code></li>
</ol>
<ol start="39" class="post-context"
id="post-50" onclick="toggle(50);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> def initialize(config = nil, cache: nil, db: nil)
</code></li>
<li class="post-context-line"><code> @config = config
</code></li>
<li class="post-context-line"><code> @cache = cache
</code></li>
<li class="post-context-line"><code> @db = db
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;puma-4.3.5&#x2F;lib&#x2F;puma&#x2F;commonlogger.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="33"
class="pre-context" id="pre-51"
onclick="toggle(51);">
<li class="pre-context-line"><code> def initialize(app, logger=nil)
</code></li>
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> @logger = logger
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> began_at = Time.now
</code></li>
</ol>
<ol start="40" class="context" id="51"
onclick="toggle(51);">
<li class="context-line" id="context-51"><code> status, header, body = @app.call(env)</code></li>
</ol>
<ol start="41" class="post-context"
id="post-51" onclick="toggle(51);">
<li class="post-context-line"><code> header = Util::HeaderHash.new(header)
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # If we&#x27;ve been hijacked, then output a special line
</code></li>
<li class="post-context-line"><code> if env[&#x27;rack.hijack_io&#x27;]
</code></li>
<li class="post-context-line"><code> log_hijacking(env, &#x27;HIJACK&#x27;, header, began_at)
</code></li>
<li class="post-context-line"><code> else
</code></li>
<li class="post-context-line"><code> ary = env[&#x27;rack.after_reply&#x27;]
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;gemstash-2.1.0&#x2F;lib&#x2F;gemstash&#x2F;logging.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="51"
class="pre-context" id="pre-52"
onclick="toggle(52);">
<li class="pre-context-line"><code> class RackMiddleware
</code></li>
<li class="pre-context-line"><code> def initialize(app)
</code></li>
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> env[&quot;rack.logger&quot;] = Gemstash::Logging.logger
</code></li>
</ol>
<ol start="58" class="context" id="52"
onclick="toggle(52);">
<li class="context-line" id="context-52"><code> @app.call(env)</code></li>
</ol>
<ol start="59" class="post-context"
id="post-52" onclick="toggle(52);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # Logger that looks like a stream, for Puma and Rack to log to.
</code></li>
<li class="post-context-line"><code> class StreamLogger
</code></li>
<li class="post-context-line"><code> def self.puma_events
</code></li>
<li class="post-context-line"><code> Puma::Events.new(for_stdout, for_stderr)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;rack-2.2.2&#x2F;lib&#x2F;rack&#x2F;deflater.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="37"
class="pre-context" id="pre-53"
onclick="toggle(53);">
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> @condition = options[:if]
</code></li>
<li class="pre-context-line"><code> @compressible_types = options[:include]
</code></li>
<li class="pre-context-line"><code> @sync = options.fetch(:sync, true)
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
</ol>
<ol start="44" class="context" id="53"
onclick="toggle(53);">
<li class="context-line" id="context-53"><code> status, headers, body = @app.call(env)</code></li>
</ol>
<ol start="45" class="post-context"
id="post-53" onclick="toggle(53);">
<li class="post-context-line"><code> headers = Utils::HeaderHash[headers]
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> unless should_deflate?(env, status, headers, body)
</code></li>
<li class="post-context-line"><code> return [status, headers, body]
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> request = Request.new(env)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;puma-4.3.5&#x2F;lib&#x2F;puma&#x2F;configuration.rb</code> in
<code><strong>call</strong></code>
</li>
<li class="code system">
<ol start="221"
class="pre-context" id="pre-54"
onclick="toggle(54);">
<li class="pre-context-line"><code> def initialize(config, app)
</code></li>
<li class="pre-context-line"><code> @config = config
</code></li>
<li class="pre-context-line"><code> @app = app
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> def call(env)
</code></li>
<li class="pre-context-line"><code> env[Const::PUMA_CONFIG] = @config
</code></li>
</ol>
<ol start="228" class="context" id="54"
onclick="toggle(54);">
<li class="context-line" id="context-54"><code> @app.call(env)</code></li>
</ol>
<ol start="229" class="post-context"
id="post-54" onclick="toggle(54);">
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> # Indicate if there is a properly configured app
</code></li>
<li class="post-context-line"><code> #
</code></li>
<li class="post-context-line"><code> def app_configured?
</code></li>
<li class="post-context-line"><code> @options[:app] || File.exist?(rackup)
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;puma-4.3.5&#x2F;lib&#x2F;puma&#x2F;server.rb</code> in
<code><strong>handle_request</strong></code>
</li>
<li class="code system">
<ol start="706"
class="pre-context" id="pre-55"
onclick="toggle(55);">
<li class="pre-context-line"><code> # A rack extension. If the app writes #call&#x27;ables to this
</code></li>
<li class="pre-context-line"><code> # array, we will invoke them when the request is done.
</code></li>
<li class="pre-context-line"><code> #
</code></li>
<li class="pre-context-line"><code> after_reply = env[RACK_AFTER_REPLY] = []
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> begin
</code></li>
<li class="pre-context-line"><code> begin
</code></li>
</ol>
<ol start="713" class="context" id="55"
onclick="toggle(55);">
<li class="context-line" id="context-55"><code> status, headers, res_body = @app.call(env)</code></li>
</ol>
<ol start="714" class="post-context"
id="post-55" onclick="toggle(55);">
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> return :async if req.hijacked
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> status = status.to_i
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> if status == -1
</code></li>
<li class="post-context-line"><code> unless headers.empty? and res_body == []
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;puma-4.3.5&#x2F;lib&#x2F;puma&#x2F;server.rb</code> in
<code><strong>process_client</strong></code>
</li>
<li class="code system">
<ol start="465"
class="pre-context" id="pre-56"
onclick="toggle(56);">
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> clean_thread_locals = @options[:clean_thread_locals]
</code></li>
<li class="pre-context-line"><code> close_socket = true
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> requests = 0
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> while true
</code></li>
</ol>
<ol start="472" class="context" id="56"
onclick="toggle(56);">
<li class="context-line" id="context-56"><code> case handle_request(client, buffer)</code></li>
</ol>
<ol start="473" class="post-context"
id="post-56" onclick="toggle(56);">
<li class="post-context-line"><code> when false
</code></li>
<li class="post-context-line"><code> return
</code></li>
<li class="post-context-line"><code> when :async
</code></li>
<li class="post-context-line"><code> close_socket = false
</code></li>
<li class="post-context-line"><code> return
</code></li>
<li class="post-context-line"><code> when true
</code></li>
<li class="post-context-line"><code> return unless @queue_requests
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;puma-4.3.5&#x2F;lib&#x2F;puma&#x2F;server.rb</code> in
<code><strong>block in run</strong></code>
</li>
<li class="code system">
<ol start="321"
class="pre-context" id="pre-57"
onclick="toggle(57);">
<li class="pre-context-line"><code> client.close
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> @events.parse_error self, client.env, e
</code></li>
<li class="pre-context-line"><code> rescue ConnectionError, EOFError
</code></li>
<li class="pre-context-line"><code> client.close
</code></li>
<li class="pre-context-line"><code> else
</code></li>
<li class="pre-context-line"><code> if process_now
</code></li>
</ol>
<ol start="328" class="context" id="57"
onclick="toggle(57);">
<li class="context-line" id="context-57"><code> process_client client, buffer</code></li>
</ol>
<ol start="329" class="post-context"
id="post-57" onclick="toggle(57);">
<li class="post-context-line"><code> else
</code></li>
<li class="post-context-line"><code> client.set_timeout @first_data_timeout
</code></li>
<li class="post-context-line"><code> @reactor.add client
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
</ol>
<div class="clear"></div>
</li>
<li class="frame-info system">
<code>&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;puma-4.3.5&#x2F;lib&#x2F;puma&#x2F;thread_pool.rb</code> in
<code><strong>block in spawn_thread</strong></code>
</li>
<li class="code system">
<ol start="127"
class="pre-context" id="pre-58"
onclick="toggle(58);">
<li class="pre-context-line"><code> break unless continue
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> if @clean_thread_locals
</code></li>
<li class="pre-context-line"><code> ThreadPool.clean_thread_locals
</code></li>
<li class="pre-context-line"><code> end
</code></li>
<li class="pre-context-line"><code>
</code></li>
<li class="pre-context-line"><code> begin
</code></li>
</ol>
<ol start="134" class="context" id="58"
onclick="toggle(58);">
<li class="context-line" id="context-58"><code> block.call(work, *extra)</code></li>
</ol>
<ol start="135" class="post-context"
id="post-58" onclick="toggle(58);">
<li class="post-context-line"><code> rescue Exception =&gt; e
</code></li>
<li class="post-context-line"><code> STDERR.puts &quot;Error reached top of thread-pool: #{e.message} (#{e.class})&quot;
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code> end
</code></li>
<li class="post-context-line"><code>
</code></li>
<li class="post-context-line"><code> mutex.synchronize do
</code></li>
<li class="post-context-line"><code> @spawned -= 1
</code></li>
</ol>
<div class="clear"></div>
</li>
</ul>
</div> <!-- /BACKTRACE -->
<div id="get">
<h3 id="get-info">GET</h3>
<p class="no-data">No GET data.</p>
<div class="clear"></div>
</div> <!-- /GET -->
<div id="post">
<h3 id="post-info">POST</h3>
<table class="req">
<tr>
<th>Variable</th>
<th>Value</th>
</tr>
<tr>
<td>gem_name</td>
<td class="code"><div>&quot;private_example&quot;</div></td>
</tr>
<tr>
<td>version</td>
<td class="code"><div>&quot;0.1.0&quot;</div></td>
</tr>
</table>
<div class="clear"></div>
</div> <!-- /POST -->
<div id="cookies">
<h3 id="cookie-info">COOKIES</h3>
<p class="no-data">No cookie data.</p>
<div class="clear"></div>
</div> <!-- /COOKIES -->
<div id="rack">
<h3 id="env-info">Rack ENV</h3>
<table class="req">
<tr>
<th>Variable</th>
<th>Value</th>
</tr>
<tr>
<td>CONTENT_LENGTH</td>
<td class="code"><div>38</div></td>
</tr>
<tr>
<td>CONTENT_TYPE</td>
<td class="code"><div>application&#x2F;x-www-form-urlencoded</div></td>
</tr>
<tr>
<td>GATEWAY_INTERFACE</td>
<td class="code"><div>CGI&#x2F;1.2</div></td>
</tr>
<tr>
<td>HTTP_ACCEPT</td>
<td class="code"><div>*&#x2F;*</div></td>
</tr>
<tr>
<td>HTTP_ACCEPT_ENCODING</td>
<td class="code"><div>gzip;q=1.0,deflate;q=0.6,identity;q=0.3</div></td>
</tr>
<tr>
<td>HTTP_AUTHORIZATION</td>
<td class="code"><div>72b4857b4c60c2d0aec84092c4d89d07</div></td>
</tr>
<tr>
<td>HTTP_CONNECTION</td>
<td class="code"><div>keep-alive</div></td>
</tr>
<tr>
<td>HTTP_HOST</td>
<td class="code"><div>localhost:9292</div></td>
</tr>
<tr>
<td>HTTP_KEEP_ALIVE</td>
<td class="code"><div>30</div></td>
</tr>
<tr>
<td>HTTP_USER_AGENT</td>
<td class="code"><div>Ruby, RubyGems&#x2F;3.0.3 x86_64-darwin-19 Ruby&#x2F;2.6.3 (2019-04-16 patchlevel 62)</div></td>
</tr>
<tr>
<td>HTTP_VERSION</td>
<td class="code"><div>HTTP&#x2F;1.1</div></td>
</tr>
<tr>
<td>PATH_INFO</td>
<td class="code"><div>&#x2F;api&#x2F;v1&#x2F;gems&#x2F;yank</div></td>
</tr>
<tr>
<td>QUERY_STRING</td>
<td class="code"><div></div></td>
</tr>
<tr>
<td>REMOTE_ADDR</td>
<td class="code"><div>127.0.0.1</div></td>
</tr>
<tr>
<td>REQUEST_METHOD</td>
<td class="code"><div>DELETE</div></td>
</tr>
<tr>
<td>REQUEST_PATH</td>
<td class="code"><div>&#x2F;private&#x2F;api&#x2F;v1&#x2F;gems&#x2F;yank</div></td>
</tr>
<tr>
<td>REQUEST_URI</td>
<td class="code"><div>&#x2F;api&#x2F;v1&#x2F;gems&#x2F;yank</div></td>
</tr>
<tr>
<td>SCRIPT_NAME</td>
<td class="code"><div></div></td>
</tr>
<tr>
<td>SERVER_NAME</td>
<td class="code"><div>localhost</div></td>
</tr>
<tr>
<td>SERVER_PORT</td>
<td class="code"><div>9292</div></td>
</tr>
<tr>
<td>SERVER_PROTOCOL</td>
<td class="code"><div>HTTP&#x2F;1.1</div></td>
</tr>
<tr>
<td>SERVER_SOFTWARE</td>
<td class="code"><div>puma 4.3.5 Mysterious Traveller</div></td>
</tr>
<tr>
<td>gemstash.env</td>
<td class="code"><div>#&lt;Gemstash::Env:0x00007fe7781b98d0 @config=#&lt;Gemstash::Configuration:0x00007fe7781085a8 @config={:cache_type=&gt;&quot;memory&quot;, :base_path=&gt;&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;.gemstash&quot;, :db_adapter=&gt;&quot;sqlite3&quot;, :bind=&gt;&quot;tcp:&#x2F;&#x2F;0.0.0.0:9292&quot;, :rubygems_url=&gt;&quot;https:&#x2F;&#x2F;rubygems.org&quot;, :ignore_gemfile_source=&gt;false, :protected_fetch=&gt;false, :fetch_timeout=&gt;20, :db_connection_options=&gt;{}, :puma_threads=&gt;16, :puma_workers=&gt;1, :cache_expiration=&gt;1800, :cache_max_size=&gt;500, :storage_adapter=&gt;&quot;local&quot;}&gt;, @cache=#&lt;Gemstash::Cache:0x00007fe7783bb890 @client=#&lt;Gemstash::LruReduxClient:0x00007fe7783bba70 @cache=#&lt;LruRedux::TTL::ThreadSafeCache:0x00007fe7783bba48 @max_size=500, @ttl=1800, @data_lru={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;#&lt;Gemstash::Authorization:0x00007fe7783c9fd0 @auth_key=&quot;72b4857b4c60c2d0aec84092c4d89d07&quot;, @all=true, @permissions=#&lt;Set: {&quot;all&quot;}&gt;&gt;}, @data_ttl={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;1592096184.339424}, @mon_mutex=#&lt;Thread::Mutex:0x00007fe7783bb8b8&gt;, @mon_mutex_owner_object_id=70316065676580, @mon_owner=nil, @mon_count=0&gt;&gt;&gt;, @db=#&lt;Sequel::SQLite::Database: &quot;sqlite:&#x2F;&#x2F;%2FUsers%2Fquangnguyen%2F.gemstash%2Fgemstash.db&quot; {:max_connections=&gt;1}&gt;, @cache_client=#&lt;Gemstash::LruReduxClient:0x00007fe7783bba70 @cache=#&lt;LruRedux::TTL::ThreadSafeCache:0x00007fe7783bba48 @max_size=500, @ttl=1800, @data_lru={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;#&lt;Gemstash::Authorization:0x00007fe7783c9fd0 @auth_key=&quot;72b4857b4c60c2d0aec84092c4d89d07&quot;, @all=true, @permissions=#&lt;Set: {&quot;all&quot;}&gt;&gt;}, @data_ttl={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;1592096184.339424}, @mon_mutex=#&lt;Thread::Mutex:0x00007fe7783bb8b8&gt;, @mon_mutex_owner_object_id=70316065676580, @mon_owner=nil, @mon_count=0&gt;&gt;&gt;</div></td>
</tr>
<tr>
<td>gemstash.gem_source</td>
<td class="code"><div>Gemstash::GemSource::PrivateSource</div></td>
</tr>
<tr>
<td>puma.config</td>
<td class="code"><div>#&lt;Puma::Configuration:0x00007fe7781e3b80 @options=#&lt;Puma::UserFileDefaultOptions:0x00007fe7781e3810 @user_options={:pidfile=&gt;&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;.gemstash&#x2F;puma.pid&quot;, :daemon=&gt;true, :log_requests=&gt;false, :environment=&gt;&quot;development&quot;, :logger=&gt;#&lt;Puma::Events:0x00007fe7781e3e28 @formatter=#&lt;Puma::Events::PidFormatter:0x00007fe7788b7a60&gt;, @stdout=#&lt;Gemstash::Logging::StreamLogger:0x00007fe7781e3e78 @level=1&gt;, @stderr=#&lt;Gemstash::Logging::StreamLogger:0x00007fe7781e3e50 @level=3&gt;, @debug=false, @hooks={:state=&gt;[]}&gt;}, @file_options={:config_files=&gt;[&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;gemstash-2.1.0&#x2F;lib&#x2F;gemstash&#x2F;puma.rb&quot;], :min_threads=&gt;0, :max_threads=&gt;16, :binds=&gt;[&quot;tcp:&#x2F;&#x2F;0.0.0.0:9292&quot;], :workers=&gt;1, :rackup=&gt;&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;gemstash-2.1.0&#x2F;lib&#x2F;gemstash&#x2F;config.ru&quot;}, @default_options={:min_threads=&gt;0, :max_threads=&gt;16, :log_requests=&gt;false, :debug=&gt;false, :binds=&gt;[&quot;tcp:&#x2F;&#x2F;0.0.0.0:9292&quot;], :workers=&gt;0, :daemon=&gt;false, :mode=&gt;:http, :worker_timeout=&gt;60, :worker_boot_timeout=&gt;60, :worker_shutdown_timeout=&gt;30, :remote_address=&gt;:socket, :tag=&gt;&quot;gemstash&quot;, :environment=&gt;&quot;development&quot;, :rackup=&gt;&quot;config.ru&quot;, :logger=&gt;#&lt;IO:&lt;STDOUT&gt;&gt;, :persistent_timeout=&gt;20, :first_data_timeout=&gt;30, :raise_exception_on_sigterm=&gt;true}&gt;, @plugins=#&lt;Puma::PluginLoader:0x00007fe7781e3770 @instances=[]&gt;, @user_dsl=#&lt;Puma::DSL:0x00007fe7781e36d0 @config=#&lt;Puma::Configuration:0x00007fe7781e3b80 ...&gt;, @options={:pidfile=&gt;&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;.gemstash&#x2F;puma.pid&quot;, :daemon=&gt;true, :log_requests=&gt;false, :environment=&gt;&quot;development&quot;, :logger=&gt;#&lt;Puma::Events:0x00007fe7781e3e28 @formatter=#&lt;Puma::Events::PidFormatter:0x00007fe7788b7a60&gt;, @stdout=#&lt;Gemstash::Logging::StreamLogger:0x00007fe7781e3e78 @level=1&gt;, @stderr=#&lt;Gemstash::Logging::StreamLogger:0x00007fe7781e3e50 @level=3&gt;, @debug=false, @hooks={:state=&gt;[]}&gt;}, @plugins=[]&gt;, @file_dsl=#&lt;Puma::DSL:0x00007fe7781e3658 @config=#&lt;Puma::Configuration:0x00007fe7781e3b80 ...&gt;, @options={:config_files=&gt;[&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;gemstash-2.1.0&#x2F;lib&#x2F;gemstash&#x2F;puma.rb&quot;], :min_threads=&gt;0, :max_threads=&gt;16, :binds=&gt;[&quot;tcp:&#x2F;&#x2F;0.0.0.0:9292&quot;], :workers=&gt;1, :rackup=&gt;&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;gemstash-2.1.0&#x2F;lib&#x2F;gemstash&#x2F;config.ru&quot;}, @plugins=[], @path=&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;.rbenv&#x2F;versions&#x2F;2.6.3&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.6.0&#x2F;gems&#x2F;gemstash-2.1.0&#x2F;lib&#x2F;gemstash&#x2F;puma.rb&quot;&gt;, @default_dsl=#&lt;Puma::DSL:0x00007fe7781e3608 @config=#&lt;Puma::Configuration:0x00007fe7781e3b80 ...&gt;, @options={:min_threads=&gt;0, :max_threads=&gt;16, :log_requests=&gt;false, :debug=&gt;false, :binds=&gt;[&quot;tcp:&#x2F;&#x2F;0.0.0.0:9292&quot;], :workers=&gt;0, :daemon=&gt;false, :mode=&gt;:http, :worker_timeout=&gt;60, :worker_boot_timeout=&gt;60, :worker_shutdown_timeout=&gt;30, :remote_address=&gt;:socket, :tag=&gt;&quot;gemstash&quot;, :environment=&gt;&quot;development&quot;, :rackup=&gt;&quot;config.ru&quot;, :logger=&gt;#&lt;IO:&lt;STDOUT&gt;&gt;, :persistent_timeout=&gt;20, :first_data_timeout=&gt;30, :raise_exception_on_sigterm=&gt;true}, @plugins=[]&gt;&gt;</div></td>
</tr>
<tr>
<td>puma.request_body_wait</td>
<td class="code"><div>0</div></td>
</tr>
<tr>
<td>puma.socket</td>
<td class="code"><div>#&lt;TCPSocket:fd 20, AF_INET, 127.0.0.1, 9292&gt;</div></td>
</tr>
<tr>
<td>rack.after_reply</td>
<td class="code"><div>[]</div></td>
</tr>
<tr>
<td>rack.errors</td>
<td class="code"><div>#&lt;Object:0x00007fe7788afb08&gt;</div></td>
</tr>
<tr>
<td>rack.hijack</td>
<td class="code"><div>#&lt;Puma::Client:0x3ff3bc20c5d4 @ready=true&gt;</div></td>
</tr>
<tr>
<td>rack.hijack?</td>
<td class="code"><div>true</div></td>
</tr>
<tr>
<td>rack.input</td>
<td class="code"><div>#&lt;StringIO:0x00007fe7784183b0&gt;</div></td>
</tr>
<tr>
<td>rack.logger</td>
<td class="code"><div>#&lt;Rack::NullLogger:0x00007fe77841a070 @app=#&lt;Rack::Protection::FrameOptions:0x00007fe77841a110 @app=#&lt;Rack::Protection::HttpOrigin:0x00007fe77841a1b0 @app=#&lt;Rack::Protection::IPSpoofing:0x00007fe77841a228 @app=#&lt;Rack::Protection::JsonCsrf:0x00007fe77841a2c8 @app=#&lt;Rack::Protection::PathTraversal:0x00007fe77841a340 @app=#&lt;Rack::Protection::XSSHeader:0x00007fe77841a3e0 @app=#&lt;Gemstash::Web:0x00007fe778298a58 @gemstash_env=#&lt;Gemstash::Env:0x00007fe7781b98d0 @config=#&lt;Gemstash::Configuration:0x00007fe7781085a8 @config={:cache_type=&gt;&quot;memory&quot;, :base_path=&gt;&quot;&#x2F;Users&#x2F;quangnguyen&#x2F;.gemstash&quot;, :db_adapter=&gt;&quot;sqlite3&quot;, :bind=&gt;&quot;tcp:&#x2F;&#x2F;0.0.0.0:9292&quot;, :rubygems_url=&gt;&quot;https:&#x2F;&#x2F;rubygems.org&quot;, :ignore_gemfile_source=&gt;false, :protected_fetch=&gt;false, :fetch_timeout=&gt;20, :db_connection_options=&gt;{}, :puma_threads=&gt;16, :puma_workers=&gt;1, :cache_expiration=&gt;1800, :cache_max_size=&gt;500, :storage_adapter=&gt;&quot;local&quot;}&gt;, @cache=#&lt;Gemstash::Cache:0x00007fe7783bb890 @client=#&lt;Gemstash::LruReduxClient:0x00007fe7783bba70 @cache=#&lt;LruRedux::TTL::ThreadSafeCache:0x00007fe7783bba48 @max_size=500, @ttl=1800, @data_lru={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;#&lt;Gemstash::Authorization:0x00007fe7783c9fd0 @auth_key=&quot;72b4857b4c60c2d0aec84092c4d89d07&quot;, @all=true, @permissions=#&lt;Set: {&quot;all&quot;}&gt;&gt;}, @data_ttl={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;1592096184.339424}, @mon_mutex=#&lt;Thread::Mutex:0x00007fe7783bb8b8&gt;, @mon_mutex_owner_object_id=70316065676580, @mon_owner=nil, @mon_count=0&gt;&gt;&gt;, @db=#&lt;Sequel::SQLite::Database: &quot;sqlite:&#x2F;&#x2F;%2FUsers%2Fquangnguyen%2F.gemstash%2Fgemstash.db&quot; {:max_connections=&gt;1}&gt;, @cache_client=#&lt;Gemstash::LruReduxClient:0x00007fe7783bba70 @cache=#&lt;LruRedux::TTL::ThreadSafeCache:0x00007fe7783bba48 @max_size=500, @ttl=1800, @data_lru={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;#&lt;Gemstash::Authorization:0x00007fe7783c9fd0 @auth_key=&quot;72b4857b4c60c2d0aec84092c4d89d07&quot;, @all=true, @permissions=#&lt;Set: {&quot;all&quot;}&gt;&gt;}, @data_ttl={&quot;auths&#x2F;72b4857b4c60c2d0aec84092c4d89d07&quot;=&gt;1592096184.339424}, @mon_mutex=#&lt;Thread::Mutex:0x00007fe7783bb8b8&gt;, @mon_mutex_owner_object_id=70316065676580, @mon_owner=nil, @mon_count=0&gt;&gt;&gt;, @http_client_builder=Gemstash::HTTPClient, @default_layout=:layout, @preferred_extension=nil, @app=nil, @template_cache=#&lt;Tilt::Cache:0x00007fe7783f1378 @cache={}&gt;&gt;, @options={:reaction=&gt;:drop_session, :logging=&gt;true, :message=&gt;&quot;Forbidden&quot;, :encryptor=&gt;Digest::SHA1, :session_key=&gt;&quot;rack.session&quot;, :status=&gt;403, :allow_empty_referrer=&gt;true, :report_key=&gt;&quot;protection.failed&quot;, :html_types=&gt;[&quot;text&#x2F;html&quot;, &quot;application&#x2F;xhtml&quot;, &quot;text&#x2F;xml&quot;, &quot;application&#x2F;xml&quot;], :xss_mode=&gt;:block, :nosniff=&gt;true, :img_src=&gt;&quot;&#x27;self&#x27; data:&quot;, :font_src=&gt;&quot;&#x27;self&#x27;&quot;, :without_session=&gt;true}&gt;, @options={:reaction=&gt;:drop_session, :logging=&gt;true, :message=&gt;&quot;Forbidden&quot;, :encryptor=&gt;Digest::SHA1, :session_key=&gt;&quot;rack.session&quot;, :status=&gt;403, :allow_empty_referrer=&gt;true, :report_key=&gt;&quot;protection.failed&quot;, :html_types=&gt;[&quot;text&#x2F;html&quot;, &quot;application&#x2F;xhtml&quot;, &quot;text&#x2F;xml&quot;, &quot;application&#x2F;xml&quot;], :img_src=&gt;&quot;&#x27;self&#x27; data:&quot;, :font_src=&gt;&quot;&#x27;self&#x27;&quot;, :without_session=&gt;true}&gt;, @options={:reaction=&gt;:drop_session, :logging=&gt;true, :message=&gt;&quot;Forbidden&quot;, :encryptor=&gt;Digest::SHA1, :session_key=&gt;&quot;rack.session&quot;, :status=&gt;403, :allow_empty_referrer=&gt;true, :report_key=&gt;&quot;protection.failed&quot;, :html_types=&gt;[&quot;text&#x2F;html&quot;, &quot;application&#x2F;xhtml&quot;, &quot;text&#x2F;xml&quot;, &quot;application&#x2F;xml&quot;], :allow_if=&gt;nil, :img_src=&gt;&quot;&#x27;self&#x27; data:&quot;, :font_src=&gt;&quot;&#x27;self&#x27;&quot;, :without_session=&gt;true}&gt;, @options={:reaction=&gt;:drop_session, :logging=&gt;true, :message=&gt;&quot;Forbidden&quot;, :encryptor=&gt;Digest::SHA1, :session_key=&gt;&quot;rack.session&quot;, :status=&gt;403, :allow_empty_referrer=&gt;true, :report_key=&gt;&quot;protection.failed&quot;, :html_types=&gt;[&quot;text&#x2F;html&quot;, &quot;application&#x2F;xhtml&quot;, &quot;text&#x2F;xml&quot;, &quot;application&#x2F;xml&quot;], :img_src=&gt;&quot;&#x27;self&#x27; data:&quot;, :font_src=&gt;&quot;&#x27;self&#x27;&quot;, :without_session=&gt;true}&gt;, @options={:reaction=&gt;:drop_session, :logging=&gt;true, :message=&gt;&quot;Forbidden&quot;, :encryptor=&gt;Digest::SHA1, :session_key=&gt;&quot;rack.session&quot;, :status=&gt;403, :allow_empty_referrer=&gt;true, :report_key=&gt;&quot;protection.failed&quot;, :html_types=&gt;[&quot;text&#x2F;html&quot;, &quot;application&#x2F;xhtml&quot;, &quot;text&#x2F;xml&quot;, &quot;application&#x2F;xml&quot;], :allow_if=&gt;nil, :img_src=&gt;&quot;&#x27;self&#x27; data:&quot;, :font_src=&gt;&quot;&#x27;self&#x27;&quot;, :without_session=&gt;true}&gt;, @options={:reaction=&gt;:drop_session, :logging=&gt;true, :message=&gt;&quot;Forbidden&quot;, :encryptor=&gt;Digest::SHA1, :session_key=&gt;&quot;rack.session&quot;, :status=&gt;403, :allow_empty_referrer=&gt;true, :report_key=&gt;&quot;protection.failed&quot;, :html_types=&gt;[&quot;text&#x2F;html&quot;, &quot;application&#x2F;xhtml&quot;, &quot;text&#x2F;xml&quot;, &quot;application&#x2F;xml&quot;], :frame_options=&gt;:sameorigin, :img_src=&gt;&quot;&#x27;self&#x27; data:&quot;, :font_src=&gt;&quot;&#x27;self&#x27;&quot;, :without_session=&gt;true}&gt;&gt;</div></td>
</tr>
<tr>
<td>rack.multiprocess</td>
<td class="code"><div>false</div></td>
</tr>
<tr>
<td>rack.multithread</td>
<td class="code"><div>true</div></td>
</tr>
<tr>
<td>rack.request.cookie_hash</td>
<td class="code"><div>{}</div></td>
</tr>
<tr>
<td>rack.request.form_hash</td>
<td class="code"><div>{&quot;gem_name&quot;=&gt;&quot;private_example&quot;, &quot;version&quot;=&gt;&quot;0.1.0&quot;}</div></td>
</tr>
<tr>
<td>rack.request.form_input</td>
<td class="code"><div>#&lt;StringIO:0x00007fe7784183b0&gt;</div></td>
</tr>
<tr>
<td>rack.request.form_vars</td>
<td class="code"><div>gem_name=private_example&amp;version=0.1.0</div></td>
</tr>
<tr>
<td>rack.request.query_hash</td>
<td class="code"><div>{}</div></td>
</tr>
<tr>
<td>rack.request.query_string</td>
<td class="code"><div></div></td>
</tr>
<tr>
<td>rack.run_once</td>
<td class="code"><div>false</div></td>
</tr>
<tr>
<td>rack.tempfiles</td>
<td class="code"><div>[]</div></td>
</tr>
<tr>
<td>rack.url_scheme</td>
<td class="code"><div>http</div></td>
</tr>
<tr>
<td>rack.version</td>
<td class="code"><div>[1, 3]</div></td>
</tr>
<tr>
<td>sinatra.accept</td>
<td class="code"><div>[#&lt;Sinatra::Request::AcceptEntry:0x00007fe7783ea6b8 @entry=&quot;*&#x2F;*&quot;, @type=&quot;*&#x2F;*&quot;, @params={}, @q=1.0&gt;]</div></td>
</tr>
<tr>
<td>sinatra.error</td>
<td class="code"><div>#&lt;Gemstash::GemYanker::YankedVersionError: Cannot yank an already yanked version!&gt;</div></td>
</tr>
<tr>
<td>sinatra.error.params</td>
<td class="code"><div>{&quot;gem_name&quot;=&gt;&quot;private_example&quot;, &quot;version&quot;=&gt;&quot;0.1.0&quot;}</div></td>
</tr>
<tr>
<td>sinatra.route</td>
<td class="code"><div>DELETE &#x2F;api&#x2F;v1&#x2F;gems&#x2F;yank</div></td>
</tr>
</table>
<div class="clear"></div>
</div> <!-- /RACK ENV -->
<p id="explanation">You're seeing this error because you have
enabled the <code>show_exceptions</code> setting.</p>
</div> <!-- /WRAP -->
</body>
</html>
JJames:gemstash quangnguyen$
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment