Sha256: 935d707281ff521007197f0b020cfeb19c3d4bbab9e5368b62525269e6879fb0

Contents?: true

Size: 1.57 KB

Versions: 27

Compression:

Stored size: 1.57 KB

Contents

module Deltacloud::Validation

  class Failure < StandardError
    attr_reader :param
    def initialize(param, msg='')
      super(msg)
      @param = param
    end

    def name
      param.name
    end
  end

  class Param
    attr_reader :name, :klass, :type, :options, :description

    def initialize(args)
      @name = args[0]
      @klass = args[1] || :string
      @type = args[2] || :optional
      @options = args[3] || []
      @description = args[4] || ''
    end

    def required?
      type.eql?(:required)
    end

    def optional?
      type.eql?(:optional)
    end
  end

  def param(*args)
    raise DuplicateParamException if params[args[0]]
    p = Param.new(args)
    params[p.name] = p
  end

  def params
    @params ||= {}
    @params
  end

  # Add the parameters in hash +new+ to already existing parameters. If
  # +new+ contains a parameter with an already existing name, the old
  # definition is clobbered.
  def add_params(new)
    # We do not check for duplication on purpose: multiple calls
    # to add_params should be cumulative
    new.each { |p|  @params[p.name] = p }
  end

  def each_param(&block)
    params.each_value { |p| yield p }
  end

  def validate(values)
    each_param do |p|
      if p.required? and not values[p.name]
        raise Failure.new(p, "Required parameter #{p.name} not found")
      end
      if values[p.name] and not p.options.empty? and
          not p.options.include?(values[p.name])
        raise Failure.new(p, "Parameter #{p.name} has value #{values[p.name]} which is not in #{p.options.join(", ")}")
      end
    end
  end
end

Version data entries

27 entries across 27 versions & 3 rubygems

Version Path
steamcannon-deltacloud-core-0.1.1.3 lib/deltacloud/validation.rb
steamcannon-deltacloud-core-0.1.1.2 lib/deltacloud/validation.rb
steamcannon-deltacloud-core-0.1.1.1 lib/deltacloud/validation.rb
deltacloud-core-0.1.1 lib/deltacloud/validation.rb
deltacloud-core-0.1.0 lib/deltacloud/validation.rb
deltacloud-core-0.0.9 lib/deltacloud/validation.rb
steamcannon-deltacloud-core-0.0.8.1-java lib/deltacloud/validation.rb
steamcannon-deltacloud-core-0.0.8.1 lib/deltacloud/validation.rb
deltacloud-core-0.0.8 lib/deltacloud/validation.rb
steamcannon-deltacloud-core-0.0.7.2 lib/deltacloud/validation.rb
steamcannon-deltacloud-core-0.0.7.2-java lib/deltacloud/validation.rb
steamcannon-deltacloud-core-0.0.7.1 lib/deltacloud/validation.rb
steamcannon-deltacloud-core-0.0.7.1-java lib/deltacloud/validation.rb
deltacloud-core-0.0.7 lib/deltacloud/validation.rb
bbrowning-deltacloud-core-0.0.6.1-java lib/deltacloud/validation.rb
bbrowning-deltacloud-core-0.0.6-java lib/deltacloud/validation.rb
bbrowning-deltacloud-core-0.0.6 lib/deltacloud/validation.rb
deltacloud-core-0.0.6 lib/deltacloud/validation.rb
bbrowning-deltacloud-core-0.0.4 lib/deltacloud/validation.rb
bbrowning-deltacloud-core-0.0.4-java lib/deltacloud/validation.rb