Module: LogBrew::Validation

Defined in:
lib/logbrew.rb

Class Method Summary collapse

Class Method Details

.numeric_nan?(value) ⇒ Boolean

Returns:

  • (Boolean)


712
713
714
# File 'lib/logbrew.rb', line 712

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

.read(attributes, key) ⇒ Object



702
703
704
705
706
# File 'lib/logbrew.rb', line 702

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:



661
662
663
664
665
666
# File 'lib/logbrew.rb', line 661

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_metadata(metadata) ⇒ Object

Raises:



682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
# File 'lib/logbrew.rb', line 682

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:



655
656
657
658
659
# File 'lib/logbrew.rb', line 655

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



668
669
670
671
672
673
674
675
676
677
678
679
680
# File 'lib/logbrew.rb', line 668

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



708
709
710
# File 'lib/logbrew.rb', line 708

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