Sha256: 2925901e986a9f29d2614bcf56d7d41752eba6c6b8226566e4fbf21f6a94a00b

Contents?: true

Size: 1 KB

Versions: 4

Compression:

Stored size: 1 KB

Contents

module HaveAPI::Client
  module Validators; end

  class Validator
    class << self
      def name(v)
        Validator.register(v, self)
      end

      def register(name, klass)
        @validators ||= {}
        @validators[name] = klass
      end

      def validate(validators, param, other_params)
        ret = []

        validators.each do |name, desc|
          raise "unsupported validator '#{name}'" if @validators[name].nil?

          v = @validators[name].new(desc, param, other_params)
          ret.concat(v.errors) unless v.valid?
        end

        ret.empty? ? true : ret
      end
    end

    attr_reader :value, :params

    def initialize(opts, value, other_params)
      @opts = opts
      @value = value
      @params = other_params.params
    end

    def errors
      @errors || [format(opts[:message], value: value)]
    end

    def valid?
      raise NotImplementedError
    end

    protected

    attr_reader :opts

    def error(e)
      @errors ||= []
      @errors << e
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
haveapi-client-0.25.0 lib/haveapi/client/validator.rb
haveapi-client-0.24.0 lib/haveapi/client/validator.rb
haveapi-client-0.23.7 lib/haveapi/client/validator.rb
haveapi-client-0.23.6 lib/haveapi/client/validator.rb