Идеальная структура рубинового проекта

После обзора/уточнения идеальной структуры проекта для проекта 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 a gem

У меня что-то не так? Какие части я пропустил?

Ответ 1

Я думаю, что это довольно много. По умолчанию 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 и всего материала script.

Ответ 2

См. следующий пример из http://guides.rubygems.org/what-is-a-gem/

 % tree freewill
    freewill/
    ├── bin/
    │   └── freewill
    ├── lib/
    │   └── freewill.rb
    ├── test/
    │   └── test_freewill.rb
    ├── README
    ├── Rakefile
    └── freewill.gemspec

Ответ 3

Я пытаюсь имитировать структуру проекта Rails, потому что моя команда, которая обычно работает с Rails, будет лучше понимать структуру, чем другая конфигурация. Концессия по конфигурации - истечет кровью из Rails.