Ruby multi-key stable record sorter

Ruby
def sort_records(records, keys, nulls_last: true)
  records.each_with_index.sort do |(a, ai), (b, bi)|
    comparison = 0
    keys.each do |key|
      comparison = compare_values(a[key], b[key], nulls_last)
      break unless comparison.zero?
    end
    comparison.zero? ? ai <=> bi : comparison
  end.map(&:first)
end

def compare_values(a, b, nulls_last)
  return 0 if a.nil? && b.nil?
  return nulls_last ? 1 : -1 if a.nil?
  return nulls_last ? -1 : 1 if b.nil?

  a <=> b
end