lita-queue 0.2.0 → 0.3.0

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: fb902787e39a653ac07718c6d84dc1cf33f9b066
4
- data.tar.gz: 523a6d6ec43a1d645f24e872089ac61a40b11349
3
+ metadata.gz: 1c68bea41fdca6b89d3d91c689a4a2f270204a01
4
+ data.tar.gz: a46a13c18c6624f7190d9151341b0d95054b00b6
5
5
  SHA512:
6
- metadata.gz: 2ff331250ad6460c32ab3808c1eda94408dfb9b73a99743f39191bf11e2566dd9d40983bf51820ad67ade07472bbc780814f454b0c893b79a5de448528613bf6
7
- data.tar.gz: 3563b154f31d16ef18329f86d97585358e046b2f92865b118e6babfe81566208fb41858cdf46431b8ecd577fa6986b817d9d57f28b0908b3f6e9a9f8e67c066b
6
+ metadata.gz: 82cdd8f102c7d4fa791484b7a0cc8efca7686d3d8498cf1be886ba003d96d6db41ea13c2b45b985fe4039cb062b8b86342856442f746a27baa342164eece9b3f
7
+ data.tar.gz: 3e84ef189225c3f501f1f95287b38e88f24b921395a5aa2f67cd2fabdae4def1047af8387fb35bbcde3bbfb983de6ba9509c32f7a52a9fc312fdc16e403fd0cd
data/CHANGELOG.md CHANGED
@@ -4,6 +4,13 @@ This project adheres to [Semantic Versioning](http://semver.org/).
4
4
 
5
5
  We follow [Keep a Changelog](http://keepachangelog.com/) format.
6
6
 
7
+ ## 0.3.0 - 2015-07-19
8
+ ### Modified
9
+ - Correctly using Lita::Room object
10
+ * create queues based on room ID
11
+ * display queue using room name metadata
12
+ * modified specs to catch this change
13
+
7
14
  ## 0.2.0 - 2015-06-21
8
15
  ### Added
9
16
  - Respond to the following additional command:
@@ -13,17 +13,19 @@ module Lita
13
13
  # API
14
14
 
15
15
  def fetch_queue(room)
16
- serialized = redis.get(room)
16
+ raise ArgumentError, 'must be a Lita::Room object' unless room.is_a? Lita::Room
17
+
18
+ serialized = redis.get(room.id)
17
19
 
18
20
  if serialized
19
- JSON.parse(serialized)
21
+ MultiJson.load(serialized)
20
22
  else
21
23
  []
22
24
  end
23
25
  end
24
26
 
25
27
  def store_queue(room, queue)
26
- redis.set room, queue.to_json
28
+ redis.set room.id, MultiJson.dump(queue)
27
29
  end
28
30
 
29
31
  # Commands
@@ -107,14 +109,16 @@ module Lita
107
109
  private
108
110
 
109
111
  def room_for(response)
110
- response.message.source.room || '--global--'
112
+ response.message.source.room_object
111
113
  end
112
114
 
113
115
  def display_queue(queue, room)
116
+ log.debug "displaying info for queue: #{queue.inspect} at #{room.inspect}"
117
+
114
118
  if queue.empty?
115
119
  "Queue is empty!"
116
120
  else
117
- "Queue for #{room}: #{queue}"
121
+ "Queue for #{room.name}: #{queue}"
118
122
  end
119
123
  end
120
124
  end
data/lita-queue.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "lita-queue"
3
- spec.version = "0.2.0"
3
+ spec.version = "0.3.0"
4
4
  spec.authors = ["Gabriel Mazetto"]
5
5
  spec.email = ["brodock@gmail.com"]
6
6
  spec.description = "Lita plugin to manage channel specific queue"
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
14
14
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
15
15
  spec.require_paths = ["lib"]
16
16
 
17
- spec.add_runtime_dependency "lita", ">= 4.3"
17
+ spec.add_runtime_dependency "lita", ">= 4.4.3"
18
18
 
19
19
  spec.add_development_dependency "bundler", "~> 1.3"
20
20
  spec.add_development_dependency "pry-byebug"
@@ -15,24 +15,24 @@ describe Lita::Handlers::Queue, lita_handler: true do
15
15
  it { is_expected.to route_command("queue rotate!").to(:queue_rotate) }
16
16
  #it { is_expected.to route_command("queue = [something,here]").to(:queue_recreate) }
17
17
 
18
- let(:channel) { source.room || '--global--' }
18
+ let(:room) { Lita::Room.new(1, {name: 'my-channel'}) }
19
19
 
20
20
  # Commands
21
21
  describe "#queue_list" do
22
22
  context "when queue is empty" do
23
- before { subject.store_queue(channel, []) }
23
+ before { subject.store_queue(room, []) }
24
24
 
25
25
  it "replies with an empty queue message" do
26
- send_command("queue")
26
+ send_command("queue", from: room)
27
27
  expect(replies.last).to include("Queue is empty")
28
28
  end
29
29
  end
30
30
 
31
31
  context "when queue has elements" do
32
- before { subject.store_queue(channel, [user1.mention_name, user2.mention_name]) }
32
+ before { subject.store_queue(room, [user1.mention_name, user2.mention_name]) }
33
33
 
34
34
  it "replies with a list of queue users" do
35
- send_command("queue")
35
+ send_command("queue", from: room)
36
36
  expect(replies.last).to include(user1.mention_name, user2.mention_name)
37
37
  end
38
38
  end
@@ -40,39 +40,39 @@ describe Lita::Handlers::Queue, lita_handler: true do
40
40
 
41
41
  describe "#queue_me" do
42
42
  context "when I'm already queued" do
43
- before { subject.store_queue(channel, [user.mention_name]) }
43
+ before { subject.store_queue(room, [user.mention_name]) }
44
44
 
45
45
  it "replies with an error message" do
46
- send_command("queue me")
46
+ send_command("queue me", from: room)
47
47
  expect(replies.last).to include("already on queue")
48
48
  end
49
49
  end
50
50
 
51
51
  context "when I'm not on queue" do
52
52
  it "replies with a confirmation message" do
53
- send_command("queue me")
53
+ send_command("queue me", from: room)
54
54
  expect(replies.last).to include("#{user.name} have been added to queue")
55
- expect(subject.fetch_queue(channel)).to include(user.mention_name)
55
+ expect(subject.fetch_queue(room)).to include(user.mention_name)
56
56
  end
57
57
  end
58
58
  end
59
59
 
60
60
  describe "#unqueue_me" do
61
61
  context "when I'm already queued" do
62
- before { subject.store_queue(channel, [user.mention_name]) }
62
+ before { subject.store_queue(room, [user.mention_name]) }
63
63
 
64
64
  it "replies with a confirmation and remove from queue" do
65
- send_command("unqueue me")
65
+ send_command("unqueue me", from: room)
66
66
  expect(replies.last).to include("#{user.name} have been removed from queue")
67
- expect(subject.fetch_queue(channel)).not_to include(user.mention_name)
67
+ expect(subject.fetch_queue(room)).not_to include(user.mention_name)
68
68
  end
69
69
  end
70
70
 
71
71
  context "when I'm not on queue" do
72
- before { subject.store_queue(channel, []) }
72
+ before { subject.store_queue(room, []) }
73
73
 
74
74
  it "replies with an error message" do
75
- send_command("unqueue me")
75
+ send_command("unqueue me", from: room)
76
76
  expect(replies.last).to include("not on queue!")
77
77
  end
78
78
  end
@@ -81,26 +81,26 @@ describe Lita::Handlers::Queue, lita_handler: true do
81
81
  describe "#queue_list_next" do
82
82
  context "when queue is empty" do
83
83
  it "replies with an error message" do
84
- send_command("queue next?")
84
+ send_command("queue next?", from: room)
85
85
  expect(replies.last).to include("Queue is empty")
86
86
  end
87
87
  end
88
88
 
89
89
  context "when queue has only one element" do
90
- before { subject.store_queue(channel, [user1.mention_name]) }
90
+ before { subject.store_queue(room, [user1.mention_name]) }
91
91
 
92
92
  it "replies listing current user on queue and warning that's the last one" do
93
- send_command("queue next?")
93
+ send_command("queue next?", from: room)
94
94
  expect(replies.last).to include(user1.mention_name)
95
95
  expect(replies.last).to include("is the last one on queue")
96
96
  end
97
97
  end
98
98
 
99
99
  context "when queue has more than one elements" do
100
- before { subject.store_queue(channel, [user1.mention_name, user2.mention_name]) }
100
+ before { subject.store_queue(room, [user1.mention_name, user2.mention_name]) }
101
101
 
102
102
  it "replies listing the next one on the queue" do
103
- send_command("queue next?")
103
+ send_command("queue next?", from: room)
104
104
  expect(replies.last).to include(user2.mention_name)
105
105
  end
106
106
  end
@@ -109,29 +109,29 @@ describe Lita::Handlers::Queue, lita_handler: true do
109
109
  describe "#queue_change_to_next" do
110
110
  context "when queue is empty" do
111
111
  it "replies with an error message" do
112
- send_command("queue next!")
112
+ send_command("queue next!", from: room)
113
113
  expect(replies.last).to include("Queue is empty")
114
114
  end
115
115
  end
116
116
 
117
117
  context "when queue has enough elements" do
118
118
  let(:queue) { [user1.mention_name, user2.mention_name] }
119
- before { subject.store_queue(channel, queue) }
119
+ before { subject.store_queue(room, queue) }
120
120
 
121
121
  it "remove the first element from the queue" do
122
- send_command("queue next!")
123
- expect(subject.fetch_queue(channel)).to eq([user2.mention_name])
122
+ send_command("queue next!", from: room)
123
+ expect(subject.fetch_queue(room)).to eq([user2.mention_name])
124
124
  end
125
125
 
126
126
  it "replies informing who was been removed and who is next" do
127
- send_command("queue next!")
127
+ send_command("queue next!", from: room)
128
128
  expect(replies.first).to include("#{user1.mention_name} have been removed from queue")
129
129
  expect(replies[1]).to include("#{user2.mention_name} is the next")
130
130
 
131
131
  end
132
132
 
133
133
  it "informs the new queue after execution" do
134
- send_command("queue next!")
134
+ send_command("queue next!", from: room)
135
135
  expect(replies.last).to include(user2.mention_name)
136
136
  expect(replies.last).not_to include(user1.mention_name)
137
137
  end
@@ -140,7 +140,7 @@ describe Lita::Handlers::Queue, lita_handler: true do
140
140
  let(:queue) { [user2.mention_name] }
141
141
 
142
142
  it "replies with a notification message when removing the last element from queue" do
143
- send_command("queue next!")
143
+ send_command("queue next!", from: room)
144
144
  expect(replies.first).to include("#{user2.mention_name} have been removed from queue")
145
145
  expect(replies.last).to include("Queue is empty")
146
146
  end
@@ -150,15 +150,15 @@ describe Lita::Handlers::Queue, lita_handler: true do
150
150
 
151
151
  describe "#queue_rotate" do
152
152
  context "when queue has enough elements" do
153
- before { subject.store_queue(channel, [user1.mention_name, user2.mention_name, user3.mention_name]) }
153
+ before { subject.store_queue(room, [user1.mention_name, user2.mention_name, user3.mention_name]) }
154
154
 
155
155
  it "removes the first element and add to the end" do
156
- send_command("queue rotate!")
157
- expect(subject.fetch_queue(channel)).to eq([user2.mention_name, user3.mention_name, user1.mention_name])
156
+ send_command("queue rotate!", from: room)
157
+ expect(subject.fetch_queue(room)).to eq([user2.mention_name, user3.mention_name, user1.mention_name])
158
158
  end
159
159
 
160
160
  it "replies mentioning the next user on queue and notifing the rotated one" do
161
- send_command("queue rotate!")
161
+ send_command("queue rotate!", from: room)
162
162
  expect(replies.first).to include("#{user1.mention_name} has been moved to the end of the queue")
163
163
  expect(replies[1]).to include("#{user2.mention_name} is the next")
164
164
  end
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require "pry"
1
2
  require "simplecov"
2
3
  require "coveralls"
3
4
  SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
@@ -12,3 +13,31 @@ require "lita/rspec"
12
13
  # A compatibility mode is provided for older plugins upgrading from Lita 3. Since this plugin
13
14
  # was generated with Lita 4, the compatibility mode should be left disabled.
14
15
  Lita.version_3_compatibility_mode = false
16
+
17
+ # Backport / Monkey Patch Lita Spec Handler Helper until a new version > 4.4.3 is released.
18
+ # More info here: https://github.com/jimmycuadra/lita/pull/129
19
+ module Lita
20
+ module RSpec
21
+ module Handler
22
+ # Sends a message to the robot.
23
+ # @param body [String] The message to send.
24
+ # @param as [Lita::User] The user sending the message.
25
+ # @param as [Lita::Room] The room where the message is received from.
26
+ # @return [void]
27
+ def send_message(body, as: user, from: nil)
28
+ message = Message.new(robot, body, Source.new(user: as, room: from))
29
+
30
+ robot.receive(message)
31
+ end
32
+
33
+ # Sends a "command" message to the robot.
34
+ # @param body [String] The message to send.
35
+ # @param as [Lita::User] The user sending the message.
36
+ # @param as [Lita::Room] The room where the message is received from.
37
+ # @return [void]
38
+ def send_command(body, as: user, from: nil)
39
+ send_message("#{robot.mention_name}: #{body}", as: as, from: from)
40
+ end
41
+ end
42
+ end
43
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-queue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gabriel Mazetto
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-21 00:00:00.000000000 Z
11
+ date: 2015-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lita
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '4.3'
19
+ version: 4.4.3
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '4.3'
26
+ version: 4.4.3
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -165,7 +165,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
165
165
  version: '0'
166
166
  requirements: []
167
167
  rubyforge_project:
168
- rubygems_version: 2.4.6
168
+ rubygems_version: 2.4.8
169
169
  signing_key:
170
170
  specification_version: 4
171
171
  summary: Lita plugin to manage channel specific queue