JSON::ParserError in Lti::LaunchesController#show

767: unexpected token at '<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>Action Controller: Exception caught</title> <style> body { background-color: #FAFAFA; color: #333; margin: 0px; } body, p, ol, ul, td { font-family: helvetica, verdana, arial, sans-serif; font-size: 13px; line-height: 18px; } pre { font-size: 11px; white-space: pre-wrap; } pre.box { border: 1px solid #EEE; padding: 10px; margin: 0px; width: 958px; } header { color: #F0F0F0; background: #C52F24; padding: 0.5em 1.5em; } h1 { margin: 0.2em 0; line-height: 1.1em; font-size: 2em; } h2 { color: #C52F24; line-height: 25px; } .details { border: 1px solid #D0D0D0; border-radius: 4px; margin: 1em 0px; display: block; width: 978px; } .summary { padding: 8px 15px; border-bottom: 1px solid #D0D0D0; display: block; } .details pre { margin: 5px; border: none; } #container { box-sizing: border-box; width: 100%; padding: 0 1.5em; } .source * { margin: 0px; padding: 0px; } .source { border: 1px solid #D9D9D9; background: #ECECEC; width: 978px; } .source pre { padding: 10px 0px; border: none; } .source .data { font-size: 80%; overflow: auto; background-color: #FFF; } .info { padding: 0.5em; } .source .data .line_numbers { background-color: #ECECEC; color: #AAA; padding: 1em .5em; border-right: 1px solid #DDD; text-align: right; } .line { padding-left: 10px; white-space: pre; } .line:hover { background-color: #F6F6F6; } .line.active { background-color: #FFCCCC; } .hidden { display: none; } a { color: #980905; } a:visited { color: #666; } a.trace-frames { color: #666; } a:hover { color: #C52F24; } a.trace-frames.selected { color: #C52F24 } </style> <script> var toggle = function(id) { var s = document.getElementById(id).style; s.display = s.display == 'none' ? 'block' : 'none'; return false; } var show = function(id) { document.getElementById(id).style.display = 'block'; } var hide = function(id) { document.getElementById(id).style.display = 'none'; } var toggleTrace = function() { return toggle('blame_trace'); } var toggleSessionDump = function() { return toggle('session_dump'); } var toggleEnvDump = function() { return toggle('env_dump'); } </script> </head> <body> <header> <h1> JSON::ParserError in AccessTokensController#create </h1> </header> <div id="container"> <h2>767: unexpected token at &#39;&lt;!DOCTYPE html&gt; &lt;html lang=&quot;en&quot;&gt; &lt;head&gt; &lt;meta charset=&quot;utf-8&quot; /&gt; &lt;title&gt;Action Controller: Exception caught&lt;/title&gt; &lt;style&gt; body { background-color: #FAFAFA; color: #333; margin: 0px; } body, p, ol, ul, td { font-family: helvetica, verdana, arial, sans-serif; font-size: 13px; line-height: 18px; } pre { font-size: 11px; white-space: pre-wrap; } pre.box { border: 1px solid #EEE; padding: 10px; margin: 0px; width: 958px; } header { color: #F0F0F0; background: #C52F24; padding: 0.5em 1.5em; } h1 { margin: 0.2em 0; line-height: 1.1em; font-size: 2em; } h2 { color: #C52F24; line-height: 25px; } .details { border: 1px solid #D0D0D0; border-radius: 4px; margin: 1em 0px; display: block; width: 978px; } .summary { padding: 8px 15px; border-bottom: 1px solid #D0D0D0; display: block; } .details pre { margin: 5px; border: none; } #container { box-sizing: border-box; width: 100%; padding: 0 1.5em; } .source * { margin: 0px; padding: 0px; } .source { border: 1px solid #D9D9D9; background: #ECECEC; width: 978px; } .source pre { padding: 10px 0px; border: none; } .source .data { font-size: 80%; overflow: auto; background-color: #FFF; } .info { padding: 0.5em; } .source .data .line_numbers { background-color: #ECECEC; color: #AAA; padding: 1em .5em; border-right: 1px solid #DDD; text-align: right; } .line { padding-left: 10px; white-space: pre; } .line:hover { background-color: #F6F6F6; } .line.active { background-color: #FFCCCC; } .hidden { display: none; } a { color: #980905; } a:visited { color: #666; } a.trace-frames { color: #666; } a:hover { color: #C52F24; } a.trace-frames.selected { color: #C52F24 } #route_table { margin: 0; border-collapse: collapse; } #route_table thead tr { border-bottom: 2px solid #ddd; } #route_table thead tr.bottom { border-bottom: none; } #route_table thead tr.bottom th { padding: 10px 0; line-height: 15px; } #route_table thead tr.bottom th input#search { -webkit-appearance: textfield; } #route_table tbody tr { border-bottom: 1px solid #ddd; } #route_table tbody tr:nth-child(odd) { background: #f2f2f2; } #route_table tbody.exact_matches, #route_table tbody.fuzzy_matches { background-color: LightGoldenRodYellow; border-bottom: solid 2px SlateGrey; } #route_table tbody.exact_matches tr, #route_table tbody.fuzzy_matches tr { background: none; border-bottom: none; } #route_table td { padding: 4px 30px; } #path_search { width: 80%; font-size: inherit; } &lt;/style&gt; &lt;script&gt; var toggle = function(id) { var s = document.getElementById(id).style; s.display = s.display == &#39;none&#39; ? &#39;block&#39; : &#39;none&#39;; return false; } var show = function(id) { document.getElementById(id).style.display = &#39;block&#39;; } var hide = function(id) { document.getElementById(id).style.display = &#39;none&#39;; } var toggleTrace = function() { return toggle(&#39;blame_trace&#39;); } var toggleSessionDump = function() { return toggle(&#39;session_dump&#39;); } var toggleEnvDump = function() { return toggle(&#39;env_dump&#39;); } &lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;header&gt; &lt;h1&gt;Routing Error&lt;/h1&gt; &lt;/header&gt; &lt;div id=&quot;container&quot;&gt; &lt;h2&gt;No route matches [GET] &amp;quot;/lti/tools/1722/deep_link_launches&amp;quot;&lt;/h2&gt; &lt;p&gt;&lt;code&gt;Rails.root: /app&lt;/code&gt;&lt;/p&gt; &lt;div id=&quot;traces&quot;&gt; &lt;a href=&quot;#&quot; onclick=&quot;hide(&amp;#39;Framework-Trace&amp;#39;);hide(&amp;#39;Full-Trace&amp;#39;);show(&amp;#39;Application-Trace&amp;#39;);; return false;&quot;&gt;Application Trace&lt;/a&gt; | &lt;a href=&quot;#&quot; onclick=&quot;hide(&amp;#39;Application-Trace&amp;#39;);hide(&amp;#39;Full-Trace&amp;#39;);show(&amp;#39;Framework-Trace&amp;#39;);; return false;&quot;&gt;Framework Trace&lt;/a&gt; | &lt;a href=&quot;#&quot; onclick=&quot;hide(&amp;#39;Application-Trace&amp;#39;);hide(&amp;#39;Framework-Trace&amp;#39;);show(&amp;#39;Full-Trace&amp;#39;);; return false;&quot;&gt;Full Trace&lt;/a&gt; &lt;div id=&quot;Application-Trace&quot; style=&quot;display: block;&quot;&gt; &lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt; &lt;/div&gt; &lt;div id=&quot;Framework-Trace&quot; style=&quot;display: none;&quot;&gt; &lt;pre&gt;&lt;code&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;0&quot; href=&quot;#&quot;&gt;actionpack (5.2.4.6) lib/action_dispatch/middleware/debug_exceptions.rb:65:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;1&quot; href=&quot;#&quot;&gt;actionpack (5.2.4.6) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;2&quot; href=&quot;#&quot;&gt;railties (5.2.4.6) lib/rails/rack/logger.rb:38:in `call_app&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;3&quot; href=&quot;#&quot;&gt;railties (5.2.4.6) lib/rails/rack/logger.rb:26:in `block in call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;4&quot; href=&quot;#&quot;&gt;activesupport (5.2.4.6) lib/active_support/tagged_logging.rb:71:in `block in tagged&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;5&quot; href=&quot;#&quot;&gt;activesupport (5.2.4.6) lib/active_support/tagged_logging.rb:28:in `tagged&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;6&quot; href=&quot;#&quot;&gt;activesupport (5.2.4.6) lib/active_support/tagged_logging.rb:71:in `tagged&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;7&quot; href=&quot;#&quot;&gt;railties (5.2.4.6) lib/rails/rack/logger.rb:26:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;8&quot; href=&quot;#&quot;&gt;actionpack (5.2.4.6) lib/action_dispatch/middleware/remote_ip.rb:81:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;9&quot; href=&quot;#&quot;&gt;actionpack (5.2.4.6) lib/action_dispatch/middleware/request_id.rb:27:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;10&quot; href=&quot;#&quot;&gt;rack (2.2.3) lib/rack/method_override.rb:24:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;11&quot; href=&quot;#&quot;&gt;rack (2.2.3) lib/rack/runtime.rb:22:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;12&quot; href=&quot;#&quot;&gt;activesupport (5.2.4.6) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;13&quot; href=&quot;#&quot;&gt;actionpack (5.2.4.6) lib/action_dispatch/middleware/executor.rb:14:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;14&quot; href=&quot;#&quot;&gt;actionpack (5.2.4.6) lib/action_dispatch/middleware/static.rb:127:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;15&quot; href=&quot;#&quot;&gt;rack (2.2.3) lib/rack/sendfile.rb:110:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;16&quot; href=&quot;#&quot;&gt;railties (5.2.4.6) lib/rails/engine.rb:524:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;17&quot; href=&quot;#&quot;&gt;puma (4.3.8) lib/puma/configuration.rb:228:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;18&quot; href=&quot;#&quot;&gt;puma (4.3.8) lib/puma/server.rb:718:in `handle_request&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;19&quot; href=&quot;#&quot;&gt;puma (4.3.8) lib/puma/server.rb:472:in `process_client&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;20&quot; href=&quot;#&quot;&gt;puma (4.3.8) lib/puma/server.rb:328:in `block in run&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;21&quot; href=&quot;#&quot;&gt;puma (4.3.8) lib/puma/thread_pool.rb:134:in `block in spawn_thread&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt; &lt;/div&gt; &lt;div id=&quot;Full-Trace&quot; style=&quot;display: none;&quot;&gt; &lt;pre&gt;&lt;code&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;0&quot; href=&quot;#&quot;&gt;actionpack (5.2.4.6) lib/action_dispatch/middleware/debug_exceptions.rb:65:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;1&quot; href=&quot;#&quot;&gt;actionpack (5.2.4.6) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;2&quot; href=&quot;#&quot;&gt;railties (5.2.4.6) lib/rails/rack/logger.rb:38:in `call_app&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;3&quot; href=&quot;#&quot;&gt;railties (5.2.4.6) lib/rails/rack/logger.rb:26:in `block in call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;4&quot; href=&quot;#&quot;&gt;activesupport (5.2.4.6) lib/active_support/tagged_logging.rb:71:in `block in tagged&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;5&quot; href=&quot;#&quot;&gt;activesupport (5.2.4.6) lib/active_support/tagged_logging.rb:28:in `tagged&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;6&quot; href=&quot;#&quot;&gt;activesupport (5.2.4.6) lib/active_support/tagged_logging.rb:71:in `tagged&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;7&quot; href=&quot;#&quot;&gt;railties (5.2.4.6) lib/rails/rack/logger.rb:26:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;8&quot; href=&quot;#&quot;&gt;actionpack (5.2.4.6) lib/action_dispatch/middleware/remote_ip.rb:81:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;9&quot; href=&quot;#&quot;&gt;actionpack (5.2.4.6) lib/action_dispatch/middleware/request_id.rb:27:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;10&quot; href=&quot;#&quot;&gt;rack (2.2.3) lib/rack/method_override.rb:24:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;11&quot; href=&quot;#&quot;&gt;rack (2.2.3) lib/rack/runtime.rb:22:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;12&quot; href=&quot;#&quot;&gt;activesupport (5.2.4.6) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;13&quot; href=&quot;#&quot;&gt;actionpack (5.2.4.6) lib/action_dispatch/middleware/executor.rb:14:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;14&quot; href=&quot;#&quot;&gt;actionpack (5.2.4.6) lib/action_dispatch/middleware/static.rb:127:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;15&quot; href=&quot;#&quot;&gt;rack (2.2.3) lib/rack/sendfile.rb:110:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;16&quot; href=&quot;#&quot;&gt;railties (5.2.4.6) lib/rails/engine.rb:524:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;17&quot; href=&quot;#&quot;&gt;puma (4.3.8) lib/puma/configuration.rb:228:in `call&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;18&quot; href=&quot;#&quot;&gt;puma (4.3.8) lib/puma/server.rb:718:in `handle_request&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;19&quot; href=&quot;#&quot;&gt;puma (4.3.8) lib/puma/server.rb:472:in `process_client&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;20&quot; href=&quot;#&quot;&gt;puma (4.3.8) lib/puma/server.rb:328:in `block in run&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;trace-frames&quot; data-frame-id=&quot;21&quot; href=&quot;#&quot;&gt;puma (4.3.8) lib/puma/thread_pool.rb:134:in `block in spawn_thread&amp;#39;&lt;/a&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt; &lt;/div&gt; &lt;script type=&quot;text/javascript&quot;&gt; var traceFrames = document.getElementsByClassName(&#39;trace-frames&#39;); var selectedFrame, currentSource = document.getElementById(&#39;frame-source-0&#39;); // Add click listeners for all stack frames for (var i = 0; i &lt; traceFrames.length; i++) { traceFrames[i].addEventListener(&#39;click&#39;, function(e) { e.preventDefault(); var target = e.target; var frame_id = target.dataset.frameId; if (selectedFrame) { selectedFrame.className = selectedFrame.className.replace(&quot;selected&quot;, &quot;&quot;); } target.className += &quot; selected&quot;; selectedFrame = target; // Change the extracted source code changeSourceExtract(frame_id); }); function changeSourceExtract(frame_id) { var el = document.getElementById(&#39;frame-source-&#39; + frame_id); if (currentSource &amp;&amp; el) { currentSource.className += &quot; hidden&quot;; el.className = el.className.replace(&quot; hidden&quot;, &quot;&quot;); currentSource = el; } } } &lt;/script&gt; &lt;/div&gt; &lt;h2&gt; Routes &lt;/h2&gt; &lt;p&gt; Routes match in priority from top to bottom &lt;/p&gt; &lt;table id=&#39;route_table&#39; class=&#39;route_table&#39;&gt; &lt;thead&gt; &lt;tr&gt; &lt;th&gt;Helper&lt;/th&gt; &lt;th&gt;HTTP Verb&lt;/th&gt; &lt;th&gt;Path&lt;/th&gt; &lt;th&gt;Controller#Action&lt;/th&gt; &lt;/tr&gt; &lt;tr class=&#39;bottom&#39;&gt; &lt;th&gt; &lt;a data-route-helper=&quot;_path&quot; title=&quot;Returns a relative path (without the http or domain)&quot; href=&quot;#&quot;&gt;Path&lt;/a&gt; / &lt;a data-route-helper=&quot;_url&quot; title=&quot;Returns an absolute URL (with the http and domain)&quot; href=&quot;#&quot;&gt;Url&lt;/a&gt; &lt;/th&gt; &lt;th&gt; &lt;/th&gt; &lt;th&gt; &lt;input id=&quot;search&quot; placeholder=&quot;Path Match&quot; type=&quot;search&quot; name=&quot;path[]&quot; /&gt; &lt;/th&gt; &lt;th&gt; &lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody class=&#39;exact_matches&#39; id=&#39;exact_matches&#39;&gt; &lt;/tbody&gt; &lt;tbody class=&#39;fuzzy_matches&#39; id=&#39;fuzzy_matches&#39;&gt; &lt;/tbody&gt; &lt;tbody&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;claim_platform&#39;&gt; claim_platform&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/claim_platforms/:id(.:format)&#39;&gt; /claim_platforms/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;claim_platforms#show&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; DELETE &lt;/td&gt; &lt;td data-route-path=&#39;/claim_platforms/:id(.:format)&#39;&gt; /claim_platforms/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;claim_platforms#destroy&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;claim_tool&#39;&gt; claim_tool&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/claim_tools/:id(.:format)&#39;&gt; /claim_tools/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;claim_tools#show&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; DELETE &lt;/td&gt; &lt;td data-route-path=&#39;/claim_tools/:id(.:format)&#39;&gt; /claim_tools/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;claim_tools#destroy&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;set_team_sessions&#39;&gt; set_team_sessions&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/sessions/set_team(.:format)&#39;&gt; /sessions/set_team(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;sessions#set_team&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;sessions&#39;&gt; sessions&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/sessions(.:format)&#39;&gt; /sessions(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;sessions#create&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;session&#39;&gt; session&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; DELETE &lt;/td&gt; &lt;td data-route-path=&#39;/sessions/:id(.:format)&#39;&gt; /sessions/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;sessions#destroy&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;login_index&#39;&gt; login_index&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/login(.:format)&#39;&gt; /login(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;login#create&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;new_login&#39;&gt; new_login&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/login/new(.:format)&#39;&gt; /login/new(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;login#new&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;lti11_tools&#39;&gt; lti11_tools&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/lti11/tools(.:format)&#39;&gt; /lti11/tools(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti11/tools#create&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;relaunch_lti11_platforms&#39;&gt; relaunch_lti11_platforms&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/lti11/platforms/relaunch(.:format)&#39;&gt; /lti11/platforms/relaunch(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti11/platforms#relaunch&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;lti11_platforms&#39;&gt; lti11_platforms&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/lti11/platforms(.:format)&#39;&gt; /lti11/platforms(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti11/platforms#index&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/lti11/platforms(.:format)&#39;&gt; /lti11/platforms(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti11/platforms#create&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;new_lti11_platform&#39;&gt; new_lti11_platform&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/lti11/platforms/new(.:format)&#39;&gt; /lti11/platforms/new(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti11/platforms#new&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;new_platform_authorization&#39;&gt; new_platform_authorization&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/authorizations/new(.:format)&#39;&gt; /platforms/:platform_id/authorizations/new(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;authorizations#new&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_authorizations_new&#39;&gt; platform_authorizations_new&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/authorizations/new(.:format)&#39;&gt; /platforms/:platform_id/authorizations/new(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;authorizations#new&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_returns&#39;&gt; platform_returns&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/returns(.:format)&#39;&gt; /platforms/:platform_id/returns(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;returns#index&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/returns(.:format)&#39;&gt; /platforms/:platform_id/returns(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;returns#create&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_sensors&#39;&gt; platform_sensors&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/sensors(.:format)&#39;&gt; /platforms/:platform_id/sensors(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;sensors#index&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/sensors(.:format)&#39;&gt; /platforms/:platform_id/sensors(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;sensors#create&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_platform_keys&#39;&gt; platform_platform_keys&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/platform_keys(.:format)&#39;&gt; /platforms/:platform_id/platform_keys(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;platform_keys#index&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/platform_keys(.:format)&#39;&gt; /platforms/:platform_id/platform_keys(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;platform_keys#create&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;new_platform_platform_key&#39;&gt; new_platform_platform_key&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/platform_keys/new(.:format)&#39;&gt; /platforms/:platform_id/platform_keys/new(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;platform_keys#new&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;edit_platform_platform_key&#39;&gt; edit_platform_platform_key&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/platform_keys/:id/edit(.:format)&#39;&gt; /platforms/:platform_id/platform_keys/:id/edit(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;platform_keys#edit&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_platform_key&#39;&gt; platform_platform_key&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/platform_keys/:id(.:format)&#39;&gt; /platforms/:platform_id/platform_keys/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;platform_keys#show&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; PATCH &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/platform_keys/:id(.:format)&#39;&gt; /platforms/:platform_id/platform_keys/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;platform_keys#update&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; PUT &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/platform_keys/:id(.:format)&#39;&gt; /platforms/:platform_id/platform_keys/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;platform_keys#update&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; DELETE &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/platform_keys/:id(.:format)&#39;&gt; /platforms/:platform_id/platform_keys/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;platform_keys#destroy&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_context_deep_links&#39;&gt; platform_context_deep_links&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/contexts/:context_id/deep_links(.:format)&#39;&gt; /platforms/:platform_id/contexts/:context_id/deep_links(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;deep_links#index&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/contexts/:context_id/deep_links(.:format)&#39;&gt; /platforms/:platform_id/contexts/:context_id/deep_links(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;deep_links#create&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;new_platform_context_deep_link&#39;&gt; new_platform_context_deep_link&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/contexts/:context_id/deep_links/new(.:format)&#39;&gt; /platforms/:platform_id/contexts/:context_id/deep_links/new(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;deep_links#new&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_context_memberships&#39;&gt; platform_context_memberships&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/contexts/:context_id/memberships(.:format)&#39;&gt; /platforms/:platform_id/contexts/:context_id/memberships(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;memberships#index {:format=&amp;gt;:json}&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_context_line_item_line_item_results&#39;&gt; platform_context_line_item_line_item_results&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/contexts/:context_id/line_items/:line_item_id/results(.:format)&#39;&gt; /platforms/:platform_id/contexts/:context_id/line_items/:line_item_id/results(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;line_item_results#index {:format=&amp;gt;:json}&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_context_line_item_scores&#39;&gt; platform_context_line_item_scores&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/contexts/:context_id/line_items/:line_item_id/scores(.:format)&#39;&gt; /platforms/:platform_id/contexts/:context_id/line_items/:line_item_id/scores(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;scores#create {:format=&amp;gt;:json}&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_context_line_items&#39;&gt; platform_context_line_items&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/contexts/:context_id/line_items(.:format)&#39;&gt; /platforms/:platform_id/contexts/:context_id/line_items(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;line_items#index&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/contexts/:context_id/line_items(.:format)&#39;&gt; /platforms/:platform_id/contexts/:context_id/line_items(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;line_items#create&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;new_platform_context_line_item&#39;&gt; new_platform_context_line_item&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/contexts/:context_id/line_items/new(.:format)&#39;&gt; /platforms/:platform_id/contexts/:context_id/line_items/new(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;line_items#new&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;edit_platform_context_line_item&#39;&gt; edit_platform_context_line_item&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/contexts/:context_id/line_items/:id/edit(.:format)&#39;&gt; /platforms/:platform_id/contexts/:context_id/line_items/:id/edit(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;line_items#edit&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_context_line_item&#39;&gt; platform_context_line_item&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/contexts/:context_id/line_items/:id(.:format)&#39;&gt; /platforms/:platform_id/contexts/:context_id/line_items/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;line_items#show&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; PATCH &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/contexts/:context_id/line_items/:id(.:format)&#39;&gt; /platforms/:platform_id/contexts/:context_id/line_items/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;line_items#update&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; PUT &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/contexts/:context_id/line_items/:id(.:format)&#39;&gt; /platforms/:platform_id/contexts/:context_id/line_items/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;line_items#update&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; DELETE &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/contexts/:context_id/line_items/:id(.:format)&#39;&gt; /platforms/:platform_id/contexts/:context_id/line_items/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;line_items#destroy&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_contexts&#39;&gt; platform_contexts&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/contexts(.:format)&#39;&gt; /platforms/:platform_id/contexts(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;contexts#index&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/contexts(.:format)&#39;&gt; /platforms/:platform_id/contexts(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;contexts#create&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;new_platform_context&#39;&gt; new_platform_context&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/contexts/new(.:format)&#39;&gt; /platforms/:platform_id/contexts/new(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;contexts#new&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;edit_platform_context&#39;&gt; edit_platform_context&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/contexts/:id/edit(.:format)&#39;&gt; /platforms/:platform_id/contexts/:id/edit(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;contexts#edit&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_context&#39;&gt; platform_context&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/contexts/:id(.:format)&#39;&gt; /platforms/:platform_id/contexts/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;contexts#show&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; PATCH &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/contexts/:id(.:format)&#39;&gt; /platforms/:platform_id/contexts/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;contexts#update&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; PUT &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/contexts/:id(.:format)&#39;&gt; /platforms/:platform_id/contexts/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;contexts#update&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; DELETE &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/contexts/:id(.:format)&#39;&gt; /platforms/:platform_id/contexts/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;contexts#destroy&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_resource_link_assessments&#39;&gt; platform_resource_link_assessments&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/resource_links/:resource_link_id/assessments(.:format)&#39;&gt; /platforms/:platform_id/resource_links/:resource_link_id/assessments(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;assessments#create&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_resource_link_assessment&#39;&gt; platform_resource_link_assessment&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/resource_links/:resource_link_id/assessments/:id(.:format)&#39;&gt; /platforms/:platform_id/resource_links/:resource_link_id/assessments/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;assessments#show&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_resource_link_rosters&#39;&gt; platform_resource_link_rosters&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/resource_links/:resource_link_id/rosters(.:format)&#39;&gt; /platforms/:platform_id/resource_links/:resource_link_id/rosters(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;rosters#index&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/resource_links/:resource_link_id/rosters(.:format)&#39;&gt; /platforms/:platform_id/resource_links/:resource_link_id/rosters(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;rosters#create&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;new_platform_resource_link_roster&#39;&gt; new_platform_resource_link_roster&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/resource_links/:resource_link_id/rosters/new(.:format)&#39;&gt; /platforms/:platform_id/resource_links/:resource_link_id/rosters/new(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;rosters#new&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;edit_platform_resource_link_roster&#39;&gt; edit_platform_resource_link_roster&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/resource_links/:resource_link_id/rosters/:id/edit(.:format)&#39;&gt; /platforms/:platform_id/resource_links/:resource_link_id/rosters/:id/edit(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;rosters#edit&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_resource_link_roster&#39;&gt; platform_resource_link_roster&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/resource_links/:resource_link_id/rosters/:id(.:format)&#39;&gt; /platforms/:platform_id/resource_links/:resource_link_id/rosters/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;rosters#show&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; PATCH &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/resource_links/:resource_link_id/rosters/:id(.:format)&#39;&gt; /platforms/:platform_id/resource_links/:resource_link_id/rosters/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;rosters#update&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; PUT &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/resource_links/:resource_link_id/rosters/:id(.:format)&#39;&gt; /platforms/:platform_id/resource_links/:resource_link_id/rosters/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;rosters#update&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; DELETE &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/resource_links/:resource_link_id/rosters/:id(.:format)&#39;&gt; /platforms/:platform_id/resource_links/:resource_link_id/rosters/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;rosters#destroy&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_resource_link_connects&#39;&gt; platform_resource_link_connects&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/resource_links/:resource_link_id/connects(.:format)&#39;&gt; /platforms/:platform_id/resource_links/:resource_link_id/connects(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;connects#index&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_resource_link_connect&#39;&gt; platform_resource_link_connect&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/resource_links/:resource_link_id/connects/:id(.:format)&#39;&gt; /platforms/:platform_id/resource_links/:resource_link_id/connects/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;connects#show&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_resource_links&#39;&gt; platform_resource_links&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/resource_links(.:format)&#39;&gt; /platforms/:platform_id/resource_links(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;resource_links#index&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/resource_links(.:format)&#39;&gt; /platforms/:platform_id/resource_links(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;resource_links#create&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;new_platform_resource_link&#39;&gt; new_platform_resource_link&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/resource_links/new(.:format)&#39;&gt; /platforms/:platform_id/resource_links/new(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;resource_links#new&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;edit_platform_resource_link&#39;&gt; edit_platform_resource_link&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/resource_links/:id/edit(.:format)&#39;&gt; /platforms/:platform_id/resource_links/:id/edit(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;resource_links#edit&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_resource_link&#39;&gt; platform_resource_link&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/resource_links/:id(.:format)&#39;&gt; /platforms/:platform_id/resource_links/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;resource_links#show&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; PATCH &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/resource_links/:id(.:format)&#39;&gt; /platforms/:platform_id/resource_links/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;resource_links#update&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; PUT &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/resource_links/:id(.:format)&#39;&gt; /platforms/:platform_id/resource_links/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;resource_links#update&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; DELETE &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/resource_links/:id(.:format)&#39;&gt; /platforms/:platform_id/resource_links/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;resource_links#destroy&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_users&#39;&gt; platform_users&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/users(.:format)&#39;&gt; /platforms/:platform_id/users(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;users#index&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/users(.:format)&#39;&gt; /platforms/:platform_id/users(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;users#create&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;new_platform_user&#39;&gt; new_platform_user&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/users/new(.:format)&#39;&gt; /platforms/:platform_id/users/new(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;users#new&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;edit_platform_user&#39;&gt; edit_platform_user&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/users/:id/edit(.:format)&#39;&gt; /platforms/:platform_id/users/:id/edit(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;users#edit&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_user&#39;&gt; platform_user&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/users/:id(.:format)&#39;&gt; /platforms/:platform_id/users/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;users#show&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; PATCH &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/users/:id(.:format)&#39;&gt; /platforms/:platform_id/users/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;users#update&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; PUT &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/users/:id(.:format)&#39;&gt; /platforms/:platform_id/users/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;users#update&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; DELETE &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/users/:id(.:format)&#39;&gt; /platforms/:platform_id/users/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;users#destroy&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_results&#39;&gt; platform_results&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/results(.:format)&#39;&gt; /platforms/:platform_id/results(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;results#index&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/results(.:format)&#39;&gt; /platforms/:platform_id/results(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;results#create&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;new_platform_result&#39;&gt; new_platform_result&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/results/new(.:format)&#39;&gt; /platforms/:platform_id/results/new(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;results#new&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;edit_platform_result&#39;&gt; edit_platform_result&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/results/:id/edit(.:format)&#39;&gt; /platforms/:platform_id/results/:id/edit(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;results#edit&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_result&#39;&gt; platform_result&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/results/:id(.:format)&#39;&gt; /platforms/:platform_id/results/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;results#show&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; PATCH &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/results/:id(.:format)&#39;&gt; /platforms/:platform_id/results/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;results#update&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; PUT &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/results/:id(.:format)&#39;&gt; /platforms/:platform_id/results/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;results#update&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; DELETE &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/results/:id(.:format)&#39;&gt; /platforms/:platform_id/results/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;results#destroy&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_access_tokens&#39;&gt; platform_access_tokens&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/access_tokens(.:format)&#39;&gt; /platforms/:platform_id/access_tokens(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;access_tokens#create&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform_access_token&#39;&gt; platform_access_token&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:platform_id/access_tokens/:id(.:format)&#39;&gt; /platforms/:platform_id/access_tokens/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;access_tokens#show&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platforms&#39;&gt; platforms&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms(.:format)&#39;&gt; /platforms(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;platforms#index&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/platforms(.:format)&#39;&gt; /platforms(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;platforms#create&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;new_platform&#39;&gt; new_platform&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/new(.:format)&#39;&gt; /platforms/new(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;platforms#new&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;edit_platform&#39;&gt; edit_platform&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:id/edit(.:format)&#39;&gt; /platforms/:id/edit(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;platforms#edit&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;platform&#39;&gt; platform&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:id(.:format)&#39;&gt; /platforms/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;platforms#show&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; PATCH &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:id(.:format)&#39;&gt; /platforms/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;platforms#update&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; PUT &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:id(.:format)&#39;&gt; /platforms/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;platforms#update&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; DELETE &lt;/td&gt; &lt;td data-route-path=&#39;/platforms/:id(.:format)&#39;&gt; /platforms/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;platforms#destroy&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;lti_tool_login_initiations&#39;&gt; lti_tool_login_initiations&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/lti/tools/:tool_id/login_initiations(.:format)&#39;&gt; /lti/tools/:tool_id/login_initiations(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti/login_initiations#index&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/lti/tools/:tool_id/login_initiations(.:format)&#39;&gt; /lti/tools/:tool_id/login_initiations(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti/login_initiations#create&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;lti_tool_launches&#39;&gt; lti_tool_launches&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/lti/tools/:tool_id/launches(.:format)&#39;&gt; /lti/tools/:tool_id/launches(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti/launches#index&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/lti/tools/:tool_id/launches(.:format)&#39;&gt; /lti/tools/:tool_id/launches(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti/launches#create&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;new_lti_tool_launch&#39;&gt; new_lti_tool_launch&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/lti/tools/:tool_id/launches/new(.:format)&#39;&gt; /lti/tools/:tool_id/launches/new(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti/launches#new&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;edit_lti_tool_launch&#39;&gt; edit_lti_tool_launch&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/lti/tools/:tool_id/launches/:id/edit(.:format)&#39;&gt; /lti/tools/:tool_id/launches/:id/edit(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti/launches#edit&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;lti_tool_launch&#39;&gt; lti_tool_launch&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/lti/tools/:tool_id/launches/:id(.:format)&#39;&gt; /lti/tools/:tool_id/launches/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti/launches#show&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; PATCH &lt;/td&gt; &lt;td data-route-path=&#39;/lti/tools/:tool_id/launches/:id(.:format)&#39;&gt; /lti/tools/:tool_id/launches/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti/launches#update&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; PUT &lt;/td&gt; &lt;td data-route-path=&#39;/lti/tools/:tool_id/launches/:id(.:format)&#39;&gt; /lti/tools/:tool_id/launches/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti/launches#update&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; DELETE &lt;/td&gt; &lt;td data-route-path=&#39;/lti/tools/:tool_id/launches/:id(.:format)&#39;&gt; /lti/tools/:tool_id/launches/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti/launches#destroy&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;lti_tool_deep_link_launch_launch&#39;&gt; lti_tool_deep_link_launch_launch&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/lti/tools/:tool_id/deep_link_launches/:deep_link_launch_id/launch(.:format)&#39;&gt; /lti/tools/:tool_id/deep_link_launches/:deep_link_launch_id/launch(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti/deep_link_launches#launch&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;lti_tool_deep_link_launches&#39;&gt; lti_tool_deep_link_launches&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/lti/tools/:tool_id/deep_link_launches(.:format)&#39;&gt; /lti/tools/:tool_id/deep_link_launches(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti/deep_link_launches#create&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;lti_tool_deep_link_launch&#39;&gt; lti_tool_deep_link_launch&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/lti/tools/:tool_id/deep_link_launches/:id(.:format)&#39;&gt; /lti/tools/:tool_id/deep_link_launches/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti/deep_link_launches#show&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;tool_jwks_lti_tool&#39;&gt; tool_jwks_lti_tool&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/lti/tools/:id/.well-known/jwks(.:format)&#39;&gt; /lti/tools/:id/.well-known/jwks(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti/tools#jwks&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;lti_tools&#39;&gt; lti_tools&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/lti/tools(.:format)&#39;&gt; /lti/tools(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti/tools#index&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/lti/tools(.:format)&#39;&gt; /lti/tools(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti/tools#create&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;new_lti_tool&#39;&gt; new_lti_tool&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/lti/tools/new(.:format)&#39;&gt; /lti/tools/new(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti/tools#new&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;edit_lti_tool&#39;&gt; edit_lti_tool&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/lti/tools/:id/edit(.:format)&#39;&gt; /lti/tools/:id/edit(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti/tools#edit&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;lti_tool&#39;&gt; lti_tool&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/lti/tools/:id(.:format)&#39;&gt; /lti/tools/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti/tools#show&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; PATCH &lt;/td&gt; &lt;td data-route-path=&#39;/lti/tools/:id(.:format)&#39;&gt; /lti/tools/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti/tools#update&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; PUT &lt;/td&gt; &lt;td data-route-path=&#39;/lti/tools/:id(.:format)&#39;&gt; /lti/tools/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti/tools#update&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;&#39;&gt; &lt;/td&gt; &lt;td&gt; DELETE &lt;/td&gt; &lt;td data-route-path=&#39;/lti/tools/:id(.:format)&#39;&gt; /lti/tools/:id(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti/tools#destroy&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;lti_services_send_score&#39;&gt; lti_services_send_score&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/lti/services/send_score(.:format)&#39;&gt; /lti/services/send_score(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti/services#send_score&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;lti_services_request_names_and_roles&#39;&gt; lti_services_request_names_and_roles&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/lti/services/request_names_and_roles(.:format)&#39;&gt; /lti/services/request_names_and_roles(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;lti/services#request_names_and_roles&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;healthz&#39;&gt; healthz&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/healthz(.:format)&#39;&gt; /healthz(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;health#index&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;keygen_index&#39;&gt; keygen_index&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/keygen/index(.:format)&#39;&gt; /keygen/index(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;keygen#index&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;page_index&#39;&gt; page_index&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/page/index(.:format)&#39;&gt; /page/index(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;page#index&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;release_notes&#39;&gt; release_notes&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/release_notes(.:format)&#39;&gt; /release_notes(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;page#release_notes&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;tos&#39;&gt; tos&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/tos(.:format)&#39;&gt; /tos(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;page#tos&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;root&#39;&gt; root&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/&#39;&gt; / &lt;/td&gt; &lt;td&gt; &lt;p&gt;page#index&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;sidekiq_web&#39;&gt; sidekiq_web&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td data-route-path=&#39;/sidekiq&#39;&gt; /sidekiq &lt;/td&gt; &lt;td&gt; &lt;p&gt;Sidekiq::Web&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;rails_service_blob&#39;&gt; rails_service_blob&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/rails/active_storage/blobs/:signed_id/*filename(.:format)&#39;&gt; /rails/active_storage/blobs/:signed_id/*filename(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;active_storage/blobs#show&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;rails_blob_representation&#39;&gt; rails_blob_representation&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format)&#39;&gt; /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;active_storage/representations#show&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;rails_disk_service&#39;&gt; rails_disk_service&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; GET &lt;/td&gt; &lt;td data-route-path=&#39;/rails/active_storage/disk/:encoded_key/*filename(.:format)&#39;&gt; /rails/active_storage/disk/:encoded_key/*filename(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;active_storage/disk#show&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;update_rails_disk_service&#39;&gt; update_rails_disk_service&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; PUT &lt;/td&gt; &lt;td data-route-path=&#39;/rails/active_storage/disk/:encoded_token(.:format)&#39;&gt; /rails/active_storage/disk/:encoded_token(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;active_storage/disk#update&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#39;route_row&#39; data-helper=&#39;path&#39;&gt; &lt;td data-route-name=&#39;rails_direct_uploads&#39;&gt; rails_direct_uploads&lt;span class=&#39;helper&#39;&gt;_path&lt;/span&gt; &lt;/td&gt; &lt;td&gt; POST &lt;/td&gt; &lt;td data-route-path=&#39;/rails/active_storage/direct_uploads(.:format)&#39;&gt; /rails/active_storage/direct_uploads(.:format) &lt;/td&gt; &lt;td&gt; &lt;p&gt;active_storage/direct_uploads#create&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;script type=&#39;text/javascript&#39;&gt; // support forEarch iterator on NodeList NodeList.prototype.forEach = Array.prototype.forEach; // Enables path search functionality function setupMatchPaths() { // Check if there are any matched results in a section function checkNoMatch(section, noMatchText) { if (section.children.length &lt;= 1) { section.innerHTML += noMatchText; } } // get JSON from URL and invoke callback with result function getJSON(url, success) { var xhr = new XMLHttpRequest(); xhr.open(&#39;GET&#39;, url); xhr.onload = function() { if (this.status == 200) success(JSON.parse(this.response)); }; xhr.send(); } function delayedKeyup(input, callback) { var timeout; input.onkeyup = function(){ if (timeout) clearTimeout(timeout); timeout = setTimeout(callback, 300); } } // remove params or fragments function sanitizePath(path) { return path.replace(/[#?].*/, &#39;&#39;); } var pathElements = document.querySelectorAll(&#39;#route_table [data-route-path]&#39;), searchElem = document.querySelector(&#39;#search&#39;), exactSection = document.querySelector(&#39;#exact_matches&#39;), fuzzySection = document.querySelector(&#39;#fuzzy_matches&#39;); // Remove matches when no search value is present searchElem.onblur = function(e) { if (searchElem.value === &quot;&quot;) { exactSection.innerHTML = &quot;&quot;; fuzzySection.innerHTML = &quot;&quot;; } } // On key press perform a search for matching paths delayedKeyup(searchElem, function() { var path = sanitizePath(searchElem.value), defaultExactMatch = &#39;&lt;tr&gt;&lt;th colspan=&quot;4&quot;&gt;Paths Matching (&#39; + path +&#39;):&lt;/th&gt;&lt;/tr&gt;&#39;, defaultFuzzyMatch = &#39;&lt;tr&gt;&lt;th colspan=&quot;4&quot;&gt;Paths Containing (&#39; + path +&#39;):&lt;/th&gt;&lt;/tr&gt;&#39;, noExactMatch = &#39;&lt;tr&gt;&lt;th colspan=&quot;4&quot;&gt;No Exact Matches Found&lt;/th&gt;&lt;/tr&gt;&#39;, noFuzzyMatch = &#39;&lt;tr&gt;&lt;th colspan=&quot;4&quot;&gt;No Fuzzy Matches Found&lt;/th&gt;&lt;/tr&gt;&#39;; if (!path) return searchElem.onblur(); getJSON(&#39;/rails/info/routes?path=&#39; + path, function(matches){ // Clear out results section exactSection.innerHTML = defaultExactMatch; fuzzySection.innerHTML = defaultFuzzyMatch; // Display exact matches and fuzzy matches pathElements.forEach(function(elem) { var elemPath = elem.getAttribute(&#39;data-route-path&#39;); if (matches[&#39;exact&#39;].indexOf(elemPath) != -1) exactSection.appendChild(elem.parentNode.cloneNode(true)); if (matches[&#39;fuzzy&#39;].indexOf(elemPath) != -1) fuzzySection.appendChild(elem.parentNode.cloneNode(true)); }) // Display &#39;No Matches&#39; message when no matches are found checkNoMatch(exactSection, noExactMatch); checkNoMatch(fuzzySection, noFuzzyMatch); }) }) } // Enables functionality to toggle between `_path` and `_url` helper suffixes function setupRouteToggleHelperLinks() { // Sets content for each element function setValOn(elems, val) { elems.forEach(function(elem) { elem.innerHTML = val; }); } // Sets onClick event for each element function onClick(elems, func) { elems.forEach(function(elem) { elem.onclick = func; }); } var toggleLinks = document.querySelectorAll(&#39;#route_table [data-route-helper]&#39;); onClick(toggleLinks, function(){ var helperTxt = this.getAttribute(&quot;data-route-helper&quot;), helperElems = document.querySelectorAll(&#39;[data-route-name] span.helper&#39;); setValOn(helperElems, helperTxt); }); } setupMatchPaths(); setupRouteToggleHelperLinks(); &lt;/script&gt; &lt;h2 style=&quot;margin-top: 30px&quot;&gt;Request&lt;/h2&gt; &lt;p&gt;&lt;b&gt;Parameters&lt;/b&gt;:&lt;/p&gt; &lt;pre&gt;None&lt;/pre&gt; &lt;div class=&quot;details&quot;&gt; &lt;div class=&quot;summary&quot;&gt;&lt;a href=&quot;#&quot; onclick=&quot;return toggleSessionDump()&quot;&gt;Toggle session dump&lt;/a&gt;&lt;/div&gt; &lt;div id=&quot;session_dump&quot; style=&quot;display:none&quot;&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;details&quot;&gt; &lt;div class=&quot;summary&quot;&gt;&lt;a href=&quot;#&quot; onclick=&quot;return toggleEnvDump()&quot;&gt;Toggle env dump&lt;/a&gt;&lt;/div&gt; &lt;div id=&quot;env_dump&quot; style=&quot;display:none&quot;&gt;&lt;pre&gt;GATEWAY_INTERFACE: &amp;quot;CGI/1.2&amp;quot; HTTP_ACCEPT: &amp;quot;*/*&amp;quot; HTTP_ACCEPT_ENCODING: &amp;quot;gzip;q=1.0,deflate;q=0.6,identity;q=0.3&amp;quot; HTTP_VERSION: &amp;quot;HTTP/1.1&amp;quot; HTTP_X_FORWARDED_FOR: &amp;quot;10.24.0.1&amp;quot; HTTP_X_FORWARDED_HOST: &amp;quot;lti-ri.imsglobal.org&amp;quot; HTTP_X_REQUEST_ID: &amp;quot;44e7eeee05ee13215f13de28f4b7c553&amp;quot; ORIGINAL_SCRIPT_NAME: &amp;quot;&amp;quot; REMOTE_ADDR: &amp;quot;10.24.0.8&amp;quot; SERVER_NAME: &amp;quot;lti-ri.imsglobal.org&amp;quot; SERVER_PROTOCOL: &amp;quot;HTTP/1.1&amp;quot;&lt;/pre&gt;&lt;/div&gt; &lt;/div&gt; &lt;h2 style=&quot;margin-top: 30px&quot;&gt;Response&lt;/h2&gt; &lt;p&gt;&lt;b&gt;Headers&lt;/b&gt;:&lt;/p&gt; &lt;pre&gt;None&lt;/pre&gt; &lt;/div&gt; &lt;/body&gt; &lt;/html&gt; &#39;</h2> <div class="source hidden" id="frame-source-0"> <div class="info"> Extracted source (around line <strong>#156</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>154</span> <span>155</span> <span>156</span> <span>157</span> <span>158</span> <span>159</span> </pre> </td> <td width="100%"> <pre> <div class="line"> # * *array_class*: Defaults to Array </div><div class="line"> def parse(source, opts = {}) </div><div class="line active"> Parser.new(source, opts).parse </div><div class="line"> end </div><div class="line"> </div><div class="line"> # Parse the JSON document _source_ into a Ruby data structure and return it. </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-1"> <div class="info"> Extracted source (around line <strong>#156</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>154</span> <span>155</span> <span>156</span> <span>157</span> <span>158</span> <span>159</span> </pre> </td> <td width="100%"> <pre> <div class="line"> # * *array_class*: Defaults to Array </div><div class="line"> def parse(source, opts = {}) </div><div class="line active"> Parser.new(source, opts).parse </div><div class="line"> end </div><div class="line"> </div><div class="line"> # Parse the JSON document _source_ into a Ruby data structure and return it. </div> </pre> </td> </tr> </table> </div> </div> <div class="source " id="frame-source-2"> <div class="info"> Extracted source (around line <strong>#44</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>42</span> <span>43</span> <span>44</span> <span>45</span> <span>46</span> <span>47</span> </pre> </td> <td width="100%"> <pre> <div class="line"> def tool_request_for_keys </div><div class="line"> request = LtiPlatform::ToolKeys.new(@platform).call </div><div class="line active"> JSON.parse(request.body) </div><div class="line"> end </div><div class="line"> end </div><div class="line">end </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-3"> <div class="info"> Extracted source (around line <strong>#29</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>27</span> <span>28</span> <span>29</span> <span>30</span> <span>31</span> <span>32</span> </pre> </td> <td width="100%"> <pre> <div class="line"> </div><div class="line"> def fetch_key_from_jwks(kid) </div><div class="line active"> tool_keys = tool_request_for_keys </div><div class="line"> jwk_key = tool_keys[&#39;keys&#39;].detect { |f| f[&#39;kid&#39;] == kid } </div><div class="line"> </div><div class="line"> # jwk_key: {&quot;alg&quot;=&gt;&quot;...&quot;, &quot;e&quot;=&gt;&quot;...&quot;, kid=&gt;&quot;...&quot;, &quot;kty&quot;=&gt;&quot;...&quot;, &quot;n&quot;=&gt;&quot;...&quot;, &quot;use&quot;=&gt;&quot;...&quot;} </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-4"> <div class="info"> Extracted source (around line <strong>#24</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>22</span> <span>23</span> <span>24</span> <span>25</span> <span>26</span> <span>27</span> </pre> </td> <td width="100%"> <pre> <div class="line"> decoded_header = Jwt::Header.new(@tool_jwt).call </div><div class="line"> kid = decoded_header[&#39;kid&#39;] </div><div class="line active"> fetch_key_from_jwks(kid) </div><div class="line"> end </div><div class="line"> end </div><div class="line"> </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-5"> <div class="info"> Extracted source (around line <strong>#12</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>10</span> <span>11</span> <span>12</span> <span>13</span> <span>14</span> <span>15</span> </pre> </td> <td width="100%"> <pre> <div class="line"> </div><div class="line"> def call </div><div class="line active"> rsa_public = tool_public_key </div><div class="line"> </div><div class="line"> # decode JWT </div><div class="line"> Jwt::Decode.new(@tool_jwt, rsa_public).call </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-6"> <div class="info"> Extracted source (around line <strong>#41</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>39</span> <span>40</span> <span>41</span> <span>42</span> <span>43</span> <span>44</span> </pre> </td> <td width="100%"> <pre> <div class="line"> # may be others we should rescue from, we&#39;ll see </div><div class="line"> def decode_client_assertion </div><div class="line active"> @payload = LtiPlatform::DecodeToolJwt.new(@platform, @params[:client_assertion]).call.first </div><div class="line"> validate_client_assertion </div><div class="line"> rescue JWT::ExpiredSignature </div><div class="line"> @error = &#39;Expired token&#39; </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-7"> <div class="info"> Extracted source (around line <strong>#20</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>18</span> <span>19</span> <span>20</span> <span>21</span> <span>22</span> <span>23</span> </pre> </td> <td width="100%"> <pre> <div class="line"> incorrect_grant_type &amp;&amp; return unless @params[:grant_type] == &#39;client_credentials&#39; </div><div class="line"> incorrect_client_assertion_type &amp;&amp; return unless @params[:client_assertion_type] == &#39;urn:ietf:params:oauth:client-assertion-type:jwt-bearer&#39; </div><div class="line active"> decode_client_assertion </div><div class="line"> generate_token unless @error </div><div class="line"> # TODO: will want to validate scopes eventually </div><div class="line"> @scope = @params[:scope] </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-8"> <div class="info"> Extracted source (around line <strong>#13</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>11</span> <span>12</span> <span>13</span> <span>14</span> <span>15</span> <span>16</span> </pre> </td> <td width="100%"> <pre> <div class="line"> @error = nil </div><div class="line"> @access_token = nil </div><div class="line active"> valid_request? </div><div class="line"> end </div><div class="line"> </div><div class="line"> def valid_request? </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-9"> <div class="info"> Extracted source (around line <strong>#8</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>6</span> <span>7</span> <span>8</span> <span>9</span> <span>10</span> <span>11</span> </pre> </td> <td width="100%"> <pre> <div class="line"> # POST /platform/access_tokens.json </div><div class="line"> def create </div><div class="line active"> @token = LtiPlatform::GenerateAccessToken.new(@platform, access_token_params) </div><div class="line"> </div><div class="line"> respond_to do |format| </div><div class="line"> unless @token.error </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-10"> <div class="info"> Extracted source (around line <strong>#8</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>6</span> <span>7</span> <span>8</span> <span>9</span> <span>10</span> <span>11</span> </pre> </td> <td width="100%"> <pre> <div class="line"> # POST /platform/access_tokens.json </div><div class="line"> def create </div><div class="line active"> @token = LtiPlatform::GenerateAccessToken.new(@platform, access_token_params) </div><div class="line"> </div><div class="line"> respond_to do |format| </div><div class="line"> unless @token.error </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-11"> <div class="info"> Extracted source (around line <strong>#6</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>4</span> <span>5</span> <span>6</span> <span>7</span> <span>8</span> <span>9</span> </pre> </td> <td width="100%"> <pre> <div class="line"> module BasicImplicitRender # :nodoc: </div><div class="line"> def send_action(method, *args) </div><div class="line active"> super.tap { default_render unless performed? } </div><div class="line"> end </div><div class="line"> </div><div class="line"> def default_render(*args) </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-12"> <div class="info"> Extracted source (around line <strong>#194</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>192</span> <span>193</span> <span>194</span> <span>195</span> <span>196</span> <span>197</span> </pre> </td> <td width="100%"> <pre> <div class="line"> # which is *not* necessarily the same as the action name. </div><div class="line"> def process_action(method_name, *args) </div><div class="line active"> send_action(method_name, *args) </div><div class="line"> end </div><div class="line"> </div><div class="line"> # Actually call the method associated with the action. Override </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-13"> <div class="info"> Extracted source (around line <strong>#30</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>28</span> <span>29</span> <span>30</span> <span>31</span> <span>32</span> <span>33</span> </pre> </td> <td width="100%"> <pre> <div class="line"> def process_action(*) #:nodoc: </div><div class="line"> self.formats = request.formats.map(&amp;:ref).compact </div><div class="line active"> super </div><div class="line"> end </div><div class="line"> </div><div class="line"> # Check for double render errors and set the content_type after rendering. </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-14"> <div class="info"> Extracted source (around line <strong>#42</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>40</span> <span>41</span> <span>42</span> <span>43</span> <span>44</span> <span>45</span> </pre> </td> <td width="100%"> <pre> <div class="line"> def process_action(*args) </div><div class="line"> run_callbacks(:process_action) do </div><div class="line active"> super </div><div class="line"> end </div><div class="line"> end </div><div class="line"> </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-15"> <div class="info"> Extracted source (around line <strong>#132</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>130</span> <span>131</span> <span>132</span> <span>133</span> <span>134</span> <span>135</span> </pre> </td> <td width="100%"> <pre> <div class="line"> if next_sequence.final? </div><div class="line"> next_sequence.invoke_before(env) </div><div class="line active"> env.value = !env.halted &amp;&amp; (!block_given? || yield) </div><div class="line"> next_sequence.invoke_after(env) </div><div class="line"> env.value </div><div class="line"> else </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-16"> <div class="info"> Extracted source (around line <strong>#41</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>39</span> <span>40</span> <span>41</span> <span>42</span> <span>43</span> <span>44</span> </pre> </td> <td width="100%"> <pre> <div class="line"> # &lt;tt&gt;process_action&lt;/tt&gt; callbacks around the normal behavior. </div><div class="line"> def process_action(*args) </div><div class="line active"> run_callbacks(:process_action) do </div><div class="line"> super </div><div class="line"> end </div><div class="line"> end </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-17"> <div class="info"> Extracted source (around line <strong>#22</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>20</span> <span>21</span> <span>22</span> <span>23</span> <span>24</span> <span>25</span> </pre> </td> <td width="100%"> <pre> <div class="line"> private </div><div class="line"> def process_action(*args) </div><div class="line active"> super </div><div class="line"> rescue Exception =&gt; exception </div><div class="line"> request.env[&quot;action_dispatch.show_detailed_exceptions&quot;] ||= show_detailed_exceptions? </div><div class="line"> rescue_with_handler(exception) || raise </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-18"> <div class="info"> Extracted source (around line <strong>#34</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>32</span> <span>33</span> <span>34</span> <span>35</span> <span>36</span> <span>37</span> </pre> </td> <td width="100%"> <pre> <div class="line"> ActiveSupport::Notifications.instrument(&quot;process_action.action_controller&quot;, raw_payload) do |payload| </div><div class="line"> begin </div><div class="line active"> result = super </div><div class="line"> payload[:status] = response.status </div><div class="line"> result </div><div class="line"> ensure </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-19"> <div class="info"> Extracted source (around line <strong>#168</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>166</span> <span>167</span> <span>168</span> <span>169</span> <span>170</span> <span>171</span> </pre> </td> <td width="100%"> <pre> <div class="line"> def instrument(name, payload = {}) </div><div class="line"> if notifier.listening?(name) </div><div class="line active"> instrumenter.instrument(name, payload) { yield payload if block_given? } </div><div class="line"> else </div><div class="line"> yield payload if block_given? </div><div class="line"> end </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-20"> <div class="info"> Extracted source (around line <strong>#23</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>21</span> <span>22</span> <span>23</span> <span>24</span> <span>25</span> <span>26</span> </pre> </td> <td width="100%"> <pre> <div class="line"> listeners_state = start name, payload </div><div class="line"> begin </div><div class="line active"> yield payload </div><div class="line"> rescue Exception =&gt; e </div><div class="line"> payload[:exception] = [e.class.name, e.message] </div><div class="line"> payload[:exception_object] = e </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-21"> <div class="info"> Extracted source (around line <strong>#168</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>166</span> <span>167</span> <span>168</span> <span>169</span> <span>170</span> <span>171</span> </pre> </td> <td width="100%"> <pre> <div class="line"> def instrument(name, payload = {}) </div><div class="line"> if notifier.listening?(name) </div><div class="line active"> instrumenter.instrument(name, payload) { yield payload if block_given? } </div><div class="line"> else </div><div class="line"> yield payload if block_given? </div><div class="line"> end </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-22"> <div class="info"> Extracted source (around line <strong>#32</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>30</span> <span>31</span> <span>32</span> <span>33</span> <span>34</span> <span>35</span> </pre> </td> <td width="100%"> <pre> <div class="line"> ActiveSupport::Notifications.instrument(&quot;start_processing.action_controller&quot;, raw_payload.dup) </div><div class="line"> </div><div class="line active"> ActiveSupport::Notifications.instrument(&quot;process_action.action_controller&quot;, raw_payload) do |payload| </div><div class="line"> begin </div><div class="line"> result = super </div><div class="line"> payload[:status] = response.status </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-23"> <div class="info"> Extracted source (around line <strong>#256</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>254</span> <span>255</span> <span>256</span> <span>257</span> <span>258</span> <span>259</span> </pre> </td> <td width="100%"> <pre> <div class="line"> request.filtered_parameters.merge! wrapped_filtered_hash </div><div class="line"> end </div><div class="line active"> super </div><div class="line"> end </div><div class="line"> </div><div class="line"> private </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-24"> <div class="info"> Extracted source (around line <strong>#24</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>22</span> <span>23</span> <span>24</span> <span>25</span> <span>26</span> <span>27</span> </pre> </td> <td width="100%"> <pre> <div class="line"> # and it won&#39;t be cleaned up by the method below. </div><div class="line"> ActiveRecord::LogSubscriber.reset_runtime </div><div class="line active"> super </div><div class="line"> end </div><div class="line"> </div><div class="line"> def cleanup_view_runtime </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-25"> <div class="info"> Extracted source (around line <strong>#134</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>132</span> <span>133</span> <span>134</span> <span>135</span> <span>136</span> <span>137</span> </pre> </td> <td width="100%"> <pre> <div class="line"> @_response_body = nil </div><div class="line"> </div><div class="line active"> process_action(action_name, *args) </div><div class="line"> end </div><div class="line"> </div><div class="line"> # Delegates to the class&#39; ::controller_path </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-26"> <div class="info"> Extracted source (around line <strong>#32</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>30</span> <span>31</span> <span>32</span> <span>33</span> <span>34</span> <span>35</span> </pre> </td> <td width="100%"> <pre> <div class="line"> def process(*) #:nodoc: </div><div class="line"> old_config, I18n.config = I18n.config, I18nProxy.new(I18n.config, lookup_context) </div><div class="line active"> super </div><div class="line"> ensure </div><div class="line"> I18n.config = old_config </div><div class="line"> end </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-27"> <div class="info"> Extracted source (around line <strong>#191</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>189</span> <span>190</span> <span>191</span> <span>192</span> <span>193</span> <span>194</span> </pre> </td> <td width="100%"> <pre> <div class="line"> set_request!(request) </div><div class="line"> set_response!(response) </div><div class="line active"> process(name) </div><div class="line"> request.commit_flash </div><div class="line"> to_a </div><div class="line"> end </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-28"> <div class="info"> Extracted source (around line <strong>#252</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>250</span> <span>251</span> <span>252</span> <span>253</span> <span>254</span> <span>255</span> </pre> </td> <td width="100%"> <pre> <div class="line"> middleware_stack.build(name) { |env| new.dispatch(name, req, res) }.call req.env </div><div class="line"> else </div><div class="line active"> new.dispatch(name, req, res) </div><div class="line"> end </div><div class="line"> end </div><div class="line"> end </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-29"> <div class="info"> Extracted source (around line <strong>#52</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>50</span> <span>51</span> <span>52</span> <span>53</span> <span>54</span> <span>55</span> </pre> </td> <td width="100%"> <pre> <div class="line"> </div><div class="line"> def dispatch(controller, action, req, res) </div><div class="line active"> controller.dispatch(action, req, res) </div><div class="line"> end </div><div class="line"> end </div><div class="line"> </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-30"> <div class="info"> Extracted source (around line <strong>#34</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>32</span> <span>33</span> <span>34</span> <span>35</span> <span>36</span> <span>37</span> </pre> </td> <td width="100%"> <pre> <div class="line"> controller = controller req </div><div class="line"> res = controller.make_response! req </div><div class="line active"> dispatch(controller, params[:action], req, res) </div><div class="line"> rescue ActionController::RoutingError </div><div class="line"> if @raise_on_name_error </div><div class="line"> raise </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-31"> <div class="info"> Extracted source (around line <strong>#52</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>50</span> <span>51</span> <span>52</span> <span>53</span> <span>54</span> <span>55</span> </pre> </td> <td width="100%"> <pre> <div class="line"> req.path_parameters = set_params.merge parameters </div><div class="line"> </div><div class="line active"> status, headers, body = route.app.serve(req) </div><div class="line"> </div><div class="line"> if &quot;pass&quot; == headers[&quot;X-Cascade&quot;] </div><div class="line"> req.script_name = script_name </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-32"> <div class="info"> Extracted source (around line <strong>#35</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>33</span> <span>34</span> <span>35</span> <span>36</span> <span>37</span> <span>38</span> </pre> </td> <td width="100%"> <pre> <div class="line"> </div><div class="line"> def serve(req) </div><div class="line active"> find_routes(req).each do |match, parameters, route| </div><div class="line"> set_params = req.path_parameters </div><div class="line"> path_info = req.path_info </div><div class="line"> script_name = req.script_name </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-33"> <div class="info"> Extracted source (around line <strong>#35</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>33</span> <span>34</span> <span>35</span> <span>36</span> <span>37</span> <span>38</span> </pre> </td> <td width="100%"> <pre> <div class="line"> </div><div class="line"> def serve(req) </div><div class="line active"> find_routes(req).each do |match, parameters, route| </div><div class="line"> set_params = req.path_parameters </div><div class="line"> path_info = req.path_info </div><div class="line"> script_name = req.script_name </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-34"> <div class="info"> Extracted source (around line <strong>#840</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>838</span> <span>839</span> <span>840</span> <span>841</span> <span>842</span> <span>843</span> </pre> </td> <td width="100%"> <pre> <div class="line"> req = make_request(env) </div><div class="line"> req.path_info = Journey::Router::Utils.normalize_path(req.path_info) </div><div class="line active"> @router.serve(req) </div><div class="line"> end </div><div class="line"> </div><div class="line"> def recognize_path(path, environment = {}) </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-35"> <div class="info"> Extracted source (around line <strong>#15</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>13</span> <span>14</span> <span>15</span> <span>16</span> <span>17</span> <span>18</span> </pre> </td> <td width="100%"> <pre> <div class="line"> def call(env) </div><div class="line"> env[RACK_TEMPFILES] ||= [] </div><div class="line active"> status, headers, body = @app.call(env) </div><div class="line"> body_proxy = BodyProxy.new(body) do </div><div class="line"> env[RACK_TEMPFILES].each(&amp;:close!) unless env[RACK_TEMPFILES].nil? </div><div class="line"> end </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-36"> <div class="info"> Extracted source (around line <strong>#27</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>25</span> <span>26</span> <span>27</span> <span>28</span> <span>29</span> <span>30</span> </pre> </td> <td width="100%"> <pre> <div class="line"> </div><div class="line"> def call(env) </div><div class="line active"> status, headers, body = @app.call(env) </div><div class="line"> </div><div class="line"> if etag_status?(status) &amp;&amp; etag_body?(body) &amp;&amp; !skip_caching?(headers) </div><div class="line"> original_body = body </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-37"> <div class="info"> Extracted source (around line <strong>#40</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>38</span> <span>39</span> <span>40</span> <span>41</span> <span>42</span> <span>43</span> </pre> </td> <td width="100%"> <pre> <div class="line"> [status, headers, body] </div><div class="line"> else </div><div class="line active"> @app.call(env) </div><div class="line"> end </div><div class="line"> end </div><div class="line"> </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-38"> <div class="info"> Extracted source (around line <strong>#12</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>10</span> <span>11</span> <span>12</span> <span>13</span> <span>14</span> <span>15</span> </pre> </td> <td width="100%"> <pre> <div class="line"> </div><div class="line"> def call(env) </div><div class="line active"> status, headers, body = @app.call(env) </div><div class="line"> </div><div class="line"> if env[REQUEST_METHOD] == HEAD </div><div class="line"> [ </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-39"> <div class="info"> Extracted source (around line <strong>#18</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>16</span> <span>17</span> <span>18</span> <span>19</span> <span>20</span> <span>21</span> </pre> </td> <td width="100%"> <pre> <div class="line"> def call(env) </div><div class="line"> request = ActionDispatch::Request.new env </div><div class="line active"> _, headers, _ = response = @app.call(env) </div><div class="line"> </div><div class="line"> return response unless html_response?(headers) </div><div class="line"> return response if policy_present?(headers) </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-40"> <div class="info"> Extracted source (around line <strong>#266</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>264</span> <span>265</span> <span>266</span> <span>267</span> <span>268</span> <span>269</span> </pre> </td> <td width="100%"> <pre> <div class="line"> req = make_request env </div><div class="line"> prepare_session(req) </div><div class="line active"> status, headers, body = app.call(req.env) </div><div class="line"> res = Rack::Response::Raw.new status, headers </div><div class="line"> commit_session(req, res) </div><div class="line"> [status, headers, body] </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-41"> <div class="info"> Extracted source (around line <strong>#260</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>258</span> <span>259</span> <span>260</span> <span>261</span> <span>262</span> <span>263</span> </pre> </td> <td width="100%"> <pre> <div class="line"> </div><div class="line"> def call(env) </div><div class="line active"> context(env) </div><div class="line"> end </div><div class="line"> </div><div class="line"> def context(env, app = @app) </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-42"> <div class="info"> Extracted source (around line <strong>#670</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>668</span> <span>669</span> <span>670</span> <span>671</span> <span>672</span> <span>673</span> </pre> </td> <td width="100%"> <pre> <div class="line"> request = ActionDispatch::Request.new env </div><div class="line"> </div><div class="line active"> status, headers, body = @app.call(env) </div><div class="line"> </div><div class="line"> if request.have_cookie_jar? </div><div class="line"> cookie_jar = request.cookie_jar </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-43"> <div class="info"> Extracted source (around line <strong>#28</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>26</span> <span>27</span> <span>28</span> <span>29</span> <span>30</span> <span>31</span> </pre> </td> <td width="100%"> <pre> <div class="line"> result = run_callbacks :call do </div><div class="line"> begin </div><div class="line active"> @app.call(env) </div><div class="line"> rescue =&gt; error </div><div class="line"> end </div><div class="line"> end </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-44"> <div class="info"> Extracted source (around line <strong>#98</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>96</span> <span>97</span> <span>98</span> <span>99</span> <span>100</span> <span>101</span> </pre> </td> <td width="100%"> <pre> <div class="line"> </div><div class="line"> if callbacks.empty? </div><div class="line active"> yield if block_given? </div><div class="line"> else </div><div class="line"> env = Filters::Environment.new(self, false, nil) </div><div class="line"> next_sequence = callbacks.compile </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-45"> <div class="info"> Extracted source (around line <strong>#26</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>24</span> <span>25</span> <span>26</span> <span>27</span> <span>28</span> <span>29</span> </pre> </td> <td width="100%"> <pre> <div class="line"> def call(env) </div><div class="line"> error = nil </div><div class="line active"> result = run_callbacks :call do </div><div class="line"> begin </div><div class="line"> @app.call(env) </div><div class="line"> rescue =&gt; error </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-46"> <div class="info"> Extracted source (around line <strong>#61</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>59</span> <span>60</span> <span>61</span> <span>62</span> <span>63</span> <span>64</span> </pre> </td> <td width="100%"> <pre> <div class="line"> def call(env) </div><div class="line"> request = ActionDispatch::Request.new env </div><div class="line active"> _, headers, body = response = @app.call(env) </div><div class="line"> </div><div class="line"> if headers[&quot;X-Cascade&quot;] == &quot;pass&quot; </div><div class="line"> body.close if body.respond_to?(:close) </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-47"> <div class="info"> Extracted source (around line <strong>#33</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>31</span> <span>32</span> <span>33</span> <span>34</span> <span>35</span> <span>36</span> </pre> </td> <td width="100%"> <pre> <div class="line"> def call(env) </div><div class="line"> request = ActionDispatch::Request.new env </div><div class="line active"> @app.call(env) </div><div class="line"> rescue Exception =&gt; exception </div><div class="line"> if request.show_exceptions? </div><div class="line"> render_exception(request, exception) </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-48"> <div class="info"> Extracted source (around line <strong>#38</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>36</span> <span>37</span> <span>38</span> <span>39</span> <span>40</span> <span>41</span> </pre> </td> <td width="100%"> <pre> <div class="line"> instrumenter.start &quot;request.action_dispatch&quot;, request: request </div><div class="line"> logger.info { started_request_message(request) } </div><div class="line active"> status, headers, body = @app.call(env) </div><div class="line"> body = ::Rack::BodyProxy.new(body) { finish(request) } </div><div class="line"> [status, headers, body] </div><div class="line"> rescue Exception </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-49"> <div class="info"> Extracted source (around line <strong>#26</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>24</span> <span>25</span> <span>26</span> <span>27</span> <span>28</span> <span>29</span> </pre> </td> <td width="100%"> <pre> <div class="line"> </div><div class="line"> if logger.respond_to?(:tagged) </div><div class="line active"> logger.tagged(compute_tags(request)) { call_app(request, env) } </div><div class="line"> else </div><div class="line"> call_app(request, env) </div><div class="line"> end </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-50"> <div class="info"> Extracted source (around line <strong>#71</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>69</span> <span>70</span> <span>71</span> <span>72</span> <span>73</span> <span>74</span> </pre> </td> <td width="100%"> <pre> <div class="line"> </div><div class="line"> def tagged(*tags) </div><div class="line active"> formatter.tagged(*tags) { yield self } </div><div class="line"> end </div><div class="line"> </div><div class="line"> def flush </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-51"> <div class="info"> Extracted source (around line <strong>#28</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>26</span> <span>27</span> <span>28</span> <span>29</span> <span>30</span> <span>31</span> </pre> </td> <td width="100%"> <pre> <div class="line"> def tagged(*tags) </div><div class="line"> new_tags = push_tags(*tags) </div><div class="line active"> yield self </div><div class="line"> ensure </div><div class="line"> pop_tags(new_tags.size) </div><div class="line"> end </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-52"> <div class="info"> Extracted source (around line <strong>#71</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>69</span> <span>70</span> <span>71</span> <span>72</span> <span>73</span> <span>74</span> </pre> </td> <td width="100%"> <pre> <div class="line"> </div><div class="line"> def tagged(*tags) </div><div class="line active"> formatter.tagged(*tags) { yield self } </div><div class="line"> end </div><div class="line"> </div><div class="line"> def flush </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-53"> <div class="info"> Extracted source (around line <strong>#26</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>24</span> <span>25</span> <span>26</span> <span>27</span> <span>28</span> <span>29</span> </pre> </td> <td width="100%"> <pre> <div class="line"> </div><div class="line"> if logger.respond_to?(:tagged) </div><div class="line active"> logger.tagged(compute_tags(request)) { call_app(request, env) } </div><div class="line"> else </div><div class="line"> call_app(request, env) </div><div class="line"> end </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-54"> <div class="info"> Extracted source (around line <strong>#81</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>79</span> <span>80</span> <span>81</span> <span>82</span> <span>83</span> <span>84</span> </pre> </td> <td width="100%"> <pre> <div class="line"> req = ActionDispatch::Request.new env </div><div class="line"> req.remote_ip = GetIp.new(req, check_ip, proxies) </div><div class="line active"> @app.call(req.env) </div><div class="line"> end </div><div class="line"> </div><div class="line"> # The GetIp class exists as a way to defer processing of the request data </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-55"> <div class="info"> Extracted source (around line <strong>#27</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>25</span> <span>26</span> <span>27</span> <span>28</span> <span>29</span> <span>30</span> </pre> </td> <td width="100%"> <pre> <div class="line"> req = ActionDispatch::Request.new env </div><div class="line"> req.request_id = make_request_id(req.x_request_id) </div><div class="line active"> @app.call(env).tap { |_status, headers, _body| headers[X_REQUEST_ID] = req.request_id } </div><div class="line"> end </div><div class="line"> </div><div class="line"> private </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-56"> <div class="info"> Extracted source (around line <strong>#24</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>22</span> <span>23</span> <span>24</span> <span>25</span> <span>26</span> <span>27</span> </pre> </td> <td width="100%"> <pre> <div class="line"> end </div><div class="line"> </div><div class="line active"> @app.call(env) </div><div class="line"> end </div><div class="line"> </div><div class="line"> def method_override(env) </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-57"> <div class="info"> Extracted source (around line <strong>#22</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>20</span> <span>21</span> <span>22</span> <span>23</span> <span>24</span> <span>25</span> </pre> </td> <td width="100%"> <pre> <div class="line"> def call(env) </div><div class="line"> start_time = Utils.clock_time </div><div class="line active"> status, headers, body = @app.call(env) </div><div class="line"> headers = Utils::HeaderHash[headers] </div><div class="line"> </div><div class="line"> request_time = Utils.clock_time - start_time </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-58"> <div class="info"> Extracted source (around line <strong>#29</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>27</span> <span>28</span> <span>29</span> <span>30</span> <span>31</span> <span>32</span> </pre> </td> <td width="100%"> <pre> <div class="line"> def call(env) </div><div class="line"> LocalCacheRegistry.set_cache_for(local_cache_key, LocalStore.new) </div><div class="line active"> response = @app.call(env) </div><div class="line"> response[2] = ::Rack::BodyProxy.new(response[2]) do </div><div class="line"> LocalCacheRegistry.set_cache_for(local_cache_key, nil) </div><div class="line"> end </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-59"> <div class="info"> Extracted source (around line <strong>#14</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>12</span> <span>13</span> <span>14</span> <span>15</span> <span>16</span> <span>17</span> </pre> </td> <td width="100%"> <pre> <div class="line"> state = @executor.run! </div><div class="line"> begin </div><div class="line active"> response = @app.call(env) </div><div class="line"> returned = response &lt;&lt; ::Rack::BodyProxy.new(response.pop) { state.complete! } </div><div class="line"> ensure </div><div class="line"> state.complete! unless returned </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-60"> <div class="info"> Extracted source (around line <strong>#127</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>125</span> <span>126</span> <span>127</span> <span>128</span> <span>129</span> <span>130</span> </pre> </td> <td width="100%"> <pre> <div class="line"> end </div><div class="line"> </div><div class="line active"> @app.call(req.env) </div><div class="line"> end </div><div class="line"> end </div><div class="line">end </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-61"> <div class="info"> Extracted source (around line <strong>#110</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>108</span> <span>109</span> <span>110</span> <span>111</span> <span>112</span> <span>113</span> </pre> </td> <td width="100%"> <pre> <div class="line"> </div><div class="line"> def call(env) </div><div class="line active"> status, headers, body = @app.call(env) </div><div class="line"> if body.respond_to?(:to_path) </div><div class="line"> case type = variation(env) </div><div class="line"> when &#39;X-Accel-Redirect&#39; </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-62"> <div class="info"> Extracted source (around line <strong>#524</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>522</span> <span>523</span> <span>524</span> <span>525</span> <span>526</span> <span>527</span> </pre> </td> <td width="100%"> <pre> <div class="line"> def call(env) </div><div class="line"> req = build_request env </div><div class="line active"> app.call req.env </div><div class="line"> end </div><div class="line"> </div><div class="line"> # Defines additional Rack env configuration that is added on each call. </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-63"> <div class="info"> Extracted source (around line <strong>#228</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>226</span> <span>227</span> <span>228</span> <span>229</span> <span>230</span> <span>231</span> </pre> </td> <td width="100%"> <pre> <div class="line"> def call(env) </div><div class="line"> env[Const::PUMA_CONFIG] = @config </div><div class="line active"> @app.call(env) </div><div class="line"> end </div><div class="line"> end </div><div class="line"> </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-64"> <div class="info"> Extracted source (around line <strong>#718</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>716</span> <span>717</span> <span>718</span> <span>719</span> <span>720</span> <span>721</span> </pre> </td> <td width="100%"> <pre> <div class="line"> begin </div><div class="line"> begin </div><div class="line active"> status, headers, res_body = @app.call(env) </div><div class="line"> </div><div class="line"> return :async if req.hijacked </div><div class="line"> </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-65"> <div class="info"> Extracted source (around line <strong>#472</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>470</span> <span>471</span> <span>472</span> <span>473</span> <span>474</span> <span>475</span> </pre> </td> <td width="100%"> <pre> <div class="line"> </div><div class="line"> while true </div><div class="line active"> case handle_request(client, buffer) </div><div class="line"> when false </div><div class="line"> return </div><div class="line"> when :async </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-66"> <div class="info"> Extracted source (around line <strong>#328</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>326</span> <span>327</span> <span>328</span> <span>329</span> <span>330</span> <span>331</span> </pre> </td> <td width="100%"> <pre> <div class="line"> else </div><div class="line"> if process_now </div><div class="line active"> process_client client, buffer </div><div class="line"> else </div><div class="line"> client.set_timeout @first_data_timeout </div><div class="line"> @reactor.add client </div> </pre> </td> </tr> </table> </div> </div> <div class="source hidden" id="frame-source-67"> <div class="info"> Extracted source (around line <strong>#134</strong>): </div> <div class="data"> <table cellpadding="0" cellspacing="0" class="lines"> <tr> <td> <pre class="line_numbers"> <span>132</span> <span>133</span> <span>134</span> <span>135</span> <span>136</span> <span>137</span> </pre> </td> <td width="100%"> <pre> <div class="line"> </div><div class="line"> begin </div><div class="line active"> block.call(work, *extra) </div><div class="line"> rescue Exception =&gt; e </div><div class="line"> STDERR.puts &quot;Error reached top of thread-pool: #{e.message} (#{e.class})&quot; </div><div class="line"> end </div> </pre> </td> </tr> </table> </div> </div> <p><code>Rails.root: /app</code></p> <div id="traces"> <a href="#" onclick="hide(&#39;Framework-Trace&#39;);hide(&#39;Full-Trace&#39;);show(&#39;Application-Trace&#39;);; return false;">Application Trace</a> | <a href="#" onclick="hide(&#39;Application-Trace&#39;);hide(&#39;Full-Trace&#39;);show(&#39;Framework-Trace&#39;);; return false;">Framework Trace</a> | <a href="#" onclick="hide(&#39;Application-Trace&#39;);hide(&#39;Framework-Trace&#39;);show(&#39;Full-Trace&#39;);; return false;">Full Trace</a> <div id="Application-Trace" style="display: block;"> <pre><code><a class="trace-frames" data-frame-id="2" href="#">app/services/lti_platform/decode_tool_jwt.rb:44:in `tool_request_for_keys&#39;</a><br><a class="trace-frames" data-frame-id="3" href="#">app/services/lti_platform/decode_tool_jwt.rb:29:in `fetch_key_from_jwks&#39;</a><br><a class="trace-frames" data-frame-id="4" href="#">app/services/lti_platform/decode_tool_jwt.rb:24:in `tool_public_key&#39;</a><br><a class="trace-frames" data-frame-id="5" href="#">app/services/lti_platform/decode_tool_jwt.rb:12:in `call&#39;</a><br><a class="trace-frames" data-frame-id="6" href="#">app/services/lti_platform/generate_access_token.rb:41:in `decode_client_assertion&#39;</a><br><a class="trace-frames" data-frame-id="7" href="#">app/services/lti_platform/generate_access_token.rb:20:in `valid_request?&#39;</a><br><a class="trace-frames" data-frame-id="8" href="#">app/services/lti_platform/generate_access_token.rb:13:in `initialize&#39;</a><br><a class="trace-frames" data-frame-id="9" href="#">app/controllers/access_tokens_controller.rb:8:in `new&#39;</a><br><a class="trace-frames" data-frame-id="10" href="#">app/controllers/access_tokens_controller.rb:8:in `create&#39;</a><br></code></pre> </div> <div id="Framework-Trace" style="display: none;"> <pre><code><a class="trace-frames" data-frame-id="0" href="#">/usr/local/lib/ruby/2.6.0/json/common.rb:156:in `parse&#39;</a><br><a class="trace-frames" data-frame-id="1" href="#">/usr/local/lib/ruby/2.6.0/json/common.rb:156:in `parse&#39;</a><br><a class="trace-frames" data-frame-id="11" href="#">actionpack (5.2.4.6) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action&#39;</a><br><a class="trace-frames" data-frame-id="12" href="#">actionpack (5.2.4.6) lib/abstract_controller/base.rb:194:in `process_action&#39;</a><br><a class="trace-frames" data-frame-id="13" href="#">actionpack (5.2.4.6) lib/action_controller/metal/rendering.rb:30:in `process_action&#39;</a><br><a class="trace-frames" data-frame-id="14" href="#">actionpack (5.2.4.6) lib/abstract_controller/callbacks.rb:42:in `block in process_action&#39;</a><br><a class="trace-frames" data-frame-id="15" href="#">activesupport (5.2.4.6) lib/active_support/callbacks.rb:132:in `run_callbacks&#39;</a><br><a class="trace-frames" data-frame-id="16" href="#">actionpack (5.2.4.6) lib/abstract_controller/callbacks.rb:41:in `process_action&#39;</a><br><a class="trace-frames" data-frame-id="17" href="#">actionpack (5.2.4.6) lib/action_controller/metal/rescue.rb:22:in `process_action&#39;</a><br><a class="trace-frames" data-frame-id="18" href="#">actionpack (5.2.4.6) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action&#39;</a><br><a class="trace-frames" data-frame-id="19" href="#">activesupport (5.2.4.6) lib/active_support/notifications.rb:168:in `block in instrument&#39;</a><br><a class="trace-frames" data-frame-id="20" href="#">activesupport (5.2.4.6) lib/active_support/notifications/instrumenter.rb:23:in `instrument&#39;</a><br><a class="trace-frames" data-frame-id="21" href="#">activesupport (5.2.4.6) lib/active_support/notifications.rb:168:in `instrument&#39;</a><br><a class="trace-frames" data-frame-id="22" href="#">actionpack (5.2.4.6) lib/action_controller/metal/instrumentation.rb:32:in `process_action&#39;</a><br><a class="trace-frames" data-frame-id="23" href="#">actionpack (5.2.4.6) lib/action_controller/metal/params_wrapper.rb:256:in `process_action&#39;</a><br><a class="trace-frames" data-frame-id="24" href="#">activerecord (5.2.4.6) lib/active_record/railties/controller_runtime.rb:24:in `process_action&#39;</a><br><a class="trace-frames" data-frame-id="25" href="#">actionpack (5.2.4.6) lib/abstract_controller/base.rb:134:in `process&#39;</a><br><a class="trace-frames" data-frame-id="26" href="#">actionview (5.2.4.6) lib/action_view/rendering.rb:32:in `process&#39;</a><br><a class="trace-frames" data-frame-id="27" href="#">actionpack (5.2.4.6) lib/action_controller/metal.rb:191:in `dispatch&#39;</a><br><a class="trace-frames" data-frame-id="28" href="#">actionpack (5.2.4.6) lib/action_controller/metal.rb:252:in `dispatch&#39;</a><br><a class="trace-frames" data-frame-id="29" href="#">actionpack (5.2.4.6) lib/action_dispatch/routing/route_set.rb:52:in `dispatch&#39;</a><br><a class="trace-frames" data-frame-id="30" href="#">actionpack (5.2.4.6) lib/action_dispatch/routing/route_set.rb:34:in `serve&#39;</a><br><a class="trace-frames" data-frame-id="31" href="#">actionpack (5.2.4.6) lib/action_dispatch/journey/router.rb:52:in `block in serve&#39;</a><br><a class="trace-frames" data-frame-id="32" href="#">actionpack (5.2.4.6) lib/action_dispatch/journey/router.rb:35:in `each&#39;</a><br><a class="trace-frames" data-frame-id="33" href="#">actionpack (5.2.4.6) lib/action_dispatch/journey/router.rb:35:in `serve&#39;</a><br><a class="trace-frames" data-frame-id="34" href="#">actionpack (5.2.4.6) lib/action_dispatch/routing/route_set.rb:840:in `call&#39;</a><br><a class="trace-frames" data-frame-id="35" href="#">rack (2.2.3) lib/rack/tempfile_reaper.rb:15:in `call&#39;</a><br><a class="trace-frames" data-frame-id="36" href="#">rack (2.2.3) lib/rack/etag.rb:27:in `call&#39;</a><br><a class="trace-frames" data-frame-id="37" href="#">rack (2.2.3) lib/rack/conditional_get.rb:40:in `call&#39;</a><br><a class="trace-frames" data-frame-id="38" href="#">rack (2.2.3) lib/rack/head.rb:12:in `call&#39;</a><br><a class="trace-frames" data-frame-id="39" href="#">actionpack (5.2.4.6) lib/action_dispatch/http/content_security_policy.rb:18:in `call&#39;</a><br><a class="trace-frames" data-frame-id="40" href="#">rack (2.2.3) lib/rack/session/abstract/id.rb:266:in `context&#39;</a><br><a class="trace-frames" data-frame-id="41" href="#">rack (2.2.3) lib/rack/session/abstract/id.rb:260:in `call&#39;</a><br><a class="trace-frames" data-frame-id="42" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/cookies.rb:670:in `call&#39;</a><br><a class="trace-frames" data-frame-id="43" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call&#39;</a><br><a class="trace-frames" data-frame-id="44" href="#">activesupport (5.2.4.6) lib/active_support/callbacks.rb:98:in `run_callbacks&#39;</a><br><a class="trace-frames" data-frame-id="45" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/callbacks.rb:26:in `call&#39;</a><br><a class="trace-frames" data-frame-id="46" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/debug_exceptions.rb:61:in `call&#39;</a><br><a class="trace-frames" data-frame-id="47" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call&#39;</a><br><a class="trace-frames" data-frame-id="48" href="#">railties (5.2.4.6) lib/rails/rack/logger.rb:38:in `call_app&#39;</a><br><a class="trace-frames" data-frame-id="49" href="#">railties (5.2.4.6) lib/rails/rack/logger.rb:26:in `block in call&#39;</a><br><a class="trace-frames" data-frame-id="50" href="#">activesupport (5.2.4.6) lib/active_support/tagged_logging.rb:71:in `block in tagged&#39;</a><br><a class="trace-frames" data-frame-id="51" href="#">activesupport (5.2.4.6) lib/active_support/tagged_logging.rb:28:in `tagged&#39;</a><br><a class="trace-frames" data-frame-id="52" href="#">activesupport (5.2.4.6) lib/active_support/tagged_logging.rb:71:in `tagged&#39;</a><br><a class="trace-frames" data-frame-id="53" href="#">railties (5.2.4.6) lib/rails/rack/logger.rb:26:in `call&#39;</a><br><a class="trace-frames" data-frame-id="54" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/remote_ip.rb:81:in `call&#39;</a><br><a class="trace-frames" data-frame-id="55" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/request_id.rb:27:in `call&#39;</a><br><a class="trace-frames" data-frame-id="56" href="#">rack (2.2.3) lib/rack/method_override.rb:24:in `call&#39;</a><br><a class="trace-frames" data-frame-id="57" href="#">rack (2.2.3) lib/rack/runtime.rb:22:in `call&#39;</a><br><a class="trace-frames" data-frame-id="58" href="#">activesupport (5.2.4.6) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call&#39;</a><br><a class="trace-frames" data-frame-id="59" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/executor.rb:14:in `call&#39;</a><br><a class="trace-frames" data-frame-id="60" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/static.rb:127:in `call&#39;</a><br><a class="trace-frames" data-frame-id="61" href="#">rack (2.2.3) lib/rack/sendfile.rb:110:in `call&#39;</a><br><a class="trace-frames" data-frame-id="62" href="#">railties (5.2.4.6) lib/rails/engine.rb:524:in `call&#39;</a><br><a class="trace-frames" data-frame-id="63" href="#">puma (4.3.8) lib/puma/configuration.rb:228:in `call&#39;</a><br><a class="trace-frames" data-frame-id="64" href="#">puma (4.3.8) lib/puma/server.rb:718:in `handle_request&#39;</a><br><a class="trace-frames" data-frame-id="65" href="#">puma (4.3.8) lib/puma/server.rb:472:in `process_client&#39;</a><br><a class="trace-frames" data-frame-id="66" href="#">puma (4.3.8) lib/puma/server.rb:328:in `block in run&#39;</a><br><a class="trace-frames" data-frame-id="67" href="#">puma (4.3.8) lib/puma/thread_pool.rb:134:in `block in spawn_thread&#39;</a><br></code></pre> </div> <div id="Full-Trace" style="display: none;"> <pre><code><a class="trace-frames" data-frame-id="0" href="#">/usr/local/lib/ruby/2.6.0/json/common.rb:156:in `parse&#39;</a><br><a class="trace-frames" data-frame-id="1" href="#">/usr/local/lib/ruby/2.6.0/json/common.rb:156:in `parse&#39;</a><br><a class="trace-frames" data-frame-id="2" href="#">app/services/lti_platform/decode_tool_jwt.rb:44:in `tool_request_for_keys&#39;</a><br><a class="trace-frames" data-frame-id="3" href="#">app/services/lti_platform/decode_tool_jwt.rb:29:in `fetch_key_from_jwks&#39;</a><br><a class="trace-frames" data-frame-id="4" href="#">app/services/lti_platform/decode_tool_jwt.rb:24:in `tool_public_key&#39;</a><br><a class="trace-frames" data-frame-id="5" href="#">app/services/lti_platform/decode_tool_jwt.rb:12:in `call&#39;</a><br><a class="trace-frames" data-frame-id="6" href="#">app/services/lti_platform/generate_access_token.rb:41:in `decode_client_assertion&#39;</a><br><a class="trace-frames" data-frame-id="7" href="#">app/services/lti_platform/generate_access_token.rb:20:in `valid_request?&#39;</a><br><a class="trace-frames" data-frame-id="8" href="#">app/services/lti_platform/generate_access_token.rb:13:in `initialize&#39;</a><br><a class="trace-frames" data-frame-id="9" href="#">app/controllers/access_tokens_controller.rb:8:in `new&#39;</a><br><a class="trace-frames" data-frame-id="10" href="#">app/controllers/access_tokens_controller.rb:8:in `create&#39;</a><br><a class="trace-frames" data-frame-id="11" href="#">actionpack (5.2.4.6) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action&#39;</a><br><a class="trace-frames" data-frame-id="12" href="#">actionpack (5.2.4.6) lib/abstract_controller/base.rb:194:in `process_action&#39;</a><br><a class="trace-frames" data-frame-id="13" href="#">actionpack (5.2.4.6) lib/action_controller/metal/rendering.rb:30:in `process_action&#39;</a><br><a class="trace-frames" data-frame-id="14" href="#">actionpack (5.2.4.6) lib/abstract_controller/callbacks.rb:42:in `block in process_action&#39;</a><br><a class="trace-frames" data-frame-id="15" href="#">activesupport (5.2.4.6) lib/active_support/callbacks.rb:132:in `run_callbacks&#39;</a><br><a class="trace-frames" data-frame-id="16" href="#">actionpack (5.2.4.6) lib/abstract_controller/callbacks.rb:41:in `process_action&#39;</a><br><a class="trace-frames" data-frame-id="17" href="#">actionpack (5.2.4.6) lib/action_controller/metal/rescue.rb:22:in `process_action&#39;</a><br><a class="trace-frames" data-frame-id="18" href="#">actionpack (5.2.4.6) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action&#39;</a><br><a class="trace-frames" data-frame-id="19" href="#">activesupport (5.2.4.6) lib/active_support/notifications.rb:168:in `block in instrument&#39;</a><br><a class="trace-frames" data-frame-id="20" href="#">activesupport (5.2.4.6) lib/active_support/notifications/instrumenter.rb:23:in `instrument&#39;</a><br><a class="trace-frames" data-frame-id="21" href="#">activesupport (5.2.4.6) lib/active_support/notifications.rb:168:in `instrument&#39;</a><br><a class="trace-frames" data-frame-id="22" href="#">actionpack (5.2.4.6) lib/action_controller/metal/instrumentation.rb:32:in `process_action&#39;</a><br><a class="trace-frames" data-frame-id="23" href="#">actionpack (5.2.4.6) lib/action_controller/metal/params_wrapper.rb:256:in `process_action&#39;</a><br><a class="trace-frames" data-frame-id="24" href="#">activerecord (5.2.4.6) lib/active_record/railties/controller_runtime.rb:24:in `process_action&#39;</a><br><a class="trace-frames" data-frame-id="25" href="#">actionpack (5.2.4.6) lib/abstract_controller/base.rb:134:in `process&#39;</a><br><a class="trace-frames" data-frame-id="26" href="#">actionview (5.2.4.6) lib/action_view/rendering.rb:32:in `process&#39;</a><br><a class="trace-frames" data-frame-id="27" href="#">actionpack (5.2.4.6) lib/action_controller/metal.rb:191:in `dispatch&#39;</a><br><a class="trace-frames" data-frame-id="28" href="#">actionpack (5.2.4.6) lib/action_controller/metal.rb:252:in `dispatch&#39;</a><br><a class="trace-frames" data-frame-id="29" href="#">actionpack (5.2.4.6) lib/action_dispatch/routing/route_set.rb:52:in `dispatch&#39;</a><br><a class="trace-frames" data-frame-id="30" href="#">actionpack (5.2.4.6) lib/action_dispatch/routing/route_set.rb:34:in `serve&#39;</a><br><a class="trace-frames" data-frame-id="31" href="#">actionpack (5.2.4.6) lib/action_dispatch/journey/router.rb:52:in `block in serve&#39;</a><br><a class="trace-frames" data-frame-id="32" href="#">actionpack (5.2.4.6) lib/action_dispatch/journey/router.rb:35:in `each&#39;</a><br><a class="trace-frames" data-frame-id="33" href="#">actionpack (5.2.4.6) lib/action_dispatch/journey/router.rb:35:in `serve&#39;</a><br><a class="trace-frames" data-frame-id="34" href="#">actionpack (5.2.4.6) lib/action_dispatch/routing/route_set.rb:840:in `call&#39;</a><br><a class="trace-frames" data-frame-id="35" href="#">rack (2.2.3) lib/rack/tempfile_reaper.rb:15:in `call&#39;</a><br><a class="trace-frames" data-frame-id="36" href="#">rack (2.2.3) lib/rack/etag.rb:27:in `call&#39;</a><br><a class="trace-frames" data-frame-id="37" href="#">rack (2.2.3) lib/rack/conditional_get.rb:40:in `call&#39;</a><br><a class="trace-frames" data-frame-id="38" href="#">rack (2.2.3) lib/rack/head.rb:12:in `call&#39;</a><br><a class="trace-frames" data-frame-id="39" href="#">actionpack (5.2.4.6) lib/action_dispatch/http/content_security_policy.rb:18:in `call&#39;</a><br><a class="trace-frames" data-frame-id="40" href="#">rack (2.2.3) lib/rack/session/abstract/id.rb:266:in `context&#39;</a><br><a class="trace-frames" data-frame-id="41" href="#">rack (2.2.3) lib/rack/session/abstract/id.rb:260:in `call&#39;</a><br><a class="trace-frames" data-frame-id="42" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/cookies.rb:670:in `call&#39;</a><br><a class="trace-frames" data-frame-id="43" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call&#39;</a><br><a class="trace-frames" data-frame-id="44" href="#">activesupport (5.2.4.6) lib/active_support/callbacks.rb:98:in `run_callbacks&#39;</a><br><a class="trace-frames" data-frame-id="45" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/callbacks.rb:26:in `call&#39;</a><br><a class="trace-frames" data-frame-id="46" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/debug_exceptions.rb:61:in `call&#39;</a><br><a class="trace-frames" data-frame-id="47" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call&#39;</a><br><a class="trace-frames" data-frame-id="48" href="#">railties (5.2.4.6) lib/rails/rack/logger.rb:38:in `call_app&#39;</a><br><a class="trace-frames" data-frame-id="49" href="#">railties (5.2.4.6) lib/rails/rack/logger.rb:26:in `block in call&#39;</a><br><a class="trace-frames" data-frame-id="50" href="#">activesupport (5.2.4.6) lib/active_support/tagged_logging.rb:71:in `block in tagged&#39;</a><br><a class="trace-frames" data-frame-id="51" href="#">activesupport (5.2.4.6) lib/active_support/tagged_logging.rb:28:in `tagged&#39;</a><br><a class="trace-frames" data-frame-id="52" href="#">activesupport (5.2.4.6) lib/active_support/tagged_logging.rb:71:in `tagged&#39;</a><br><a class="trace-frames" data-frame-id="53" href="#">railties (5.2.4.6) lib/rails/rack/logger.rb:26:in `call&#39;</a><br><a class="trace-frames" data-frame-id="54" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/remote_ip.rb:81:in `call&#39;</a><br><a class="trace-frames" data-frame-id="55" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/request_id.rb:27:in `call&#39;</a><br><a class="trace-frames" data-frame-id="56" href="#">rack (2.2.3) lib/rack/method_override.rb:24:in `call&#39;</a><br><a class="trace-frames" data-frame-id="57" href="#">rack (2.2.3) lib/rack/runtime.rb:22:in `call&#39;</a><br><a class="trace-frames" data-frame-id="58" href="#">activesupport (5.2.4.6) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call&#39;</a><br><a class="trace-frames" data-frame-id="59" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/executor.rb:14:in `call&#39;</a><br><a class="trace-frames" data-frame-id="60" href="#">actionpack (5.2.4.6) lib/action_dispatch/middleware/static.rb:127:in `call&#39;</a><br><a class="trace-frames" data-frame-id="61" href="#">rack (2.2.3) lib/rack/sendfile.rb:110:in `call&#39;</a><br><a class="trace-frames" data-frame-id="62" href="#">railties (5.2.4.6) lib/rails/engine.rb:524:in `call&#39;</a><br><a class="trace-frames" data-frame-id="63" href="#">puma (4.3.8) lib/puma/configuration.rb:228:in `call&#39;</a><br><a class="trace-frames" data-frame-id="64" href="#">puma (4.3.8) lib/puma/server.rb:718:in `handle_request&#39;</a><br><a class="trace-frames" data-frame-id="65" href="#">puma (4.3.8) lib/puma/server.rb:472:in `process_client&#39;</a><br><a class="trace-frames" data-frame-id="66" href="#">puma (4.3.8) lib/puma/server.rb:328:in `block in run&#39;</a><br><a class="trace-frames" data-frame-id="67" href="#">puma (4.3.8) lib/puma/thread_pool.rb:134:in `block in spawn_thread&#39;</a><br></code></pre> </div> <script type="text/javascript"> var traceFrames = document.getElementsByClassName('trace-frames'); var selectedFrame, currentSource = document.getElementById('frame-source-0'); // Add click listeners for all stack frames for (var i = 0; i < traceFrames.length; i++) { traceFrames[i].addEventListener('click', function(e) { e.preventDefault(); var target = e.target; var frame_id = target.dataset.frameId; if (selectedFrame) { selectedFrame.className = selectedFrame.className.replace("selected", ""); } target.className += " selected"; selectedFrame = target; // Change the extracted source code changeSourceExtract(frame_id); }); function changeSourceExtract(frame_id) { var el = document.getElementById('frame-source-' + frame_id); if (currentSource && el) { currentSource.className += " hidden"; el.className = el.className.replace(" hidden", ""); currentSource = el; } } } </script> </div> <h2 style="margin-top: 30px">Request</h2> <p><b>Parameters</b>:</p> <pre>{&quot;client_assertion&quot;=&gt; &quot;eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Illtd0Z1Ym9BcE1XdWl4LTZIOXpCcEo2T2pzYnBLTHZaN3lxd2dfRDdHY0kiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJBRTk5OTkiLCJzdWIiOiJ0ZXN0QUUxMjMiLCJhdWQiOiJodHRwczovL2x0aS1yaS5pbXNnbG9iYWwub3JnL3BsYXRmb3Jtcy8xODQ3L2FjY2Vzc190b2tlbnMiLCJpYXQiOjE3MTE2NTM2NTEsImV4cCI6MTcxMTY1Mzk1MSwianRpIjoiNGJjY2NjNTM0MzlkYjgxMjBkNGUifQ.0yNek8bcHbqj39sxsCLoGmH-pqszIj7d-1z1nftkbHWYBF7C1Sna-W_q49IfrsrKo392i-3W0JnfChfw7iKQdVufUy7koM0tJ65V9moZjQmyq3W1A9nx5Ua4b2G5xdKZgdhHgiFowV2xTXpsIIIzjrHOyI_JCAMwyTpiFNDVME8iHGmu9Wlsrr15Yc0_El6A2o7sjfsAIb4xSXAza_3C9JAPfF72onC9fSiEN-hkMPlkH4m-R7nPe6Ng7D65mgT3c_KTF0pCobGoSba5ugeH18h3qkiCuZZKtRgxMqpwG8kclppExwB1E3ZGJn4Y34xTDMlDY_huRM1YGUZZ51EUbw&quot;, &quot;client_assertion_type&quot;=&gt;&quot;urn:ietf:params:oauth:client-assertion-type:jwt-bearer&quot;, &quot;grant_type&quot;=&gt;&quot;client_credentials&quot;, &quot;scope&quot;=&gt; &quot;https://purl.imsglobal.org/spec/lti-ags/scope/lineitem https://purl.imsglobal.org/spec/lti-ags/scope/result.readonly https://purl.imsglobal.org/spec/lti-ags/scope/score https://purl.imsglobal.org/spec/lti-ap/scope/control.all https://purl.imsglobal.org/spec/lti-nrps/scope/contextmembership.readonly https://purl.imsglobal.org/spec/lti-ap/scope/control.all&quot;, &quot;platform_id&quot;=&gt;&quot;1847&quot;} </pre> <div class="details"> <div class="summary"><a href="#" onclick="return toggleSessionDump()">Toggle session dump</a></div> <div id="session_dump" style="display:none"><pre></pre></div> </div> <div class="details"> <div class="summary"><a href="#" onclick="return toggleEnvDump()">Toggle env dump</a></div> <div id="env_dump" style="display:none"><pre>GATEWAY_INTERFACE: &quot;CGI/1.2&quot; HTTP_ACCEPT: &quot;*/*&quot; HTTP_ACCEPT_ENCODING: &quot;gzip;q=1.0,deflate;q=0.6,identity;q=0.3&quot; HTTP_VERSION: &quot;HTTP/1.1&quot; HTTP_X_FORWARDED_FOR: &quot;10.128.0.14&quot; HTTP_X_FORWARDED_HOST: &quot;lti-ri.imsglobal.org&quot; HTTP_X_REQUEST_ID: &quot;1a774efb0c91bf38b1c060ced8cf9761&quot; ORIGINAL_SCRIPT_NAME: &quot;&quot; REMOTE_ADDR: &quot;10.24.0.8&quot; SERVER_NAME: &quot;lti-ri.imsglobal.org&quot; SERVER_PROTOCOL: &quot;HTTP/1.1&quot;</pre></div> </div> <h2 style="margin-top: 30px">Response</h2> <p><b>Headers</b>:</p> <pre>None</pre> </div> </body> </html> '

Extracted source (around line #26):
24
25
26
27
28
29
              
request = conn.post @tool.oauth2_url, body
JSON.parse(request.body)
end
def body

Rails.root: /app

Application Trace | Framework Trace | Full Trace

Request

Parameters:

{"tool_id"=>"1722", "id"=>"13120"}

Response

Headers:

None