module Bosh::Director::ValidationHelper

Public Instance Methods

safe_property(hash, property, options = {}) click to toggle source
# File lib/bosh/director/validation_helper.rb, line 3
def safe_property(hash, property, options = {})

  if options.has_key?(:default) && !options[:default].nil?
    validate_property(property, options, options[:default], DefaultPropertyValidationMessage.new)
  end

  if !hash.nil? && !hash.kind_of?(Hash)
    raise Bosh::Director::ValidationInvalidType, "Object (#{hash.inspect}) did not match the required type 'Hash'"
  elsif !hash.nil? && hash.has_key?(property)
    return validate_property(property, options, hash[property], PropertyValidationMessage.new)
  elsif options.has_key?(:default)
    return options[:default]
  elsif !options[:optional]
    raise ValidationMissingField, "Required property '#{property}' was not specified in object (#{hash.inspect})"
  end
end

Private Instance Methods

validate_property(property, options, result, validation_message) click to toggle source
# File lib/bosh/director/validation_helper.rb, line 22
def validate_property(property, options, result, validation_message)
  if options.has_key?(:class)
    required_type = options[:class]
    if required_type == :boolean
      unless result.kind_of?(TrueClass) || result.kind_of?(FalseClass)
        raise ValidationInvalidType, validation_message.invalid_type(property, required_type, result)
      end
    elsif !result.kind_of?(required_type)
      if required_type == String && result.kind_of?(Numeric)
        result = result.to_s
      else
        raise ValidationInvalidType, validation_message.invalid_type(property, required_type, result)
      end
    end
  end

  if options[:min] && result < options[:min]
    raise ValidationViolatedMin, validation_message.invalid_min(options, property, result)
  end

  if options[:max] && result > options[:max]
    raise ValidationViolatedMax, validation_message.invalid_max(options, property, result)
  end

  result
end