Как настроить базовый проект ruby?
Я хочу создать небольшой проект ruby с 10-20 классами / файлами. Мне нужны камни, и я хочу использовать вас в качестве тестовой платформы.
возможно, позже я захочу построить драгоценный камень, но это не обязательно.
есть ли какой-то Howto или руководство, которое показывает мне, как настроить основную структуру моего проекта?
вопросы, которые у меня есть:
- куда я помещаю все свои пользовательские ошибки / исключения
- есть некоторые конвенции там для именования каталогов, таких как lib, bin, src и т. д.?
- куда я помещаю тестовые данные или документы.
- где мне нужны все мои файлы, чтобы у меня был доступ к ним в моем проекте.
Я знаю, что могу сделать все с нуля, но я хотел бы получить некоторые рекомендации. Есть несколько хороших камней, которые я мог бы скопировать, но я не уверен, что мне действительно нужно и что я могу удалить.
Я посмотрел на http://gembundler.com/, но он останавливается после настройки упаковщик.
4 ответов
чтобы получить хорошее начало, вы можете использовать и rspec --init
.
~/code $ bundle gem my_lib
create my_lib/Gemfile
create my_lib/Rakefile
create my_lib/LICENSE.txt
create my_lib/README.md
create my_lib/.gitignore
create my_lib/my_lib.gemspec
create my_lib/lib/my_lib.rb
create my_lib/lib/my_lib/version.rb
Initializating git repo in /Users/john/code/my_lib
~/code $ cd my_lib/
~/code/my_lib $ git commit -m "Empty project"
~/code/my_lib $ rspec --init
The --configure option no longer needs any arguments, so true was ignored.
create spec/spec_helper.rb
create .rspec
- код входит
lib
- технические характеристики идти в
spec
- тестовые данные или документы идут в
spec/fixtures/
- требуется все ваши файлы ruby в
lib/my_lib.rb
. Вы можете определить свои исключения в этом файле или в своих собственных файлах - в соответствии с вашими предпочтениями. - исходные файлы C идут в
ext/my_lib
- shell-скрипты и исполняемые файлы входят
bin
когда вы сомневаетесь, просто посмотрите, как выложены другие драгоценные камни.
дополнительная информация:
вы должны добавить rspec как зависимость от разработки в gemspec, чтобы облегчить работу других разработчиков
- изменить my_lib.gemspec, добавив
gem.add_development_dependency 'rspec'
иgem.add_development_dependency 'rake'
внизу. - добавить
Bundler.setup
иrequire 'my_lib'
в верхней части spec / spec_helper.РБ для обеспечения ваши зависимости gem загружаются при запуске спецификаций. - добавить
require "rspec/core/rake_task"
иtask :default => :spec
к вашему Rakefile, так что работаетrake
будет работать ваши спецификации.
пока вы работаете над своим новым творением, охрана-rspec может сэкономить ваше время и хлопот по автоматически запуск ваших спецификаций при изменении файлов, предупреждая вас о сбоях спецификаций.
~/code/my_lib $ git add spec/spec_helper.rb
~/code/my_lib $ git commit -am "Add RSpec"
~/code/my_lib $ vim my_lib.gemspec # add guard development dependency
~/code/my_lib $ bundle
~/code/my_lib $ bundle exec guard init
~/code/my_lib $ vim Guardfile # Remove the sections below the top one
~/code/my_lib $ git add Guardfile
~/code/my_lib $ git commit -am "Add Guard"
после того как вы счастливы с вашим творением, нажмите его до на GitHub
# create a github repository for your gem, then push it up
~/code/my_lib $ curl -u myusername https://api.github.com/user/repos -d '{"name":"my_lib"}'
~/code/my_lib $ git remote add origin git@github.com:myusername/my_lib.git
~/code/my_lib $ git push
после этого, когда вы будете готовы выпустить ваш самоцвет дальше Rubygems.org беги!--19-->, который проведет вас через шаги.
~/code/my_lib $ rake release
Дополнительная Литература
- на Rubygems шаблоны руководство (и Домашняя страница), из ответа Матеуса Морейры. Они действительно отличные рекомендации
- Как Я Начала на руби как Стив клабник
- Упражнение 46: Проект Скелет!--55--> от Зеда шоу Изучать Ruby Трудный Путь
- новый драгоценный камень с Bundler видео на Railscasts
- docs
здесь некоторые хорошие гиды в rubygems.org Это познакомит вас с конвенциями и рассуждениями, стоящими за некоторыми из них. В общем,Соглашения об именах и каталогах Rubygems следуют большинство разработчиков Ruby.
я бы создал только пользовательские классы исключений, если бы не смог найти класс в стандартной библиотеке, соответствующий описанию ошибки. Вложите свой класс ошибок в класс или модуль, который вызывает это:
class Parser::Error < RuntimeError; end
begin
Parser.new(:invalid).parse!
rescue Parser::Error => e
puts e.message
end
модульные тесты идут либо в /test
, Если вы используете Test::Unit
или /spec
если вы используете RSpec
. Я рекомендую последнее.
Bundler
это отличный способ управлять вашим путем загрузки. Он автоматически настроит вашу среду только с зависимостями, указанными в Gemfile
и дополнительно gemspec
. Это также позволяет легко require
ваш код, не делая его драгоценный камень.
однако, поскольку вы можете связать свой код в драгоценном камне в будущем, я рекомендую исследовать как создать спецификации gem. Вы должны написать свою спецификацию вручную. Не используйте какой - либо инструмент для автоматического его создания-это, на мой взгляд, грубые подходы, которые бесполезно дублируют информацию и наносят ущерб при использовании с контролем источника.
я создал драгоценный камень который вы можете найти полезным. Учитывая gemspec
файл, он определяет много полезного Rake
задачи для работы с вашим драгоценным камнем, которые включают в себя задачи по созданию, установке и выпуску вашего драгоценного камня в rubygems
и git
репозиторий с автоматической пометкой версий. Он также обеспечивает простой способ загрузки кода в irb
или pry
сессии.
# Rakefile
require 'rookie'
# Run `rake -T` for the complete task list
Rookie::Tasks.new('your_gem.gemspec').define_tasks!
вот соглашения, которые я чаще всего видел (при условии, что имя вашего проекта "foo"):
- / lib / foo.rb-определяет пространство имен верхнего уровня проекта и его версию; требуются необходимые файлы.
- / lib/ foo / - содержит все классы для вашего проекта, включая классы, связанные с ошибками.
- / test / - содержит тесты для вашего проекта.
- / spec / - содержит спецификации для вашего проекта.
- / bin/ - если ваш проект зависит от двоичные файлы (файлы JAR и т. д.), они обычно заходят туда.
внутри lib / соглашение обычно заключается в создании папки для каждого подпространства внутри пространства имен верхнего уровня. Например, класс Foo::Bar:: Baz обычно находится под /lib/foo/bar/baz.рубидий.
некоторые люди любят создавать версию/lib/foo/.RB-файл просто для установки константы Foo::VERSION, но очень часто я видел это, определенное в /lib/foo.файл rb.
кроме того, если вы создаете джем, вам понадобятся следующие файлы:
- / Rakefile-определяет задачи рейка (например, задачи для тестирования, построения и нажатия драгоценного камня).
- / Gemfile-определяет источник драгоценного камня (среди прочих возможных вещей).
- / foo.gemspec-описывает ваш драгоценный камень и предоставляет список зависимостей.
в интернете есть несколько руководств о том, как структурировать проект Ruby. Кроме того, я думаю, что лучший способ решить эту проблему-отправиться на github и найти какой-то известный проект Ruby и проверить "их" структуры.
помимо общих требований ruby gem, я рекомендую следующие инструменты для лучшего рабочего процесса:
- editorconfig, помогает разработчикам определять и поддерживать согласованные стили кодирования между различными редакторами и Иды.
- rubocop , статический анализатор кода для Руби, defac в Линтер в Руби-сообществе.
- гвардии , вместе с кучей плагинов, вы можете запускать любые команды, как вам нравится, когда меняется код, автоматически.
-
грабли универсальный драйвер для различных проектных задач, таких как:
-
package
: build gem package -
clean
: чистый сгенерированные файлы -
test
: запустить тест
-
- двор, популярный инструмент документации ruby.
и помимо всех вышеперечисленных инструментов, их некоторые онлайн-сервис для проекта ruby:
- CI (непрерывная интеграция)
- код Обзор
и вы можете даже genearate значки через http://shields.io/ для вашего проекта с открытым исходным кодом.
Это мой опыт, надеюсь, это поможет кому-то.