Sha256: 3c01bf033cb9775e3aed5490c14263756e8b7660195a8f4e3ba1af9df0282404
Contents?: true
Size: 1.83 KB
Versions: 13
Compression:
Stored size: 1.83 KB
Contents
# frozen_string_literal: true module RuboCop module Cop module Rails # This cop checks for the use of old-style attribute validation macros. class Validation < Cop MSG = 'Prefer the new style validations `%s` over `%s`.'.freeze TYPES = %w( acceptance confirmation exclusion format inclusion length numericality presence size uniqueness ).freeze BLACKLIST = TYPES.map { |p| "validates_#{p}_of".to_sym }.freeze WHITELIST = TYPES.map { |p| "validates :column, #{p}: value" }.freeze def on_send(node) receiver, method_name, *_args = *node return unless receiver.nil? && BLACKLIST.include?(method_name) add_offense(node, :selector, format(MSG, preferred_method(method_name), method_name)) end private def preferred_method(method) WHITELIST[BLACKLIST.index(method.to_sym)] end def autocorrect(node) lambda do |corrector| corrector.replace(node.loc.selector, 'validates') correct_validate_type(corrector, node) end end def correct_validate_type(corrector, node) _receiver, method_name, *args = *node options = args.find { |arg| !arg.sym_type? } validate_type = method_name.to_s.split('_')[1] if options corrector.replace(options.loc.expression, "#{validate_type}: { #{options.source} }") else corrector.insert_after(node.loc.expression, ", #{validate_type}: true") end end end end end end
Version data entries
13 entries across 13 versions & 2 rubygems