class RuboCop::Cop::Rails::RootPublicPath
Rails.public_path.join(‘file.pdf’)
Rails.public_path.join(‘file.pdf’)
Rails.public_path
# good
Rails.root.join(‘public’, ‘file.pdf’)
Rails.root.join(‘public/file.pdf’)
Rails.root.join(‘public’)
# bad
@example
Favor ‘Rails.public_path` over `Rails.root` with `’public’‘
def on_send(node)
def on_send(node) return unless (rails, maybe_public_path, other_args = rails_root_public(node)) add_offense(node) do |corrector| first_args = maybe_public_path.gsub(PATTERN, '') args = other_args.map(&:source) args.unshift("'#{first_args}'") unless first_args.empty? replacement = "#{rails.source}.public_path" replacement += ".join(#{args.join(', ')})" unless args.empty? corrector.replace(node, replacement) end end
def public_path?(string)
def public_path?(string) PATTERN.match?(string) end