Prinzipiell würde ich statt #type die Methode #class verwenden. type ist deprecated und in späteren Rubyversionen nicht mehr vorhanden. Im Maker kann man es natürlich trotzdem noch nutzen. Aber strenggenommen ist G eine Klasse, kein "Typ".
Ansonsten muss der Code folgendermaßen aussehen:
Code (ruby):
case a
when G
  print "G === a"
else
  print "not (G === a)"
end


Wichtig ist, dass das case-Statement einen Vergleich mit der === Methode durchführt. Und zwar mit der Variable a als Parameter. So darf jede Klasse selbst bestimmen, wie sie in einem Case verglichen wird. Die === Methode prüft nicht unbedingt immer auf Gleichheit. z.B. gilt
(1..10) === 5 #=> true
/\d+/ === "123" #=> true
und eben
Array === [] #=> true

In deinem Fall schreibst du im Prinzip
G === G
Was letztlich bedeutet: Ist G eine Instanz von G. Das ist aber nicht der Fall. Class === G würde hingegen true ergeben.

Also entweder case-Statements gar nicht erst verwenden, oder vorher in die API gucken wie die === Methode für die jeweiligen Klassen definiert ist.