Sha256: c00b8e821d1f8639bd16089c387feb9a505e974050d2cb2ad3257dfa896237d6
Contents?: true
Size: 1.85 KB
Versions: 3
Compression:
Stored size: 1.85 KB
Contents
# encoding: utf-8 # 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.type != :sym } 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
3 entries across 3 versions & 2 rubygems