JavaからRubyに移動して一番戸惑っているのが、「名前空間」いわゆるパッケージ。
Moduleで名前空間を生成できます。
RubyのModuleには役割が二つあって、一つが名前空間の生成、もう一つがMix-inのためのエンティティです。
深い名前空間を生成したければ、Moduleをネストする形で対応します。
ちなみにrequireするときには、ディレクトリ構成に従って対象を指定します。
個人的に、Rubyを始めた当初にincludeとrequireにはまってよくわからなくなっていたのを思いだしたので回答してみました。
requireは使用したいライブラリをファイルとして指定するからパスの指定(文字列としての指定)で、includeは名前空間の適用だからモジュール名の指定(定数の指定)、というのは今思えば当然なんだけど、なぜか当時は混乱していて、ちゃちなプラグラム一本動かすのに困りまくったのを覚えています。