Ruby Dir.globメソッドでファイル名をディレクトリ名より先に取り出したい

RubyのDir.globメソッドでディレクトリの情報を取り出すとき、出力順序が定まっておらず困ることがあります。

そこで、こんな風にしてみました。

f = Dir.glob("dirname/*").sort do |a, b|
  sa = File.stat(a)
  sb = File.stat(b)

  if sa.file? and sb.directory? # ファイルとディレクトリのときは、ファイルを先に
    -1
  elsif sa.directory? and sb.file? # ディレクトリとファイルのときは、ディレクトリを後に
    1
  else # それ以外(ファイルとファイル、ディレクトリとディレクトリ)のときは、文字列でソート
    a <=> b
  end
end