Class: RuboCop::Cop::Rails::RootPathnameMethods
- Inherits:
-
Base
- Object
- Base
- RuboCop::Cop::Rails::RootPathnameMethods
- Extended by:
- AutoCorrector
- Includes:
- RangeHelp
- Defined in:
- lib/rubocop/cop/rails/root_pathname_methods.rb
Overview
Use ‘Rails.root` IO methods instead of passing it to `File`.
‘Rails.root` is an instance of `Pathname` so we can apply many IO methods directly.
This cop works best when used together with ‘Style/FileRead`, `Style/FileWrite` and `Rails/RootJoinChain`.
Constant Summary collapse
- MSG =
'`%<rails_root>s` is a `Pathname` so you can just append `#%<method>s`.'
- DIR_METHODS =
%i[children delete each_child empty? entries exist? glob mkdir open rmdir unlink].to_set.freeze
- FILE_METHODS =
%i[ atime basename binread binwrite birthtime blockdev? chardev? chmod chown ctime delete directory? dirname empty? executable? executable_real? exist? expand_path extname file? fnmatch fnmatch? ftype grpowned? join lchmod lchown lstat mtime open owned? pipe? read readable? readable_real? readlines readlink realdirpath realpath rename setgid? setuid? size size? socket? split stat sticky? symlink? sysopen truncate unlink utime world_readable? world_writable? writable? writable_real? write zero? ].to_set.freeze
- FILE_TEST_METHODS =
%i[ blockdev? chardev? directory? empty? executable? executable_real? exist? file? grpowned? owned? pipe? readable? readable_real? setgid? setuid? size size? socket? sticky? symlink? world_readable? world_writable? writable? writable_real? zero? ].to_set.freeze
- FILE_UTILS_METHODS =
%i[chmod chown mkdir mkpath rmdir rmtree].to_set.freeze
- RESTRICT_ON_SEND =
(DIR_METHODS + FILE_METHODS + FILE_TEST_METHODS + FILE_UTILS_METHODS).to_set.freeze
Instance Method Summary collapse
Instance Method Details
#on_send(node) ⇒ Object
163 164 165 166 167 168 169 170 171 172 173 174 175 |
# File 'lib/rubocop/cop/rails/root_pathname_methods.rb', line 163 def on_send(node) evidence(node) do |method, path, args, rails_root| add_offense(node, message: format(MSG, method: method, rails_root: rails_root.source)) do |corrector| replacement = if dir_glob?(node) build_path_glob_replacement(path, method) else build_path_replacement(path, method, args) end corrector.replace(node, replacement) end end end |
#rails_root?(node) ⇒ Object
159 160 161 |
# File 'lib/rubocop/cop/rails/root_pathname_methods.rb', line 159 def_node_matcher :rails_root?, <<~PATTERN (send (const {nil? cbase} :Rails) {:root :public_path}) PATTERN |