Skip to content

Instantly share code, notes, and snippets.

@psylone
Last active October 11, 2016 11:27
Show Gist options
  • Save psylone/762056dbfaa8ec21a972256dc562f8e9 to your computer and use it in GitHub Desktop.
Save psylone/762056dbfaa8ec21a972256dc562f8e9 to your computer and use it in GitHub Desktop.
Задания к занятию 8

Задания к занятию 8

  • Создание собственного Gem-а (библиотеки)
  • Переменные экземпляра класса
  • Rake задачи

Создание собственного Gem-а (библиотеки)

На практике бывает полезно создать свой собственный Gem. Например для того чтобы использовать повторяющуюся функциональность в ваших проектах или поделиться ею с миром. Каких-либо ограничений на содержание Gem-а нет, поэтому вы можете создать Gem из любого Ruby проекта. Для этого необходимо выполнить следующую последовательность действий:

  1. Создать в корне проекта файл <project_name>.gemspec
  2. В этой файле описать спецификацию Gem-а с помощью RubyGems API
  3. Собрать Gem командой gem build <project_name>.gemspec
  4. Установить Gem командой 'gem install <path/to/gem>.gem'

Файл с расширением *.gemspec является файлом с обыкновенным Ruby кодом и описывает спецификацию Gem-а с помощью RubyGems API. Минимальный набор методов для успешной сборки Gem-а выглядит так:

# running_track.gemspec

Gem::Specification.new do |s|
  s.name        = 'example'
  s.version     = '0.1.0'
  s.licenses    = ['MIT']
  s.summary     = "This is an example!"
  s.description = "Much longer explanation of the example!"
  s.authors     = ["Ruby Coder"]
  s.email       = '[email protected]'
  s.files       = ["lib/example.rb"]
  s.homepage    = 'https://rubygems.org/gems/example'
end

Наиболее значимым является метод files= который принимает аргумент в виде массива с перечислением всех файлов, которые будут включены в состав вашей библиотеки.

После сборки библиотеки вы сможете отправить ваш Gem на http://rubygems.org с помощью команды gem push <path/to/gem>.gem, и Gem сможет использоваться разработчиками по всему миру!

1. Проверка правописания

Напишите Gem для проверки правописания с помощью Яндекс.Спеллер API. Опубликуйте его на http://rubygems.org. Напишите тесты с помощью RSpec (дополнительный материал смотрите здесь).

2. Работа с данными о беговых дорожках становится лучше

Наделите проект RunningTrack дополнительной функциональностью:

  • Создайте класс Track для представления беговой дорожки

  • Класс Track должен переопределять метод to_s для вывода информации о беговой дорожке в виде строки

  • Необходимо обрабатывать исключения, если превышен таймаут обращения к серверу, если в ответе нет данных

  • Модуль RunningTrack должен определять метод find для поиска беговых дорожек по каким-либо условиям, например, наличию wi-fi

  • Модуль RunningTrack должен реализовывать метод random(count = 1) для выбора заданного количества случайных беговых дорожек

  • Класс Track должен описывать следующие состояния для своих объектов:

    • unknown
    • good
    • normal
    • bad

и события для перевода из состояния unknown в одно из других

  • Модуль RunningTrack должен содержать методы save! и load! для сохранения объектов RunningTrack::Track в файл формата *.yml и загрузки данных из него

3. Сброс кэширования через время

Для проекта RunningTrack реализуйте механизм, который позволяет сбрасывать кэш через заданное количество времени. В качестве ретроспективы помните: кэш реализуется с помощью обычного хэша который хранится в памяти переменной экземпляра модуля RunningTrack.

4. Rake задачи для создания плейлиста

Напишите rake задачи playlist:create и 'playlist:update' для создания и обновления плейлиста, а также playlist:list для отображения списка всех плейлистов (только названия файлов).

Идея задания основывается на зависимости между временем модификации файла плейлиста и временем модификации музыкальных файлов. В Rake для управления этой зависимостью используется метод file (мы рассматривали его в конце занятия).

  • Для того чтобы получить список всех файлов в музыкальном каталоге используйте метод Dir::[] с аргументом music/**/*

  • Предусмотрите передачу параметра NAME из командной строки в rake задачу с именем плейлиста. Если параметр отсутствует создавайте плейлист с каким-то генерируемым именем

  • При попытке вызвать задачу rake playlist:update без параметра NAME выводите сообщение о том что требуемый параметр не задан

  • Используйте формат плейлиста M3U

  • Для простоты не указывайте длину композиции в секундах. Для этого в плейлисте укажите -1

Примеры вызова rake задач
# Получить список всех плейлистов
rake playlist:list

# Обновить плейлист ambient.m3u
NAME=ambient.m3u rake playlist:update

# Обновить плейлист без указания его названия
rake playlist:update # => Не могу обновить плейлист потому что не знаю его названия. Укажите название плейлиста с помощью переменной окружения NAME

# Создать плейлист
rake playlist:create # => Будет создан файл playlist_2016-01-01.m3u
Пример файла плейлиста в формате M3U
#EXTM3U
#EXTINF:-1,above & beyond - robot heart yoga - burning man 2014.mp3
file:///Users/psylone/Downloads/Sound Cloud/Above & Beyond - Robot Heart Yoga - Burning Man 2014.mp3
#EXTINF:-1,Atmospheric world mix 002
file:///Users/psylone/Music/Bryan Milton - Atmospheric world mix 002 (promodj.com).mp3
Предварительный шаблон rake задач
namespace :playlist do

  desc ''
  task :list do

  end

  desc ''
  task :create do

  end

  desc ''
  # Задача update зависит от имени плейлиста которое передаётся в переменной окружения NAME из командной строки
  task update: ENV['NAME']

end

Контакты для связи

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment