Sha256: c6ca28a0f19628990c95155a12c6f3ddc44417c50ce16ac3dc70efb9b0144cd8

Contents?: true

Size: 683 Bytes

Versions: 1

Compression:

Stored size: 683 Bytes

Contents

# frozen_string_literal: true

require "solid/validators"

class SingletonValidator < ActiveModel::EachValidator
  def validate_each(model, attribute, value)
    with_option = Array.wrap(options[:with] || options[:in])

    return model.errors.add(attribute, options[:message] || "is not a class or module") unless value.is_a?(Module)

    return if with_option.any? do |type|
      raise ArgumentError, "#{type.inspect} is not a class or module" unless type.is_a?(Module)

      value == type || (value < type || value.is_a?(type))
    end

    message = "is not #{with_option.map(&:name).join(" | ")}"

    Solid::Validators.add_error(model, attribute, message, options)
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
solid-process-0.4.0 lib/solid/validators/singleton_validator.rb