Идеальная структура проекта 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 первая)