Open jcoyne opened 2 months ago
search_state.query_param
is a Hash, but we'd expect it to be a string. It's perhaps due to how Blacklight 8 changed fetch
and blacklight-spotlight-4.0.3/app/models/sir_trevor_rails/blocks/solr_documents_block.rb:29:in
documents' `
[
{
"number": "28",
"file": "[PROJECT_ROOT]/app/models/search_builder.rb",
"method": "min_match_for_boolean",
"source": {
"26": " # edismax) will precompose the query strings so everything works out.\n",
"27": " def min_match_for_boolean(solr_parameters)\n",
"28": " return unless search_state.query_param&.match?(/\\s(AND|OR|NOT)\\s/)\n",
"29": "\n",
"30": " solr_parameters[:mm] = '1'\n"
}
},
{
"number": "151",
"file": "[GEM_ROOT]/gems/blacklight-8.4.0/lib/blacklight/search_builder.rb",
"method": "block (2 levels) in processed_parameters",
"source": {
"149": " request.tap do |request_parameters|\n",
"150": " processor_chain.each do |method_name|\n",
"151": " send(method_name, request_parameters)\n",
"152": " end\n",
"153": " end\n"
}
},
{
"number": "150",
"file": "[GEM_ROOT]/gems/blacklight-8.4.0/lib/blacklight/search_builder.rb",
"method": "each",
"source": {
"148": " def processed_parameters\n",
"149": " request.tap do |request_parameters|\n",
"150": " processor_chain.each do |method_name|\n",
"151": " send(method_name, request_parameters)\n",
"152": " end\n"
}
},
{
"number": "150",
"file": "[GEM_ROOT]/gems/blacklight-8.4.0/lib/blacklight/search_builder.rb",
"method": "block in processed_parameters",
"source": {
"148": " def processed_parameters\n",
"149": " request.tap do |request_parameters|\n",
"150": " processor_chain.each do |method_name|\n",
"151": " send(method_name, request_parameters)\n",
"152": " end\n"
}
},
{
"number": null,
"file": null,
"method": null,
"source": {}
},
{
"number": "149",
"file": "[GEM_ROOT]/gems/blacklight-8.4.0/lib/blacklight/search_builder.rb",
"method": "processed_parameters",
"source": {
"147": " # @return a params hash for searching solr.\n",
"148": " def processed_parameters\n",
"149": " request.tap do |request_parameters|\n",
"150": " processor_chain.each do |method_name|\n",
"151": " send(method_name, request_parameters)\n"
}
},
{
"number": "123",
"file": "[GEM_ROOT]/gems/blacklight-8.4.0/lib/blacklight/search_builder.rb",
"method": "to_hash",
"source": {
"121": " return @params unless params_need_update?\n",
"122": "\n",
"123": " @params = processed_parameters\n",
"124": " .reverse_merge(@reverse_merged_params)\n",
"125": " .merge(@merged_params)\n"
}
},
{
"number": "116",
"file": "[GEM_ROOT]/gems/blacklight-8.4.0/lib/blacklight/search_builder.rb",
"method": "[]",
"source": {
"114": " end\n",
"115": "\n",
"116": " delegate :[], :key?, to: :to_hash\n",
"117": "\n",
"118": " # a solr query method\n"
}
},
{
"number": "144",
"file": "[GEM_ROOT]/gems/blacklight-8.4.0/lib/blacklight/solr/repository.rb",
"method": "uses_json_query_dsl?",
"source": {
"142": " # @return [Boolean]\n",
"143": " def uses_json_query_dsl?(solr_params)\n",
"144": " solr_params[:json].present?\n",
"145": " end\n",
"146": " end\n"
}
},
{
"number": "137",
"file": "[GEM_ROOT]/gems/blacklight-8.4.0/lib/blacklight/solr/repository.rb",
"method": "default_search_path",
"source": {
"135": " # @return [String]\n",
"136": " def default_search_path(solr_params)\n",
"137": " return blacklight_config.json_solr_path if blacklight_config.json_solr_path && uses_json_query_dsl?(solr_params)\n",
"138": "\n",
"139": " blacklight_config.solr_path\n"
}
},
{
"number": "33",
"file": "[GEM_ROOT]/gems/blacklight-8.4.0/lib/blacklight/solr/repository.rb",
"method": "search",
"source": {
"31": " request_params = (params || pos_params).reverse_merge(kwargs).reverse_merge({ qt: blacklight_config.qt })\n",
"32": "\n",
"33": " send_and_receive(path || default_search_path(request_params), request_params)\n",
"34": " end\n",
"35": "\n"
}
},
{
"number": "23",
"file": "[GEM_ROOT]/gems/blacklight-8.4.0/lib/blacklight/solr/repository.rb",
"method": "find_many",
"source": {
"21": " # @param [Hash] _params query parameters\n",
"22": " def find_many(params)\n",
"23": " search(params: params, path: blacklight_config.fetch_many_documents_path)\n",
"24": " end\n",
"25": "\n"
}
},
{
"number": "156",
"file": "[GEM_ROOT]/gems/blacklight-8.4.0/app/services/blacklight/search_service.rb",
"method": "fetch_many",
"source": {
"154": " # we'll fall back to search if find_many isn't available.\n",
"155": " solr_response = if repository.respond_to?(:find_many)\n",
"156": " repository.find_many(query)\n",
"157": " else\n",
"158": " repository.search(query)\n"
}
},
{
"number": "51",
"file": "[GEM_ROOT]/gems/blacklight-8.4.0/app/services/blacklight/search_service.rb",
"method": "fetch",
"source": {
"49": " def fetch(id = nil, extra_controller_params = {})\n",
"50": " if id.is_a? Array\n",
"51": " fetch_many(id, extra_controller_params)\n",
"52": " else\n",
"53": " fetch_one(id, extra_controller_params)\n"
}
},
{
"number": "29",
"file": "[GEM_ROOT]/gems/blacklight-spotlight-4.0.3/app/models/sir_trevor_rails/blocks/solr_documents_block.rb",
"method": "documents",
"source": {
"27": " @documents ||= begin\n",
"28": " doc_ids = items.pluck(:id)\n",
"29": " result = solr_helper.controller.send(:search_service).fetch(doc_ids)\n",
"30": "\n",
"31": " if result.first.is_a? Blacklight::Solr::Response\n"
}
},
{
"number": "20",
"file": "[GEM_ROOT]/gems/blacklight-spotlight-4.0.3/app/models/sir_trevor_rails/blocks/solr_documents_block.rb",
"method": "block in each_document",
"source": {
"18": "\n",
"19": " items.each do |i|\n",
"20": " document = documents.detect { |doc| doc.id == i[:id] }\n",
"21": " i[:iiif_tilesource_base] = i.fetch(:iiif_tilesource, '').sub('/info.json', '')\n",
"22": " yield i, document if document\n"
}
},
{
"number": "19",
"file": "[GEM_ROOT]/gems/blacklight-spotlight-4.0.3/app/models/sir_trevor_rails/blocks/solr_documents_block.rb",
"method": "each",
"source": {
"17": " return to_enum(:each_document) unless block_given?\n",
"18": "\n",
"19": " items.each do |i|\n",
"20": " document = documents.detect { |doc| doc.id == i[:id] }\n",
"21": " i[:iiif_tilesource_base] = i.fetch(:iiif_tilesource, '').sub('/info.json', '')\n"
}
},
{
"number": "19",
"file": "[GEM_ROOT]/gems/blacklight-spotlight-4.0.3/app/models/sir_trevor_rails/blocks/solr_documents_block.rb",
"method": "each_document",
"source": {
"17": " return to_enum(:each_document) unless block_given?\n",
"18": "\n",
"19": " items.each do |i|\n",
"20": " document = documents.detect { |doc| doc.id == i[:id] }\n",
"21": " i[:iiif_tilesource_base] = i.fetch(:iiif_tilesource, '').sub('/info.json', '')\n"
}
},
{
"number": "40",
"file": "[GEM_ROOT]/gems/blacklight-spotlight-4.0.3/app/models/sir_trevor_rails/blocks/solr_documents_block.rb",
"method": "each",
"source": {
"38": "\n",
"39": " def documents?\n",
"40": " each_document.any?\n",
"41": " end\n",
"42": "\n"
}
},
{
"number": "40",
"file": "[GEM_ROOT]/gems/blacklight-spotlight-4.0.3/app/models/sir_trevor_rails/blocks/solr_documents_block.rb",
"method": "any?",
"source": {
"38": "\n",
"39": " def documents?\n",
"40": " each_document.any?\n",
"41": " end\n",
"42": "\n"
}
},
{
"number": "40",
"file": "[GEM_ROOT]/gems/blacklight-spotlight-4.0.3/app/models/sir_trevor_rails/blocks/solr_documents_block.rb",
"method": "documents?",
"source": {
"38": "\n",
"39": " def documents?\n",
"40": " each_document.any?\n",
"41": " end\n",
"42": "\n"
}
},
{
"number": "4",
"file": "[GEM_ROOT]/gems/blacklight-spotlight-4.0.3/app/views/spotlight/sir_trevor/blocks/_solr_documents_block.html.erb",
"method": "__opt_app_dlme_dlme_shared_bundle_ruby_______gems_blacklight_spotlight_______app_views_spotlight_sir_trevor_blocks__solr_documents_block_html_erb___2819937229888063635_483720",
"source": {
"2": "\n",
"3": "<div class=\"content-block items-block row d-block clearfix\">\n",
"4": " <% if solr_documents_block.documents? %>\n",
"5": "\n",
"6": " <div class=\"items-col spotlight-flexbox <%= solr_documents_block.text? ? \"col-md-6\" : \"col-md-12\" %> <%= solr_documents_block.content_align == 'right' ? 'float-right float-end' : 'float-left float-start' %>\">\n"
}
},
{
"number": "263",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/base.rb",
"method": "public_send",
"source": {
"261": " end\n",
"262": " else\n",
"263": " public_send(method, locals, buffer, &block)\n",
"264": " end\n",
"265": " ensure\n"
}
},
{
"number": "263",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/base.rb",
"method": "_run",
"source": {
"261": " end\n",
"262": " else\n",
"263": " public_send(method, locals, buffer, &block)\n",
"264": " end\n",
"265": " ensure\n"
}
},
{
"number": "261",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/template.rb",
"method": "block in render",
"source": {
"259": " nil\n",
"260": " else\n",
"261": " result = view._run(method_name, self, locals, OutputBuffer.new, add_to_stack: add_to_stack, has_strict_locals: strict_locals?, &block)\n",
"262": " result.is_a?(OutputBuffer) ? result.to_s : result\n",
"263": " end\n"
}
},
{
"number": "208",
"file": "[GEM_ROOT]/gems/activesupport-7.1.4/lib/active_support/notifications.rb",
"method": "instrument",
"source": {
"206": " instrumenter.instrument(name, payload) { yield payload if block_given? }\n",
"207": " else\n",
"208": " yield payload if block_given?\n",
"209": " end\n",
"210": " end\n"
}
},
{
"number": "550",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/template.rb",
"method": "instrument_render_template",
"source": {
"548": "\n",
"549": " def instrument_render_template(&block)\n",
"550": " ActiveSupport::Notifications.instrument(\"!render_template.action_view\", instrument_payload, &block)\n",
"551": " end\n",
"552": "\n"
}
},
{
"number": "249",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/template.rb",
"method": "render",
"source": {
"247": " # consume this in production. This is only slow if it's being listened to.\n",
"248": " def render(view, locals, buffer = nil, implicit_locals: [], add_to_stack: true, &block)\n",
"249": " instrument_render_template do\n",
"250": " compile!(view)\n",
"251": "\n"
}
},
{
"number": "197",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/renderer/collection_renderer.rb",
"method": "block in collection_with_template",
"source": {
"195": " _template = (cache[path] ||= (template || find_template(path, @locals.keys + [as, counter, iteration])))\n",
"196": "\n",
"197": " content = _template.render(view, locals, implicit_locals: [counter, iteration])\n",
"198": " content = layout.render(view, locals) { content } if layout\n",
"199": " partial_iteration.iterate!\n"
}
},
{
"number": "74",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/renderer/collection_renderer.rb",
"method": "block in each_with_info",
"source": {
"72": " return enum_for(:each_with_info) unless block_given?\n",
"73": " variables = [@path] + @variables\n",
"74": " @collection.each { |o| yield(o, variables) }\n",
"75": " end\n",
"76": " end\n"
}
},
{
"number": "74",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/renderer/collection_renderer.rb",
"method": "each",
"source": {
"72": " return enum_for(:each_with_info) unless block_given?\n",
"73": " variables = [@path] + @variables\n",
"74": " @collection.each { |o| yield(o, variables) }\n",
"75": " end\n",
"76": " end\n"
}
},
{
"number": "74",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/renderer/collection_renderer.rb",
"method": "each_with_info",
"source": {
"72": " return enum_for(:each_with_info) unless block_given?\n",
"73": " variables = [@path] + @variables\n",
"74": " @collection.each { |o| yield(o, variables) }\n",
"75": " end\n",
"76": " end\n"
}
},
{
"number": "188",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/renderer/collection_renderer.rb",
"method": "each",
"source": {
"186": " partial_iteration = PartialIteration.new(collection.size)\n",
"187": "\n",
"188": " collection.each_with_info.map do |object, (path, as, counter, iteration)|\n",
"189": " index = partial_iteration.index\n",
"190": "\n"
}
},
{
"number": "188",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/renderer/collection_renderer.rb",
"method": "map",
"source": {
"186": " partial_iteration = PartialIteration.new(collection.size)\n",
"187": "\n",
"188": " collection.each_with_info.map do |object, (path, as, counter, iteration)|\n",
"189": " index = partial_iteration.index\n",
"190": "\n"
}
},
{
"number": "188",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/renderer/collection_renderer.rb",
"method": "collection_with_template",
"source": {
"186": " partial_iteration = PartialIteration.new(collection.size)\n",
"187": "\n",
"188": " collection.each_with_info.map do |object, (path, as, counter, iteration)|\n",
"189": " index = partial_iteration.index\n",
"190": "\n"
}
},
{
"number": "170",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/renderer/collection_renderer.rb",
"method": "block (2 levels) in render_collection",
"source": {
"168": " collection_body = if template\n",
"169": " cache_collection_render(payload, view, template, collection) do |filtered_collection|\n",
"170": " collection_with_template(view, template, layout, filtered_collection)\n",
"171": " end\n",
"172": " else\n"
}
},
{
"number": "21",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/renderer/partial_renderer/collection_caching.rb",
"method": "cache_collection_render",
"source": {
"19": "\n",
"20": " def cache_collection_render(instrumentation_payload, view, template, collection)\n",
"21": " return yield(collection) unless will_cache?(@options, view)\n",
"22": "\n",
"23": " collection_iterator = collection\n"
}
},
{
"number": "169",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/renderer/collection_renderer.rb",
"method": "block in render_collection",
"source": {
"167": "\n",
"168": " collection_body = if template\n",
"169": " cache_collection_render(payload, view, template, collection) do |filtered_collection|\n",
"170": " collection_with_template(view, template, layout, filtered_collection)\n",
"171": " end\n"
}
},
{
"number": "208",
"file": "[GEM_ROOT]/gems/activesupport-7.1.4/lib/active_support/notifications.rb",
"method": "instrument",
"source": {
"206": " instrumenter.instrument(name, payload) { yield payload if block_given? }\n",
"207": " else\n",
"208": " yield payload if block_given?\n",
"209": " end\n",
"210": " end\n"
}
},
{
"number": "155",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/renderer/collection_renderer.rb",
"method": "render_collection",
"source": {
"153": " def render_collection(collection, view, path, template, layout, block)\n",
"154": " identifier = (template && template.identifier) || path\n",
"155": " ActiveSupport::Notifications.instrument(\n",
"156": " \"render_collection.action_view\",\n",
"157": " identifier: identifier,\n"
}
},
{
"number": "127",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/renderer/collection_renderer.rb",
"method": "render_collection_with_partial",
"source": {
"125": " end\n",
"126": "\n",
"127": " render_collection(collection, context, partial, template, layout, block)\n",
"128": " end\n",
"129": "\n"
}
},
{
"number": "135",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/renderer/collection_renderer.rb",
"method": "render_collection_derive_partial",
"source": {
"133": " if paths.uniq.length == 1\n",
"134": " # Homogeneous\n",
"135": " render_collection_with_partial(collection, paths.first, context, block)\n",
"136": " else\n",
"137": " if @options[:cached]\n"
}
},
{
"number": "92",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/renderer/renderer.rb",
"method": "render_partial_to_object",
"source": {
"90": " # Collection + Derived Partial\n",
"91": " renderer = CollectionRenderer.new(@lookup_context, options)\n",
"92": " renderer.render_collection_derive_partial(collection, context, block)\n",
"93": " else\n",
"94": " # Object + Derived Partial\n"
}
},
{
"number": "55",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/renderer/renderer.rb",
"method": "render_partial",
"source": {
"53": " # Direct access to partial rendering.\n",
"54": " def render_partial(context, options, &block) # :nodoc:\n",
"55": " render_partial_to_object(context, options, &block).body\n",
"56": " end\n",
"57": "\n"
}
},
{
"number": "44",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/helpers/rendering_helper.rb",
"method": "render",
"source": {
"42": " options.render_in(self, &block)\n",
"43": " else\n",
"44": " view_renderer.render_partial(self, partial: options, locals: locals, &block)\n",
"45": " end\n",
"46": " end\n"
}
},
{
"number": "19",
"file": "[GEM_ROOT]/gems/blacklight-spotlight-4.0.3/app/views/spotlight/pages/show.html.erb",
"method": "block in __opt_app_dlme_dlme_shared_bundle_ruby_______gems_blacklight_spotlight_______app_views_spotlight_pages_show_html_erb__2144939207205090344_161140",
"source": {
"17": " <div>\n",
"18": " <% if @page.content? %>\n",
"19": " <%= render @page.content %>\n",
"20": " <% else %>\n",
"21": " <%= render 'empty' %>\n"
}
},
{
"number": "219",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/helpers/cache_helper.rb",
"method": "cache_if",
"source": {
"217": " cache(name, options, &block)\n",
"218": " else\n",
"219": " yield\n",
"220": " end\n",
"221": "\n"
}
},
{
"number": "232",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/helpers/cache_helper.rb",
"method": "cache_unless",
"source": {
"230": " # <% end %>\n",
"231": " def cache_unless(condition, name = {}, options = {}, &block)\n",
"232": " cache_if !condition, name, options, &block\n",
"233": " end\n",
"234": "\n"
}
},
{
"number": "8",
"file": "[GEM_ROOT]/gems/blacklight-spotlight-4.0.3/app/views/spotlight/pages/show.html.erb",
"method": "__opt_app_dlme_dlme_shared_bundle_ruby_______gems_blacklight_spotlight_______app_views_spotlight_pages_show_html_erb__2144939207205090344_161140",
"source": {
"6": "<% end if @page.display_sidebar?%>\n",
"7": "\n",
"8": "<%= cache_unless current_user, [current_exhibit, @page, I18n.locale, request.query_string] do %>\n",
"9": " <div class=\"clearfix\">\n",
"10": " <%= render 'edit_page_link' if can? :edit, @page %>\n"
}
},
{
"number": "263",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/base.rb",
"method": "public_send",
"source": {
"261": " end\n",
"262": " else\n",
"263": " public_send(method, locals, buffer, &block)\n",
"264": " end\n",
"265": " ensure\n"
}
},
{
"number": "263",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/base.rb",
"method": "_run",
"source": {
"261": " end\n",
"262": " else\n",
"263": " public_send(method, locals, buffer, &block)\n",
"264": " end\n",
"265": " ensure\n"
}
},
{
"number": "261",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/template.rb",
"method": "block in render",
"source": {
"259": " nil\n",
"260": " else\n",
"261": " result = view._run(method_name, self, locals, OutputBuffer.new, add_to_stack: add_to_stack, has_strict_locals: strict_locals?, &block)\n",
"262": " result.is_a?(OutputBuffer) ? result.to_s : result\n",
"263": " end\n"
}
},
{
"number": "208",
"file": "[GEM_ROOT]/gems/activesupport-7.1.4/lib/active_support/notifications.rb",
"method": "instrument",
"source": {
"206": " instrumenter.instrument(name, payload) { yield payload if block_given? }\n",
"207": " else\n",
"208": " yield payload if block_given?\n",
"209": " end\n",
"210": " end\n"
}
},
{
"number": "550",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/template.rb",
"method": "instrument_render_template",
"source": {
"548": "\n",
"549": " def instrument_render_template(&block)\n",
"550": " ActiveSupport::Notifications.instrument(\"!render_template.action_view\", instrument_payload, &block)\n",
"551": " end\n",
"552": "\n"
}
},
{
"number": "249",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/template.rb",
"method": "render",
"source": {
"247": " # consume this in production. This is only slow if it's being listened to.\n",
"248": " def render(view, locals, buffer = nil, implicit_locals: [], add_to_stack: true, &block)\n",
"249": " instrument_render_template do\n",
"250": " compile!(view)\n",
"251": "\n"
}
},
{
"number": "66",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/renderer/template_renderer.rb",
"method": "block (2 levels) in render_template",
"source": {
"64": " locals: locals\n",
"65": " ) do\n",
"66": " template.render(view, locals) { |*name| view._layout_for(*name) }\n",
"67": " end\n",
"68": " end\n"
}
},
{
"number": "206",
"file": "[GEM_ROOT]/gems/activesupport-7.1.4/lib/active_support/notifications.rb",
"method": "block in instrument",
"source": {
"204": " def instrument(name, payload = {})\n",
"205": " if notifier.listening?(name)\n",
"206": " instrumenter.instrument(name, payload) { yield payload if block_given? }\n",
"207": " else\n",
"208": " yield payload if block_given?\n"
}
},
{
"number": "58",
"file": "[GEM_ROOT]/gems/activesupport-7.1.4/lib/active_support/notifications/instrumenter.rb",
"method": "instrument",
"source": {
"56": " handle.start\n",
"57": " begin\n",
"58": " yield payload if block_given?\n",
"59": " rescue Exception => e\n",
"60": " payload[:exception] = [e.class.name, e.message]\n"
}
},
{
"number": "206",
"file": "[GEM_ROOT]/gems/activesupport-7.1.4/lib/active_support/notifications.rb",
"method": "instrument",
"source": {
"204": " def instrument(name, payload = {})\n",
"205": " if notifier.listening?(name)\n",
"206": " instrumenter.instrument(name, payload) { yield payload if block_given? }\n",
"207": " else\n",
"208": " yield payload if block_given?\n"
}
},
{
"number": "60",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/renderer/template_renderer.rb",
"method": "block in render_template",
"source": {
"58": " def render_template(view, template, layout_name, locals)\n",
"59": " render_with_layout(view, template, layout_name, locals) do |layout|\n",
"60": " ActiveSupport::Notifications.instrument(\n",
"61": " \"render_template.action_view\",\n",
"62": " identifier: template.identifier,\n"
}
},
{
"number": "76",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/renderer/template_renderer.rb",
"method": "block in render_with_layout",
"source": {
"74": " body = if layout\n",
"75": " ActiveSupport::Notifications.instrument(\"render_layout.action_view\", identifier: layout.identifier) do\n",
"76": " view.view_flow.set(:layout, yield(layout))\n",
"77": " layout.render(view, locals) { |*name| view._layout_for(*name) }\n",
"78": " end\n"
}
},
{
"number": "206",
"file": "[GEM_ROOT]/gems/activesupport-7.1.4/lib/active_support/notifications.rb",
"method": "block in instrument",
"source": {
"204": " def instrument(name, payload = {})\n",
"205": " if notifier.listening?(name)\n",
"206": " instrumenter.instrument(name, payload) { yield payload if block_given? }\n",
"207": " else\n",
"208": " yield payload if block_given?\n"
}
},
{
"number": "58",
"file": "[GEM_ROOT]/gems/activesupport-7.1.4/lib/active_support/notifications/instrumenter.rb",
"method": "instrument",
"source": {
"56": " handle.start\n",
"57": " begin\n",
"58": " yield payload if block_given?\n",
"59": " rescue Exception => e\n",
"60": " payload[:exception] = [e.class.name, e.message]\n"
}
},
{
"number": "206",
"file": "[GEM_ROOT]/gems/activesupport-7.1.4/lib/active_support/notifications.rb",
"method": "instrument",
"source": {
"204": " def instrument(name, payload = {})\n",
"205": " if notifier.listening?(name)\n",
"206": " instrumenter.instrument(name, payload) { yield payload if block_given? }\n",
"207": " else\n",
"208": " yield payload if block_given?\n"
}
},
{
"number": "75",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/renderer/template_renderer.rb",
"method": "render_with_layout",
"source": {
"73": "\n",
"74": " body = if layout\n",
"75": " ActiveSupport::Notifications.instrument(\"render_layout.action_view\", identifier: layout.identifier) do\n",
"76": " view.view_flow.set(:layout, yield(layout))\n",
"77": " layout.render(view, locals) { |*name| view._layout_for(*name) }\n"
}
},
{
"number": "59",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/renderer/template_renderer.rb",
"method": "render_template",
"source": {
"57": " # supplied as well.\n",
"58": " def render_template(view, template, layout_name, locals)\n",
"59": " render_with_layout(view, template, layout_name, locals) do |layout|\n",
"60": " ActiveSupport::Notifications.instrument(\n",
"61": " \"render_template.action_view\",\n"
}
},
{
"number": "11",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/renderer/template_renderer.rb",
"method": "render",
"source": {
"9": " prepend_formats(template.format)\n",
"10": "\n",
"11": " render_template(context, template, options[:layout], options[:locals] || {})\n",
"12": " end\n",
"13": "\n"
}
},
{
"number": "63",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/renderer/renderer.rb",
"method": "render_template_to_object",
"source": {
"61": "\n",
"62": " def render_template_to_object(context, options) # :nodoc:\n",
"63": " TemplateRenderer.new(@lookup_context).render(context, options)\n",
"64": " end\n",
"65": "\n"
}
},
{
"number": "31",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/renderer/renderer.rb",
"method": "render_to_object",
"source": {
"29": " render_partial_to_object(context, options)\n",
"30": " else\n",
"31": " render_template_to_object(context, options)\n",
"32": " end\n",
"33": " end\n"
}
},
{
"number": "135",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/rendering.rb",
"method": "block in _render_template",
"source": {
"133": "\n",
"134": " rendered_template = context.in_rendering_context(options) do |renderer|\n",
"135": " renderer.render_to_object(context, options)\n",
"136": " end\n",
"137": "\n"
}
},
{
"number": "290",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/base.rb",
"method": "in_rendering_context",
"source": {
"288": " end\n",
"289": "\n",
"290": " yield @view_renderer\n",
"291": " ensure\n",
"292": " @view_renderer = old_view_renderer\n"
}
},
{
"number": "134",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/rendering.rb",
"method": "_render_template",
"source": {
"132": " lookup_context.variants = variant if variant\n",
"133": "\n",
"134": " rendered_template = context.in_rendering_context(options) do |renderer|\n",
"135": " renderer.render_to_object(context, options)\n",
"136": " end\n"
}
},
{
"number": "256",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_controller/metal/streaming.rb",
"method": "_render_template",
"source": {
"254": " Body.new view_renderer.render_body(view_context, options)\n",
"255": " else\n",
"256": " super\n",
"257": " end\n",
"258": " end\n"
}
},
{
"number": "121",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/rendering.rb",
"method": "render_to_body",
"source": {
"119": " def render_to_body(options = {})\n",
"120": " _process_options(options)\n",
"121": " _render_template(options)\n",
"122": " end\n",
"123": "\n"
}
},
{
"number": "158",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_controller/metal/rendering.rb",
"method": "render_to_body",
"source": {
"156": "\n",
"157": " def render_to_body(options = {}) # :nodoc:\n",
"158": " super || _render_in_priorities(options) || \" \"\n",
"159": " end\n",
"160": "\n"
}
},
{
"number": "141",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_controller/metal/renderers.rb",
"method": "render_to_body",
"source": {
"139": " # <tt>ActionView::Rendering.render_to_body</tt>, if present.\n",
"140": " def render_to_body(options)\n",
"141": " _render_to_body_with_renderer(options) || super\n",
"142": " end\n",
"143": "\n"
}
},
{
"number": "27",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/abstract_controller/rendering.rb",
"method": "render",
"source": {
"25": " def render(*args, &block)\n",
"26": " options = _normalize_render(*args, &block)\n",
"27": " rendered_body = render_to_body(options)\n",
"28": " if options[:html]\n",
"29": " _set_html_content_type\n"
}
},
{
"number": "139",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_controller/metal/rendering.rb",
"method": "render",
"source": {
"137": " def render(*args)\n",
"138": " raise ::AbstractController::DoubleRenderError if response_body\n",
"139": " super\n",
"140": " end\n",
"141": "\n"
}
},
{
"number": "29",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_controller/metal/instrumentation.rb",
"method": "block (2 levels) in render",
"source": {
"27": " render_output = nil\n",
"28": " self.view_runtime = cleanup_view_runtime do\n",
"29": " Benchmark.ms { render_output = super }\n",
"30": " end\n",
"31": " render_output\n"
}
},
{
"number": "311",
"file": "/usr/local/rvm/rubies/ruby-3.2.2/lib/ruby/3.2.0/benchmark.rb",
"method": "realtime",
"source": {
"309": " def realtime # :yield:\n",
"310": " r0 = Process.clock_gettime(Process::CLOCK_MONOTONIC)\n",
"311": " yield\n",
"312": " Process.clock_gettime(Process::CLOCK_MONOTONIC) - r0\n",
"313": " end\n"
}
},
{
"number": "14",
"file": "[GEM_ROOT]/gems/activesupport-7.1.4/lib/active_support/core_ext/benchmark.rb",
"method": "ms",
"source": {
"12": " # # => 0.074\n",
"13": " def ms(&block)\n",
"14": " 1000 * realtime(&block)\n",
"15": " end\n",
"16": "end\n"
}
},
{
"number": "29",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_controller/metal/instrumentation.rb",
"method": "block in render",
"source": {
"27": " render_output = nil\n",
"28": " self.view_runtime = cleanup_view_runtime do\n",
"29": " Benchmark.ms { render_output = super }\n",
"30": " end\n",
"31": " render_output\n"
}
},
{
"number": "98",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_controller/metal/instrumentation.rb",
"method": "cleanup_view_runtime",
"source": {
"96": " # end\n",
"97": " def cleanup_view_runtime # :doc:\n",
"98": " yield\n",
"99": " end\n",
"100": "\n"
}
},
{
"number": "39",
"file": "[GEM_ROOT]/gems/activerecord-7.1.4/lib/active_record/railties/controller_runtime.rb",
"method": "cleanup_view_runtime",
"source": {
"37": " db_rt_before_render = ActiveRecord::RuntimeRegistry.reset\n",
"38": " self.db_runtime = (db_runtime || 0) + db_rt_before_render\n",
"39": " runtime = super\n",
"40": " queries_rt = ActiveRecord::RuntimeRegistry.sql_runtime - ActiveRecord::RuntimeRegistry.async_sql_runtime\n",
"41": " db_rt_after_render = ActiveRecord::RuntimeRegistry.reset\n"
}
},
{
"number": "28",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_controller/metal/instrumentation.rb",
"method": "render",
"source": {
"26": " def render(*)\n",
"27": " render_output = nil\n",
"28": " self.view_runtime = cleanup_view_runtime do\n",
"29": " Benchmark.ms { render_output = super }\n",
"30": " end\n"
}
},
{
"number": "37",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_controller/metal/implicit_render.rb",
"method": "default_render",
"source": {
"35": " def default_render\n",
"36": " if template_exists?(action_name.to_s, _prefixes, variants: request.variant)\n",
"37": " render\n",
"38": " elsif any_templates?(action_name.to_s, _prefixes)\n",
"39": " message = \"#{self.class.name}\\##{action_name} is missing a template \" \\\n"
}
},
{
"number": "7",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_controller/metal/basic_implicit_render.rb",
"method": "send_action",
"source": {
"5": " def send_action(method, *args)\n",
"6": " ret = super\n",
"7": " default_render unless performed?\n",
"8": " ret\n",
"9": " end\n"
}
},
{
"number": "224",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/abstract_controller/base.rb",
"method": "process_action",
"source": {
"222": " # which is *not* necessarily the same as the action name.\n",
"223": " def process_action(...)\n",
"224": " send_action(...)\n",
"225": " end\n",
"226": "\n"
}
},
{
"number": "165",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_controller/metal/rendering.rb",
"method": "process_action",
"source": {
"163": " def process_action(*) # :nodoc:\n",
"164": " self.formats = request.formats.filter_map(&:ref)\n",
"165": " super\n",
"166": " end\n",
"167": "\n"
}
},
{
"number": "259",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/abstract_controller/callbacks.rb",
"method": "block in process_action",
"source": {
"257": " def process_action(...)\n",
"258": " run_callbacks(:process_action) do\n",
"259": " super\n",
"260": " end\n",
"261": " end\n"
}
},
{
"number": "121",
"file": "[GEM_ROOT]/gems/activesupport-7.1.4/lib/active_support/callbacks.rb",
"method": "block in run_callbacks",
"source": {
"119": " current.invoke_before(env)\n",
"120": " if current.final?\n",
"121": " env.value = !env.halted && (!block_given? || yield)\n",
"122": " elsif current.skip?(env)\n",
"123": " (skipped ||= []) << current\n"
}
},
{
"number": "23",
"file": "[GEM_ROOT]/gems/actiontext-7.1.4/lib/action_text/rendering.rb",
"method": "with_renderer",
"source": {
"21": " previous_renderer = self.renderer\n",
"22": " self.renderer = renderer\n",
"23": " yield\n",
"24": " ensure\n",
"25": " self.renderer = previous_renderer\n"
}
},
{
"number": "69",
"file": "[GEM_ROOT]/gems/actiontext-7.1.4/lib/action_text/engine.rb",
"method": "block (4 levels) in <class:Engine>",
"source": {
"67": " ActiveSupport.on_load(base) do\n",
"68": " around_action do |controller, action|\n",
"69": " ActionText::Content.with_renderer(controller, &action)\n",
"70": " end\n",
"71": " end\n"
}
},
{
"number": "130",
"file": "[GEM_ROOT]/gems/activesupport-7.1.4/lib/active_support/callbacks.rb",
"method": "instance_exec",
"source": {
"128": " begin\n",
"129": " target, block, method, *arguments = current.expand_call_template(env, invoke_sequence)\n",
"130": " target.send(method, *arguments, &block)\n",
"131": " ensure\n",
"132": " next_sequence = current\n"
}
},
{
"number": "130",
"file": "[GEM_ROOT]/gems/activesupport-7.1.4/lib/active_support/callbacks.rb",
"method": "block in run_callbacks",
"source": {
"128": " begin\n",
"129": " target, block, method, *arguments = current.expand_call_template(env, invoke_sequence)\n",
"130": " target.send(method, *arguments, &block)\n",
"131": " ensure\n",
"132": " next_sequence = current\n"
}
},
{
"number": "141",
"file": "[GEM_ROOT]/gems/activesupport-7.1.4/lib/active_support/callbacks.rb",
"method": "run_callbacks",
"source": {
"139": " end\n",
"140": "\n",
"141": " invoke_sequence.call\n",
"142": " end\n",
"143": " end\n"
}
},
{
"number": "258",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/abstract_controller/callbacks.rb",
"method": "process_action",
"source": {
"256": " # <tt>process_action</tt> callbacks around the normal behavior.\n",
"257": " def process_action(...)\n",
"258": " run_callbacks(:process_action) do\n",
"259": " super\n",
"260": " end\n"
}
},
{
"number": "25",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_controller/metal/rescue.rb",
"method": "process_action",
"source": {
"23": " private\n",
"24": " def process_action(*)\n",
"25": " super\n",
"26": " rescue Exception => exception\n",
"27": " request.env[\"action_dispatch.show_detailed_exceptions\"] ||= show_detailed_exceptions?\n"
}
},
{
"number": "74",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_controller/metal/instrumentation.rb",
"method": "block in process_action",
"source": {
"72": "\n",
"73": " ActiveSupport::Notifications.instrument(\"process_action.action_controller\", raw_payload) do |payload|\n",
"74": " result = super\n",
"75": " payload[:response] = response\n",
"76": " payload[:status] = response.status\n"
}
},
{
"number": "206",
"file": "[GEM_ROOT]/gems/activesupport-7.1.4/lib/active_support/notifications.rb",
"method": "block in instrument",
"source": {
"204": " def instrument(name, payload = {})\n",
"205": " if notifier.listening?(name)\n",
"206": " instrumenter.instrument(name, payload) { yield payload if block_given? }\n",
"207": " else\n",
"208": " yield payload if block_given?\n"
}
},
{
"number": "58",
"file": "[GEM_ROOT]/gems/activesupport-7.1.4/lib/active_support/notifications/instrumenter.rb",
"method": "instrument",
"source": {
"56": " handle.start\n",
"57": " begin\n",
"58": " yield payload if block_given?\n",
"59": " rescue Exception => e\n",
"60": " payload[:exception] = [e.class.name, e.message]\n"
}
},
{
"number": "206",
"file": "[GEM_ROOT]/gems/activesupport-7.1.4/lib/active_support/notifications.rb",
"method": "instrument",
"source": {
"204": " def instrument(name, payload = {})\n",
"205": " if notifier.listening?(name)\n",
"206": " instrumenter.instrument(name, payload) { yield payload if block_given? }\n",
"207": " else\n",
"208": " yield payload if block_given?\n"
}
},
{
"number": "73",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_controller/metal/instrumentation.rb",
"method": "process_action",
"source": {
"71": " ActiveSupport::Notifications.instrument(\"start_processing.action_controller\", raw_payload)\n",
"72": "\n",
"73": " ActiveSupport::Notifications.instrument(\"process_action.action_controller\", raw_payload) do |payload|\n",
"74": " result = super\n",
"75": " payload[:response] = response\n"
}
},
{
"number": "261",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_controller/metal/params_wrapper.rb",
"method": "process_action",
"source": {
"259": " def process_action(*)\n",
"260": " _perform_parameter_wrapping if _wrapper_enabled?\n",
"261": " super\n",
"262": " end\n",
"263": "\n"
}
},
{
"number": "32",
"file": "[GEM_ROOT]/gems/activerecord-7.1.4/lib/active_record/railties/controller_runtime.rb",
"method": "process_action",
"source": {
"30": " # and it won't be cleaned up by the method below.\n",
"31": " ActiveRecord::RuntimeRegistry.reset\n",
"32": " super\n",
"33": " end\n",
"34": "\n"
}
},
{
"number": "160",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/abstract_controller/base.rb",
"method": "process",
"source": {
"158": " @_response_body = nil\n",
"159": "\n",
"160": " process_action(action_name, *args)\n",
"161": " end\n",
"162": " ruby2_keywords(:process)\n"
}
},
{
"number": "40",
"file": "[GEM_ROOT]/gems/actionview-7.1.4/lib/action_view/rendering.rb",
"method": "process",
"source": {
"38": " def process(...) # :nodoc:\n",
"39": " old_config, I18n.config = I18n.config, I18nProxy.new(I18n.config, lookup_context)\n",
"40": " super\n",
"41": " ensure\n",
"42": " I18n.config = old_config\n"
}
},
{
"number": "227",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_controller/metal.rb",
"method": "dispatch",
"source": {
"225": " set_request!(request)\n",
"226": " set_response!(response)\n",
"227": " process(name)\n",
"228": " request.commit_flash\n",
"229": " to_a\n"
}
},
{
"number": "309",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_controller/metal.rb",
"method": "dispatch",
"source": {
"307": " middleware_stack.build(name) { |env| new.dispatch(name, req, res) }.call req.env\n",
"308": " else\n",
"309": " new.dispatch(name, req, res)\n",
"310": " end\n",
"311": " end\n"
}
},
{
"number": "49",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/routing/route_set.rb",
"method": "dispatch",
"source": {
"47": "\n",
"48": " def dispatch(controller, action, req, res)\n",
"49": " controller.dispatch(action, req, res)\n",
"50": " end\n",
"51": " end\n"
}
},
{
"number": "32",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/routing/route_set.rb",
"method": "serve",
"source": {
"30": " controller = controller req\n",
"31": " res = controller.make_response! req\n",
"32": " dispatch(controller, params[:action], req, res)\n",
"33": " rescue ActionController::RoutingError\n",
"34": " if @raise_on_name_error\n"
}
},
{
"number": "51",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/journey/router.rb",
"method": "block in serve",
"source": {
"49": " req.route_uri_pattern = route.path.spec.to_s\n",
"50": "\n",
"51": " _, headers, _ = response = route.app.serve(req)\n",
"52": "\n",
"53": " if \"pass\" == headers[Constants::X_CASCADE]\n"
}
},
{
"number": "131",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/journey/router.rb",
"method": "block in find_routes",
"source": {
"129": " path_parameters[name.to_sym] = Utils.unescape_uri(val) if val\n",
"130": " }\n",
"131": " yield [match_data, path_parameters, r]\n",
"132": " }\n",
"133": " end\n"
}
},
{
"number": "124",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/journey/router.rb",
"method": "each",
"source": {
"122": " routes.sort_by!(&:precedence)\n",
"123": "\n",
"124": " routes.each { |r|\n",
"125": " match_data = r.path.match(path_info)\n",
"126": " path_parameters = {}\n"
}
},
{
"number": "124",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/journey/router.rb",
"method": "find_routes",
"source": {
"122": " routes.sort_by!(&:precedence)\n",
"123": "\n",
"124": " routes.each { |r|\n",
"125": " match_data = r.path.match(path_info)\n",
"126": " path_parameters = {}\n"
}
},
{
"number": "32",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/journey/router.rb",
"method": "serve",
"source": {
"30": "\n",
"31": " def serve(req)\n",
"32": " find_routes(req) do |match, parameters, route|\n",
"33": " set_params = req.path_parameters\n",
"34": " path_info = req.path_info\n"
}
},
{
"number": "882",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/routing/route_set.rb",
"method": "call",
"source": {
"880": " req = make_request(env)\n",
"881": " req.path_info = Journey::Router::Utils.normalize_path(req.path_info)\n",
"882": " @router.serve(req)\n",
"883": " end\n",
"884": "\n"
}
},
{
"number": "536",
"file": "[GEM_ROOT]/gems/railties-7.1.4/lib/rails/engine.rb",
"method": "call",
"source": {
"534": " def call(env)\n",
"535": " req = build_request env\n",
"536": " app.call req.env\n",
"537": " end\n",
"538": "\n"
}
},
{
"number": "226",
"file": "[GEM_ROOT]/gems/railties-7.1.4/lib/rails/railtie.rb",
"method": "public_send",
"source": {
"224": " def method_missing(name, *args, &block)\n",
"225": " if !abstract_railtie? && instance.respond_to?(name)\n",
"226": " instance.public_send(name, *args, &block)\n",
"227": " else\n",
"228": " super\n"
}
},
{
"number": "226",
"file": "[GEM_ROOT]/gems/railties-7.1.4/lib/rails/railtie.rb",
"method": "method_missing",
"source": {
"224": " def method_missing(name, *args, &block)\n",
"225": " if !abstract_railtie? && instance.respond_to?(name)\n",
"226": " instance.public_send(name, *args, &block)\n",
"227": " else\n",
"228": " super\n"
}
},
{
"number": "31",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/routing/mapper.rb",
"method": "block in <class:Constraints>",
"source": {
"29": "\n",
"30": " SERVE = ->(app, req) { app.serve req }\n",
"31": " CALL = ->(app, req) { app.call req.env }\n",
"32": "\n",
"33": " def initialize(app, constraints, strategy)\n"
}
},
{
"number": "60",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/routing/mapper.rb",
"method": "serve",
"source": {
"58": " return [ 404, { Constants::X_CASCADE => \"pass\" }, [] ] unless matches?(req)\n",
"59": "\n",
"60": " @strategy.call @app, req\n",
"61": " end\n",
"62": "\n"
}
},
{
"number": "51",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/journey/router.rb",
"method": "block in serve",
"source": {
"49": " req.route_uri_pattern = route.path.spec.to_s\n",
"50": "\n",
"51": " _, headers, _ = response = route.app.serve(req)\n",
"52": "\n",
"53": " if \"pass\" == headers[Constants::X_CASCADE]\n"
}
},
{
"number": "131",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/journey/router.rb",
"method": "block in find_routes",
"source": {
"129": " path_parameters[name.to_sym] = Utils.unescape_uri(val) if val\n",
"130": " }\n",
"131": " yield [match_data, path_parameters, r]\n",
"132": " }\n",
"133": " end\n"
}
},
{
"number": "124",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/journey/router.rb",
"method": "each",
"source": {
"122": " routes.sort_by!(&:precedence)\n",
"123": "\n",
"124": " routes.each { |r|\n",
"125": " match_data = r.path.match(path_info)\n",
"126": " path_parameters = {}\n"
}
},
{
"number": "124",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/journey/router.rb",
"method": "find_routes",
"source": {
"122": " routes.sort_by!(&:precedence)\n",
"123": "\n",
"124": " routes.each { |r|\n",
"125": " match_data = r.path.match(path_info)\n",
"126": " path_parameters = {}\n"
}
},
{
"number": "32",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/journey/router.rb",
"method": "serve",
"source": {
"30": "\n",
"31": " def serve(req)\n",
"32": " find_routes(req) do |match, parameters, route|\n",
"33": " set_params = req.path_parameters\n",
"34": " path_info = req.path_info\n"
}
},
{
"number": "882",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/routing/route_set.rb",
"method": "call",
"source": {
"880": " req = make_request(env)\n",
"881": " req.path_info = Journey::Router::Utils.normalize_path(req.path_info)\n",
"882": " @router.serve(req)\n",
"883": " end\n",
"884": "\n"
}
},
{
"number": "103",
"file": "[GEM_ROOT]/gems/rack-attack-6.7.0/lib/rack/attack.rb",
"method": "call",
"source": {
"101": "\n",
"102": " def call(env)\n",
"103": " return @app.call(env) if !self.class.enabled || env[\"rack.attack.called\"]\n",
"104": "\n",
"105": " env[\"rack.attack.called\"] = true\n"
}
},
{
"number": "110",
"file": "[GEM_ROOT]/gems/rack-attack-6.7.0/lib/rack/attack.rb",
"method": "call",
"source": {
"108": "\n",
"109": " if configuration.safelisted?(request)\n",
"110": " @app.call(env)\n",
"111": " elsif configuration.blocklisted?(request)\n",
"112": " # Deprecated: Keeping blocklisted_response for backwards compatibility\n"
}
},
{
"number": "36",
"file": "[GEM_ROOT]/gems/warden-1.2.9/lib/warden/manager.rb",
"method": "block in call",
"source": {
"34": " result = catch(:warden) do\n",
"35": " env['warden'].on_request\n",
"36": " @app.call(env)\n",
"37": " end\n",
"38": "\n"
}
},
{
"number": "34",
"file": "[GEM_ROOT]/gems/warden-1.2.9/lib/warden/manager.rb",
"method": "catch",
"source": {
"32": "\n",
"33": " env['warden'] = Proxy.new(env, self)\n",
"34": " result = catch(:warden) do\n",
"35": " env['warden'].on_request\n",
"36": " @app.call(env)\n"
}
},
{
"number": "34",
"file": "[GEM_ROOT]/gems/warden-1.2.9/lib/warden/manager.rb",
"method": "call",
"source": {
"32": "\n",
"33": " env['warden'] = Proxy.new(env, self)\n",
"34": " result = catch(:warden) do\n",
"35": " env['warden'].on_request\n",
"36": " @app.call(env)\n"
}
},
{
"number": "20",
"file": "[GEM_ROOT]/gems/rack-3.1.7/lib/rack/tempfile_reaper.rb",
"method": "call",
"source": {
"18": "\n",
"19": " begin\n",
"20": " _, _, body = response = @app.call(env)\n",
"21": " rescue Exception\n",
"22": " env[RACK_TEMPFILES]&.each(&:close!)\n"
}
},
{
"number": "29",
"file": "[GEM_ROOT]/gems/rack-3.1.7/lib/rack/etag.rb",
"method": "call",
"source": {
"27": "\n",
"28": " def call(env)\n",
"29": " status, headers, body = response = @app.call(env)\n",
"30": "\n",
"31": " if etag_status?(status) && body.respond_to?(:to_ary) && !skip_caching?(headers)\n"
}
},
{
"number": "31",
"file": "[GEM_ROOT]/gems/rack-3.1.7/lib/rack/conditional_get.rb",
"method": "call",
"source": {
"29": " case env[REQUEST_METHOD]\n",
"30": " when \"GET\", \"HEAD\"\n",
"31": " status, headers, body = response = @app.call(env)\n",
"32": "\n",
"33": " if status == 200 && fresh?(env, headers)\n"
}
},
{
"number": "15",
"file": "[GEM_ROOT]/gems/rack-3.1.7/lib/rack/head.rb",
"method": "call",
"source": {
"13": "\n",
"14": " def call(env)\n",
"15": " _, _, body = response = @app.call(env)\n",
"16": "\n",
"17": " if env[REQUEST_METHOD] == HEAD\n"
}
},
{
"number": "36",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/http/permissions_policy.rb",
"method": "call",
"source": {
"34": "\n",
"35": " def call(env)\n",
"36": " _, headers, _ = response = @app.call(env)\n",
"37": "\n",
"38": " return response if policy_present?(headers)\n"
}
},
{
"number": "33",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/http/content_security_policy.rb",
"method": "call",
"source": {
"31": "\n",
"32": " def call(env)\n",
"33": " status, headers, _ = response = @app.call(env)\n",
"34": "\n",
"35": " # Returning CSP headers with a 304 Not Modified is harmful, since nonces in the new\n"
}
},
{
"number": "272",
"file": "[GEM_ROOT]/gems/rack-session-2.0.0/lib/rack/session/abstract/id.rb",
"method": "context",
"source": {
"270": " req = make_request env\n",
"271": " prepare_session(req)\n",
"272": " status, headers, body = app.call(req.env)\n",
"273": " res = Rack::Response::Raw.new status, headers\n",
"274": " commit_session(req, res)\n"
}
},
{
"number": "266",
"file": "[GEM_ROOT]/gems/rack-session-2.0.0/lib/rack/session/abstract/id.rb",
"method": "call",
"source": {
"264": "\n",
"265": " def call(env)\n",
"266": " context(env)\n",
"267": " end\n",
"268": "\n"
}
},
{
"number": "689",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/middleware/cookies.rb",
"method": "call",
"source": {
"687": " def call(env)\n",
"688": " request = ActionDispatch::Request.new(env)\n",
"689": " response = @app.call(env)\n",
"690": "\n",
"691": " if request.have_cookie_jar?\n"
}
},
{
"number": "29",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/middleware/callbacks.rb",
"method": "block in call",
"source": {
"27": " error = nil\n",
"28": " result = run_callbacks :call do\n",
"29": " @app.call(env)\n",
"30": " rescue => error\n",
"31": " end\n"
}
},
{
"number": "101",
"file": "[GEM_ROOT]/gems/activesupport-7.1.4/lib/active_support/callbacks.rb",
"method": "run_callbacks",
"source": {
"99": "\n",
"100": " if callbacks.empty?\n",
"101": " yield if block_given?\n",
"102": " else\n",
"103": " env = Filters::Environment.new(self, false, nil)\n"
}
},
{
"number": "28",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/middleware/callbacks.rb",
"method": "call",
"source": {
"26": " def call(env)\n",
"27": " error = nil\n",
"28": " result = run_callbacks :call do\n",
"29": " @app.call(env)\n",
"30": " rescue => error\n"
}
},
{
"number": "154",
"file": "[GEM_ROOT]/gems/rack-timeout-0.7.0/lib/rack/timeout/core.rb",
"method": "block in call",
"source": {
"152": "\n",
"153": " response = timeout.timeout(info.timeout) do # perform request with timeout\n",
"154": " begin @app.call(env) # boom, send request down the middleware chain\n",
"155": " rescue RequestTimeoutException => e # will actually hardly ever get to this point because frameworks tend to catch this. see README for more\n",
"156": " raise RequestTimeoutError.new(env), e.message, e.backtrace # but in case it does get here, re-raise RequestTimeoutException as RequestTimeoutError\n"
}
},
{
"number": "19",
"file": "[GEM_ROOT]/gems/rack-timeout-0.7.0/lib/rack/timeout/support/timeout.rb",
"method": "timeout",
"source": {
"17": " thr = Thread.current # reference to current thread to be used in timeout thread\n",
"18": " job = @scheduler.run_in(secs) { @on_timeout.call thr } # schedule this thread to be timed out; should get cancelled if block completes on time\n",
"19": " return block.call # do what you gotta do\n",
"20": " ensure #\n",
"21": " job.cancel! if job # cancel the scheduled timeout job; if the block completed on time, this\n"
}
},
{
"number": "153",
"file": "[GEM_ROOT]/gems/rack-timeout-0.7.0/lib/rack/timeout/core.rb",
"method": "call",
"source": {
"151": " end\n",
"152": "\n",
"153": " response = timeout.timeout(info.timeout) do # perform request with timeout\n",
"154": " begin @app.call(env) # boom, send request down the middleware chain\n",
"155": " rescue RequestTimeoutException => e # will actually hardly ever get to this point because frameworks tend to catch this. see README for more\n"
}
},
{
"number": "29",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/middleware/debug_exceptions.rb",
"method": "call",
"source": {
"27": "\n",
"28": " def call(env)\n",
"29": " _, headers, body = response = @app.call(env)\n",
"30": "\n",
"31": " if headers[Constants::X_CASCADE] == \"pass\"\n"
}
},
{
"number": "31",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/middleware/show_exceptions.rb",
"method": "call",
"source": {
"29": "\n",
"30": " def call(env)\n",
"31": " @app.call(env)\n",
"32": " rescue Exception => exception\n",
"33": " request = ActionDispatch::Request.new env\n"
}
},
{
"number": "37",
"file": "[GEM_ROOT]/gems/railties-7.1.4/lib/rails/rack/logger.rb",
"method": "call_app",
"source": {
"35": "\n",
"36": " logger.info { started_request_message(request) }\n",
"37": " status, headers, body = response = @app.call(env)\n",
"38": " body = ::Rack::BodyProxy.new(body, &handle.method(:finish))\n",
"39": "\n"
}
},
{
"number": "24",
"file": "[GEM_ROOT]/gems/railties-7.1.4/lib/rails/rack/logger.rb",
"method": "block in call",
"source": {
"22": "\n",
"23": " if logger.respond_to?(:tagged)\n",
"24": " logger.tagged(*compute_tags(request)) { call_app(request, env) }\n",
"25": " else\n",
"26": " call_app(request, env)\n"
}
},
{
"number": "139",
"file": "[GEM_ROOT]/gems/activesupport-7.1.4/lib/active_support/tagged_logging.rb",
"method": "block in tagged",
"source": {
"137": " def tagged(*tags)\n",
"138": " if block_given?\n",
"139": " formatter.tagged(*tags) { yield self }\n",
"140": " else\n",
"141": " logger = ActiveSupport::TaggedLogging.new(self)\n"
}
},
{
"number": "39",
"file": "[GEM_ROOT]/gems/activesupport-7.1.4/lib/active_support/tagged_logging.rb",
"method": "tagged",
"source": {
"37": " def tagged(*tags)\n",
"38": " pushed_count = tag_stack.push_tags(tags).size\n",
"39": " yield self\n",
"40": " ensure\n",
"41": " pop_tags(pushed_count)\n"
}
},
{
"number": "139",
"file": "[GEM_ROOT]/gems/activesupport-7.1.4/lib/active_support/tagged_logging.rb",
"method": "tagged",
"source": {
"137": " def tagged(*tags)\n",
"138": " if block_given?\n",
"139": " formatter.tagged(*tags) { yield self }\n",
"140": " else\n",
"141": " logger = ActiveSupport::TaggedLogging.new(self)\n"
}
},
{
"number": "241",
"file": "[GEM_ROOT]/gems/activesupport-7.1.4/lib/active_support/broadcast_logger.rb",
"method": "method_missing",
"source": {
"239": " super(name, *args, **kwargs, &block)\n",
"240": " elsif loggers.one?\n",
"241": " loggers.first.send(name, *args, **kwargs, &block)\n",
"242": " else\n",
"243": " loggers.map { |logger| logger.send(name, *args, **kwargs, &block) }\n"
}
},
{
"number": "24",
"file": "[GEM_ROOT]/gems/railties-7.1.4/lib/rails/rack/logger.rb",
"method": "call",
"source": {
"22": "\n",
"23": " if logger.respond_to?(:tagged)\n",
"24": " logger.tagged(*compute_tags(request)) { call_app(request, env) }\n",
"25": " else\n",
"26": " call_app(request, env)\n"
}
},
{
"number": "92",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/middleware/remote_ip.rb",
"method": "call",
"source": {
"90": " req = ActionDispatch::Request.new env\n",
"91": " req.remote_ip = GetIp.new(req, check_ip, proxies)\n",
"92": " @app.call(req.env)\n",
"93": " end\n",
"94": "\n"
}
},
{
"number": "19",
"file": "[GEM_ROOT]/gems/request_store-1.7.0/lib/request_store/middleware.rb",
"method": "call",
"source": {
"17": " RequestStore.begin!\n",
"18": "\n",
"19": " status, headers, body = @app.call(env)\n",
"20": "\n",
"21": " body = Rack::BodyProxy.new(body) do\n"
}
},
{
"number": "28",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/middleware/request_id.rb",
"method": "call",
"source": {
"26": " req = ActionDispatch::Request.new env\n",
"27": " req.request_id = make_request_id(req.headers[@header])\n",
"28": " @app.call(env).tap { |_status, headers, _body| headers[@header] = req.request_id }\n",
"29": " end\n",
"30": "\n"
}
},
{
"number": "28",
"file": "[GEM_ROOT]/gems/rack-3.1.7/lib/rack/method_override.rb",
"method": "call",
"source": {
"26": " end\n",
"27": "\n",
"28": " @app.call(env)\n",
"29": " end\n",
"30": "\n"
}
},
{
"number": "24",
"file": "[GEM_ROOT]/gems/rack-3.1.7/lib/rack/runtime.rb",
"method": "call",
"source": {
"22": " def call(env)\n",
"23": " start_time = Utils.clock_time\n",
"24": " _, headers, _ = response = @app.call(env)\n",
"25": "\n",
"26": " request_time = Utils.clock_time - start_time\n"
}
},
{
"number": "29",
"file": "[GEM_ROOT]/gems/activesupport-7.1.4/lib/active_support/cache/strategy/local_cache_middleware.rb",
"method": "call",
"source": {
"27": " def call(env)\n",
"28": " LocalCacheRegistry.set_cache_for(local_cache_key, LocalStore.new)\n",
"29": " response = @app.call(env)\n",
"30": " response[2] = ::Rack::BodyProxy.new(response[2]) do\n",
"31": " LocalCacheRegistry.set_cache_for(local_cache_key, nil)\n"
}
},
{
"number": "14",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/middleware/executor.rb",
"method": "call",
"source": {
"12": " state = @executor.run!(reset: true)\n",
"13": " begin\n",
"14": " response = @app.call(env)\n",
"15": "\n",
"16": " if env[\"action_dispatch.report_exception\"]\n"
}
},
{
"number": "25",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/middleware/static.rb",
"method": "call",
"source": {
"23": "\n",
"24": " def call(env)\n",
"25": " @file_handler.attempt(env) || @app.call(env)\n",
"26": " end\n",
"27": " end\n"
}
},
{
"number": "114",
"file": "[GEM_ROOT]/gems/rack-3.1.7/lib/rack/sendfile.rb",
"method": "call",
"source": {
"112": "\n",
"113": " def call(env)\n",
"114": " _, headers, body = response = @app.call(env)\n",
"115": "\n",
"116": " if body.respond_to?(:to_path)\n"
}
},
{
"number": "79",
"file": "[GEM_ROOT]/gems/actionpack-7.1.4/lib/action_dispatch/middleware/ssl.rb",
"method": "call",
"source": {
"77": "\n",
"78": " if request.ssl?\n",
"79": " @app.call(env).tap do |status, headers, body|\n",
"80": " set_hsts_header! headers\n",
"81": " flag_cookies_as_secure! headers if @secure_cookies && !@exclude.call(request)\n"
}
},
{
"number": "8",
"file": "[GEM_ROOT]/gems/slowpoke-0.5.0/lib/slowpoke/middleware.rb",
"method": "call",
"source": {
"6": "\n",
"7": " def call(env)\n",
"8": " @app.call(env)\n",
"9": " ensure\n",
"10": " # extremely important\n"
}
},
{
"number": "536",
"file": "[GEM_ROOT]/gems/railties-7.1.4/lib/rails/engine.rb",
"method": "call",
"source": {
"534": " def call(env)\n",
"535": " req = build_request env\n",
"536": " app.call req.env\n",
"537": " end\n",
"538": "\n"
}
},
{
"number": "107",
"file": "/usr/lib/ruby/vendor_ruby/phusion_passenger/rack/thread_handler_extension.rb",
"method": "process_request",
"source": {
"105": "\n",
"106": " begin\n",
"107": " status, headers, body = @app.call(env)\n",
"108": " rescue => e\n",
"109": " if e.is_a?(Errno::ENOBUFS)\n"
}
},
{
"number": "149",
"file": "/usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler/thread_handler.rb",
"method": "accept_and_process_next_request",
"source": {
"147": " begin\n",
"148": " if headers[REQUEST_METHOD] == GET\n",
"149": " process_request(headers, connection, socket_wrapper, @protocol == :http)\n",
"150": " elsif headers[REQUEST_METHOD] == PING\n",
"151": " process_ping(headers, connection)\n"
}
},
{
"number": "110",
"file": "/usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler/thread_handler.rb",
"method": "main_loop",
"source": {
"108": " finish_callback.call\n",
"109": " while true\n",
"110": " hijacked = accept_and_process_next_request(socket_wrapper, channel, buffer)\n",
"111": " socket_wrapper = Utils::UnseekableSocket.new if hijacked\n",
"112": " end\n"
}
},
{
"number": "419",
"file": "/usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler.rb",
"method": "block (3 levels) in start_threads",
"source": {
"417": " handler = thread_handler.new(self, main_socket_options)\n",
"418": " handler.install\n",
"419": " handler.main_loop(set_initialization_state_to_true)\n",
"420": " ensure\n",
"421": " set_initialization_state.call(false)\n"
}
},
{
"number": "113",
"file": "/usr/lib/ruby/vendor_ruby/phusion_passenger/utils.rb",
"method": "block in create_thread_and_abort_on_exception",
"source": {
"111": " Thread.current.abort_on_exception = true\n",
"112": " begin\n",
"113": " yield(*args)\n",
"114": " rescue SystemExit\n",
"115": " raise\n"
}
}
]
Backtrace
View full backtrace and more info at honeybadger.io