rubygems ないし bundler で利用される gem のバージョンの仕様はどうなっていますか?

  1. あるバージョン文字列が与えられたときに、それらの大小はどのように決定されていますか?
    とくに、以下のようなコーナーケースの挙動が知りたいと思っています。

    • 1.0.0 vs 1.0.0.0
    • 1.0.0 vs 1.0.0-beta
    • 1.0.0 vs 1.0.0.beta
  2. それをふまえて、 Gemfile における ~> V.V (ないし ~> V.V.V) はどのような動作をしますか?

背景

gem においては --pre でダウンロードされる、 betaN バージョンを bundler で指定したいと思いました。bundler の github issue によると、

gem "eventmachine", ">= 1.0.0.beta"

のように記述すればよいと書いてあります。

この指定が、ちょっときもちわるいと思い、正しい挙動を理解しておかないと、後々ハマりそうだな、と思ったので、質問しています。