Merge pull request #50964 from Shopify/ruby-head-route-location

Improve routes source location detection
This commit is contained in:
Jean Boussier 2024-02-05 16:52:11 +01:00 committed by GitHub
commit 2c5fe6fa7a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 48 additions and 14 deletions

View File

@ -66,7 +66,6 @@ module ActionDispatch
ActionDispatch::Cookies::CookieJar.always_write_cookie = config.action_dispatch.always_write_cookie
ActionDispatch::Routing::Mapper.route_source_locations = Rails.env.development?
ActionDispatch::Routing::Mapper.backtrace_cleaner = Rails.backtrace_cleaner
ActionDispatch.test_app = app
end

View File

@ -10,10 +10,19 @@ require "action_dispatch/routing/endpoint"
module ActionDispatch
module Routing
class Mapper
class BacktraceCleaner < ActiveSupport::BacktraceCleaner # :nodoc:
def initialize
super
remove_silencers!
add_core_silencer
add_stdlib_silencer
end
end
URL_OPTIONS = [:protocol, :subdomain, :domain, :host, :port]
cattr_accessor :route_source_locations, instance_accessor: false, default: false
cattr_accessor :backtrace_cleaner, instance_accessor: false, default: ActiveSupport::BacktraceCleaner.new
cattr_accessor :backtrace_cleaner, instance_accessor: false, default: BacktraceCleaner.new
class Constraints < Routing::Endpoint # :nodoc:
attr_reader :app, :constraints
@ -366,11 +375,10 @@ module ActionDispatch
Thread.each_caller_location do |location|
next if location.path.start_with?(action_dispatch_dir)
if cleaned_path = Mapper.backtrace_cleaner.clean_frame(location.path)
return "#{cleaned_path}:#{location.lineno}"
else
return nil
end
cleaned_path = Mapper.backtrace_cleaner.clean_frame(location.path)
next if cleaned_path.nil?
return "#{cleaned_path}:#{location.lineno}"
end
nil
end
@ -382,11 +390,10 @@ module ActionDispatch
caller_locations.each do |location|
next if location.path.start_with?(action_dispatch_dir)
if cleaned_path = Mapper.backtrace_cleaner.clean_frame(location.path)
return "#{cleaned_path}:#{location.lineno}"
else
return nil
end
cleaned_path = Mapper.backtrace_cleaner.clean_frame(location.path)
next if cleaned_path.nil?
return "#{cleaned_path}:#{location.lineno}"
end
nil
end

View File

@ -10,9 +10,11 @@ module Rails
def initialize
super
@root = "#{Rails.root}/"
add_filter do |line|
line.start_with?(@root) ? line.from(@root.size) : line
# We may be called before Rails.root is assigned.
# When that happens we fallback to not truncating.
@root ||= Rails.root && "#{Rails.root}/"
@root && line.start_with?(@root) ? line.from(@root.size) : line
end
add_filter do |line|
if RENDER_TEMPLATE_PATTERN.match?(line)

View File

@ -242,127 +242,153 @@ rails_conductor_inbound_email_incinerate POST /rails/conductor/action_mailbox/:i
run_routes_command([ "--expanded" ])
end
rails_gem_root = File.expand_path("../../../../", __FILE__)
assert_equal <<~MESSAGE, output
--[ Route 1 ]--------------
Prefix | cart
Verb | GET
URI | /cart(.:format)
Controller#Action | cart#show
Source Location | #{app_path}/config/routes.rb:2
--[ Route 2 ]--------------
Prefix | rails_postmark_inbound_emails
Verb | POST
URI | /rails/action_mailbox/postmark/inbound_emails(.:format)
Controller#Action | action_mailbox/ingresses/postmark/inbound_emails#create
Source Location | #{rails_gem_root}/actionmailbox/config/routes.rb:5
--[ Route 3 ]--------------
Prefix | rails_relay_inbound_emails
Verb | POST
URI | /rails/action_mailbox/relay/inbound_emails(.:format)
Controller#Action | action_mailbox/ingresses/relay/inbound_emails#create
Source Location | #{rails_gem_root}/actionmailbox/config/routes.rb:6
--[ Route 4 ]--------------
Prefix | rails_sendgrid_inbound_emails
Verb | POST
URI | /rails/action_mailbox/sendgrid/inbound_emails(.:format)
Controller#Action | action_mailbox/ingresses/sendgrid/inbound_emails#create
Source Location | #{rails_gem_root}/actionmailbox/config/routes.rb:7
--[ Route 5 ]--------------
Prefix | rails_mandrill_inbound_health_check
Verb | GET
URI | /rails/action_mailbox/mandrill/inbound_emails(.:format)
Controller#Action | action_mailbox/ingresses/mandrill/inbound_emails#health_check
Source Location | #{rails_gem_root}/actionmailbox/config/routes.rb:10
--[ Route 6 ]--------------
Prefix | rails_mandrill_inbound_emails
Verb | POST
URI | /rails/action_mailbox/mandrill/inbound_emails(.:format)
Controller#Action | action_mailbox/ingresses/mandrill/inbound_emails#create
Source Location | #{rails_gem_root}/actionmailbox/config/routes.rb:11
--[ Route 7 ]--------------
Prefix | rails_mailgun_inbound_emails
Verb | POST
URI | /rails/action_mailbox/mailgun/inbound_emails/mime(.:format)
Controller#Action | action_mailbox/ingresses/mailgun/inbound_emails#create
Source Location | #{rails_gem_root}/actionmailbox/config/routes.rb:14
--[ Route 8 ]--------------
Prefix | rails_conductor_inbound_emails
Verb | GET
URI | /rails/conductor/action_mailbox/inbound_emails(.:format)
Controller#Action | rails/conductor/action_mailbox/inbound_emails#index
Source Location | #{rails_gem_root}/actionmailbox/config/routes.rb:19
--[ Route 9 ]--------------
Prefix |#{" "}
Verb | POST
URI | /rails/conductor/action_mailbox/inbound_emails(.:format)
Controller#Action | rails/conductor/action_mailbox/inbound_emails#create
Source Location | #{rails_gem_root}/actionmailbox/config/routes.rb:19
--[ Route 10 ]-------------
Prefix | new_rails_conductor_inbound_email
Verb | GET
URI | /rails/conductor/action_mailbox/inbound_emails/new(.:format)
Controller#Action | rails/conductor/action_mailbox/inbound_emails#new
Source Location | #{rails_gem_root}/actionmailbox/config/routes.rb:19
--[ Route 11 ]-------------
Prefix | rails_conductor_inbound_email
Verb | GET
URI | /rails/conductor/action_mailbox/inbound_emails/:id(.:format)
Controller#Action | rails/conductor/action_mailbox/inbound_emails#show
Source Location | #{rails_gem_root}/actionmailbox/config/routes.rb:19
--[ Route 12 ]-------------
Prefix | new_rails_conductor_inbound_email_source
Verb | GET
URI | /rails/conductor/action_mailbox/inbound_emails/sources/new(.:format)
Controller#Action | rails/conductor/action_mailbox/inbound_emails/sources#new
Source Location | #{rails_gem_root}/actionmailbox/config/routes.rb:20
--[ Route 13 ]-------------
Prefix | rails_conductor_inbound_email_sources
Verb | POST
URI | /rails/conductor/action_mailbox/inbound_emails/sources(.:format)
Controller#Action | rails/conductor/action_mailbox/inbound_emails/sources#create
Source Location | #{rails_gem_root}/actionmailbox/config/routes.rb:21
--[ Route 14 ]-------------
Prefix | rails_conductor_inbound_email_reroute
Verb | POST
URI | /rails/conductor/action_mailbox/:inbound_email_id/reroute(.:format)
Controller#Action | rails/conductor/action_mailbox/reroutes#create
Source Location | #{rails_gem_root}/actionmailbox/config/routes.rb:23
--[ Route 15 ]-------------
Prefix | rails_conductor_inbound_email_incinerate
Verb | POST
URI | /rails/conductor/action_mailbox/:inbound_email_id/incinerate(.:format)
Controller#Action | rails/conductor/action_mailbox/incinerates#create
Source Location | #{rails_gem_root}/actionmailbox/config/routes.rb:24
--[ Route 16 ]-------------
Prefix | rails_service_blob
Verb | GET
URI | /rails/active_storage/blobs/redirect/:signed_id/*filename(.:format)
Controller#Action | active_storage/blobs/redirect#show
Source Location | #{rails_gem_root}/activestorage/config/routes.rb:5
--[ Route 17 ]-------------
Prefix | rails_service_blob_proxy
Verb | GET
URI | /rails/active_storage/blobs/proxy/:signed_id/*filename(.:format)
Controller#Action | active_storage/blobs/proxy#show
Source Location | #{rails_gem_root}/activestorage/config/routes.rb:6
--[ Route 18 ]-------------
Prefix |#{" "}
Verb | GET
URI | /rails/active_storage/blobs/:signed_id/*filename(.:format)
Controller#Action | active_storage/blobs/redirect#show
Source Location | #{rails_gem_root}/activestorage/config/routes.rb:7
--[ Route 19 ]-------------
Prefix | rails_blob_representation
Verb | GET
URI | /rails/active_storage/representations/redirect/:signed_blob_id/:variation_key/*filename(.:format)
Controller#Action | active_storage/representations/redirect#show
Source Location | #{rails_gem_root}/activestorage/config/routes.rb:9
--[ Route 20 ]-------------
Prefix | rails_blob_representation_proxy
Verb | GET
URI | /rails/active_storage/representations/proxy/:signed_blob_id/:variation_key/*filename(.:format)
Controller#Action | active_storage/representations/proxy#show
Source Location | #{rails_gem_root}/activestorage/config/routes.rb:10
--[ Route 21 ]-------------
Prefix |#{" "}
Verb | GET
URI | /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format)
Controller#Action | active_storage/representations/redirect#show
Source Location | #{rails_gem_root}/activestorage/config/routes.rb:11
--[ Route 22 ]-------------
Prefix | rails_disk_service
Verb | GET
URI | /rails/active_storage/disk/:encoded_key/*filename(.:format)
Controller#Action | active_storage/disk#show
Source Location | #{rails_gem_root}/activestorage/config/routes.rb:13
--[ Route 23 ]-------------
Prefix | update_rails_disk_service
Verb | PUT
URI | /rails/active_storage/disk/:encoded_token(.:format)
Controller#Action | active_storage/disk#update
Source Location | #{rails_gem_root}/activestorage/config/routes.rb:14
--[ Route 24 ]-------------
Prefix | rails_direct_uploads
Verb | POST
URI | /rails/active_storage/direct_uploads(.:format)
Controller#Action | active_storage/direct_uploads#create
Source Location | #{rails_gem_root}/activestorage/config/routes.rb:15
MESSAGE
end