Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Gems Inside Ruby: Настройка окружения

Программа урока

  • Понятие, назначение и использование гемов
  • Rubygems и аналоги
  • Структура гема на примере https://github.com/kaize/configus
  • Создание гема. Полезные команды

Работа с гемами

# Установка гема
gem install rails

# Установить определенную версию библиотеки
gem install rails --version 5.0

# Поиск среди доступных гемов
gem search -r rails

# Для просмотра всех локально установленных гемов:
gem list

# Чтобы получить (очень длинный) список всех гемов, доступных на RubyGems.org:
gem list -r

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

Bundler

# Инициализация
bundle init

# Установка
bundle install # bundle install --without development test

# Запуск определенных зависимостей
bundle exec rails -v

# Создавая gemset, вы создаете новую папку, в которую можно складывать новые gem'ы,
# будучи абсолютно уверенным, что они изолированы от ранее установленных.
gemset

Создание гема

gem install bundler

bundle -v

bundle gem test_gem

gem build

gem install

gem push

Утилита gem

# gem — пакет(архив) с библиотекой или приложением
# RubyGems — менеджер пакетов с утилитой gem для командной
# строки для установки и запаковки Ruby библиотек и приложений

# Gemfile
source :rubygems

gem "nokogiri", "1.5.0"
gem "sinatra",  "~> 1.2.6"

gem "wirble", :group => :development

group :test do
  gem "rspec",  ">= 2.6"
  gem "ffaker", ">= 1.7"
end

# Разрешение конфликтов
require 'bundler/setup'
Gemfile.lock

# Установка напрямую из GIT
gem 'rails', git: 'https://github.com/rails/rails.git'

# Установка гема, который установлен локально
gem 'rubocop', path: '../gems/rubocop'

Bundler.require(:default, Rails.env)

Самостоятельная работа

В этом задании нужно реализовать гем, который работает с сервисом ip-api.com.

Сервис ip-api.com позволяет получать информацию по IP — например, страну, город, координаты. Так это выглядит на практике:

$ curl "http://ip-api.com/xml/83.169.216.199"

# <?xml version="1.0" encoding="UTF-8"?>
# <query>
#     <status>success</status>
#     <country>United States</country>
#     <countryCode>US</countryCode>
#     <region>VA</region>
#     <regionName>Virginia</regionName>
#     <city>Ashburn</city>
#     <zip>20149</zip>
#     <lat>39.03</lat>
#     <lon>-77.5</lon>
#     <timezone>America/New_York</timezone>
#     <isp>Google LLC</isp>
#     <org>Google Public DNS</org>
#     <as>AS15169 Google LLC</as>
#     <query>8.8.8.8</query>
# </query>

Ipgeobase

Реализуйте гем Ipgeobase, который возвращает метаданные об IP. Этот гем содержит метод lookup('8.8.8.8'), который принимает IP-адрес и возвращает объект метаданных.

В метаданных содержатся следующие поля:

  • city — город
  • country — страна
  • countryCode — код страны
  • lat — ширина
  • lon — долгота

Посмотрим на примере:

ip_meta = Ipgeobase.lookup('8.8.8.8')
ip_meta.city # Ashburn
ip_meta.country # United States
ip_meta.countryCode # US
ip_meta.lat # 39.03
ip_meta.lon # -77.5

Задачи

  1. Создайте базовую структуру гема командой: bash bundle gem ipgeobase --test=minitest --ci=github --no-mit --no-coc
  2. Создайте репозиторий на GitHub для будущего гема
  3. В файле ipgeobase.gemspec измените содержимое так, как показано в sample_gem. Откройте созданный репозиторий на Github и укажите себя как автора
  4. Реализуйте тесты приложения. Для мока запросов используйте библиотеку Webmock
  5. Добавьте подсчет покрытия тестами с помощью гема simplecov
  6. Реализуйте необходимую логику для работы гема
  7. Запушьте получившийся гем в репозиторий на Github. Убедитесь, что проверки линтера и тесты в Github Actions успешно выполняются
  8. Добавьте в файл README.md бейдж на Github Action

Подсказки

  • Пример настроенного гема — sample_gem
  • Гем для преобразования xml в свойства класса — Happymapper
  • Гем для формирования URL-адреса запроса — Addressable

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

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

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 5 840 ₽ в месяц
Создание веб-приложений со скоростью света
5 месяцев
c опытом
Старт 25 апреля

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»
Изображение Тото

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