class Lita::Handlers::Queue

Public Instance Methods

fetch_queue(room) click to toggle source

API

# File lib/lita/handlers/queue.rb, line 15
def fetch_queue(room)
  raise ArgumentError, 'must be a Lita::Room object' unless room.is_a? Lita::Room

  serialized = redis.get(room.id)

  if serialized
    MultiJson.load(serialized)
  else
    []
  end
end
queue_change_to_next(response) click to toggle source
# File lib/lita/handlers/queue.rb, line 81
def queue_change_to_next(response)
  room = room_for(response)
  queue = fetch_queue(room)

  unless queue.empty?
    removed = queue.shift
    store_queue(room, queue)
    response.reply t('messages.removed_from_queue', mention: removed)
    response.reply t('messages.is_the_next_on_queue_motivate', mention: queue.first) unless queue.empty?
  end

  response.reply display_queue(queue, room)
end
queue_list(response) click to toggle source

Commands

# File lib/lita/handlers/queue.rb, line 33
def queue_list(response)
  room = room_for(response)
  queue = fetch_queue(room)

  response.reply display_queue(queue, room)
end
queue_list_next(response) click to toggle source
# File lib/lita/handlers/queue.rb, line 68
def queue_list_next(response)
  room = room_for(response)
  queue = fetch_queue(room)

  if queue.empty?
    response.reply t('messages.queue_is_empty')
  elsif queue.size == 1
    response.reply t('messages.is_the_last_on_queue', mention: queue.first)
  else
    response.reply t('messages.is_the_next_on_queue', mention: queue[1])
  end
end
queue_me(response) click to toggle source
# File lib/lita/handlers/queue.rb, line 40
def queue_me(response)
  room = room_for(response)
  queue = fetch_queue(room)
  me = response.user.mention_name

  if queue.include? me
    response.reply t('messages.already_on_queue')
  else
    queue << me
    store_queue(room, queue)
    response.reply t('messages.added_to_queue', mention: me)
  end
end
queue_rotate(response) click to toggle source
# File lib/lita/handlers/queue.rb, line 95
def queue_rotate(response)
  room = room_for(response)
  queue = fetch_queue(room)

  unless queue.empty?
    new_queue = queue.rotate
    store_queue(room, new_queue)
    response.reply t('messages.moved_to_the_end_of_queue', mention: queue.first)
    response.reply t('messages.is_the_next_on_queue_motivate', mention: new_queue.first)
  end

  response.reply display_queue(queue, room)
end
store_queue(room, queue) click to toggle source
# File lib/lita/handlers/queue.rb, line 27
def store_queue(room, queue)
  redis.set room.id, MultiJson.dump(queue)
end
unqueue_me(response) click to toggle source
# File lib/lita/handlers/queue.rb, line 54
def unqueue_me(response)
  room = room_for(response)
  queue = fetch_queue(room)
  me = response.user.mention_name

  if queue.include? me
    queue.delete(me)
    store_queue(room, queue)
    response.reply t('messages.removed_from_queue', mention: me)
  else
    response.reply t('messages.not_on_queue')
  end
end

Private Instance Methods

display_queue(queue, room) click to toggle source
# File lib/lita/handlers/queue.rb, line 115
def display_queue(queue, room)
  log.debug "displaying info for queue: #{queue.inspect} at #{room.inspect}"

  if queue.empty?
    t('messages.queue_is_empty')
  else
    render_template('display_queue_for_room', room: room, queue: queue)
  end
end
room_for(response) click to toggle source
# File lib/lita/handlers/queue.rb, line 111
def room_for(response)
  response.message.source.room_object
end