Module: LogBrew::Validation

Defined in:
lib/logbrew.rb

Class Method Summary collapse

Class Method Details

.numeric_nan?(value) ⇒ Boolean

Returns:

  • (Boolean)


758
759
760
# File 'lib/logbrew.rb', line 758

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

.read(attributes, key) ⇒ Object



748
749
750
751
752
# File 'lib/logbrew.rb', line 748

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:



698
699
700
701
702
703
# File 'lib/logbrew.rb', line 698

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:



739
740
741
742
743
744
745
746
# File 'lib/logbrew.rb', line 739

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:



719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
# File 'lib/logbrew.rb', line 719

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:



692
693
694
695
696
# File 'lib/logbrew.rb', line 692

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

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

.require_timestamp(timestamp) ⇒ Object



705
706
707
708
709
710
711
712
713
714
715
716
717
# File 'lib/logbrew.rb', line 705

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



754
755
756
# File 'lib/logbrew.rb', line 754

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