Рубрики
Uncategorized

Настройка свежего рубинового проекта

Чтобы запустить проект Ruby, вам не нужно ничего делать, кроме как поставить код RUBY в файл и … Tagged с Ruby, начинающими, DevOps, учебником.

Чтобы запустить проект Ruby, вам не нужно делать ничего, кроме как поставить немного RUBY-код в файл и вызвать его с Ruby Program.rb Отказ

Когда проекты растут, хотя, скорее всего, вы будете добавлять зависимости и тесты. Вы можете смягчить это с документацией — сообщите пользователям, какие драгоценные камни им нужно тянуть, и какие файлы содержат тестовые люксы — но это становится громоздким. Намного лучше опираться на Ecosystem Tools, чтобы указать и автоматизировать шаги по сборке.

Чтобы следовать, вам понадобится Ruby установлен. Последнее во время написания — версия 2.7.0.

Редактировать: Если вы не хотите делать это с нуля, попробуйте Bundler Gem. :

Я нахожу самый простой способ начать новый проект Ruby Bundler Gem. даже когда не на самом деле писать драгоценный камень. Также следует также условные конвенции Ruby, то есть lib папка вместо SRC Отказ

Вот как вы это делаете:

Тогда вы можете просто удалить foo.gemspec 😀.

Сделать каталог

Не просто распространяйте свой источник Ruby по всему домашнему директору — сохраняйте свои проекты. Создать каталог:

$ mkdir ruby_project

Откройте этот каталог в вашем любимом редакторе. Все остальное в этом посте здесь идет здесь.

Добавить Bundler

Управление зависимостями, используйте Bundler Отказ Этот инструмент позволяет вам указывать драгоценные камни, необходимые для запуска вашего проекта, и позволяет пользователям выдавать один Установите комплект Команда, чтобы сдвинуть любой необходимый.

Во-первых, установите драгоценный камень у вас еще не:

$ gem install bundler

Затем создайте файл под названием Gemfile в вашем корневом проекте. На данный момент мы просто укажем URL-адрес репозитория пакета:

source 'https://rubygems.org'

Поскольку нам нужны зависимости, мы добавим их здесь ниже этой строки.

Добавить тестовый файл

Первая зависимость, которую нам нужно, это для тестирования. Этот пример использует Министерство Отказ Добавьте это к вашему Драгоценность :

  source 'https://rubygems.org'
+ gem 'minitest'

Теперь вы можете вызвать Установите комплект Чтобы вытащить это автоматически. Когда вы делаете, новый файл под названием Gemfile.lock будет сгенерирован, содержащий конкретную версию пакета в использовании.

Это действительно зависит от вас, но мне нравится держать свои тесты в отдельном подкаталоге:

$ mkdir test

Создайте файл в этой папке под названием Тест/cool_program_test.rb со следующим содержанием:

# frozen_string_literal: true

require 'minitest/autorun'
require_relative '../lib/cool_program'

# Test program coolness
class CoolProgramTest < Minitest::Test
  def test_coolness_off_the_charts
    # skip
    assert_equal CoolProgram.new.coolness, 11
  end
end

Первая строка, # frozen_string_literal: true это волшебный комментарий, который вроде как называет Объект на каждом строке буквальный. Это сделано для причин производительности, но вы можете отказаться от заданной строки, префиксирую его с помощью + персонаж: + 'Моя новая сметная строка литерала' Отказ Теперь вы можете сделать my_str << que_other_str Отказ Однако в Ruby я не нахожу себе манипулирование такими же слоями.

Мы знаем, что мы сможем использовать Министерство зависимость в первой строке, потому что мы указали ее с Bundler. Фактический исходный код еще не существует, хотя!

Добавить файл реализации

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

$ mkdir lib

Создайте файл, который мы вытащили в тестовый файл в lib/cool_program.rb С этим содержимым:

# frozen_string_literal: true

# The coolest program
class CoolProgram
  attr_reader :coolness
  def initialize
    @coolness = 11
  end
end

puts "Coolness: #{CoolProgram.new.coolness}/10"

Сводки! Все на месте.

Добавить гранфиль

Теперь мы могли бы просто направлять пользователей, чтобы вызвать Ruby сами по правильным файлам — Ruby lib/cool_program.rb Чтобы запустить программу или Ruby Test/cool_program_test.rb для испытаний. Было бы лучше, если бы мы могли указать эти пути и аннотация в Тест или Беги Операции. Вот что грабли это для! Этот инструмент очень похоже на GNU, но для Ruby.

Во-первых, добавьте его в свой Драгоценность :

  source 'https://rubygems.org'
  gem 'minitest'
+ gem 'rake'

Затем добавьте новый файл в своем корне в проекте Rakefile :

task default: %w[test]

task :run do
  ruby 'lib/cool_program.rb'
end

task :test do
  ruby 'test/cool_program_test.rb'
end

Если вы знаете, как сделать Работает, это похоже (если вы этого не сделаете, я получил тебя охватил ). Первая строка определяет задачу по умолчанию, или что происходит, когда вы вызываете грабли без указания конкретной задачи. В этом случае мы просто запускаем контрольная работа задача как зависимость без сама блока. Это список, вы можете указать несколько задач здесь.

Каждая задача ниже может быть вызвана в командной строке напрямую — вы бы использовали Райки бегите На самом деле выполнить вашу программу и просто грабли самостоятельно запустить тестовый люкс.

Добавьте Линтер

Я стал довольно зависимым от Рубокоп Линтер, чтобы держать меня в соответствии с Руководство по рубиному стилю Отказ Сейчас теперь отправляются с готовой задачей грабли.

Во-первых, добавьте его в свой Драгоценность :

  source 'https://rubygems.org'
  gem 'minitest'
  gem 'rake'
+ gem 'rubocop'

Тогда измените свой Rakefile :

+ require 'rubocop/rake_task'

- task default: %w[test]
+ task default: %w[lint test]

+ RuboCop::RakeTask.new(:lint) do |task|
+   task.patterns = ['lib/**/*.rb', 'test/**/*.rb']
+   task.fail_on_error = false
+ end

  task :run do
    ruby 'lib/cool_program.rb'
  end

  task :test do
    ruby 'test/cool_program_test.rb'
  end

Это мои личные предпочтения, чтобы по умолчанию запустить Linter и тестер, но не провалиться на ошибках с линтами. Сезон по вкусу Отказ

Необязательно — Добавить действие GitHub

Я принимаю почти весь свой код на Github и стал поклонником действий GitHub. Использование YAML, вы можете автоматически запустить GitHub, когда вы получаете или открываете пр. Создайте новый файл в /. Github/Workflows/Ruby.yaml :

name: Ruby

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up Ruby 2.7
      uses: actions/setup-ruby@v1
      with:
        ruby-version: 2.7.x
    - name: Build and test with Rake
      run: |
        gem install bundler
        bundle install --jobs 4 --retry 3
        bundle exec rake

Вы можете очень легко настроить каждый шаг здесь — указанные команды будут запущены, и если все завершится без ошибок, вы получаете зеленую галочку. Сладкий! Использование грабли Позволяет этот файл оставаться близочным, а потом вы сможете управлять изменениями вашей структуры в вашем RakeFile без необходимости вообще беспокоиться об этом файле.

Добавить readme и прочее

Мы почти сделаны, но вы всегда должны включать readme:

# ruby_project

The coolest dang program that you ever did see.

## Dependencies

* [Ruby](https://www.ruby-lang.org/en/).  Written with version [2.7.0](https://www.ruby-lang.org/en/news/2019/12/25/ruby-2-7-0-released/) - *[docs](https://docs.ruby-lang.org/en/2.7.0/)*.

## Usage

Install deps: `gem install bundler && bundle install`.  Run `bundle exec rake` to run the tests, or `bundle exec rake run` to run the program.

Добавить .gitignore :

*.gem
*.rbc
/.config
/coverage/
/InstalledFiles
/pkg/
/spec/reports/
/spec/examples.txt
/test/tmp/
/test/version_tmp/
/tmp/

## Environment normalization
/.bundle/
/vendor/bundle
/lib/bundler/man/

# Used by RuboCop. Remote config files pulled in from inherit_from directive.
.rubocop-https?--*

Вы, вероятно, должны добавить файл лицензии тоже — вот BSD-3-пункт :

Copyright 2020 Coolness McAwesome

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

В конце вашего каталога должен выглядеть так:

$ tree
.
|____Gemfile.lock
|____.gitignore
|____.github
| |____workflows
| | |____ruby.yml
|____Gemfile
|____LICENSE
|____Rakefile
|____test
| |____cool_program_test.rb
|____README.md
|____lib
| |____cool_program.rb

Наконец, git init && git add. && git commit -m "Первоначальный коммит" Отказ Счастливый взлом!

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

Фото Jukan Tateisi на Unsplash

Оригинал: «https://dev.to/deciduously/setting-up-a-fresh-ruby-project-56o4»