diaspora/diaspora_federation

View on GitHub
lib/diaspora_federation/validators/optional_aware_validator.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
# frozen_string_literal: true

module DiasporaFederation
  module Validators
    # Abstract validator which only validates optional fields when they are not nil.
    class OptionalAwareValidator < Validation::Validator
      def rules
        super.reject do |field, rules|
          @obj.public_send(field).nil? &&
            !rules.map(&:class).include?(Validation::Rule::NotNil) &&
            optional_props.include?(field)
        end
      end

      private

      def optional_props
        return [] unless @obj.class.respond_to?(:optional_props)

        @obj.class.optional_props
      end
    end
  end
end