Я хочу создать небольшой проект Ruby с 10 ~ 20 классами / файлами. Мне нужны драгоценные камни, и я хочу использовать RSpec в качестве тестовой среды.
Возможно, позже я захочу построить драгоценный камень, но это не обязательно.
Есть ли какие-нибудь инструкции или руководства, которые показывают мне, как настроить базовую структуру моего проекта?
У меня есть следующие вопросы:
- Куда я могу поместить все свои пользовательские ошибки / исключения?
- Есть ли какие-то соглашения для именования каталогов, таких как lib, bin, src и т. Д.?
- Куда мне поместить тестовые данные или документы?
- Где мне требовать все мои файлы, чтобы иметь к ним доступ в моем проекте?
Я знаю, что могу сделать все с нуля, но мне нужны рекомендации. Есть несколько хороших драгоценных камней, которые я мог бы скопировать, но я не уверен, что мне действительно нужно и что я могу удалить.
Я посмотрел http://gembundler.com/ , но после настройки Bundler он перестает работать.
ruby
project-structure
Айкостер
источник
источник
Ответы:
Для начала можно использовать
bundle gem
команду иrspec --init
.lib
spec
spec/fixtures/
lib/my_lib.rb
. Вы также можете определить свои исключения в этом файле или в их собственных файлах - в соответствии с вашими предпочтениями.ext/my_lib
bin
Если сомневаетесь, просто посмотрите, как выложены другие драгоценные камни.
Дальнейшая информация:
Вы должны добавить rspec как зависимость разработки в свой gemspec, чтобы упростить другим разработчикам
gem.add_development_dependency 'rspec'
иgem.add_development_dependency 'rake'
внизу.Bundler.setup
иrequire 'my_lib'
в начало spec / spec_helper.rb, чтобы обеспечить загрузку зависимостей гемов при запуске спецификаций.require "rspec/core/rake_task"
иtask :default => :spec
в свой Rakefile, чтобыrake
запустить ваши спецификации.Пока вы работаете над своим новейшим творением, guard-rspec может сэкономить ваше время и нервы, автоматически запуская ваши спецификации при изменении файлов, предупреждая вас о сбоях спецификаций.
После того, как вы довольны своим творением, отправьте его на github.
Затем, когда вы будете готовы разместить свой гем на Rubygems.org, запустите его
rake release
, и вы пройдете через все шаги.Дальнейшие ссылки
источник
-b, [--bin=Generate a binary for your library.]
сbundle gem
.bundle gem <gem-name> -t
для выполнения эквивалентаrspec --init
всего сразу.На rubygems.org есть несколько хороших руководств , которые познакомят вас с соглашениями и причинами , лежащими в основе некоторых из них. В общем, соглашения об именах и каталогах Rubygems соблюдаются большинством разработчиков Ruby.
Я бы создавал настраиваемые классы исключений только в том случае, если бы мне не удалось найти какой-либо класс в стандартной библиотеке, соответствующий описанию ошибки. Вложите свой класс ошибки в класс или модуль, который его вызывает:
Модульные тесты
/test
входят либо в , если вы используетеTest::Unit
, либо в,/spec
если вы используетеRSpec
. Я рекомендую последнее.Bundler
- отличный способ управлять загрузкой. Он автоматически настроит вашу среду только с зависимостями, указанными вGemfile
и, возможно, вgemspec
. Это также позволяет легкоrequire
упростить код, не превращая его в жемчужину.Однако, поскольку в будущем вы можете объединить свой код в гем, я рекомендую изучить, как создавать спецификации гемов . Вы должны написать свою спецификацию вручную. Не используйте какой-либо инструмент для его автоматического создания - на мой взгляд, это методы грубой силы, которые без нужды дублируют информацию и наносят ущерб при использовании с системой контроля версий.
Я создал драгоценный камень, который может вам пригодиться. Имея
gemspec
файл, он определяет множество полезныхRake
задач для работы с вашим гемом, которые включают в себя задачи по созданию, установке и выпуску вашего драгоценного камняrubygems
иgit
репозитория с автоматической пометкой версий. Он также обеспечивает простой способ загрузки кода в сеансеirb
илиpry
.источник
Вот соглашения, которые я чаще всего видел (при условии, что ваш проект называется «foo»):
Внутри lib / соглашение обычно заключается в создании папки для каждого подпространства имен внутри вашего пространства имен верхнего уровня. Например, класс Foo :: Bar :: Baz обычно находится в /lib/foo/bar/baz.rb.
Некоторым людям нравится создавать файл /lib/foo/version.rb только для установки константы Foo :: VERSION, но очень часто я видел, как это определено в файле /lib/foo.rb.
Кроме того, если вы создаете драгоценный камень, вам потребуются следующие файлы:
источник
В Интернете есть несколько руководств о том, как структурировать проект Ruby. Кроме того, я думаю, что лучший способ решить эту проблему - заглянуть в github и найти какой-нибудь известный проект Ruby и проверить «их» структуры.
Помимо общих требований к рубиновым драгоценным камням, я рекомендую следующие инструменты для улучшения рабочего процесса:
package
: построить пакет gemclean
: очистить сгенерированные файлыtest
: запустить тестИ, помимо всех вышеперечисленных инструментов, это онлайн-сервис для проекта ruby:
И вы даже можете сгенерировать значки через http://shields.io/ для своего проекта с открытым исходным кодом.
Это мой опыт, надеюсь, это поможет кому-то.
источник