как мне структурировать/компилировать мой рубиновый проект

Я новичок в Ruby и только что закончил писать программу.

в программе около 350 строк кода, 6 методов, но нет классов. он использует константы и глобальные переменные.

Является ли соглашение, например, иметь глобальные переменные/константы в отдельном файле? я должен разделить все методы на разные файлы?

Какими должны быть папки, где у меня все файлы?

и, наконец, как мне создать make-файл (или rakefile, как бы он ни назывался. У меня есть rake rubygem)

большое спасибо


person tony_landoza    schedule 04.07.2016    source источник
comment
Это далеко не общий вопрос, и для ответа на него потребовалась бы целая книга. Пожалуйста, будьте ОЧЕНЬ ОЧЕНЬ конкретными в своих вопросах. ruby-lang.org/en/documentation/quickstart может помочь   -  person jamesc    schedule 04.07.2016
comment
Хороший ответ stackoverflow.com/questions/3307209/   -  person Farkhat Mikhalko    schedule 04.07.2016
comment
Лучше задавать по одному вопросу на вопрос.   -  person Wayne Conrad    schedule 04.07.2016


Ответы (3)


Для новичка будет достаточно следующего.

├── Gemfile
├── Gemfile.lock
├── app.rb
├── config.ru
└── lib/
    ├── lib1.rb
    ├── lib2.rb

где app.rb — ваш основной файл, и вы запускаете проект, используя

рубиновое приложение.rb

lib/ содержит файлы библиотек lib1.rb и lib2.rb

предположим, что вы твитите через свое приложение, тогда lib1.rb может быть tweet.rb

person krazedkrish    schedule 04.07.2016
comment
Хорошо, спасибо за это, но у меня сейчас только 1 файл. это просто программа.rb, и я запускаю ее, используя ruby program.rb в терминале. у меня нет файлов конфигурации или lib. мне тоже нужно создать rakefile или достаточно ruby program.rb? - person tony_landoza; 04.07.2016
comment
нет, вам не нужен rakefile, если только вы не чувствуете, что он вам действительно нужен. - person krazedkrish; 04.07.2016

Я рекомендую использовать Hoe: https://github.com/seattlerb/hoe

Hoe фокусируется на том, чтобы держать все на своих местах в полезной форме и разумно извлекать то, что ему нужно. В результате в вашем выпуске нет дополнительных файлов YAML, каталогов конфигурации, файлов ruby ​​или любых других артефактов, которых у вас уже не было бы.

Что мне нравится, так это то, что тестовый каталог настроен по умолчанию, и запуск rake запустит тесты. Я требую свои lib/project_name.rb и заполняю тесты.

Установка Hoe включает Rakefile. Rake поддерживается той же группой, что и Hoe, Seattle.rb. Информация: https://github.com/ruby/rake; документы: http://docs.seattlerb.org/rake/

Hoe позволяет превратить ваш проект в Gem, если это применимо к вашему варианту использования.

У Hoe есть куча плагинов:

Hoe имеет гибкую систему плагинов, которая позволяет вам активировать и деактивировать задачи, доступные в данном проекте. Hoe был разбит на плагины частично для облегчения обслуживания, а также для упрощения отключения или замены кода, который вам не нужен.

Кроме того, его написали заядлые рубисты Райан Дэвис (автор MiniTest) и Эрик Ходел, поэтому код является пуленепробиваемым, а репозиторий сохраняется.


Обзор структуры

project_dir/
  History.txt
  Manifest.txt
  README.txt
  Rakefile
  bin/...
  lib/...
  test/...

Установка и настройка

Установить через командную строку:

gem install hoe

Настройте проект:

sow project_name

Документация

Документация по мотыге в формате PDF

person SoAwesomeMan    schedule 04.07.2016
comment
отличный ответ, очень информативный. так что большое спасибо за это. но применимо ли все это, если у меня есть только один файл (program.rb) и я запускаю его в терминале, используя ruby program.rb? мне все еще нужен rakefile или папка/файлы lib? - person tony_landoza; 04.07.2016
comment
По-разному. Что ты пытаешься сделать? Если это код для чего-то профессионального, я бы рекомендовал использовать структуру каталогов с rakefile или папкой/файлами lib. Ознакомьтесь с этим минимальным репозиторием, чтобы получить представление о том, как вы можете использовать Hoe для структурирования своего кода: github.com/step1profit/ шеф-повар_шаги - person SoAwesomeMan; 04.07.2016

«Он использует константы и глобальные переменные». О, нет, пожалуйста, не делай этого. Вы без нужды усложняете себе жизнь.

Вам действительно нужно избегать использования глобальных констант и переменных, если у вас буквально нет другого выбора. Их чрезвычайно трудно поддерживать в порядке, и они имеют тенденцию вызывать хаос в любой нетривиальной программе.

Организуйте все в вашей программе в одно или несколько определений module или class. Дайте им осмысленные имена. Вы будете использовать module для контейнеров "коллекция методов", class для чего-то, что инкапсулирует процесс или какую-то сущность.

Это различие иногда трудно провести, но для того, чтобы сделать это должным образом, необходимо тщательно обдумать проблему и попробовать различные подходы.

Основой моего кода на Ruby является каталог с именем bin/ для любых исполняемых файлов, lib/ для файлов библиотек, test/ для тестирования кода и файл README для объяснения того, что все это делает. Последние два особенно важны, так как непроверенный код — не что иное, как неприятности, а недокументированный код еще хуже.

Вам понадобится только Rakefile, если у вас есть какие-то процессы, которые вам нужно выполнять на регулярной основе. Упаковка gem — одна из таких вещей, или, как и в случае с Rails, управление миграцией базы данных. Большинству проектов не нужен один из них, но иногда полезно включить тот, который просто запускает тесты или создает документацию.

Формат Rakefile очень прост, и существует буквально миллионы примеров. Найдите тот, который делает то, что вам нужно, и адаптируйте его к вашей конкретной структуре.

person tadman    schedule 04.07.2016