- Создание собственного Gem-а (библиотеки)
- Переменные экземпляра класса
- Rake задачи
На практике бывает полезно создать свой собственный Gem. Например для того чтобы использовать повторяющуюся функциональность в ваших проектах или поделиться ею с миром. Каких-либо ограничений на содержание Gem-а нет, поэтому вы можете создать Gem из любого Ruby проекта. Для этого необходимо выполнить следующую последовательность действий:
- Создать в корне проекта файл
<project_name>.gemspec
- В этой файле описать спецификацию Gem-а с помощью RubyGems API
- Собрать Gem командой
gem build <project_name>.gemspec
- Установить 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 сможет использоваться разработчиками по всему миру!
Напишите Gem для проверки правописания с помощью Яндекс.Спеллер API. Опубликуйте его на http://rubygems.org. Напишите тесты с помощью RSpec (дополнительный материал смотрите здесь).
Наделите проект 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
и загрузки данных из него
Для проекта RunningTrack
реализуйте механизм, который позволяет сбрасывать кэш через заданное количество времени. В качестве ретроспективы помните: кэш реализуется с помощью обычного хэша который хранится в памяти переменной экземпляра модуля RunningTrack
.
Напишите rake задачи playlist:create
и 'playlist:update' для создания и обновления плейлиста, а также playlist:list
для отображения списка всех плейлистов (только названия файлов).
Идея задания основывается на зависимости между временем модификации файла плейлиста и временем модификации музыкальных файлов. В Rake для управления этой зависимостью используется метод file
(мы рассматривали его в конце занятия).
-
Для того чтобы получить список всех файлов в музыкальном каталоге используйте метод
Dir::[]
с аргументомmusic/**/*
-
Предусмотрите передачу параметра
NAME
из командной строки в rake задачу с именем плейлиста. Если параметр отсутствует создавайте плейлист с каким-то генерируемым именем -
При попытке вызвать задачу
rake playlist:update
без параметраNAME
выводите сообщение о том что требуемый параметр не задан -
Используйте формат плейлиста M3U
-
Для простоты не указывайте длину композиции в секундах. Для этого в плейлисте укажите
-1
# Получить список всех плейлистов
rake playlist:list
# Обновить плейлист ambient.m3u
NAME=ambient.m3u rake playlist:update
# Обновить плейлист без указания его названия
rake playlist:update # => Не могу обновить плейлист потому что не знаю его названия. Укажите название плейлиста с помощью переменной окружения NAME
# Создать плейлист
rake playlist:create # => Будет создан файл playlist_2016-01-01.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
namespace :playlist do
desc ''
task :list do
end
desc ''
task :create do
end
desc ''
# Задача update зависит от имени плейлиста которое передаётся в переменной окружения NAME из командной строки
task update: ENV['NAME']
end
- GeekBrains
- Электронная почта:
[email protected]
- Slack канал