Module: Julewire::Core::Validation

Defined in:
lib/julewire/core/validation.rb

Class Method Summary collapse

Class Method Details

.valid_integer_limit?(value, positive:) ⇒ Boolean

Returns:

  • (Boolean)


61
62
63
# File 'lib/julewire/core/validation.rb', line 61

def valid_integer_limit?(value, positive:)
  positive ? value.positive? : value >= 0
end

.valid_numeric_timeout?(timeout) ⇒ Boolean

Returns:

  • (Boolean)


55
56
57
58
59
# File 'lib/julewire/core/validation.rb', line 55

def valid_numeric_timeout?(timeout)
  timeout.is_a?(Numeric) && timeout.finite? && timeout >= 0
rescue StandardError
  false
end

.validate_byte_limit!(value, name:) ⇒ Object



8
9
10
11
12
13
14
# File 'lib/julewire/core/validation.rb', line 8

def validate_byte_limit!(value, name:)
  return if value.nil?

  validate_integer_limit!(value, name: name, positive: true)
rescue ArgumentError
  raise ArgumentError, "#{name} must be nil or a positive Integer"
end

.validate_callable!(value, name:, allow_nil: false) ⇒ Object

Raises:

  • (ArgumentError)


27
28
29
30
31
32
# File 'lib/julewire/core/validation.rb', line 27

def validate_callable!(value, name:, allow_nil: false)
  return if allow_nil && value.nil?
  return if value.respond_to?(:call)

  raise ArgumentError, "#{name} must respond to #call"
end

.validate_integer_limit!(value, name:, positive: false) ⇒ Object

Raises:

  • (ArgumentError)


20
21
22
23
24
25
# File 'lib/julewire/core/validation.rb', line 20

def validate_integer_limit!(value, name:, positive: false)
  return value if value.is_a?(Integer) && valid_integer_limit?(value, positive: positive)

  qualifier = positive ? "positive" : "non-negative"
  raise ArgumentError, "#{name} must be a #{qualifier} Integer"
end

.validate_non_negative_integer!(value, name:) ⇒ Object



16
17
18
# File 'lib/julewire/core/validation.rb', line 16

def validate_non_negative_integer!(value, name:)
  validate_integer_limit!(value, name: name)
end

.validate_options!(options, allowed_keys, name:) ⇒ Object

Raises:

  • (ArgumentError)


34
35
36
37
38
39
# File 'lib/julewire/core/validation.rb', line 34

def validate_options!(options, allowed_keys, name:)
  unknown_options = options.keys - allowed_keys
  return if unknown_options.empty?

  raise ArgumentError, "unknown #{name} options: #{unknown_options.join(", ")}"
end

.validate_symbol_choice!(value, name:, choices:) ⇒ Object

Raises:

  • (ArgumentError)


41
42
43
44
45
46
# File 'lib/julewire/core/validation.rb', line 41

def validate_symbol_choice!(value, name:, choices:)
  choice = value.to_sym if value.respond_to?(:to_sym)
  return choice if choices.include?(choice)

  raise ArgumentError, "#{name} must be one of: #{choices.join(", ")}"
end

.validate_timeout!(timeout, name:) ⇒ Object

Raises:

  • (ArgumentError)


48
49
50
51
52
53
# File 'lib/julewire/core/validation.rb', line 48

def validate_timeout!(timeout, name:)
  return if timeout.nil?
  return if valid_numeric_timeout?(timeout)

  raise ArgumentError, "#{name} must be nil or a non-negative finite Numeric"
end