class IDRAC::FirmwareCatalog
def compare_versions(current_version, available_version)
def compare_versions(current_version, available_version) # If versions are identical, no update needed return false if current_version == available_version # If either version is N/A, no update available return false if current_version == "N/A" || available_version == "N/A" # Try to handle Dell's version format (e.g., A00, A01, etc.) if available_version.match?(/^[A-Z]\d+$/) # If current version doesn't match Dell's format, assume update is needed return true unless current_version.match?(/^[A-Z]\d+$/) # Compare Dell version format (A00 < A01 < A02 < ... < B00 < B01 ...) available_letter = available_version[0] available_number = available_version[1..-1].to_i current_letter = current_version[0] current_number = current_version[1..-1].to_i return true if current_letter < available_letter return true if current_letter == available_letter && current_number < available_number return false end # For numeric versions, try to compare them if current_version.match?(/^[\d\.]+$/) && available_version.match?(/^[\d\.]+$/) current_parts = current_version.split('.').map(&:to_i) available_parts = available_version.split('.').map(&:to_i) # Compare each part of the version max_length = [current_parts.length, available_parts.length].max max_length.times do |i| current_part = current_parts[i] || 0 available_part = available_parts[i] || 0 return true if current_part < available_part return false if current_part > available_part end # If we get here, versions are equal return false end # If we can't determine, assume update is needed true end