module Bashly::ValidationHelpers

This is a `ConfigValidator` concern responsible for providing basic assertion methods.

Protected Instance Methods

assert(valid, message) click to toggle source
# File lib/bashly/concerns/validation_helpers.rb, line 7
def assert(valid, message)
  raise ConfigurationError, message unless valid
end
assert_array(key, value, of: nil) click to toggle source
# File lib/bashly/concerns/validation_helpers.rb, line 27
def assert_array(key, value, of: nil)
  return unless value

  assert value.is_a?(Array), "#{key} must be an array"
  return unless of

  value.each_with_index do |val, i|
    send :"assert_#{of}", "#{key}[#{i}]", val
  end
end
assert_boolean(key, value) click to toggle source
# File lib/bashly/concerns/validation_helpers.rb, line 23
def assert_boolean(key, value)
  assert [true, false, nil].include?(value), "#{key} must be a boolean"
end
assert_hash(key, value, keys: nil) click to toggle source
# File lib/bashly/concerns/validation_helpers.rb, line 38
def assert_hash(key, value, keys: nil)
  assert value.is_a?(Hash), "#{key} must be a hash"

  return unless keys

  invalid_keys = (value.keys.map(&:to_sym) - keys).reject { |k| k.start_with? 'x_' }
  assert invalid_keys.empty?, "#{key} contains invalid options: #{invalid_keys.join ', '}"
end
assert_optional_string(key, value) click to toggle source
# File lib/bashly/concerns/validation_helpers.rb, line 19
def assert_optional_string(key, value)
  assert_string key, value if value
end
assert_string(key, value) click to toggle source
# File lib/bashly/concerns/validation_helpers.rb, line 15
def assert_string(key, value)
  assert value.is_a?(String), "#{key} must be a string"
end
assert_string_or_array(key, value) click to toggle source
# File lib/bashly/concerns/validation_helpers.rb, line 60
def assert_string_or_array(key, value)
  return unless value

  assert [Array, String].include?(value.class),
    "#{key} must be a string or an array"

  assert_array key, value, of: :string if value.is_a? Array
end
assert_uniq(key, value, array_keys) click to toggle source
# File lib/bashly/concerns/validation_helpers.rb, line 47
def assert_uniq(key, value, array_keys)
  return unless value

  array_keys = [array_keys] unless array_keys.is_a? Array
  list = []
  array_keys.each do |array_key|
    list += value.filter_map { |c| c[array_key] }.flatten
  end

  nonuniqs = list.nonuniq
  assert nonuniqs.empty?, "#{key} contains non-unique elements (#{nonuniqs.join ', '}) in #{array_keys.join ' or '}"
end
refute(invalid, message) click to toggle source
# File lib/bashly/concerns/validation_helpers.rb, line 11
def refute(invalid, message)
  assert !invalid, message
end