Sha256: a52c225cf51c973a28cf14d97fb61a2e6b54b7b5d2c7db2ce3e0b090acb6470f

Contents?: true

Size: 1.42 KB

Versions: 2

Compression:

Stored size: 1.42 KB

Contents

require 'set'

require_relative "st_validation/version"
require_relative "st_validation/errors"
require_relative 'st_validation/validator_factory'

Dir[File.join(__dir__, 'st_validation', 'validators', '*.rb')].each { |file| require file }

module StValidation
  class << self
    def build(blueprint)
      basic_factory.build(blueprint)
    end

    def with_extra_transformations(*transformations)
      all_transformations = transformations + basic_transformations
      StValidation::ValidatorFactory.new(all_transformations)
    end

    def basic_factory
      StValidation::ValidatorFactory.new(basic_transformations)
    end

    private

    def basic_transformations
      [
        ->(bp, _factory) { bp.is_a?(Class) ? class_validator(bp) : bp },
        ->(bp, factory) { bp.is_a?(Set) ? union_validator(bp, factory) : bp },
        ->(bp, factory) { bp.is_a?(Hash) ? hash_validator(bp, factory) : bp },
        ->(bp, factory) { bp.is_a?(Array) && bp.size == 1 ? array_validator(bp[0], factory) : bp }
      ]
    end

    def class_validator(klass)
      Validators::ClassValidator.new(klass)
    end

    def union_validator(blueprint, factory)
      Validators::UnionValidator.new(blueprint, factory)
    end

    def array_validator(blueprint, factory)
      Validators::ArrayValidator.new(blueprint, factory)
    end

    def hash_validator(blueprint, factory)
      Validators::HashValidator.new(blueprint, factory)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
st_validation-0.2.0 lib/st_validation.rb
st_validation-0.1.0 lib/st_validation.rb