Идеальная структура проекта 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 в loadpath, но вы можете нажать любой каталог, который требуется на то, что с помощью $: переменная. то есть
$:.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]это будет быстро генерировать эшафот для вас только с самыми необходимыми для рубинового проекта (и, как следствие, рубиновый камень). Есть и другие инструменты, которые делают это, я знаю, но 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первая)
Comments