Class: Lita::Handlers::Queue

Inherits:
Handler
  • Object
show all
Defined in:
lib/lita/handlers/queue.rb

Instance Method Summary collapse

Instance Method Details

#fetch_queue(room) ⇒ Object

API

Raises:

  • (ArgumentError)


15
16
17
18
19
20
21
22
23
24
25
# 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) ⇒ Object



81
82
83
84
85
86
87
88
89
90
91
92
93
# 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) ⇒ Object

Commands



33
34
35
36
37
38
# 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) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
79
# 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) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
# 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) ⇒ Object



95
96
97
98
99
100
101
102
103
104
105
106
107
# 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) ⇒ Object



27
28
29
# File 'lib/lita/handlers/queue.rb', line 27

def store_queue(room, queue)
  redis.set room.id, MultiJson.dump(queue)
end

#unqueue_me(response) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
# 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