Идеальная структура проекта ruby
-
03-07-2019 - |
Вопрос
Я ищу обзор / разъяснение идеальной структуры проекта для проекта ruby (не rails / merb / etc).Я предполагаю, что из этого следует
app/
bin/ #Files for command-line execution
lib/
appname.rb
appname/ #Classes and so on
Rakefile #Running tests
README
test,spec,features/ #Whichever means of testing you go for
appname.gemspec #If it's a gem
Я что-то не так понял?Какие части я пропустил?
Решение
Я думаю, что это в значительной степени верно.По умолчанию Rubygems добавит каталог lib в путь загрузки, но вы можете поместить в него любой каталог, который захотите, используя $:переменная.т. е.
$:.push File.expand_path(File.dirname(__FILE__) + '/../surfcompstuff')
Это означает, что когда у вас есть возможность сказать, surfer.rb
в этом разделе вы можете require "surfer"
где угодно, и файл будет найден.
Кроме того, по соглашению, классы и синглтоны получают файл, а модули - каталог.Например, если бы у вас был LolCatz
модуль и LolCatz::Moar
класс, который выглядел бы как:
lib/
appname.rb
lolcatz/
moar.rb
Вот почему существует папка lib / appname, потому что большинство библиотек находятся в appname
пространство имен.
Кроме того, если вы попытаетесь запустить команду newgem --simple [projectname]
это быстро сгенерирует для вас каркас, содержащий только самое необходимое для проекта Ruby (и, как следствие, Ruby Gem).Я знаю, что есть другие инструменты, которые делают это, но newgem довольно распространен.Обычно я избавляюсь от файла TODO и всего, что связано со сценарием.
Другие советы
Смотрите следующий пример из http://guides.rubygems.org/what-is-a-gem/
% tree freewill
freewill/
├── bin/
│ └── freewill
├── lib/
│ └── freewill.rb
├── test/
│ └── test_freewill.rb
├── README
├── Rakefile
└── freewill.gemspec
Я пытаюсь имитировать структуру проекта Rails, потому что моя команда, которая обычно имеет дело с Rails, поймет структуру лучше, чем другая конфигурация.Соглашение о конфигурации - вытекает из Rails.
Если вы используете bundler, выполните эту команду bundle gem app_name
это даст вам ту же структуру каталогов.
Если вы хотите использовать rspec вместо модульных тестов, вы можете выполнить эту команду rspec --init
(Просто убедитесь, что вы cd app_name
первый)