lita-debug-queue 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 07d3467b72d42050bc85638eb4efcc6b237e6122
4
- data.tar.gz: 3a9914697cdc2065ae953673ab7db7ab93433888
3
+ metadata.gz: 0a2e7ac111f8ab2cc860f5a352ef7c3465c63cdd
4
+ data.tar.gz: 32d4111430293f16a405becfdfd73088d8299ec7
5
5
  SHA512:
6
- metadata.gz: acbbbbd4a746c67c08950c69fe0fd41a92d0a55114737c41fe39cd9e3150b32aacd28dcf8b77183a3368d16050eae19ceab5cc7e4fc907b22c592a990d9eacb9
7
- data.tar.gz: fdc199e5e42b1757eada62cd1d6e3a23aefaecc77ff33f4b4d1ec3c089e7f235820b01f6ff0016c40b84d51a6a8e97dfa19cf4c0aa2c4f2f141cc17042cf01d7
6
+ metadata.gz: 344e268f20bfe2ea95479bc41d3dff57a53cf3cb631da42599db1c8be175e554aafc6cd876dd2d5e72a9a579b53fa04dc3e8fb55a46137990ddd421b9ce85f57
7
+ data.tar.gz: 50a448fca9c44c970f2b340806007e1919a21331f6a66c1cb1b2052173fc58115198b4668b88990217b908f72098965c1091a2432ab36752d2dc298594a104af
data/NEWS.md CHANGED
@@ -1,5 +1,11 @@
1
1
  ## News
2
2
 
3
+ ### 0.1.2 (2015-08-31)
4
+
5
+ * Add docstrings for built-in Lita help.
6
+ * Fix inconsistency in the way the room is determined.
7
+ * Fix student not being notified on instructor "debug next".
8
+
3
9
  ### 0.1.1 (2015-08-28)
4
10
 
5
11
  * Quick workaround for issue #44 in lita-slack.
@@ -3,33 +3,37 @@ module Lita
3
3
  class DebugQueue < Handler
4
4
  config :classrooms # A mapping from instructor names to classroom channels.
5
5
 
6
- route(/^debug me$/, :add, command: true, help: { })
7
- route(/^debug nvm$/, :cancel, command: true, help: { })
8
- route(/^debug queue$/, :show, command: true, help: { })
9
- route(/^debug count$/, :count, command: true, help: { })
6
+ route(/^debug me$/, :add, command: true,
7
+ help: { 'debug me' => 'Put your name in the queue for debugging help.' })
8
+ route(/^debug nvm$/, :cancel, command: true,
9
+ help: { 'debug nvm' => 'Remove your name from the queue for debugging help.' })
10
+ route(/^debug queue$/, :show, command: true,
11
+ help: { 'debug queue' => 'Show the current queue for your class.' })
12
+ route(/^debug count$/, :count, command: true,
13
+ help: { 'debug count' => 'Count the number of people waiting for help.' })
10
14
  route(/^debug next$/, :next, command: true, restrict_to: [:instructors],
11
- help: { })
15
+ help: { 'debug next' => 'Notify the next student to be helped.' })
12
16
  route(/^debug drop\s+(.+)$/, :drop, command: true, restrict_to: [:instructors],
13
- help: { })
17
+ help: { 'debug drop NAME' => 'Remove the student with NAME from the queue.' })
14
18
  route(/^debug clear$/, :clear, command: true, restrict_to: [:instructors],
15
- help: { })
19
+ help: { 'debug clear' => 'Empty the queue.' })
16
20
 
17
21
  def add(response)
18
22
  return unless check_room!(response)
19
23
  student = response.user.mention_name
20
- if room_queue.include?(student)
24
+ if @room.include?(student)
21
25
  response.reply("#{student}: Easy there killer. You're already on the list.")
22
26
  else
23
- redis.set(@room, room_queue.push(student))
24
- response.reply("#{student}: Help is on the way.")
27
+ @room.add(student)
28
+ response.reply("#{student}: Help is coming soon.")
25
29
  end
26
30
  end
27
31
 
28
32
  def cancel(response)
29
33
  return unless check_room!(response)
30
34
  student = response.user.mention_name
31
- if room_queue.include?(student)
32
- redis.set(@room, room_queue.reject{ |x| x == student })
35
+ if @room.include?(student)
36
+ @room.remove(student)
33
37
  response.reply("#{student}: Glad you figured it out! :)")
34
38
  else
35
39
  response.reply("#{student}: You know you're not in the queue, right?")
@@ -38,48 +42,49 @@ module Lita
38
42
 
39
43
  def show(response)
40
44
  return unless check_room!(response)
41
- response.reply("Queue for #{@room} => #{room_queue}")
45
+ response.reply("Queue for #{@room} => #{@room.queue}")
42
46
  end
43
47
 
44
48
  def count(response)
45
49
  return unless check_room!(response)
46
- response.reply("Hackers seeking fresh eyes: #{room_queue.count}")
50
+ response.reply("Hackers seeking fresh eyes: #{@room.count}")
47
51
  end
48
52
 
49
53
  def next(response)
50
- @room = config.classrooms[response.user.mention_name]
51
- student = room_queue.pop
52
- redis.set(@room, room_queue.reject { |x| x == student })
53
- robot.send_message(response.user, "@#{student}: You're up! Let's debug :allthethings:")
54
- response.reply("#{student} is up next and has been notified.")
54
+ return unless check_room!(response)
55
+ if @room.count.zero?
56
+ response.reply("The queue is empty. Sounds like you could use a break. :)")
57
+ else
58
+ student = @room.next
59
+ robot.send_message(student, "@#{student}: You're up. Let's debug :allthethings:!")
60
+ response.reply("#{student} is up next and has been notified.")
61
+ end
55
62
  end
56
63
 
57
64
  def drop(response)
58
- @room = config.classrooms[response.user.mention_name]
59
- student = response.matches[0][0] # TODO: We could be safer here.
60
- redis.set(@room, room_queue.reject { |x| x == student })
61
- response.reply("#{student} has been removed from the queue.")
65
+ return unless check_room!(response)
66
+ student = response.args[1]
67
+ if @room.include?(student)
68
+ @room.remove(student)
69
+ response.reply("#{student} has been removed from the queue.")
70
+ else
71
+ response.reply("#{student} is not in the queue for #{@room}!")
72
+ end
62
73
  end
63
74
 
64
75
  def clear(response)
65
- @room = config.classrooms[response.user.mention_name]
66
- redis.del(@room)
76
+ return unless check_room!(response)
77
+ @room.clear!
67
78
  response.reply("Sounds like time for :beer: and ping pong!")
68
79
  end
69
80
 
70
81
  private
82
+
71
83
  def check_room!(response)
72
- # KLUDGE: The following is a gross hack as the current room_object is incorrect.
73
- # See lita-slack Issue #44
74
- @room = Lita::Room.find_by_id(response.message.source.room).name
84
+ @room = RoomFinder.for(config.classrooms, response, redis)
75
85
  response.reply_privately("You must be in the class channel to send this message.") unless @room
76
86
  @room
77
87
  end
78
-
79
- def room_queue
80
- room = redis.get(@room)
81
- room ? MultiJson.load(room) : []
82
- end
83
88
  end
84
89
 
85
90
  Lita.register_handler(DebugQueue)
@@ -0,0 +1,23 @@
1
+ module Lita
2
+ module Handlers
3
+ class RoomFinder
4
+ def self.for(rooms, response, redis)
5
+ sender = response.user.mention_name
6
+ room = response.message.source.room_object
7
+ if rooms.has_key?(sender)
8
+ name = rooms[sender]
9
+ RoomQueue.new(name, redis)
10
+ elsif room
11
+ name = self.get_room_name(room)
12
+ RoomQueue.new(name, redis)
13
+ end
14
+ end
15
+
16
+ # KLUDGE: The following is a hack as the current room_object is incorrect. (lita-slack issue #44)
17
+ def self.get_room_name(room)
18
+ # KLUDGE: And this conditional is a hack since the test rooms are mocked.
19
+ room.id == room.name ? room.name : Lita::Room.find_by_id(room.id).name(room)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,41 @@
1
+ module Lita
2
+ module Handlers
3
+ class RoomQueue
4
+ def initialize(name, redis)
5
+ @name = name
6
+ @redis = redis
7
+ end
8
+
9
+ def queue
10
+ data = @redis.get(@name)
11
+ data ? MultiJson.load(data) : []
12
+ end
13
+
14
+ def count
15
+ self.queue.length
16
+ end
17
+
18
+ def include?(student)
19
+ self.queue.include?(student)
20
+ end
21
+
22
+ def add(student)
23
+ @redis.set(@name, self.queue.push(student))
24
+ end
25
+
26
+ def remove(student)
27
+ @redis.set(@name, self.queue.reject { |x| x == student })
28
+ end
29
+
30
+ def next
31
+ student = self.queue.pop
32
+ @redis.set(@name, self.queue.reject { |x| x == student })
33
+ student
34
+ end
35
+
36
+ def clear!
37
+ @redis.del(@name)
38
+ end
39
+ end
40
+ end
41
+ end
@@ -4,6 +4,8 @@ Lita.load_locales Dir[File.expand_path(
4
4
  File.join("..", "..", "locales", "*.yml"), __FILE__
5
5
  )]
6
6
 
7
+ require "lita/handlers/room_finder"
8
+ require "lita/handlers/room_queue"
7
9
  require "lita/handlers/debug_queue"
8
10
 
9
11
  Lita::Handlers::DebugQueue.template_root File.expand_path(
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "lita-debug-queue"
3
- spec.version = "0.1.1"
3
+ spec.version = "0.1.2"
4
4
  spec.authors = ["Brit Butler"]
5
5
  spec.email = ["brit@kingcons.io"]
6
6
  spec.description = "Queue tracking of users who need debugging help with per-channel management"
@@ -5,6 +5,13 @@ describe Lita::Handlers::DebugQueue, lita_handler: true do
5
5
  let(:brit) { Lita::User.create(789, mention_name: "brit") }
6
6
  let(:dylan) { Lita::User.create(123, mention_name: "dylan") }
7
7
  let(:rails) { Lita::Room.new("rails") }
8
+ before(:each) do
9
+ registry.config.handlers.debug_queue.classrooms = {
10
+ 'brit' => 'rails'
11
+ }
12
+ @auth = Lita::Authorization.new(registry.config)
13
+ @auth.add_user_to_group!(brit, :instructors)
14
+ end
8
15
 
9
16
  ## Routes
10
17
  it { is_expected.to route_command("debug me").to(:add) }
@@ -15,40 +22,39 @@ describe Lita::Handlers::DebugQueue, lita_handler: true do
15
22
  it { is_expected.to route_command("debug drop phteven").with_authorization_for(:instructors).to(:drop) }
16
23
  it { is_expected.to route_command("debug clear").with_authorization_for(:instructors).to(:clear) }
17
24
 
18
- ## General Commands
19
- context "user commands" do
25
+ context "a general user" do
20
26
  let(:ocaml) { Lita::Room.new("ocaml") }
21
27
 
22
- it "doesn't allow students to send messages outside the class channel" do
28
+ it "can't send messages outside the class channel" do
23
29
  ["debug me", "debug nvm", "debug queue", "debug count"].each do |cmd|
24
30
  send_command(cmd, as: dylan)
25
31
  expect(replies.last).to start_with("You must be in the class channel")
26
32
  end
27
33
  end
28
34
 
29
- it "allows students to queue themselves for help" do
35
+ it "can queue themselves for help" do
30
36
  send_command("debug me", as: dylan, from: rails)
31
- expect(replies.last).to start_with("dylan: Help is on the way.")
37
+ expect(replies.last).to start_with("dylan: Help is ")
32
38
  end
33
39
 
34
- it "doesn't allow students to queue themselves twice" do
40
+ it "can't queue themselves twice" do
35
41
  send_command("debug me", as: dylan, from: rails)
36
42
  send_command("debug me", as: dylan, from: rails)
37
43
  expect(replies.last).to start_with("dylan: Easy there killer. You're already on the list.")
38
44
  end
39
45
 
40
- it "allows students to remove themselves if they figure it out" do
46
+ it "can remove themselves if they figure it out" do
41
47
  send_command("debug me", as: dylan, from: rails)
42
48
  send_command("debug nvm", as: dylan, from: rails)
43
49
  expect(replies.last).to start_with("dylan: Glad you figured it out! :)")
44
50
  end
45
51
 
46
- it "doesn't allow students to remove themselves if they aren't in the queue" do
52
+ it "can't remove themselves if they aren't in the queue" do
47
53
  send_command("debug nvm", as: dylan, from: rails)
48
54
  expect(replies.last).to start_with("dylan: You know you're not in the queue, right?")
49
55
  end
50
56
 
51
- it "allows students to get an up to date count of people in that room's queue" do
57
+ it "can get an up to date count of people in that room's queue" do
52
58
  send_command("debug me", as: vedika, from: rails)
53
59
  send_command("debug count", from: rails)
54
60
  expect(replies.last).to start_with("Hackers seeking fresh eyes: 1")
@@ -66,17 +72,13 @@ describe Lita::Handlers::DebugQueue, lita_handler: true do
66
72
  end
67
73
  end
68
74
 
69
- context "instructor commands" do
70
- before(:each) do
71
- registry.config.handlers.debug_queue.classrooms = {
72
- 'brit' => 'rails'
73
- }
74
- @auth = Lita::Authorization.new(registry.config)
75
- @auth.add_user_to_group!(brit, :instructors)
75
+ context "an instructor" do
76
+ it "doesn't need to say messages in channel since their classroom is known" do
77
+ send_command("debug count", as: brit)
78
+ expect(replies.last).to start_with("Hackers seeking fresh eyes: 0")
76
79
  end
77
80
 
78
- ## Instructor Commands
79
- it "allows instructors to notify the next student and pop them from the queue" do
81
+ it "can notify the next student and pop them from the queue" do
80
82
  send_command("debug me", as: vedika, from: rails)
81
83
  send_command("debug next", as: brit)
82
84
  expect(replies.last).to start_with("vedika is up next and has been notified.")
@@ -84,7 +86,7 @@ describe Lita::Handlers::DebugQueue, lita_handler: true do
84
86
  expect(replies.last).to start_with("Hackers seeking fresh eyes: 0")
85
87
  end
86
88
 
87
- it "allows instructors to remove a student from the queue by name" do
89
+ it "can remove a student from the queue by name" do
88
90
  send_command("debug me", as: dylan, from: rails)
89
91
  send_command("debug drop dylan", as: brit)
90
92
  expect(replies.last).to start_with("dylan has been removed from the queue.")
@@ -92,7 +94,7 @@ describe Lita::Handlers::DebugQueue, lita_handler: true do
92
94
  expect(replies.last).to start_with("Hackers seeking fresh eyes: 0")
93
95
  end
94
96
 
95
- it "allows instructors to clear the queue completely" do
97
+ it "can clear the queue completely" do
96
98
  send_command("debug me", as: vedika, from: rails)
97
99
  send_command("debug me", as: dylan, from: rails)
98
100
  send_command("debug clear", as: brit)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-debug-queue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brit Butler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-28 00:00:00.000000000 Z
11
+ date: 2015-08-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lita
@@ -109,6 +109,8 @@ files:
109
109
  - Rakefile
110
110
  - lib/lita-debug-queue.rb
111
111
  - lib/lita/handlers/debug_queue.rb
112
+ - lib/lita/handlers/room_finder.rb
113
+ - lib/lita/handlers/room_queue.rb
112
114
  - lita-debug-queue.gemspec
113
115
  - locales/en.yml
114
116
  - spec/lita/handlers/help_queue_spec.rb