Причина этой "двухуровневой" структуры заключается в том, что в конечном итоге /floob/lib
будет папкой, которая добавляется к пути загрузки Ruby require
.
Таким образом, если вы положите floob.rb
в /floob/lib
, вы можете загрузить его с помощью:
require 'floob'
Это также дает возможность отделить подкомпоненты, такие как version.rb
, в пространстве имен floob
, поместив их в /floob/lib/floob
. Это означает, что теперь вы можете делать такие вещи, как:
require 'floob/version'
require 'floob/base'
require 'floob/core'
etc..
Если /floob
был непосредственно добавлен в путь загрузки, то было бы трудно отделить код от таких вещей, как README
файлы, gemspecs или другие активы, такие как изображения, двоичные двоичные объекты, файлы настроек YAML или заглушки bin
.
Теперь реальный код будет жить под lib
, а все остальное можно красиво поместить в папки прямо под /floob
, не мешая функционалу кода или пути загрузки.
Также обратите внимание, что в большинстве случаев вы не должны помещать в /floob/lib
ничего, кроме floob.rb
, так как в противном случае вы будете загрязнять глобальное пространство имен пути загрузки. Вместо этого весь остальной код должен быть помещен в /floob/lib/floob
, а затем вы поместите require
код в floob.rb
для загрузки этих файлов, как я описал выше.
Таким образом вы сохраняете путь загрузки чистым, а компоненты хорошо отделены друг от друга.