Open
Description
I'm trying to use Rails.root to remove it from an absolute filepath to result in a filepath relative to Rails.root.
my_abs_path = "/Users/me/rails_app/config/locales/text_en.yml"
expected_relative_result = "config/locales/text_en.yml"
my_abs_path.delete_prefix("#{Rails.root}/") == expected_relative_result
# => true
Expected behavior
# this should be allowed by Rails/FilePath cop because the last / in /Users/me/rails_app/ must be deleted, not just /Users/me/rails_app
my_abs_path.delete_prefix("#{Rails.root}/")
Actual behavior
my_abs_path.delete_prefix("#{Rails.root}/")
# raises Rails/FilePath, and is autocorrected to
my_abs_path.delete_prefix("#{Rails.root.join('')}")
# which raises Style/RedundantInterpolation, so we manually correct to
my_abs_path.delete_prefix(Rails.root.join('').to_s)
# which is wrong:
actual = my_abs_path.delete_prefix(Rails.root.join('').to_s)
actual == expected_relative_result
# => false
puts actual
# => "/config/locales/text_en.yml"
# so we try giving an argument to join, but still wrong because Rails.root.join never adds a trailing slash:
actual = my_abs_path.delete_prefix(Rails.root.join('./').to_s)
actual == expected_relative_result
# => false
puts actual
# => "/config/locales/text_en.yml"
Steps to reproduce the problem
Copy the below into a file, run RuboCop with autocorrect enabled and manually fix any other cops that are raised, then assert that the result is true.
rubocop-rails-filepath-test.rb
# where Rails.root is /Users/me/rails_app
my_abs_path = "/Users/me/rails_app/config/locales/text_en.yml"
expected_relative_result = "config/locales/text_en.yml"
actual = my_abs_path.delete_prefix("#{Rails.root}/")
if actual != expected_relative_result
raise "Invalid autocorrection: #{actual.inspect} != #{expected_relative_result.inspect}"
end
rubocop -a rubocop-rails-filepath-test.rb
rubocop -A rubocop-rails-filepath-test.rb # autofix Style/RedundantInterpolation
bin/rails c < rubocop-rails-filepath-test.rb
RuboCop version
1.57.2 (using Parser 3.2.2.4, rubocop-ast 1.30.0, running on ruby 3.0.6) [arm64-darwin21]
- rubocop-rails 2.22.1
- rubocop-rspec 2.18.1
Metadata
Metadata
Assignees
Labels
No labels