Sha256: c3d49e2be337499cef4ce3dc92889c4b7d2183ed53ba57e37c546326a2dca117

Contents?: true

Size: 1.02 KB

Versions: 3

Compression:

Stored size: 1.02 KB

Contents

# frozen_string_literal: true

module Attribool
  ##
  # A simple interface to run validators, which should implement a +valid?+
  # method which returns true if conditions are valid, and an +error+ method
  # which returns an exception class and message to be raised when validations
  # fail.
  class ValidatorService
    ##
    # Run the validator.
    #
    # @param [Symbol] validator_name
    #
    # @param [Object] *args to be forwarded to validator
    def self.call(validator_name, *args)
      new(::Attribool::Validators.fetch(validator_name), *args).validate
    end

    ##
    # Construct the service and inject the validator.
    #
    # @param [Class] Validator
    #
    # @param [Object] *args
    def initialize(validator, *args)
      @validator = validator.new(*args)
    end

    ##
    # Raises the validator's exception unless its conditions are met.
    #
    # @return [Boolean]
    #
    # @raise [Exception] if validation fails
    def validate
      @validator.valid? || raise(@validator.error)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
attribool-2.0.5 lib/attribool/validator_service.rb
attribool-2.0.4 lib/attribool/validator_service.rb
attribool-2.0.3 lib/attribool/validator_service.rb