Created
June 14, 2020 01:08
-
-
Save duyquangnguyenhac/2d342060d54b59149b6213135d49ad8d to your computer and use it in GitHub Desktop.
Error on pushing and yanking gems
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 /api/v1/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>/api/v1/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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/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, "Cannot push to an existing version!" if existing && 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, "Cannot push to a yanked version!" if existing && !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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sequel-5.32.0/lib/sequel/database/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 => 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 => 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 => e3 | |
</code></li> | |
<li class="post-context-line"><code> end | |
</code></li> | |
<li class="post-context-line"><code> transaction_error(e, :conn=>conn, :rollback=>rollback) | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info system"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sequel-5.32.0/lib/sequel/database/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, "cannot set :retry_on options if you are already inside a transaction" | |
</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, &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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sequel-5.32.0/lib/sequel/connection_pool/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 => 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sequel-5.32.0/lib/sequel/database/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, &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, &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/shard. | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info system"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sequel-5.32.0/lib/sequel/database/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 <= 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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/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, "Cannot push to an existing version!" if existing && existing.indexed | |
</code></li> | |
<li class="post-context-line"><code> raise YankedVersionError, "Cannot push to a yanked version!" if existing && !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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/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 < 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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/gem_source/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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/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, &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 => e | |
</code></li> | |
<li class="post-context-line"><code> app.headers["WWW-Authenticate"] = "Basic realm=\"Gemstash Private Gems\"" | |
</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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/gem_source/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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/gem_source/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, "Not yet supported" | |
</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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/web.rb</code> in | |
<code><strong>block in <class:Web></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 "/api/v1/dependencies.json" 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 "/api/v1/gems" 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 "/api/v1/gems/yank" 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 "/api/v1/add_spec.json" do | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info framework"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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 = "#{verb} #{path}" | |
</code></li> | |
<li class="pre-context-line"><code> unbound_method = generate_method(method_name, &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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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 = "#{verb} #{path}" | |
</code></li> | |
<li class="pre-context-line"><code> unbound_method = generate_method(method_name, &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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.route'] = "#{@request.request_method} #{pattern}" | |
</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'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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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(&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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.route'] = "#{@request.request_method} #{pattern}" | |
</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'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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.error.params'] = @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['sinatra.error.params'] | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info framework"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.error.params'] = @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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.error.params'] = @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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.route'] = "#{@request.request_method} #{pattern}" | |
</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'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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.route'] = "#{@request.request_method} #{pattern}" | |
</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'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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.route'] = "#{@request.request_method} #{pattern}" | |
</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'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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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? && (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 => 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['sinatra.static_file'] | |
</code></li> | |
<li class="post-context-line"><code> rescue ::Exception => boom | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info framework"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.static_file'] = 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 => 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 'throw :halt' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.static_file'] = 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 => 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 'throw :halt' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.static_file'] = 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 => 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 'throw :halt' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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? && (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 => 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['Content-Type'] = 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['sinatra.error'] | |
</code></li> | |
<li class="post-context-line"><code> | |
</code></li> | |
<li class="post-context-line"><code> unless @response['Content-Type'] | |
</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.static_file'] = 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 => 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 'throw :halt' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.static_file'] = 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 => 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 'throw :halt' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.static_file'] = 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 => 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 'throw :halt' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['Content-Type'] = 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['sinatra.error'] | |
</code></li> | |
<li class="post-context-line"><code> | |
</code></li> | |
<li class="post-context-line"><code> unless @response['Content-Type'] | |
</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-protection-2.0.8.1/lib/rack/protection/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 < Base | |
</code></li> | |
<li class="pre-context-line"><code> default_options :xss_mode => :block, :nosniff => 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['X-XSS-Protection'] ||= "1; mode=#{options[:xss_mode]}" if html? headers | |
</code></li> | |
<li class="post-context-line"><code> headers['X-Content-Type-Options'] ||= 'nosniff' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-protection-2.0.8.1/lib/rack/protection/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 '/' and '.', expands +path_info+. | |
</code></li> | |
<li class="pre-context-line"><code> # Thus <tt>GET /foo/%2e%2e%2fbar</tt> becomes <tt>GET /bar</tt>. | |
</code></li> | |
<li class="pre-context-line"><code> class PathTraversal < Base | |
</code></li> | |
<li class="pre-context-line"><code> def call(env) | |
</code></li> | |
<li class="pre-context-line"><code> path_was = env["PATH_INFO"] | |
</code></li> | |
<li class="pre-context-line"><code> env["PATH_INFO"] = cleanup path_was if path_was && !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["PATH_INFO"] = 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 = '.'.encode(encoding) | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info system"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-protection-2.0.8.1/lib/rack/protection/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 < Base | |
</code></li> | |
<li class="pre-context-line"><code> default_options :allow_if => 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, "attack prevented by #{self.class}" | |
</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-protection-2.0.8.1/lib/rack/protection/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-protection-2.0.8.1/lib/rack/protection/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-protection-2.0.8.1/lib/rack/protection/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['X-Frame-Options'] ||= 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-2.2.2/lib/rack/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, &block); end | |
</code></li> | |
<li class="post-context-line"><code> def debug(progname = nil, &block); end | |
</code></li> | |
<li class="post-context-line"><code> def warn(progname = nil, &block); end | |
</code></li> | |
<li class="post-context-line"><code> def error(progname = nil, &block); end | |
</code></li> | |
<li class="post-context-line"><code> def fatal(progname = nil, &block); end | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info system"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-2.2.2/lib/rack/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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 => e | |
</code></li> | |
<li class="post-context-line"><code> errors, env["rack.errors"] = env["rack.errors"], @@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 = "text/plain" | |
</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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 < 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['async.callback']</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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> "#<#{@instance.class} app_file=#{settings.app_file.inspect}>" | |
</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/server_health_check-rack-0.1.0/lib/server_health_check_rack/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["PATH_INFO"]) | |
</code></li> | |
<li class="pre-context-line"><code> check = health_check(env["PATH_INFO"]) | |
</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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/gem_source/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["gemstash.gem_source"] = 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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/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["gemstash.env"] = @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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/puma-4.3.5/lib/puma/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've been hijacked, then output a special line | |
</code></li> | |
<li class="post-context-line"><code> if env['rack.hijack_io'] | |
</code></li> | |
<li class="post-context-line"><code> log_hijacking(env, 'HIJACK', header, began_at) | |
</code></li> | |
<li class="post-context-line"><code> else | |
</code></li> | |
<li class="post-context-line"><code> ary = env['rack.after_reply'] | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info app"> | |
<code>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/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["rack.logger"] = 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-2.2.2/lib/rack/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/puma-4.3.5/lib/puma/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/puma-4.3.5/lib/puma/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'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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/puma-4.3.5/lib/puma/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/puma-4.3.5/lib/puma/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/puma-4.3.5/lib/puma/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 => e | |
</code></li> | |
<li class="post-context-line"><code> STDERR.puts "Error reached top of thread-pool: #{e.message} (#{e.class})" | |
</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/octet-stream</div></td> | |
</tr> | |
<tr> | |
<td>GATEWAY_INTERFACE</td> | |
<td class="code"><div>CGI/1.2</div></td> | |
</tr> | |
<tr> | |
<td>HTTP_ACCEPT</td> | |
<td class="code"><div>*/*</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/3.0.3 x86_64-darwin-19 Ruby/2.6.3 (2019-04-16 patchlevel 62)</div></td> | |
</tr> | |
<tr> | |
<td>HTTP_VERSION</td> | |
<td class="code"><div>HTTP/1.1</div></td> | |
</tr> | |
<tr> | |
<td>PATH_INFO</td> | |
<td class="code"><div>/api/v1/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>/private/api/v1/gems</div></td> | |
</tr> | |
<tr> | |
<td>REQUEST_URI</td> | |
<td class="code"><div>/api/v1/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/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>#<Gemstash::Env:0x00007fea97817b10 @config=#<Gemstash::Configuration:0x00007fea963959a8 @config={:cache_type=>"memory", :base_path=>"/Users/quangnguyen/.gemstash", :db_adapter=>"sqlite3", :bind=>"tcp://0.0.0.0:9292", :rubygems_url=>"https://rubygems.org", :ignore_gemfile_source=>false, :protected_fetch=>false, :fetch_timeout=>20, :db_connection_options=>{}, :puma_threads=>16, :puma_workers=>1, :cache_expiration=>1800, :cache_max_size=>500, :storage_adapter=>"s3", :aws_access_key_id=>"AKIAXDAKXIODWSOIRIZ3", :aws_secret_access_key=>"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", :bucket_name=>"testing16160303", :region=>"us-west-1", :s3_path=>"gemstash/s3_storage"}>, @cache=#<Gemstash::Cache:0x00007fea966ac3d0 @client=#<Gemstash::LruReduxClient:0x00007fea966ac5d8 @cache=#<LruRedux::TTL::ThreadSafeCache:0x00007fea966ac5b0 @max_size=500, @ttl=1800, @data_lru={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>#<Gemstash::Authorization:0x00007fea95949d50 @auth_key="72b4857b4c60c2d0aec84092c4d89d07", @all=true, @permissions=#<Set: {"all"}>>}, @data_ttl={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>1592018906.024399}, @mon_mutex=#<Thread::Mutex:0x00007fea966ac3f8>, @mon_mutex_owner_object_id=70322761327320, @mon_owner=nil, @mon_count=0>>>, @db=#<Sequel::SQLite::Database: "sqlite://%2FUsers%2Fquangnguyen%2F.gemstash%2Fgemstash.db" {:max_connections=>1}>, @cache_client=#<Gemstash::LruReduxClient:0x00007fea966ac5d8 @cache=#<LruRedux::TTL::ThreadSafeCache:0x00007fea966ac5b0 @max_size=500, @ttl=1800, @data_lru={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>#<Gemstash::Authorization:0x00007fea95949d50 @auth_key="72b4857b4c60c2d0aec84092c4d89d07", @all=true, @permissions=#<Set: {"all"}>>}, @data_ttl={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>1592018906.024399}, @mon_mutex=#<Thread::Mutex:0x00007fea966ac3f8>, @mon_mutex_owner_object_id=70322761327320, @mon_owner=nil, @mon_count=0>>></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>#<Puma::Configuration:0x00007fea964565b8 @options=#<Puma::UserFileDefaultOptions:0x00007fea96455d48 @user_options={:pidfile=>"/Users/quangnguyen/.gemstash/puma.pid", :daemon=>true, :log_requests=>false, :environment=>"development", :logger=>#<Puma::Events:0x00007fea96456810 @formatter=#<Puma::Events::PidFormatter:0x00007fea96474f18>, @stdout=#<Gemstash::Logging::StreamLogger:0x00007fea964568d8 @level=1>, @stderr=#<Gemstash::Logging::StreamLogger:0x00007fea96456838 @level=3>, @debug=false, @hooks={:state=>[]}>}, @file_options={:config_files=>["/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/puma.rb"], :min_threads=>0, :max_threads=>16, :binds=>["tcp://0.0.0.0:9292"], :workers=>1, :rackup=>"/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/config.ru"}, @default_options={:min_threads=>0, :max_threads=>16, :log_requests=>false, :debug=>false, :binds=>["tcp://0.0.0.0:9292"], :workers=>0, :daemon=>false, :mode=>:http, :worker_timeout=>60, :worker_boot_timeout=>60, :worker_shutdown_timeout=>30, :remote_address=>:socket, :tag=>"gemstash", :environment=>"development", :rackup=>"config.ru", :logger=>#<IO:<STDOUT>>, :persistent_timeout=>20, :first_data_timeout=>30, :raise_exception_on_sigterm=>true}>, @plugins=#<Puma::PluginLoader:0x00007fea96455bb8 @instances=[]>, @user_dsl=#<Puma::DSL:0x00007fea96455a00 @config=#<Puma::Configuration:0x00007fea964565b8 ...>, @options={:pidfile=>"/Users/quangnguyen/.gemstash/puma.pid", :daemon=>true, :log_requests=>false, :environment=>"development", :logger=>#<Puma::Events:0x00007fea96456810 @formatter=#<Puma::Events::PidFormatter:0x00007fea96474f18>, @stdout=#<Gemstash::Logging::StreamLogger:0x00007fea964568d8 @level=1>, @stderr=#<Gemstash::Logging::StreamLogger:0x00007fea96456838 @level=3>, @debug=false, @hooks={:state=>[]}>}, @plugins=[]>, @file_dsl=#<Puma::DSL:0x00007fea964557f8 @config=#<Puma::Configuration:0x00007fea964565b8 ...>, @options={:config_files=>["/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/puma.rb"], :min_threads=>0, :max_threads=>16, :binds=>["tcp://0.0.0.0:9292"], :workers=>1, :rackup=>"/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/config.ru"}, @plugins=[], @path="/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/puma.rb">, @default_dsl=#<Puma::DSL:0x00007fea96455668 @config=#<Puma::Configuration:0x00007fea964565b8 ...>, @options={:min_threads=>0, :max_threads=>16, :log_requests=>false, :debug=>false, :binds=>["tcp://0.0.0.0:9292"], :workers=>0, :daemon=>false, :mode=>:http, :worker_timeout=>60, :worker_boot_timeout=>60, :worker_shutdown_timeout=>30, :remote_address=>:socket, :tag=>"gemstash", :environment=>"development", :rackup=>"config.ru", :logger=>#<IO:<STDOUT>>, :persistent_timeout=>20, :first_data_timeout=>30, :raise_exception_on_sigterm=>true}, @plugins=[]>></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>#<TCPSocket:fd 20, AF_INET, 127.0.0.1, 9292></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>#<Object:0x00007fea95931778></div></td> | |
</tr> | |
<tr> | |
<td>rack.hijack</td> | |
<td class="code"><div>#<Puma::Client:0x3ff54b30bcd8 @ready=true></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>#<StringIO:0x00007fea966171e0></div></td> | |
</tr> | |
<tr> | |
<td>rack.logger</td> | |
<td class="code"><div>#<Rack::NullLogger:0x00007fea95983d48 @app=#<Rack::Protection::FrameOptions:0x00007fea95983de8 @app=#<Rack::Protection::HttpOrigin:0x00007fea95983e88 @app=#<Rack::Protection::IPSpoofing:0x00007fea95983f00 @app=#<Rack::Protection::JsonCsrf:0x00007fea95983fa0 @app=#<Rack::Protection::PathTraversal:0x00007fea95978060 @app=#<Rack::Protection::XSSHeader:0x00007fea95978100 @app=#<Gemstash::Web:0x00007fea9591b8d8 @gemstash_env=#<Gemstash::Env:0x00007fea97817b10 @config=#<Gemstash::Configuration:0x00007fea963959a8 @config={:cache_type=>"memory", :base_path=>"/Users/quangnguyen/.gemstash", :db_adapter=>"sqlite3", :bind=>"tcp://0.0.0.0:9292", :rubygems_url=>"https://rubygems.org", :ignore_gemfile_source=>false, :protected_fetch=>false, :fetch_timeout=>20, :db_connection_options=>{}, :puma_threads=>16, :puma_workers=>1, :cache_expiration=>1800, :cache_max_size=>500, :storage_adapter=>"s3", :aws_access_key_id=>"AKIAXDAKXIODWSOIRIZ3", :aws_secret_access_key=>"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", :bucket_name=>"testing16160303", :region=>"us-west-1", :s3_path=>"gemstash/s3_storage"}>, @cache=#<Gemstash::Cache:0x00007fea966ac3d0 @client=#<Gemstash::LruReduxClient:0x00007fea966ac5d8 @cache=#<LruRedux::TTL::ThreadSafeCache:0x00007fea966ac5b0 @max_size=500, @ttl=1800, @data_lru={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>#<Gemstash::Authorization:0x00007fea95949d50 @auth_key="72b4857b4c60c2d0aec84092c4d89d07", @all=true, @permissions=#<Set: {"all"}>>}, @data_ttl={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>1592018906.024399}, @mon_mutex=#<Thread::Mutex:0x00007fea966ac3f8>, @mon_mutex_owner_object_id=70322761327320, @mon_owner=nil, @mon_count=0>>>, @db=#<Sequel::SQLite::Database: "sqlite://%2FUsers%2Fquangnguyen%2F.gemstash%2Fgemstash.db" {:max_connections=>1}>, @cache_client=#<Gemstash::LruReduxClient:0x00007fea966ac5d8 @cache=#<LruRedux::TTL::ThreadSafeCache:0x00007fea966ac5b0 @max_size=500, @ttl=1800, @data_lru={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>#<Gemstash::Authorization:0x00007fea95949d50 @auth_key="72b4857b4c60c2d0aec84092c4d89d07", @all=true, @permissions=#<Set: {"all"}>>}, @data_ttl={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>1592018906.024399}, @mon_mutex=#<Thread::Mutex:0x00007fea966ac3f8>, @mon_mutex_owner_object_id=70322761327320, @mon_owner=nil, @mon_count=0>>>, @http_client_builder=Gemstash::HTTPClient, @default_layout=:layout, @preferred_extension=nil, @app=nil, @template_cache=#<Tilt::Cache:0x00007fea9786a9f0 @cache={}>>, @options={:reaction=>:drop_session, :logging=>true, :message=>"Forbidden", :encryptor=>Digest::SHA1, :session_key=>"rack.session", :status=>403, :allow_empty_referrer=>true, :report_key=>"protection.failed", :html_types=>["text/html", "application/xhtml", "text/xml", "application/xml"], :xss_mode=>:block, :nosniff=>true, :img_src=>"'self' data:", :font_src=>"'self'", :without_session=>true}>, @options={:reaction=>:drop_session, :logging=>true, :message=>"Forbidden", :encryptor=>Digest::SHA1, :session_key=>"rack.session", :status=>403, :allow_empty_referrer=>true, :report_key=>"protection.failed", :html_types=>["text/html", "application/xhtml", "text/xml", "application/xml"], :img_src=>"'self' data:", :font_src=>"'self'", :without_session=>true}>, @options={:reaction=>:drop_session, :logging=>true, :message=>"Forbidden", :encryptor=>Digest::SHA1, :session_key=>"rack.session", :status=>403, :allow_empty_referrer=>true, :report_key=>"protection.failed", :html_types=>["text/html", "application/xhtml", "text/xml", "application/xml"], :allow_if=>nil, :img_src=>"'self' data:", :font_src=>"'self'", :without_session=>true}>, @options={:reaction=>:drop_session, :logging=>true, :message=>"Forbidden", :encryptor=>Digest::SHA1, :session_key=>"rack.session", :status=>403, :allow_empty_referrer=>true, :report_key=>"protection.failed", :html_types=>["text/html", "application/xhtml", "text/xml", "application/xml"], :img_src=>"'self' data:", :font_src=>"'self'", :without_session=>true}>, @options={:reaction=>:drop_session, :logging=>true, :message=>"Forbidden", :encryptor=>Digest::SHA1, :session_key=>"rack.session", :status=>403, :allow_empty_referrer=>true, :report_key=>"protection.failed", :html_types=>["text/html", "application/xhtml", "text/xml", "application/xml"], :allow_if=>nil, :img_src=>"'self' data:", :font_src=>"'self'", :without_session=>true}>, @options={:reaction=>:drop_session, :logging=>true, :message=>"Forbidden", :encryptor=>Digest::SHA1, :session_key=>"rack.session", :status=>403, :allow_empty_referrer=>true, :report_key=>"protection.failed", :html_types=>["text/html", "application/xhtml", "text/xml", "application/xml"], :frame_options=>:sameorigin, :img_src=>"'self' data:", :font_src=>"'self'", :without_session=>true}>></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>[#<Sinatra::Request::AcceptEntry:0x00007fea97859c40 @entry="*/*", @type="*/*", @params={}, @q=1.0>]</div></td> | |
</tr> | |
<tr> | |
<td>sinatra.error</td> | |
<td class="code"><div>#<Gemstash::GemPusher::ExistingVersionError: Cannot push to an existing version!></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 /api/v1/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 /api/v1/gems/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>/api/v1/gems/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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/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("yank") | |
</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, "Cannot yank an unknown gem!" 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, "Cannot yank an unknown version!" unless version | |
</code></li> | |
<li class="post-context-line"><code> raise YankedVersionError, "Cannot yank an already yanked version!" 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sequel-5.32.0/lib/sequel/database/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 => 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 => 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 => e3 | |
</code></li> | |
<li class="post-context-line"><code> end | |
</code></li> | |
<li class="post-context-line"><code> transaction_error(e, :conn=>conn, :rollback=>rollback) | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info system"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sequel-5.32.0/lib/sequel/database/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, "cannot set :retry_on options if you are already inside a transaction" | |
</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, &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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sequel-5.32.0/lib/sequel/connection_pool/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 => 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sequel-5.32.0/lib/sequel/database/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, &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, &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/shard. | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info system"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sequel-5.32.0/lib/sequel/database/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 <= 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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/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("yank") | |
</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, "Cannot yank an unknown gem!" 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, "Cannot yank an unknown version!" unless version | |
</code></li> | |
<li class="post-context-line"><code> raise YankedVersionError, "Cannot yank an already yanked version!" 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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/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] == 'local' | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info app"> | |
<code>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/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 < 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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/gem_source/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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/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, &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 => e | |
</code></li> | |
<li class="post-context-line"><code> app.headers["WWW-Authenticate"] = "Basic realm=\"Gemstash Private Gems\"" | |
</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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/gem_source/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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/gem_source/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, "Not yet supported" | |
</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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/web.rb</code> in | |
<code><strong>block in <class:Web></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 "/api/v1/gems" 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 "/api/v1/gems/yank" 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 "/api/v1/add_spec.json" 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 "/api/v1/remove_spec.json" do | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info framework"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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 = "#{verb} #{path}" | |
</code></li> | |
<li class="pre-context-line"><code> unbound_method = generate_method(method_name, &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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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 = "#{verb} #{path}" | |
</code></li> | |
<li class="pre-context-line"><code> unbound_method = generate_method(method_name, &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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.route'] = "#{@request.request_method} #{pattern}" | |
</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'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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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(&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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.route'] = "#{@request.request_method} #{pattern}" | |
</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'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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.error.params'] = @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['sinatra.error.params'] | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info framework"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.error.params'] = @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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.error.params'] = @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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.route'] = "#{@request.request_method} #{pattern}" | |
</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'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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.route'] = "#{@request.request_method} #{pattern}" | |
</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'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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.route'] = "#{@request.request_method} #{pattern}" | |
</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'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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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? && (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 => 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['sinatra.static_file'] | |
</code></li> | |
<li class="post-context-line"><code> rescue ::Exception => boom | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info framework"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.static_file'] = 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 => 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 'throw :halt' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.static_file'] = 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 => 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 'throw :halt' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.static_file'] = 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 => 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 'throw :halt' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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? && (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 => 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['Content-Type'] = 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['sinatra.error'] | |
</code></li> | |
<li class="post-context-line"><code> | |
</code></li> | |
<li class="post-context-line"><code> unless @response['Content-Type'] | |
</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.static_file'] = 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 => 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 'throw :halt' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.static_file'] = 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 => 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 'throw :halt' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.static_file'] = 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 => 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 'throw :halt' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['Content-Type'] = 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['sinatra.error'] | |
</code></li> | |
<li class="post-context-line"><code> | |
</code></li> | |
<li class="post-context-line"><code> unless @response['Content-Type'] | |
</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-protection-2.0.8.1/lib/rack/protection/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 < Base | |
</code></li> | |
<li class="pre-context-line"><code> default_options :xss_mode => :block, :nosniff => 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['X-XSS-Protection'] ||= "1; mode=#{options[:xss_mode]}" if html? headers | |
</code></li> | |
<li class="post-context-line"><code> headers['X-Content-Type-Options'] ||= 'nosniff' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-protection-2.0.8.1/lib/rack/protection/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 '/' and '.', expands +path_info+. | |
</code></li> | |
<li class="pre-context-line"><code> # Thus <tt>GET /foo/%2e%2e%2fbar</tt> becomes <tt>GET /bar</tt>. | |
</code></li> | |
<li class="pre-context-line"><code> class PathTraversal < Base | |
</code></li> | |
<li class="pre-context-line"><code> def call(env) | |
</code></li> | |
<li class="pre-context-line"><code> path_was = env["PATH_INFO"] | |
</code></li> | |
<li class="pre-context-line"><code> env["PATH_INFO"] = cleanup path_was if path_was && !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["PATH_INFO"] = 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 = '.'.encode(encoding) | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info system"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-protection-2.0.8.1/lib/rack/protection/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 < Base | |
</code></li> | |
<li class="pre-context-line"><code> default_options :allow_if => 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, "attack prevented by #{self.class}" | |
</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-protection-2.0.8.1/lib/rack/protection/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-protection-2.0.8.1/lib/rack/protection/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-protection-2.0.8.1/lib/rack/protection/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['X-Frame-Options'] ||= 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-2.2.2/lib/rack/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, &block); end | |
</code></li> | |
<li class="post-context-line"><code> def debug(progname = nil, &block); end | |
</code></li> | |
<li class="post-context-line"><code> def warn(progname = nil, &block); end | |
</code></li> | |
<li class="post-context-line"><code> def error(progname = nil, &block); end | |
</code></li> | |
<li class="post-context-line"><code> def fatal(progname = nil, &block); end | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info system"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-2.2.2/lib/rack/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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 => e | |
</code></li> | |
<li class="post-context-line"><code> errors, env["rack.errors"] = env["rack.errors"], @@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 = "text/plain" | |
</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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 < 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['async.callback']</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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> "#<#{@instance.class} app_file=#{settings.app_file.inspect}>" | |
</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/server_health_check-rack-0.1.0/lib/server_health_check_rack/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["PATH_INFO"]) | |
</code></li> | |
<li class="pre-context-line"><code> check = health_check(env["PATH_INFO"]) | |
</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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/gem_source/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["gemstash.gem_source"] = 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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/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["gemstash.env"] = @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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/puma-4.3.5/lib/puma/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've been hijacked, then output a special line | |
</code></li> | |
<li class="post-context-line"><code> if env['rack.hijack_io'] | |
</code></li> | |
<li class="post-context-line"><code> log_hijacking(env, 'HIJACK', header, began_at) | |
</code></li> | |
<li class="post-context-line"><code> else | |
</code></li> | |
<li class="post-context-line"><code> ary = env['rack.after_reply'] | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info app"> | |
<code>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/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["rack.logger"] = 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-2.2.2/lib/rack/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/puma-4.3.5/lib/puma/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/puma-4.3.5/lib/puma/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'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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/puma-4.3.5/lib/puma/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/puma-4.3.5/lib/puma/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/puma-4.3.5/lib/puma/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 => e | |
</code></li> | |
<li class="post-context-line"><code> STDERR.puts "Error reached top of thread-pool: #{e.message} (#{e.class})" | |
</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>"private-example"</div></td> | |
</tr> | |
<tr> | |
<td>version</td> | |
<td class="code"><div>"0.1.0"</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/x-www-form-urlencoded</div></td> | |
</tr> | |
<tr> | |
<td>GATEWAY_INTERFACE</td> | |
<td class="code"><div>CGI/1.2</div></td> | |
</tr> | |
<tr> | |
<td>HTTP_ACCEPT</td> | |
<td class="code"><div>*/*</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/3.0.3 x86_64-darwin-19 Ruby/2.6.3 (2019-04-16 patchlevel 62)</div></td> | |
</tr> | |
<tr> | |
<td>HTTP_VERSION</td> | |
<td class="code"><div>HTTP/1.1</div></td> | |
</tr> | |
<tr> | |
<td>PATH_INFO</td> | |
<td class="code"><div>/api/v1/gems/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>/private/api/v1/gems/yank</div></td> | |
</tr> | |
<tr> | |
<td>REQUEST_URI</td> | |
<td class="code"><div>/api/v1/gems/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/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>#<Gemstash::Env:0x00007fcb5253f960 @config=#<Gemstash::Configuration:0x00007fcb5230f3c0 @config={:cache_type=>"memory", :base_path=>"/Users/quangnguyen/.gemstash", :db_adapter=>"sqlite3", :bind=>"tcp://0.0.0.0:9292", :rubygems_url=>"https://rubygems.org", :ignore_gemfile_source=>false, :protected_fetch=>false, :fetch_timeout=>20, :db_connection_options=>{}, :puma_threads=>16, :puma_workers=>1, :cache_expiration=>1800, :cache_max_size=>500, :storage_adapter=>"s3", :aws_access_key_id=>"AKIAXDAKXIODWSOIRIZ3", :aws_secret_access_key=>"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", :bucket_name=>"testing16160303", :region=>"us-west-1", :s3_path=>"gemstash/s3_storage"}>, @cache=#<Gemstash::Cache:0x00007fcb5274e378 @client=#<Gemstash::LruReduxClient:0x00007fcb5274e558 @cache=#<LruRedux::TTL::ThreadSafeCache:0x00007fcb5274e530 @max_size=500, @ttl=1800, @data_lru={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>#<Gemstash::Authorization:0x00007fcb5275e9d0 @auth_key="72b4857b4c60c2d0aec84092c4d89d07", @all=true, @permissions=#<Set: {"all"}>>}, @data_ttl={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>1592022925.389683}, @mon_mutex=#<Thread::Mutex:0x00007fcb5274e3a0>, @mon_mutex_owner_object_id=70255619240600, @mon_owner=nil, @mon_count=0>>>, @db=#<Sequel::SQLite::Database: "sqlite://%2FUsers%2Fquangnguyen%2F.gemstash%2Fgemstash.db" {:max_connections=>1}>, @cache_client=#<Gemstash::LruReduxClient:0x00007fcb5274e558 @cache=#<LruRedux::TTL::ThreadSafeCache:0x00007fcb5274e530 @max_size=500, @ttl=1800, @data_lru={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>#<Gemstash::Authorization:0x00007fcb5275e9d0 @auth_key="72b4857b4c60c2d0aec84092c4d89d07", @all=true, @permissions=#<Set: {"all"}>>}, @data_ttl={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>1592022925.389683}, @mon_mutex=#<Thread::Mutex:0x00007fcb5274e3a0>, @mon_mutex_owner_object_id=70255619240600, @mon_owner=nil, @mon_count=0>>></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>#<Puma::Configuration:0x00007fcb523c5c38 @options=#<Puma::UserFileDefaultOptions:0x00007fcb523c55a8 @user_options={:pidfile=>"/Users/quangnguyen/.gemstash/puma.pid", :daemon=>true, :log_requests=>false, :environment=>"development", :logger=>#<Puma::Events:0x00007fcb523c60e8 @formatter=#<Puma::Events::PidFormatter:0x00007fcb523ecef0>, @stdout=#<Gemstash::Logging::StreamLogger:0x00007fcb523c6160 @level=1>, @stderr=#<Gemstash::Logging::StreamLogger:0x00007fcb523c6110 @level=3>, @debug=false, @hooks={:state=>[]}>}, @file_options={:config_files=>["/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/puma.rb"], :min_threads=>0, :max_threads=>16, :binds=>["tcp://0.0.0.0:9292"], :workers=>1, :rackup=>"/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/config.ru"}, @default_options={:min_threads=>0, :max_threads=>16, :log_requests=>false, :debug=>false, :binds=>["tcp://0.0.0.0:9292"], :workers=>0, :daemon=>false, :mode=>:http, :worker_timeout=>60, :worker_boot_timeout=>60, :worker_shutdown_timeout=>30, :remote_address=>:socket, :tag=>"gemstash", :environment=>"development", :rackup=>"config.ru", :logger=>#<IO:<STDOUT>>, :persistent_timeout=>20, :first_data_timeout=>30, :raise_exception_on_sigterm=>true}>, @plugins=#<Puma::PluginLoader:0x00007fcb523c5468 @instances=[]>, @user_dsl=#<Puma::DSL:0x00007fcb523c5300 @config=#<Puma::Configuration:0x00007fcb523c5c38 ...>, @options={:pidfile=>"/Users/quangnguyen/.gemstash/puma.pid", :daemon=>true, :log_requests=>false, :environment=>"development", :logger=>#<Puma::Events:0x00007fcb523c60e8 @formatter=#<Puma::Events::PidFormatter:0x00007fcb523ecef0>, @stdout=#<Gemstash::Logging::StreamLogger:0x00007fcb523c6160 @level=1>, @stderr=#<Gemstash::Logging::StreamLogger:0x00007fcb523c6110 @level=3>, @debug=false, @hooks={:state=>[]}>}, @plugins=[]>, @file_dsl=#<Puma::DSL:0x00007fcb523c5148 @config=#<Puma::Configuration:0x00007fcb523c5c38 ...>, @options={:config_files=>["/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/puma.rb"], :min_threads=>0, :max_threads=>16, :binds=>["tcp://0.0.0.0:9292"], :workers=>1, :rackup=>"/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/config.ru"}, @plugins=[], @path="/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/puma.rb">, @default_dsl=#<Puma::DSL:0x00007fcb523c5008 @config=#<Puma::Configuration:0x00007fcb523c5c38 ...>, @options={:min_threads=>0, :max_threads=>16, :log_requests=>false, :debug=>false, :binds=>["tcp://0.0.0.0:9292"], :workers=>0, :daemon=>false, :mode=>:http, :worker_timeout=>60, :worker_boot_timeout=>60, :worker_shutdown_timeout=>30, :remote_address=>:socket, :tag=>"gemstash", :environment=>"development", :rackup=>"config.ru", :logger=>#<IO:<STDOUT>>, :persistent_timeout=>20, :first_data_timeout=>30, :raise_exception_on_sigterm=>true}, @plugins=[]>></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>#<TCPSocket:fd 20, AF_INET, 127.0.0.1, 9292></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>#<Object:0x00007fcb5245d8f8></div></td> | |
</tr> | |
<tr> | |
<td>rack.hijack</td> | |
<td class="code"><div>#<Puma::Client:0x3fe5a9233e20 @ready=true></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>#<StringIO:0x00007fcb52466c28></div></td> | |
</tr> | |
<tr> | |
<td>rack.logger</td> | |
<td class="code"><div>#<Rack::NullLogger:0x00007fcb524564b8 @app=#<Rack::Protection::FrameOptions:0x00007fcb524565a8 @app=#<Rack::Protection::HttpOrigin:0x00007fcb52456670 @app=#<Rack::Protection::IPSpoofing:0x00007fcb524566e8 @app=#<Rack::Protection::JsonCsrf:0x00007fcb524567b0 @app=#<Rack::Protection::PathTraversal:0x00007fcb524568a0 @app=#<Rack::Protection::XSSHeader:0x00007fcb52456990 @app=#<Gemstash::Web:0x00007fcb5255d9d8 @gemstash_env=#<Gemstash::Env:0x00007fcb5253f960 @config=#<Gemstash::Configuration:0x00007fcb5230f3c0 @config={:cache_type=>"memory", :base_path=>"/Users/quangnguyen/.gemstash", :db_adapter=>"sqlite3", :bind=>"tcp://0.0.0.0:9292", :rubygems_url=>"https://rubygems.org", :ignore_gemfile_source=>false, :protected_fetch=>false, :fetch_timeout=>20, :db_connection_options=>{}, :puma_threads=>16, :puma_workers=>1, :cache_expiration=>1800, :cache_max_size=>500, :storage_adapter=>"s3", :aws_access_key_id=>"AKIAXDAKXIODWSOIRIZ3", :aws_secret_access_key=>"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", :bucket_name=>"testing16160303", :region=>"us-west-1", :s3_path=>"gemstash/s3_storage"}>, @cache=#<Gemstash::Cache:0x00007fcb5274e378 @client=#<Gemstash::LruReduxClient:0x00007fcb5274e558 @cache=#<LruRedux::TTL::ThreadSafeCache:0x00007fcb5274e530 @max_size=500, @ttl=1800, @data_lru={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>#<Gemstash::Authorization:0x00007fcb5275e9d0 @auth_key="72b4857b4c60c2d0aec84092c4d89d07", @all=true, @permissions=#<Set: {"all"}>>}, @data_ttl={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>1592022925.389683}, @mon_mutex=#<Thread::Mutex:0x00007fcb5274e3a0>, @mon_mutex_owner_object_id=70255619240600, @mon_owner=nil, @mon_count=0>>>, @db=#<Sequel::SQLite::Database: "sqlite://%2FUsers%2Fquangnguyen%2F.gemstash%2Fgemstash.db" {:max_connections=>1}>, @cache_client=#<Gemstash::LruReduxClient:0x00007fcb5274e558 @cache=#<LruRedux::TTL::ThreadSafeCache:0x00007fcb5274e530 @max_size=500, @ttl=1800, @data_lru={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>#<Gemstash::Authorization:0x00007fcb5275e9d0 @auth_key="72b4857b4c60c2d0aec84092c4d89d07", @all=true, @permissions=#<Set: {"all"}>>}, @data_ttl={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>1592022925.389683}, @mon_mutex=#<Thread::Mutex:0x00007fcb5274e3a0>, @mon_mutex_owner_object_id=70255619240600, @mon_owner=nil, @mon_count=0>>>, @http_client_builder=Gemstash::HTTPClient, @default_layout=:layout, @preferred_extension=nil, @app=nil, @template_cache=#<Tilt::Cache:0x00007fcb5240db28 @cache={}>>, @options={:reaction=>:drop_session, :logging=>true, :message=>"Forbidden", :encryptor=>Digest::SHA1, :session_key=>"rack.session", :status=>403, :allow_empty_referrer=>true, :report_key=>"protection.failed", :html_types=>["text/html", "application/xhtml", "text/xml", "application/xml"], :xss_mode=>:block, :nosniff=>true, :img_src=>"'self' data:", :font_src=>"'self'", :without_session=>true}>, @options={:reaction=>:drop_session, :logging=>true, :message=>"Forbidden", :encryptor=>Digest::SHA1, :session_key=>"rack.session", :status=>403, :allow_empty_referrer=>true, :report_key=>"protection.failed", :html_types=>["text/html", "application/xhtml", "text/xml", "application/xml"], :img_src=>"'self' data:", :font_src=>"'self'", :without_session=>true}>, @options={:reaction=>:drop_session, :logging=>true, :message=>"Forbidden", :encryptor=>Digest::SHA1, :session_key=>"rack.session", :status=>403, :allow_empty_referrer=>true, :report_key=>"protection.failed", :html_types=>["text/html", "application/xhtml", "text/xml", "application/xml"], :allow_if=>nil, :img_src=>"'self' data:", :font_src=>"'self'", :without_session=>true}>, @options={:reaction=>:drop_session, :logging=>true, :message=>"Forbidden", :encryptor=>Digest::SHA1, :session_key=>"rack.session", :status=>403, :allow_empty_referrer=>true, :report_key=>"protection.failed", :html_types=>["text/html", "application/xhtml", "text/xml", "application/xml"], :img_src=>"'self' data:", :font_src=>"'self'", :without_session=>true}>, @options={:reaction=>:drop_session, :logging=>true, :message=>"Forbidden", :encryptor=>Digest::SHA1, :session_key=>"rack.session", :status=>403, :allow_empty_referrer=>true, :report_key=>"protection.failed", :html_types=>["text/html", "application/xhtml", "text/xml", "application/xml"], :allow_if=>nil, :img_src=>"'self' data:", :font_src=>"'self'", :without_session=>true}>, @options={:reaction=>:drop_session, :logging=>true, :message=>"Forbidden", :encryptor=>Digest::SHA1, :session_key=>"rack.session", :status=>403, :allow_empty_referrer=>true, :report_key=>"protection.failed", :html_types=>["text/html", "application/xhtml", "text/xml", "application/xml"], :frame_options=>:sameorigin, :img_src=>"'self' data:", :font_src=>"'self'", :without_session=>true}>></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>{"gem_name"=>"private-example", "version"=>"0.1.0"}</div></td> | |
</tr> | |
<tr> | |
<td>rack.request.form_input</td> | |
<td class="code"><div>#<StringIO:0x00007fcb52466c28></div></td> | |
</tr> | |
<tr> | |
<td>rack.request.form_vars</td> | |
<td class="code"><div>gem_name=private-example&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>[#<Sinatra::Request::AcceptEntry:0x00007fcb5276f4b0 @entry="*/*", @type="*/*", @params={}, @q=1.0>]</div></td> | |
</tr> | |
<tr> | |
<td>sinatra.error</td> | |
<td class="code"><div>#<Gemstash::GemYanker::UnknownGemError: Cannot yank an unknown gem!></div></td> | |
</tr> | |
<tr> | |
<td>sinatra.error.params</td> | |
<td class="code"><div>{"gem_name"=>"private-example", "version"=>"0.1.0"}</div></td> | |
</tr> | |
<tr> | |
<td>sinatra.route</td> | |
<td class="code"><div>DELETE /api/v1/gems/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 /api/v1/gems/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>/api/v1/gems/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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/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, "Cannot yank an unknown gem!" 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, "Cannot yank an unknown version!" 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, "Cannot yank an already yanked version!" 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sequel-5.32.0/lib/sequel/database/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 => 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 => 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 => e3 | |
</code></li> | |
<li class="post-context-line"><code> end | |
</code></li> | |
<li class="post-context-line"><code> transaction_error(e, :conn=>conn, :rollback=>rollback) | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info system"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sequel-5.32.0/lib/sequel/database/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, "cannot set :retry_on options if you are already inside a transaction" | |
</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, &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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sequel-5.32.0/lib/sequel/connection_pool/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 => 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sequel-5.32.0/lib/sequel/database/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, &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, &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/shard. | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info system"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sequel-5.32.0/lib/sequel/database/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 <= 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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/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("yank") | |
</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, "Cannot yank an unknown gem!" 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, "Cannot yank an unknown version!" unless version | |
</code></li> | |
<li class="post-context-line"><code> raise YankedVersionError, "Cannot yank an already yanked version!" 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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/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] == 'local' | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info app"> | |
<code>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/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 < 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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/gem_source/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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/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, &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 => e | |
</code></li> | |
<li class="post-context-line"><code> app.headers["WWW-Authenticate"] = "Basic realm=\"Gemstash Private Gems\"" | |
</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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/gem_source/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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/gem_source/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, "Not yet supported" | |
</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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/web.rb</code> in | |
<code><strong>block in <class:Web></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 "/api/v1/gems" 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 "/api/v1/gems/yank" 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 "/api/v1/add_spec.json" 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 "/api/v1/remove_spec.json" do | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info framework"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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 = "#{verb} #{path}" | |
</code></li> | |
<li class="pre-context-line"><code> unbound_method = generate_method(method_name, &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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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 = "#{verb} #{path}" | |
</code></li> | |
<li class="pre-context-line"><code> unbound_method = generate_method(method_name, &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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.route'] = "#{@request.request_method} #{pattern}" | |
</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'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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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(&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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.route'] = "#{@request.request_method} #{pattern}" | |
</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'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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.error.params'] = @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['sinatra.error.params'] | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info framework"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.error.params'] = @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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.error.params'] = @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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.route'] = "#{@request.request_method} #{pattern}" | |
</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'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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.route'] = "#{@request.request_method} #{pattern}" | |
</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'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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.route'] = "#{@request.request_method} #{pattern}" | |
</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'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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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? && (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 => 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['sinatra.static_file'] | |
</code></li> | |
<li class="post-context-line"><code> rescue ::Exception => boom | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info framework"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.static_file'] = 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 => 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 'throw :halt' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.static_file'] = 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 => 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 'throw :halt' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.static_file'] = 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 => 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 'throw :halt' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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? && (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 => 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['Content-Type'] = 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['sinatra.error'] | |
</code></li> | |
<li class="post-context-line"><code> | |
</code></li> | |
<li class="post-context-line"><code> unless @response['Content-Type'] | |
</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.static_file'] = 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 => 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 'throw :halt' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.static_file'] = 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 => 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 'throw :halt' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.static_file'] = 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 => 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 'throw :halt' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['Content-Type'] = 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['sinatra.error'] | |
</code></li> | |
<li class="post-context-line"><code> | |
</code></li> | |
<li class="post-context-line"><code> unless @response['Content-Type'] | |
</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-protection-2.0.8.1/lib/rack/protection/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 < Base | |
</code></li> | |
<li class="pre-context-line"><code> default_options :xss_mode => :block, :nosniff => 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['X-XSS-Protection'] ||= "1; mode=#{options[:xss_mode]}" if html? headers | |
</code></li> | |
<li class="post-context-line"><code> headers['X-Content-Type-Options'] ||= 'nosniff' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-protection-2.0.8.1/lib/rack/protection/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 '/' and '.', expands +path_info+. | |
</code></li> | |
<li class="pre-context-line"><code> # Thus <tt>GET /foo/%2e%2e%2fbar</tt> becomes <tt>GET /bar</tt>. | |
</code></li> | |
<li class="pre-context-line"><code> class PathTraversal < Base | |
</code></li> | |
<li class="pre-context-line"><code> def call(env) | |
</code></li> | |
<li class="pre-context-line"><code> path_was = env["PATH_INFO"] | |
</code></li> | |
<li class="pre-context-line"><code> env["PATH_INFO"] = cleanup path_was if path_was && !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["PATH_INFO"] = 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 = '.'.encode(encoding) | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info system"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-protection-2.0.8.1/lib/rack/protection/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 < Base | |
</code></li> | |
<li class="pre-context-line"><code> default_options :allow_if => 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, "attack prevented by #{self.class}" | |
</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-protection-2.0.8.1/lib/rack/protection/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-protection-2.0.8.1/lib/rack/protection/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-protection-2.0.8.1/lib/rack/protection/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['X-Frame-Options'] ||= 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-2.2.2/lib/rack/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, &block); end | |
</code></li> | |
<li class="post-context-line"><code> def debug(progname = nil, &block); end | |
</code></li> | |
<li class="post-context-line"><code> def warn(progname = nil, &block); end | |
</code></li> | |
<li class="post-context-line"><code> def error(progname = nil, &block); end | |
</code></li> | |
<li class="post-context-line"><code> def fatal(progname = nil, &block); end | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info system"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-2.2.2/lib/rack/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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 => e | |
</code></li> | |
<li class="post-context-line"><code> errors, env["rack.errors"] = env["rack.errors"], @@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 = "text/plain" | |
</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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 < 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['async.callback']</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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> "#<#{@instance.class} app_file=#{settings.app_file.inspect}>" | |
</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/server_health_check-rack-0.1.0/lib/server_health_check_rack/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["PATH_INFO"]) | |
</code></li> | |
<li class="pre-context-line"><code> check = health_check(env["PATH_INFO"]) | |
</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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/gem_source/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["gemstash.gem_source"] = 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>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/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["gemstash.env"] = @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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/puma-4.3.5/lib/puma/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've been hijacked, then output a special line | |
</code></li> | |
<li class="post-context-line"><code> if env['rack.hijack_io'] | |
</code></li> | |
<li class="post-context-line"><code> log_hijacking(env, 'HIJACK', header, began_at) | |
</code></li> | |
<li class="post-context-line"><code> else | |
</code></li> | |
<li class="post-context-line"><code> ary = env['rack.after_reply'] | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info app"> | |
<code>/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/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["rack.logger"] = 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-2.2.2/lib/rack/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/puma-4.3.5/lib/puma/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/puma-4.3.5/lib/puma/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'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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/puma-4.3.5/lib/puma/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/puma-4.3.5/lib/puma/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/puma-4.3.5/lib/puma/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 => e | |
</code></li> | |
<li class="post-context-line"><code> STDERR.puts "Error reached top of thread-pool: #{e.message} (#{e.class})" | |
</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>"private_example"</div></td> | |
</tr> | |
<tr> | |
<td>version</td> | |
<td class="code"><div>"0.1.0"</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/x-www-form-urlencoded</div></td> | |
</tr> | |
<tr> | |
<td>GATEWAY_INTERFACE</td> | |
<td class="code"><div>CGI/1.2</div></td> | |
</tr> | |
<tr> | |
<td>HTTP_ACCEPT</td> | |
<td class="code"><div>*/*</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/3.0.3 x86_64-darwin-19 Ruby/2.6.3 (2019-04-16 patchlevel 62)</div></td> | |
</tr> | |
<tr> | |
<td>HTTP_VERSION</td> | |
<td class="code"><div>HTTP/1.1</div></td> | |
</tr> | |
<tr> | |
<td>PATH_INFO</td> | |
<td class="code"><div>/api/v1/gems/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>/private/api/v1/gems/yank</div></td> | |
</tr> | |
<tr> | |
<td>REQUEST_URI</td> | |
<td class="code"><div>/api/v1/gems/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/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>#<Gemstash::Env:0x00007ff68f9ff870 @config=#<Gemstash::Configuration:0x00007ff68d0a2f40 @config={:cache_type=>"memory", :base_path=>"/Users/quangnguyen/.gemstash", :db_adapter=>"sqlite3", :bind=>"tcp://0.0.0.0:9292", :rubygems_url=>"https://rubygems.org", :ignore_gemfile_source=>false, :protected_fetch=>false, :fetch_timeout=>20, :db_connection_options=>{}, :puma_threads=>16, :puma_workers=>1, :cache_expiration=>1800, :cache_max_size=>500, :storage_adapter=>"s3", :aws_access_key_id=>"AKIAXDAKXIODWSOIRIZ3", :aws_secret_access_key=>"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", :bucket_name=>"testing16160303", :region=>"us-west-1", :s3_path=>"gemstash/s3_storage"}>, @cache=#<Gemstash::Cache:0x00007ff68fc05ae8 @client=#<Gemstash::LruReduxClient:0x00007ff68fc05d68 @cache=#<LruRedux::TTL::ThreadSafeCache:0x00007ff68fc05d18 @max_size=500, @ttl=1800, @data_lru={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>#<Gemstash::Authorization:0x00007ff68d0d9a18 @auth_key="72b4857b4c60c2d0aec84092c4d89d07", @all=true, @permissions=#<Set: {"all"}>>}, @data_ttl={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>1592023797.76449}, @mon_mutex=#<Thread::Mutex:0x00007ff68fc05b10>, @mon_mutex_owner_object_id=70348475215500, @mon_owner=nil, @mon_count=0>>>, @db=#<Sequel::SQLite::Database: "sqlite://%2FUsers%2Fquangnguyen%2F.gemstash%2Fgemstash.db" {:max_connections=>1}>, @cache_client=#<Gemstash::LruReduxClient:0x00007ff68fc05d68 @cache=#<LruRedux::TTL::ThreadSafeCache:0x00007ff68fc05d18 @max_size=500, @ttl=1800, @data_lru={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>#<Gemstash::Authorization:0x00007ff68d0d9a18 @auth_key="72b4857b4c60c2d0aec84092c4d89d07", @all=true, @permissions=#<Set: {"all"}>>}, @data_ttl={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>1592023797.76449}, @mon_mutex=#<Thread::Mutex:0x00007ff68fc05b10>, @mon_mutex_owner_object_id=70348475215500, @mon_owner=nil, @mon_count=0>>></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>#<Puma::Configuration:0x00007ff68fbf78d0 @options=#<Puma::UserFileDefaultOptions:0x00007ff68fbf76f0 @user_options={:pidfile=>"/Users/quangnguyen/.gemstash/puma.pid", :daemon=>true, :log_requests=>false, :environment=>"development", :logger=>#<Puma::Events:0x00007ff68fbf7a38 @formatter=#<Puma::Events::PidFormatter:0x00007ff68fc0d6d0>, @stdout=#<Gemstash::Logging::StreamLogger:0x00007ff68fbf7a88 @level=1>, @stderr=#<Gemstash::Logging::StreamLogger:0x00007ff68fbf7a60 @level=3>, @debug=false, @hooks={:state=>[]}>}, @file_options={:config_files=>["/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/puma.rb"], :min_threads=>0, :max_threads=>16, :binds=>["tcp://0.0.0.0:9292"], :workers=>1, :rackup=>"/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/config.ru"}, @default_options={:min_threads=>0, :max_threads=>16, :log_requests=>false, :debug=>false, :binds=>["tcp://0.0.0.0:9292"], :workers=>0, :daemon=>false, :mode=>:http, :worker_timeout=>60, :worker_boot_timeout=>60, :worker_shutdown_timeout=>30, :remote_address=>:socket, :tag=>"gemstash", :environment=>"development", :rackup=>"config.ru", :logger=>#<IO:<STDOUT>>, :persistent_timeout=>20, :first_data_timeout=>30, :raise_exception_on_sigterm=>true}>, @plugins=#<Puma::PluginLoader:0x00007ff68fbf76a0 @instances=[]>, @user_dsl=#<Puma::DSL:0x00007ff68fbf7650 @config=#<Puma::Configuration:0x00007ff68fbf78d0 ...>, @options={:pidfile=>"/Users/quangnguyen/.gemstash/puma.pid", :daemon=>true, :log_requests=>false, :environment=>"development", :logger=>#<Puma::Events:0x00007ff68fbf7a38 @formatter=#<Puma::Events::PidFormatter:0x00007ff68fc0d6d0>, @stdout=#<Gemstash::Logging::StreamLogger:0x00007ff68fbf7a88 @level=1>, @stderr=#<Gemstash::Logging::StreamLogger:0x00007ff68fbf7a60 @level=3>, @debug=false, @hooks={:state=>[]}>}, @plugins=[]>, @file_dsl=#<Puma::DSL:0x00007ff68fbf7600 @config=#<Puma::Configuration:0x00007ff68fbf78d0 ...>, @options={:config_files=>["/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/puma.rb"], :min_threads=>0, :max_threads=>16, :binds=>["tcp://0.0.0.0:9292"], :workers=>1, :rackup=>"/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/config.ru"}, @plugins=[], @path="/Users/quangnguyen/Documents/Google_folders/RubyWork/gemstash/lib/gemstash/puma.rb">, @default_dsl=#<Puma::DSL:0x00007ff68fbf75b0 @config=#<Puma::Configuration:0x00007ff68fbf78d0 ...>, @options={:min_threads=>0, :max_threads=>16, :log_requests=>false, :debug=>false, :binds=>["tcp://0.0.0.0:9292"], :workers=>0, :daemon=>false, :mode=>:http, :worker_timeout=>60, :worker_boot_timeout=>60, :worker_shutdown_timeout=>30, :remote_address=>:socket, :tag=>"gemstash", :environment=>"development", :rackup=>"config.ru", :logger=>#<IO:<STDOUT>>, :persistent_timeout=>20, :first_data_timeout=>30, :raise_exception_on_sigterm=>true}, @plugins=[]>></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>#<TCPSocket:fd 20, AF_INET, 127.0.0.1, 9292></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>#<Object:0x00007ff68fba5008></div></td> | |
</tr> | |
<tr> | |
<td>rack.hijack</td> | |
<td class="code"><div>#<Puma::Client:0x3ffb47d8e370 @ready=true></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>#<StringIO:0x00007ff68fb26960></div></td> | |
</tr> | |
<tr> | |
<td>rack.logger</td> | |
<td class="code"><div>#<Rack::NullLogger:0x00007ff68fb172a8 @app=#<Rack::Protection::FrameOptions:0x00007ff68fb17488 @app=#<Rack::Protection::HttpOrigin:0x00007ff68fb17690 @app=#<Rack::Protection::IPSpoofing:0x00007ff68fb17870 @app=#<Rack::Protection::JsonCsrf:0x00007ff68fb17a50 @app=#<Rack::Protection::PathTraversal:0x00007ff68fb17be0 @app=#<Rack::Protection::XSSHeader:0x00007ff68fb17d48 @app=#<Gemstash::Web:0x00007ff68fbd6b58 @gemstash_env=#<Gemstash::Env:0x00007ff68f9ff870 @config=#<Gemstash::Configuration:0x00007ff68d0a2f40 @config={:cache_type=>"memory", :base_path=>"/Users/quangnguyen/.gemstash", :db_adapter=>"sqlite3", :bind=>"tcp://0.0.0.0:9292", :rubygems_url=>"https://rubygems.org", :ignore_gemfile_source=>false, :protected_fetch=>false, :fetch_timeout=>20, :db_connection_options=>{}, :puma_threads=>16, :puma_workers=>1, :cache_expiration=>1800, :cache_max_size=>500, :storage_adapter=>"s3", :aws_access_key_id=>"AKIAXDAKXIODWSOIRIZ3", :aws_secret_access_key=>"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", :bucket_name=>"testing16160303", :region=>"us-west-1", :s3_path=>"gemstash/s3_storage"}>, @cache=#<Gemstash::Cache:0x00007ff68fc05ae8 @client=#<Gemstash::LruReduxClient:0x00007ff68fc05d68 @cache=#<LruRedux::TTL::ThreadSafeCache:0x00007ff68fc05d18 @max_size=500, @ttl=1800, @data_lru={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>#<Gemstash::Authorization:0x00007ff68d0d9a18 @auth_key="72b4857b4c60c2d0aec84092c4d89d07", @all=true, @permissions=#<Set: {"all"}>>}, @data_ttl={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>1592023797.76449}, @mon_mutex=#<Thread::Mutex:0x00007ff68fc05b10>, @mon_mutex_owner_object_id=70348475215500, @mon_owner=nil, @mon_count=0>>>, @db=#<Sequel::SQLite::Database: "sqlite://%2FUsers%2Fquangnguyen%2F.gemstash%2Fgemstash.db" {:max_connections=>1}>, @cache_client=#<Gemstash::LruReduxClient:0x00007ff68fc05d68 @cache=#<LruRedux::TTL::ThreadSafeCache:0x00007ff68fc05d18 @max_size=500, @ttl=1800, @data_lru={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>#<Gemstash::Authorization:0x00007ff68d0d9a18 @auth_key="72b4857b4c60c2d0aec84092c4d89d07", @all=true, @permissions=#<Set: {"all"}>>}, @data_ttl={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>1592023797.76449}, @mon_mutex=#<Thread::Mutex:0x00007ff68fc05b10>, @mon_mutex_owner_object_id=70348475215500, @mon_owner=nil, @mon_count=0>>>, @http_client_builder=Gemstash::HTTPClient, @default_layout=:layout, @preferred_extension=nil, @app=nil, @template_cache=#<Tilt::Cache:0x00007ff68e0656a8 @cache={}>>, @options={:reaction=>:drop_session, :logging=>true, :message=>"Forbidden", :encryptor=>Digest::SHA1, :session_key=>"rack.session", :status=>403, :allow_empty_referrer=>true, :report_key=>"protection.failed", :html_types=>["text/html", "application/xhtml", "text/xml", "application/xml"], :xss_mode=>:block, :nosniff=>true, :img_src=>"'self' data:", :font_src=>"'self'", :without_session=>true}>, @options={:reaction=>:drop_session, :logging=>true, :message=>"Forbidden", :encryptor=>Digest::SHA1, :session_key=>"rack.session", :status=>403, :allow_empty_referrer=>true, :report_key=>"protection.failed", :html_types=>["text/html", "application/xhtml", "text/xml", "application/xml"], :img_src=>"'self' data:", :font_src=>"'self'", :without_session=>true}>, @options={:reaction=>:drop_session, :logging=>true, :message=>"Forbidden", :encryptor=>Digest::SHA1, :session_key=>"rack.session", :status=>403, :allow_empty_referrer=>true, :report_key=>"protection.failed", :html_types=>["text/html", "application/xhtml", "text/xml", "application/xml"], :allow_if=>nil, :img_src=>"'self' data:", :font_src=>"'self'", :without_session=>true}>, @options={:reaction=>:drop_session, :logging=>true, :message=>"Forbidden", :encryptor=>Digest::SHA1, :session_key=>"rack.session", :status=>403, :allow_empty_referrer=>true, :report_key=>"protection.failed", :html_types=>["text/html", "application/xhtml", "text/xml", "application/xml"], :img_src=>"'self' data:", :font_src=>"'self'", :without_session=>true}>, @options={:reaction=>:drop_session, :logging=>true, :message=>"Forbidden", :encryptor=>Digest::SHA1, :session_key=>"rack.session", :status=>403, :allow_empty_referrer=>true, :report_key=>"protection.failed", :html_types=>["text/html", "application/xhtml", "text/xml", "application/xml"], :allow_if=>nil, :img_src=>"'self' data:", :font_src=>"'self'", :without_session=>true}>, @options={:reaction=>:drop_session, :logging=>true, :message=>"Forbidden", :encryptor=>Digest::SHA1, :session_key=>"rack.session", :status=>403, :allow_empty_referrer=>true, :report_key=>"protection.failed", :html_types=>["text/html", "application/xhtml", "text/xml", "application/xml"], :frame_options=>:sameorigin, :img_src=>"'self' data:", :font_src=>"'self'", :without_session=>true}>></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>{"gem_name"=>"private_example", "version"=>"0.1.0"}</div></td> | |
</tr> | |
<tr> | |
<td>rack.request.form_input</td> | |
<td class="code"><div>#<StringIO:0x00007ff68fb26960></div></td> | |
</tr> | |
<tr> | |
<td>rack.request.form_vars</td> | |
<td class="code"><div>gem_name=private_example&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>[#<Sinatra::Request::AcceptEntry:0x00007ff68fc641b0 @entry="*/*", @type="*/*", @params={}, @q=1.0>]</div></td> | |
</tr> | |
<tr> | |
<td>sinatra.error</td> | |
<td class="code"><div>#<Gemstash::GemYanker::YankedVersionError: Cannot yank an already yanked version!></div></td> | |
</tr> | |
<tr> | |
<td>sinatra.error.params</td> | |
<td class="code"><div>{"gem_name"=>"private_example", "version"=>"0.1.0"}</div></td> | |
</tr> | |
<tr> | |
<td>sinatra.route</td> | |
<td class="code"><div>DELETE /api/v1/gems/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 /api/v1/gems/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>/api/v1/gems/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/gemstash-2.1.0/lib/gemstash/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, "Cannot yank an unknown gem!" 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, "Cannot yank an unknown version!" 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, "Cannot yank an already yanked version!" 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sequel-5.32.0/lib/sequel/database/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 => 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 => 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 => e3 | |
</code></li> | |
<li class="post-context-line"><code> end | |
</code></li> | |
<li class="post-context-line"><code> transaction_error(e, :conn=>conn, :rollback=>rollback) | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info system"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sequel-5.32.0/lib/sequel/database/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, "cannot set :retry_on options if you are already inside a transaction" | |
</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, &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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sequel-5.32.0/lib/sequel/connection_pool/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 => 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sequel-5.32.0/lib/sequel/database/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, &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, &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/shard. | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info system"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sequel-5.32.0/lib/sequel/database/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 <= 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/gemstash-2.1.0/lib/gemstash/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("yank") | |
</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, "Cannot yank an unknown gem!" 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, "Cannot yank an unknown version!" unless version | |
</code></li> | |
<li class="post-context-line"><code> raise YankedVersionError, "Cannot yank an already yanked version!" 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/gemstash-2.1.0/lib/gemstash/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("private").for("gems") | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info system"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/gemstash-2.1.0/lib/gemstash/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 < 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/gemstash-2.1.0/lib/gemstash/gem_source/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/gemstash-2.1.0/lib/gemstash/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, &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 => e | |
</code></li> | |
<li class="post-context-line"><code> app.headers["WWW-Authenticate"] = "Basic realm=\"Gemstash Private Gems\"" | |
</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/gemstash-2.1.0/lib/gemstash/gem_source/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/gemstash-2.1.0/lib/gemstash/gem_source/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, "Not yet supported" | |
</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/gemstash-2.1.0/lib/gemstash/web.rb</code> in | |
<code><strong>block in <class:Web></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 "/api/v1/gems" 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 "/api/v1/gems/yank" 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 "/api/v1/add_spec.json" 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 "/api/v1/remove_spec.json" do | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info framework"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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 = "#{verb} #{path}" | |
</code></li> | |
<li class="pre-context-line"><code> unbound_method = generate_method(method_name, &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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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 = "#{verb} #{path}" | |
</code></li> | |
<li class="pre-context-line"><code> unbound_method = generate_method(method_name, &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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.route'] = "#{@request.request_method} #{pattern}" | |
</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'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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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(&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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.route'] = "#{@request.request_method} #{pattern}" | |
</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'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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.error.params'] = @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['sinatra.error.params'] | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info framework"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.error.params'] = @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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.error.params'] = @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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.route'] = "#{@request.request_method} #{pattern}" | |
</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'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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.route'] = "#{@request.request_method} #{pattern}" | |
</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'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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.route'] = "#{@request.request_method} #{pattern}" | |
</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'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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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? && (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 => 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['sinatra.static_file'] | |
</code></li> | |
<li class="post-context-line"><code> rescue ::Exception => boom | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info framework"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.static_file'] = 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 => 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 'throw :halt' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.static_file'] = 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 => 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 'throw :halt' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.static_file'] = 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 => 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 'throw :halt' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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? && (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 => 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['Content-Type'] = 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['sinatra.error'] | |
</code></li> | |
<li class="post-context-line"><code> | |
</code></li> | |
<li class="post-context-line"><code> unless @response['Content-Type'] | |
</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.static_file'] = 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 => 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 'throw :halt' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.static_file'] = 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 => 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 'throw :halt' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['sinatra.static_file'] = 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 => 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 'throw :halt' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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['Content-Type'] = 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['sinatra.error'] | |
</code></li> | |
<li class="post-context-line"><code> | |
</code></li> | |
<li class="post-context-line"><code> unless @response['Content-Type'] | |
</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-protection-2.0.8.1/lib/rack/protection/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 < Base | |
</code></li> | |
<li class="pre-context-line"><code> default_options :xss_mode => :block, :nosniff => 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['X-XSS-Protection'] ||= "1; mode=#{options[:xss_mode]}" if html? headers | |
</code></li> | |
<li class="post-context-line"><code> headers['X-Content-Type-Options'] ||= 'nosniff' 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-protection-2.0.8.1/lib/rack/protection/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 '/' and '.', expands +path_info+. | |
</code></li> | |
<li class="pre-context-line"><code> # Thus <tt>GET /foo/%2e%2e%2fbar</tt> becomes <tt>GET /bar</tt>. | |
</code></li> | |
<li class="pre-context-line"><code> class PathTraversal < Base | |
</code></li> | |
<li class="pre-context-line"><code> def call(env) | |
</code></li> | |
<li class="pre-context-line"><code> path_was = env["PATH_INFO"] | |
</code></li> | |
<li class="pre-context-line"><code> env["PATH_INFO"] = cleanup path_was if path_was && !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["PATH_INFO"] = 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 = '.'.encode(encoding) | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info system"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-protection-2.0.8.1/lib/rack/protection/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 < Base | |
</code></li> | |
<li class="pre-context-line"><code> default_options :allow_if => 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, "attack prevented by #{self.class}" | |
</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-protection-2.0.8.1/lib/rack/protection/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-protection-2.0.8.1/lib/rack/protection/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-protection-2.0.8.1/lib/rack/protection/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['X-Frame-Options'] ||= 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-2.2.2/lib/rack/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, &block); end | |
</code></li> | |
<li class="post-context-line"><code> def debug(progname = nil, &block); end | |
</code></li> | |
<li class="post-context-line"><code> def warn(progname = nil, &block); end | |
</code></li> | |
<li class="post-context-line"><code> def error(progname = nil, &block); end | |
</code></li> | |
<li class="post-context-line"><code> def fatal(progname = nil, &block); end | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info system"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-2.2.2/lib/rack/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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 => e | |
</code></li> | |
<li class="post-context-line"><code> errors, env["rack.errors"] = env["rack.errors"], @@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 = "text/plain" | |
</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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 < 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['async.callback']</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sinatra-2.0.8.1/lib/sinatra/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> "#<#{@instance.class} app_file=#{settings.app_file.inspect}>" | |
</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/server_health_check-rack-0.1.0/lib/server_health_check_rack/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["PATH_INFO"]) | |
</code></li> | |
<li class="pre-context-line"><code> check = health_check(env["PATH_INFO"]) | |
</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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/gemstash-2.1.0/lib/gemstash/gem_source/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["gemstash.gem_source"] = 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/gemstash-2.1.0/lib/gemstash/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["gemstash.env"] = @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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/puma-4.3.5/lib/puma/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've been hijacked, then output a special line | |
</code></li> | |
<li class="post-context-line"><code> if env['rack.hijack_io'] | |
</code></li> | |
<li class="post-context-line"><code> log_hijacking(env, 'HIJACK', header, began_at) | |
</code></li> | |
<li class="post-context-line"><code> else | |
</code></li> | |
<li class="post-context-line"><code> ary = env['rack.after_reply'] | |
</code></li> | |
</ol> | |
<div class="clear"></div> | |
</li> | |
<li class="frame-info system"> | |
<code>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/gemstash-2.1.0/lib/gemstash/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["rack.logger"] = 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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-2.2.2/lib/rack/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/puma-4.3.5/lib/puma/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/puma-4.3.5/lib/puma/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'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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/puma-4.3.5/lib/puma/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/puma-4.3.5/lib/puma/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>/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/puma-4.3.5/lib/puma/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 => e | |
</code></li> | |
<li class="post-context-line"><code> STDERR.puts "Error reached top of thread-pool: #{e.message} (#{e.class})" | |
</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>"private_example"</div></td> | |
</tr> | |
<tr> | |
<td>version</td> | |
<td class="code"><div>"0.1.0"</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/x-www-form-urlencoded</div></td> | |
</tr> | |
<tr> | |
<td>GATEWAY_INTERFACE</td> | |
<td class="code"><div>CGI/1.2</div></td> | |
</tr> | |
<tr> | |
<td>HTTP_ACCEPT</td> | |
<td class="code"><div>*/*</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/3.0.3 x86_64-darwin-19 Ruby/2.6.3 (2019-04-16 patchlevel 62)</div></td> | |
</tr> | |
<tr> | |
<td>HTTP_VERSION</td> | |
<td class="code"><div>HTTP/1.1</div></td> | |
</tr> | |
<tr> | |
<td>PATH_INFO</td> | |
<td class="code"><div>/api/v1/gems/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>/private/api/v1/gems/yank</div></td> | |
</tr> | |
<tr> | |
<td>REQUEST_URI</td> | |
<td class="code"><div>/api/v1/gems/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/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>#<Gemstash::Env:0x00007fe7781b98d0 @config=#<Gemstash::Configuration:0x00007fe7781085a8 @config={:cache_type=>"memory", :base_path=>"/Users/quangnguyen/.gemstash", :db_adapter=>"sqlite3", :bind=>"tcp://0.0.0.0:9292", :rubygems_url=>"https://rubygems.org", :ignore_gemfile_source=>false, :protected_fetch=>false, :fetch_timeout=>20, :db_connection_options=>{}, :puma_threads=>16, :puma_workers=>1, :cache_expiration=>1800, :cache_max_size=>500, :storage_adapter=>"local"}>, @cache=#<Gemstash::Cache:0x00007fe7783bb890 @client=#<Gemstash::LruReduxClient:0x00007fe7783bba70 @cache=#<LruRedux::TTL::ThreadSafeCache:0x00007fe7783bba48 @max_size=500, @ttl=1800, @data_lru={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>#<Gemstash::Authorization:0x00007fe7783c9fd0 @auth_key="72b4857b4c60c2d0aec84092c4d89d07", @all=true, @permissions=#<Set: {"all"}>>}, @data_ttl={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>1592096184.339424}, @mon_mutex=#<Thread::Mutex:0x00007fe7783bb8b8>, @mon_mutex_owner_object_id=70316065676580, @mon_owner=nil, @mon_count=0>>>, @db=#<Sequel::SQLite::Database: "sqlite://%2FUsers%2Fquangnguyen%2F.gemstash%2Fgemstash.db" {:max_connections=>1}>, @cache_client=#<Gemstash::LruReduxClient:0x00007fe7783bba70 @cache=#<LruRedux::TTL::ThreadSafeCache:0x00007fe7783bba48 @max_size=500, @ttl=1800, @data_lru={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>#<Gemstash::Authorization:0x00007fe7783c9fd0 @auth_key="72b4857b4c60c2d0aec84092c4d89d07", @all=true, @permissions=#<Set: {"all"}>>}, @data_ttl={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>1592096184.339424}, @mon_mutex=#<Thread::Mutex:0x00007fe7783bb8b8>, @mon_mutex_owner_object_id=70316065676580, @mon_owner=nil, @mon_count=0>>></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>#<Puma::Configuration:0x00007fe7781e3b80 @options=#<Puma::UserFileDefaultOptions:0x00007fe7781e3810 @user_options={:pidfile=>"/Users/quangnguyen/.gemstash/puma.pid", :daemon=>true, :log_requests=>false, :environment=>"development", :logger=>#<Puma::Events:0x00007fe7781e3e28 @formatter=#<Puma::Events::PidFormatter:0x00007fe7788b7a60>, @stdout=#<Gemstash::Logging::StreamLogger:0x00007fe7781e3e78 @level=1>, @stderr=#<Gemstash::Logging::StreamLogger:0x00007fe7781e3e50 @level=3>, @debug=false, @hooks={:state=>[]}>}, @file_options={:config_files=>["/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/gemstash-2.1.0/lib/gemstash/puma.rb"], :min_threads=>0, :max_threads=>16, :binds=>["tcp://0.0.0.0:9292"], :workers=>1, :rackup=>"/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/gemstash-2.1.0/lib/gemstash/config.ru"}, @default_options={:min_threads=>0, :max_threads=>16, :log_requests=>false, :debug=>false, :binds=>["tcp://0.0.0.0:9292"], :workers=>0, :daemon=>false, :mode=>:http, :worker_timeout=>60, :worker_boot_timeout=>60, :worker_shutdown_timeout=>30, :remote_address=>:socket, :tag=>"gemstash", :environment=>"development", :rackup=>"config.ru", :logger=>#<IO:<STDOUT>>, :persistent_timeout=>20, :first_data_timeout=>30, :raise_exception_on_sigterm=>true}>, @plugins=#<Puma::PluginLoader:0x00007fe7781e3770 @instances=[]>, @user_dsl=#<Puma::DSL:0x00007fe7781e36d0 @config=#<Puma::Configuration:0x00007fe7781e3b80 ...>, @options={:pidfile=>"/Users/quangnguyen/.gemstash/puma.pid", :daemon=>true, :log_requests=>false, :environment=>"development", :logger=>#<Puma::Events:0x00007fe7781e3e28 @formatter=#<Puma::Events::PidFormatter:0x00007fe7788b7a60>, @stdout=#<Gemstash::Logging::StreamLogger:0x00007fe7781e3e78 @level=1>, @stderr=#<Gemstash::Logging::StreamLogger:0x00007fe7781e3e50 @level=3>, @debug=false, @hooks={:state=>[]}>}, @plugins=[]>, @file_dsl=#<Puma::DSL:0x00007fe7781e3658 @config=#<Puma::Configuration:0x00007fe7781e3b80 ...>, @options={:config_files=>["/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/gemstash-2.1.0/lib/gemstash/puma.rb"], :min_threads=>0, :max_threads=>16, :binds=>["tcp://0.0.0.0:9292"], :workers=>1, :rackup=>"/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/gemstash-2.1.0/lib/gemstash/config.ru"}, @plugins=[], @path="/Users/quangnguyen/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/gemstash-2.1.0/lib/gemstash/puma.rb">, @default_dsl=#<Puma::DSL:0x00007fe7781e3608 @config=#<Puma::Configuration:0x00007fe7781e3b80 ...>, @options={:min_threads=>0, :max_threads=>16, :log_requests=>false, :debug=>false, :binds=>["tcp://0.0.0.0:9292"], :workers=>0, :daemon=>false, :mode=>:http, :worker_timeout=>60, :worker_boot_timeout=>60, :worker_shutdown_timeout=>30, :remote_address=>:socket, :tag=>"gemstash", :environment=>"development", :rackup=>"config.ru", :logger=>#<IO:<STDOUT>>, :persistent_timeout=>20, :first_data_timeout=>30, :raise_exception_on_sigterm=>true}, @plugins=[]>></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>#<TCPSocket:fd 20, AF_INET, 127.0.0.1, 9292></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>#<Object:0x00007fe7788afb08></div></td> | |
</tr> | |
<tr> | |
<td>rack.hijack</td> | |
<td class="code"><div>#<Puma::Client:0x3ff3bc20c5d4 @ready=true></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>#<StringIO:0x00007fe7784183b0></div></td> | |
</tr> | |
<tr> | |
<td>rack.logger</td> | |
<td class="code"><div>#<Rack::NullLogger:0x00007fe77841a070 @app=#<Rack::Protection::FrameOptions:0x00007fe77841a110 @app=#<Rack::Protection::HttpOrigin:0x00007fe77841a1b0 @app=#<Rack::Protection::IPSpoofing:0x00007fe77841a228 @app=#<Rack::Protection::JsonCsrf:0x00007fe77841a2c8 @app=#<Rack::Protection::PathTraversal:0x00007fe77841a340 @app=#<Rack::Protection::XSSHeader:0x00007fe77841a3e0 @app=#<Gemstash::Web:0x00007fe778298a58 @gemstash_env=#<Gemstash::Env:0x00007fe7781b98d0 @config=#<Gemstash::Configuration:0x00007fe7781085a8 @config={:cache_type=>"memory", :base_path=>"/Users/quangnguyen/.gemstash", :db_adapter=>"sqlite3", :bind=>"tcp://0.0.0.0:9292", :rubygems_url=>"https://rubygems.org", :ignore_gemfile_source=>false, :protected_fetch=>false, :fetch_timeout=>20, :db_connection_options=>{}, :puma_threads=>16, :puma_workers=>1, :cache_expiration=>1800, :cache_max_size=>500, :storage_adapter=>"local"}>, @cache=#<Gemstash::Cache:0x00007fe7783bb890 @client=#<Gemstash::LruReduxClient:0x00007fe7783bba70 @cache=#<LruRedux::TTL::ThreadSafeCache:0x00007fe7783bba48 @max_size=500, @ttl=1800, @data_lru={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>#<Gemstash::Authorization:0x00007fe7783c9fd0 @auth_key="72b4857b4c60c2d0aec84092c4d89d07", @all=true, @permissions=#<Set: {"all"}>>}, @data_ttl={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>1592096184.339424}, @mon_mutex=#<Thread::Mutex:0x00007fe7783bb8b8>, @mon_mutex_owner_object_id=70316065676580, @mon_owner=nil, @mon_count=0>>>, @db=#<Sequel::SQLite::Database: "sqlite://%2FUsers%2Fquangnguyen%2F.gemstash%2Fgemstash.db" {:max_connections=>1}>, @cache_client=#<Gemstash::LruReduxClient:0x00007fe7783bba70 @cache=#<LruRedux::TTL::ThreadSafeCache:0x00007fe7783bba48 @max_size=500, @ttl=1800, @data_lru={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>#<Gemstash::Authorization:0x00007fe7783c9fd0 @auth_key="72b4857b4c60c2d0aec84092c4d89d07", @all=true, @permissions=#<Set: {"all"}>>}, @data_ttl={"auths/72b4857b4c60c2d0aec84092c4d89d07"=>1592096184.339424}, @mon_mutex=#<Thread::Mutex:0x00007fe7783bb8b8>, @mon_mutex_owner_object_id=70316065676580, @mon_owner=nil, @mon_count=0>>>, @http_client_builder=Gemstash::HTTPClient, @default_layout=:layout, @preferred_extension=nil, @app=nil, @template_cache=#<Tilt::Cache:0x00007fe7783f1378 @cache={}>>, @options={:reaction=>:drop_session, :logging=>true, :message=>"Forbidden", :encryptor=>Digest::SHA1, :session_key=>"rack.session", :status=>403, :allow_empty_referrer=>true, :report_key=>"protection.failed", :html_types=>["text/html", "application/xhtml", "text/xml", "application/xml"], :xss_mode=>:block, :nosniff=>true, :img_src=>"'self' data:", :font_src=>"'self'", :without_session=>true}>, @options={:reaction=>:drop_session, :logging=>true, :message=>"Forbidden", :encryptor=>Digest::SHA1, :session_key=>"rack.session", :status=>403, :allow_empty_referrer=>true, :report_key=>"protection.failed", :html_types=>["text/html", "application/xhtml", "text/xml", "application/xml"], :img_src=>"'self' data:", :font_src=>"'self'", :without_session=>true}>, @options={:reaction=>:drop_session, :logging=>true, :message=>"Forbidden", :encryptor=>Digest::SHA1, :session_key=>"rack.session", :status=>403, :allow_empty_referrer=>true, :report_key=>"protection.failed", :html_types=>["text/html", "application/xhtml", "text/xml", "application/xml"], :allow_if=>nil, :img_src=>"'self' data:", :font_src=>"'self'", :without_session=>true}>, @options={:reaction=>:drop_session, :logging=>true, :message=>"Forbidden", :encryptor=>Digest::SHA1, :session_key=>"rack.session", :status=>403, :allow_empty_referrer=>true, :report_key=>"protection.failed", :html_types=>["text/html", "application/xhtml", "text/xml", "application/xml"], :img_src=>"'self' data:", :font_src=>"'self'", :without_session=>true}>, @options={:reaction=>:drop_session, :logging=>true, :message=>"Forbidden", :encryptor=>Digest::SHA1, :session_key=>"rack.session", :status=>403, :allow_empty_referrer=>true, :report_key=>"protection.failed", :html_types=>["text/html", "application/xhtml", "text/xml", "application/xml"], :allow_if=>nil, :img_src=>"'self' data:", :font_src=>"'self'", :without_session=>true}>, @options={:reaction=>:drop_session, :logging=>true, :message=>"Forbidden", :encryptor=>Digest::SHA1, :session_key=>"rack.session", :status=>403, :allow_empty_referrer=>true, :report_key=>"protection.failed", :html_types=>["text/html", "application/xhtml", "text/xml", "application/xml"], :frame_options=>:sameorigin, :img_src=>"'self' data:", :font_src=>"'self'", :without_session=>true}>></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>{"gem_name"=>"private_example", "version"=>"0.1.0"}</div></td> | |
</tr> | |
<tr> | |
<td>rack.request.form_input</td> | |
<td class="code"><div>#<StringIO:0x00007fe7784183b0></div></td> | |
</tr> | |
<tr> | |
<td>rack.request.form_vars</td> | |
<td class="code"><div>gem_name=private_example&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>[#<Sinatra::Request::AcceptEntry:0x00007fe7783ea6b8 @entry="*/*", @type="*/*", @params={}, @q=1.0>]</div></td> | |
</tr> | |
<tr> | |
<td>sinatra.error</td> | |
<td class="code"><div>#<Gemstash::GemYanker::YankedVersionError: Cannot yank an already yanked version!></div></td> | |
</tr> | |
<tr> | |
<td>sinatra.error.params</td> | |
<td class="code"><div>{"gem_name"=>"private_example", "version"=>"0.1.0"}</div></td> | |
</tr> | |
<tr> | |
<td>sinatra.route</td> | |
<td class="code"><div>DELETE /api/v1/gems/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