Sha256: 02a3e722438c1b0d1f20a2866eb319ae9365ae0408701807d7f2531191a1de6b

Contents?: true

Size: 904 Bytes

Versions: 2

Compression:

Stored size: 904 Bytes

Contents

require "active_record_doctor/tasks/base"

module ActiveRecordDoctor
  module Tasks
    class IncorrectBooleanPresenceValidation < Base
      def run
        eager_load!

        success(hash_from_pairs(models.reject do |model|
          model.table_name.nil? || model.table_name == 'schema_migrations'
        end.map do |model|
          [
            model.name,
            connection.columns(model.table_name).select do |column|
              column.type == :boolean &&
                has_presence_validator?(model, column)
            end.map(&:name)
          ]
        end.reject do |model_name, columns|
          columns.empty?
        end))
      end

      private

      def has_presence_validator?(model, column)
        model.validators.any? do |validator|
          validator.kind == :presence && validator.attributes.include?(column.name.to_sym)
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
active_record_doctor-1.7.1 lib/active_record_doctor/tasks/incorrect_boolean_presence_validation.rb
active_record_doctor-1.7.0 lib/active_record_doctor/tasks/incorrect_boolean_presence_validation.rb