Идеальная рубиновая структура проекта - PullRequest
117 голосов
/ 05 марта 2009

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

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

Ответы [ 4 ]

85 голосов
/ 05 марта 2009

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

9 голосов
/ 25 июля 2013

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

 % tree freewill
    freewill/
    ├── bin/
    │   └── freewill
    ├── lib/
    │   └── freewill.rb
    ├── test/
    │   └── test_freewill.rb
    ├── README
    ├── Rakefile
    └── freewill.gemspec
6 голосов
/ 06 марта 2009

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

1 голос
/ 16 марта 2018

Если вы используете упаковщик, выполнение этой команды bundle gem app_name даст вам ту же структуру каталогов.

Если вы хотите использовать rspec вместо модульных тестов, вы можете запустить эту команду rspec --init (Просто убедитесь, что вы cd app_name первый)

...