lita-debug-queue 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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