Идеальная структура проекта ruby
Я после обзора / уточнения идеальной структуры проекта для проекта ruby (non-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
Я что-то не так? Какие части я пропустил?
4 ответов
Я думаю, что это в значительной степени пятно на. По умолчанию Rubygems добавит каталог lib в путь загрузки, но вы можете поместить в него любой каталог, используя переменную$:. т. е.
$:.push File.expand_path(File.dirname(__FILE__) + '/../surfcompstuff')
это означает, когда вы говорите, surfer.rb
в этом dir, вы можете 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, поймет структуру лучше, чем другая конфигурация. Конвенция по конфигурации-кровотечение из рельсов.
Если вы используете bundler, выполните эту команду bundle gem app_name
даст вам ту же структуру каталогов.
Если вы хотите использовать rspec вместо модульных тестов, вы можете запустить эту команду rspec --init
(Просто убедитесь, что вы cd app_name
первая)