Skip to content

Ermak-13/queue

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

QUEUE (ТЕСТОВЫЙ ПРОЕКТ)

Требуется реализовать приоритетную очередь работающую в рамках одного процесса. Сохранять задания на диск, в базу не нужно.

Работать она должна следующим образом:

  • очередь описывается классом Queue

  • метод Queue#push позволяет добавлять в очередь объекты класса Task, которые характеризуются временем до которого его нужно выполнить(finish_time) описанием(description) task = Task.new finish_time: Time.parse('2012-06-25 10:00'), description: 'foo'

  • метод Queue#get_task(finish_time) возвращает объект класса Task. finish_time - время, к которому задание должно быть выполнено, объект класса Time один вызов - один объект после вызова Queue#get_task - задание удаляется из очереди если в очереди есть просроченные задания - сначала нужно вернуть их просроченные задания возвращаются по очереди, где сначала идут самые "просроченные" задания если в очереди нет "просроченных" заданий, вернуть те, которые должны быть выполнены точно в переданное время. Если нет "просроченных" или таких заданий, которые должны быть выполнены точно в переданное время вернуть nil

  • метод Queue#pop возвращает объект класса Task. один вызов - один объект после вызова Queue#pop - задание удаляется из очереди если в очереди есть просроченные задания - нужно вернуть их задания возвращаются по очереди, где сначала идут самые "просроченные" задания если нет "просроченных" заданий - вернуть nil

  • если задание показалось Вам очень простым, реализуйте эту очередь так, что бы она была threadsafe. если всё ещё слишком просто - реализуйте эту очередь так, что бы сообщения сохранялись в redis, и методы pop, push, get_task выполнялись атомарно.

Обязательные требования:

  • полное покрытие тестами
  • понятный, документированный, легко читаемый код
  • разработка через VCS git
  • размещение кода на github.com
  • атомарные commit-ы в git с понятным commit message
  • должно работать под всеми версиями ruby (1.8.7 - 1.9.3)
  • код проекта должен использовать bundler (Gemfile.lock добавить в репозиторий)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages