Module: LogBrew::Validation

Defined in:
lib/logbrew.rb

Class Method Summary collapse

Class Method Details

.numeric_nan?(value) ⇒ Boolean

Returns:

  • (Boolean)


736
737
738
# File 'lib/logbrew.rb', line 736

def numeric_nan?(value)
  value.is_a?(Float) && (value.nan? || value.infinite?)
end

.read(attributes, key) ⇒ Object



726
727
728
729
730
# File 'lib/logbrew.rb', line 726

def read(attributes, key)
  return nil unless attributes.is_a?(Hash)

  attributes[key] || attributes[key.to_sym]
end

.require_allowed_value(label, value, allowed_values) ⇒ Object

Raises:



676
677
678
679
680
681
# File 'lib/logbrew.rb', line 676

def require_allowed_value(label, value, allowed_values)
  require_non_empty(label, value)
  return if allowed_values.include?(value)

  raise SdkError.new("validation_error", "#{label} must be one of: #{allowed_values.join(', ')}")
end

.require_finite_number(label, value) ⇒ Object

Raises:



717
718
719
720
721
722
723
724
# File 'lib/logbrew.rb', line 717

def require_finite_number(label, value)
  unless value.is_a?(Integer) || value.is_a?(Float)
    raise SdkError.new("validation_error", "#{label} must be a finite number")
  end
  raise SdkError.new("validation_error", "#{label} must be a finite number") if numeric_nan?(value)

  value
end

.require_metadata(metadata) ⇒ Object

Raises:



697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
# File 'lib/logbrew.rb', line 697

def ()
  return nil if .nil?
  raise SdkError.new("validation_error", "metadata must be an object") unless .is_a?(Hash)

  .each_with_object({}) do |(key, value), copied|
    normalized_key = key.to_s
    require_non_empty("metadata key", normalized_key)
    unless value.nil? || value.is_a?(String) || value.is_a?(Integer) || value.is_a?(Float) ||
           value == true || value == false
      raise SdkError.new(
        "validation_error",
        "metadata value for #{normalized_key} must be a string, number, boolean, or null"
      )
    end
    raise SdkError.new("validation_error", "metadata value for #{normalized_key} must be finite") if numeric_nan?(value)

    copied[normalized_key] = value
  end
end

.require_non_empty(label, value) ⇒ Object

Raises:



670
671
672
673
674
# File 'lib/logbrew.rb', line 670

def require_non_empty(label, value)
  return if value.is_a?(String) && !value.strip.empty?

  raise SdkError.new("validation_error", "#{label} must be non-empty")
end

.require_timestamp(timestamp) ⇒ Object



683
684
685
686
687
688
689
690
691
692
693
694
695
# File 'lib/logbrew.rb', line 683

def require_timestamp(timestamp)
  require_non_empty("timestamp", timestamp)
  return if timestamp.end_with?("Z")

  time_parts = timestamp.split("T", 2)
  raise timestamp_error(timestamp) if time_parts.length < 2

  time_portion = time_parts[1]
  return if time_portion.include?("+")
  return if time_portion.rindex("-") && time_portion.rindex("-").positive?

  raise timestamp_error(timestamp)
end

.timestamp_error(timestamp) ⇒ Object



732
733
734
# File 'lib/logbrew.rb', line 732

def timestamp_error(timestamp)
  SdkError.new("validation_error", "timestamp must include a timezone offset: #{timestamp}")
end