lita-conferenz 1.0.1 → 1.0.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 +4 -4
- data/lita-conferenz.gemspec +1 -1
- data/locales/en.yml +9 -9
- data/spec/lita/handlers/karma/chat_spec.rb +339 -0
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c01edae6597a11d821cb3584499b884aea18bd30
|
4
|
+
data.tar.gz: d9def971f5d6708a941621b1adbd9d3b3717b4ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 940ae2080b798b0dccde2859f84bc8ef737ebb518d145cfdc6c038040f8202761162a99d8dfc417bc716b358815023791aae827d5335d3728da1ee8a8cc6d7b2
|
7
|
+
data.tar.gz: 177610688810155fb8acbe14e6e8d64777a6fe14490998854c79969102136b16f97b5383edffae217d1fdc837ca92806c3e1e400e7ae73b6b2629d734974a9b5
|
data/lita-conferenz.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = "lita-conferenz"
|
3
|
-
spec.version = "1.0.
|
3
|
+
spec.version = "1.0.2"
|
4
4
|
spec.authors = ["Piotr Limanowski"]
|
5
5
|
spec.email = ["plimanowski+conferenz@gmail.com"]
|
6
6
|
spec.description = %q{A Lita handler for tracking conferences attendance.}
|
data/locales/en.yml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
en:
|
2
2
|
lita:
|
3
3
|
handlers:
|
4
|
-
|
4
|
+
conferenz:
|
5
5
|
already_linked: "%{source} is already linked to %{target}."
|
6
6
|
already_unlinked: "%{source} is not linked to %{target}."
|
7
7
|
callable_required: must be a callable object
|
@@ -15,18 +15,18 @@ en:
|
|
15
15
|
decrement_key: TERM--
|
16
16
|
decrement_value: Decrements TERM by one.
|
17
17
|
check_key: TERM~~
|
18
|
-
check_value: Shows the current
|
18
|
+
check_value: Shows the current conferenz of TERM.
|
19
19
|
link_key: TERM1 += TERM2
|
20
20
|
link_value: Links TERM2 to TERM1.
|
21
21
|
unlink_key: TERM1 -= TERM2
|
22
22
|
unlink_value: Unlinks TERM2 from TERM1.
|
23
|
-
list_worst_key: "
|
24
|
-
list_worst_value: Lists the bottom N terms by
|
25
|
-
list_best_key: "
|
26
|
-
list_best_value: Lists the top N terms by
|
27
|
-
modified_key:
|
23
|
+
list_worst_key: "conferenz worst [N]"
|
24
|
+
list_worst_value: Lists the bottom N terms by conferenz. N defaults to 5.
|
25
|
+
list_best_key: "conferenz best [N]"
|
26
|
+
list_best_value: Lists the top N terms by conferenz. N defaults to 5.
|
27
|
+
modified_key: conferenz modified TERM
|
28
28
|
modified_value: Lists the names of users who have upvoted or downvoted TERM.
|
29
|
-
delete_key:
|
29
|
+
delete_key: conferenz delete TERM
|
30
30
|
delete_value: >-
|
31
31
|
Permanently removes TERM and all its link information. TERM is matched
|
32
32
|
exactly as typed and does not adhere to the usual pattern for terms.
|
@@ -36,5 +36,5 @@ en:
|
|
36
36
|
no_terms: There are no terms being tracked yet.
|
37
37
|
threshold_not_satisfied: >-
|
38
38
|
Terms must have less than or equal to -%{threshold} or greater than or equal to
|
39
|
-
%{threshold}
|
39
|
+
%{threshold} conferenz to be linked or linked to.
|
40
40
|
unlink_success: "%{source} has been unlinked from %{target}."
|
@@ -0,0 +1,339 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
describe Lita::Handlers::Conferenz::Chat, lita_handler: true do
|
5
|
+
let(:payload) { double("payload") }
|
6
|
+
|
7
|
+
prepend_before { registry.register_handler(Lita::Handlers::Conferenz::Config) }
|
8
|
+
|
9
|
+
before do
|
10
|
+
registry.config.handlers.conferenz.cooldown = nil
|
11
|
+
registry.config.handlers.conferenz.link_karma_threshold = nil
|
12
|
+
described_class.routes.clear
|
13
|
+
subject.define_routes(payload)
|
14
|
+
end
|
15
|
+
|
16
|
+
it { is_expected.to route("foo++").to(:increment) }
|
17
|
+
it { is_expected.to route("foo--").to(:decrement) }
|
18
|
+
it { is_expected.to route("foo++ bar").to(:increment) }
|
19
|
+
it { is_expected.to route("foo-- bar").to(:decrement) }
|
20
|
+
it { is_expected.to route("foo~~").to(:check) }
|
21
|
+
it { is_expected.to route_command("conferenz best").to(:list_best) }
|
22
|
+
it { is_expected.to route_command("conferenz worst").to(:list_worst) }
|
23
|
+
it { is_expected.to route_command("conferenz modified foo").to(:modified) }
|
24
|
+
it do
|
25
|
+
is_expected.to route_command("conferenz delete").with_authorization_for(:karma_admins).to(:delete)
|
26
|
+
end
|
27
|
+
it { is_expected.to route_command("conferenz").to(:list_best) }
|
28
|
+
it { is_expected.to route_command("foo += bar").to(:link) }
|
29
|
+
it { is_expected.to route_command("foo += bar++").to(:link) }
|
30
|
+
it { is_expected.to route_command("foo += bar--").to(:link) }
|
31
|
+
it { is_expected.to route_command("foo += bar~~").to(:link) }
|
32
|
+
it { is_expected.to route_command("foo -= bar").to(:unlink) }
|
33
|
+
it { is_expected.to route_command("foo -= bar++").to(:unlink) }
|
34
|
+
it { is_expected.to route_command("foo -= bar--").to(:unlink) }
|
35
|
+
it { is_expected.to route_command("foo -= bar~~").to(:unlink) }
|
36
|
+
it { is_expected.not_to route("+++++").to(:increment) }
|
37
|
+
it { is_expected.not_to route("-----").to(:decrement) }
|
38
|
+
it { is_expected.not_to route("foo++bar").to(:increment) }
|
39
|
+
it { is_expected.not_to route("foo--bar").to(:decrement) }
|
40
|
+
|
41
|
+
describe "#increment" do
|
42
|
+
it "increases the term's score by one and says the new score" do
|
43
|
+
send_message("foo++")
|
44
|
+
expect(replies.last).to eq("foo: 1")
|
45
|
+
end
|
46
|
+
|
47
|
+
it "matches multiple terms in one message" do
|
48
|
+
send_message("foo++ bar++")
|
49
|
+
expect(replies.last).to eq("foo: 1; bar: 1")
|
50
|
+
end
|
51
|
+
|
52
|
+
it "doesn't start from zero if the term already has a positive score" do
|
53
|
+
send_message("foo++")
|
54
|
+
send_message("foo++")
|
55
|
+
expect(replies.last).to eq("foo: 2")
|
56
|
+
end
|
57
|
+
|
58
|
+
it "replies with a warning if term increment is on cooldown" do
|
59
|
+
registry.config.handlers.karma.cooldown = 10
|
60
|
+
send_message("foo++")
|
61
|
+
send_message("foo++")
|
62
|
+
expect(replies.last).to match(/cannot modify foo/)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "is case insensitive" do
|
66
|
+
send_message("foo++")
|
67
|
+
send_message("FOO++")
|
68
|
+
expect(replies.last).to eq("foo: 2")
|
69
|
+
end
|
70
|
+
|
71
|
+
it "handles Unicode word characters" do
|
72
|
+
send_message("föö++")
|
73
|
+
expect(replies.last).to eq("föö: 1")
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "#decrement" do
|
78
|
+
it "decreases the term's score by one and says the new score" do
|
79
|
+
send_message("foo--")
|
80
|
+
expect(replies.last).to eq("foo: -1")
|
81
|
+
end
|
82
|
+
|
83
|
+
it "matches multiple terms in one message" do
|
84
|
+
send_message("foo-- bar--")
|
85
|
+
expect(replies.last).to eq("foo: -1; bar: -1")
|
86
|
+
end
|
87
|
+
|
88
|
+
it "doesn't start from zero if the term already has a positive score" do
|
89
|
+
send_message("foo++")
|
90
|
+
send_message("foo--")
|
91
|
+
expect(replies.last).to eq("foo: 0")
|
92
|
+
end
|
93
|
+
|
94
|
+
it "replies with a warning if term increment is on cooldown" do
|
95
|
+
registry.config.handlers.karma.cooldown = 10
|
96
|
+
send_message("foo--")
|
97
|
+
send_message("foo--")
|
98
|
+
expect(replies.last).to match(/cannot modify foo/)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
describe "#check" do
|
103
|
+
it "says the term's current score" do
|
104
|
+
send_message("foo~~")
|
105
|
+
expect(replies.last).to eq("foo: 0")
|
106
|
+
end
|
107
|
+
|
108
|
+
it "matches multiple terms in one message" do
|
109
|
+
send_message("foo~~ bar~~")
|
110
|
+
expect(replies.last).to eq("foo: 0; bar: 0")
|
111
|
+
end
|
112
|
+
|
113
|
+
it "doesn't match the same term multiple times in one message" do
|
114
|
+
send_message("foo~~ foo~~")
|
115
|
+
expect(replies.size).to eq(1)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
describe "#list" do
|
120
|
+
it "replies with a warning if there are no terms" do
|
121
|
+
send_command("conferenz")
|
122
|
+
expect(replies.last).to match(/no terms being tracked/)
|
123
|
+
end
|
124
|
+
|
125
|
+
context "with modified terms" do
|
126
|
+
before do
|
127
|
+
send_message(
|
128
|
+
"one++ one++ one++ two++ two++ three++ four++ four-- five--"
|
129
|
+
)
|
130
|
+
end
|
131
|
+
|
132
|
+
it "lists the top 5 terms by default" do
|
133
|
+
send_command("conferenz")
|
134
|
+
expect(replies.last).to eq <<-MSG.chomp
|
135
|
+
1. one (3)
|
136
|
+
2. two (2)
|
137
|
+
3. three (1)
|
138
|
+
4. four (0)
|
139
|
+
5. five (-1)
|
140
|
+
MSG
|
141
|
+
end
|
142
|
+
|
143
|
+
it 'lists the bottom 5 terms when passed "worst"' do
|
144
|
+
send_command("conferenz worst")
|
145
|
+
expect(replies.last).to eq <<-MSG.chomp
|
146
|
+
1. five (-1)
|
147
|
+
2. four (0)
|
148
|
+
3. three (1)
|
149
|
+
4. two (2)
|
150
|
+
5. one (3)
|
151
|
+
MSG
|
152
|
+
end
|
153
|
+
|
154
|
+
it "limits the list to the count passed as the second argument" do
|
155
|
+
send_command("conferenz best 2")
|
156
|
+
expect(replies.last).to eq <<-MSG.chomp
|
157
|
+
1. one (3)
|
158
|
+
2. two (2)
|
159
|
+
MSG
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
describe "#link" do
|
165
|
+
it "says that it's linked term 2 to term 1" do
|
166
|
+
send_command("foo += bar")
|
167
|
+
expect(replies.last).to eq("bar has been linked to foo.")
|
168
|
+
end
|
169
|
+
|
170
|
+
it "says that term 2 was already linked to term 1 if it was" do
|
171
|
+
send_command("foo += bar")
|
172
|
+
send_command("foo += bar")
|
173
|
+
expect(replies.last).to eq("bar is already linked to foo.")
|
174
|
+
end
|
175
|
+
|
176
|
+
it "causes term 1's score to be modified by term 2's" do
|
177
|
+
send_message("foo++ bar++ baz++")
|
178
|
+
send_command("foo += bar")
|
179
|
+
send_command("foo += baz")
|
180
|
+
send_message("foo~~")
|
181
|
+
expect(replies.last).to match(
|
182
|
+
/foo: 3 \(1\), linked to: ba[rz]: 1, ba[rz]: 1/
|
183
|
+
)
|
184
|
+
end
|
185
|
+
|
186
|
+
context "when link_karma_threshold is set" do
|
187
|
+
before do
|
188
|
+
registry.config.handlers.karma.link_karma_threshold = 1
|
189
|
+
end
|
190
|
+
|
191
|
+
it "doesn't allow a term to be linked if both are below the threshold" do
|
192
|
+
send_command("foo += bar")
|
193
|
+
expect(replies.last).to include("must have less than")
|
194
|
+
end
|
195
|
+
|
196
|
+
it "doesn't allow a term to be linked if it's below the threshold" do
|
197
|
+
send_command("foo++")
|
198
|
+
send_command("foo += bar")
|
199
|
+
expect(replies.last).to include("must have less than")
|
200
|
+
end
|
201
|
+
|
202
|
+
it "doesn't allow a term to be linked to another term below the threshold" do
|
203
|
+
send_command("bar++")
|
204
|
+
send_command("foo += bar")
|
205
|
+
expect(replies.last).to include("must have less than")
|
206
|
+
end
|
207
|
+
|
208
|
+
it "allows links if both terms meet the threshold" do
|
209
|
+
send_command("foo++ bar++")
|
210
|
+
send_command("foo += bar")
|
211
|
+
expect(replies.last).to include("has been linked")
|
212
|
+
send_command("bar += foo")
|
213
|
+
expect(replies.last).to include("has been linked")
|
214
|
+
end
|
215
|
+
|
216
|
+
it "uses the absolute value for terms with negative karma" do
|
217
|
+
send_command("foo-- bar--")
|
218
|
+
send_command("foo += bar")
|
219
|
+
expect(replies.last).to include("has been linked")
|
220
|
+
send_command("bar += foo")
|
221
|
+
expect(replies.last).to include("has been linked")
|
222
|
+
end
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
describe "#unlink" do
|
227
|
+
it "says that it's unlinked term 2 from term 1" do
|
228
|
+
send_command("foo += bar")
|
229
|
+
send_command("foo -= bar")
|
230
|
+
expect(replies.last).to eq("bar has been unlinked from foo.")
|
231
|
+
end
|
232
|
+
|
233
|
+
it "says that term 2 was not linked to term 1 if it wasn't" do
|
234
|
+
send_command("foo -= bar")
|
235
|
+
expect(replies.last).to eq("bar is not linked to foo.")
|
236
|
+
end
|
237
|
+
|
238
|
+
it "causes term 1's score to stop being modified by term 2's" do
|
239
|
+
send_message("foo++ bar++")
|
240
|
+
send_command("foo += bar")
|
241
|
+
send_command("foo -= bar")
|
242
|
+
send_message("foo~~")
|
243
|
+
expect(replies.last).to eq("foo: 1")
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
describe "#modified" do
|
248
|
+
it "replies with a message if the term hasn't been modified" do
|
249
|
+
send_command("conferenz modified foo")
|
250
|
+
expect(replies.last).to match(/never been modified/)
|
251
|
+
end
|
252
|
+
|
253
|
+
it "lists users who have modified the given term in count order" do
|
254
|
+
other_user = Lita::User.create("2", name: "Other User")
|
255
|
+
send_message("foo++", as: user)
|
256
|
+
send_message("foo++", as: user)
|
257
|
+
send_message("foo++", as: other_user)
|
258
|
+
send_command("conferenz modified foo")
|
259
|
+
expect(replies.last).to eq("#{user.name}, #{other_user.name}")
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
describe "#delete" do
|
264
|
+
before do
|
265
|
+
robot.auth.add_user_to_group!(user, :karma_admins)
|
266
|
+
end
|
267
|
+
|
268
|
+
it "deletes the term" do
|
269
|
+
send_message("foo++")
|
270
|
+
send_command("conferenz delete foo")
|
271
|
+
expect(replies.last).to eq("foo has been deleted.")
|
272
|
+
send_message("foo~~")
|
273
|
+
expect(replies.last).to eq("foo: 0")
|
274
|
+
end
|
275
|
+
|
276
|
+
it "matches terms exactly, including leading whitespace" do
|
277
|
+
term = " 'foo bar* 'baz''/ :"
|
278
|
+
subject.redis.zincrby("terms", 1, term)
|
279
|
+
send_command("conferenz delete #{term}")
|
280
|
+
expect(replies.last).to include("has been deleted")
|
281
|
+
end
|
282
|
+
|
283
|
+
it "clears the modification list" do
|
284
|
+
send_message("foo++")
|
285
|
+
send_command("conferenz delete foo")
|
286
|
+
send_command("conferenz modified foo")
|
287
|
+
expect(replies.last).to eq("foo has never been modified.")
|
288
|
+
end
|
289
|
+
|
290
|
+
it "clears the deleted term's links" do
|
291
|
+
send_command("foo += bar")
|
292
|
+
send_command("foo += baz")
|
293
|
+
send_command("conferenz delete foo")
|
294
|
+
send_message("foo++")
|
295
|
+
expect(replies.last).to eq("foo: 1")
|
296
|
+
end
|
297
|
+
|
298
|
+
it "clears links from other terms connected to the deleted term" do
|
299
|
+
send_command("bar += foo")
|
300
|
+
send_command("baz += foo")
|
301
|
+
send_command("conferenz delete foo")
|
302
|
+
send_message("bar++")
|
303
|
+
expect(replies.last).to eq("bar: 1")
|
304
|
+
send_message("baz++")
|
305
|
+
expect(replies.last).to eq("baz: 1")
|
306
|
+
end
|
307
|
+
end
|
308
|
+
|
309
|
+
describe "custom term patterns and normalization" do
|
310
|
+
before do
|
311
|
+
registry.config.handlers.karma.term_pattern = /[<:]([^>:]+)[>:]/
|
312
|
+
registry.config.handlers.karma.term_normalizer = lambda do |term|
|
313
|
+
term.to_s.downcase.strip.sub(/[<:]([^>:]+)[>:]/, '\1')
|
314
|
+
end
|
315
|
+
described_class.routes.clear
|
316
|
+
subject.define_routes(payload)
|
317
|
+
end
|
318
|
+
|
319
|
+
it "increments multi-word terms bounded by delimeters" do
|
320
|
+
send_message(":Some Thing:++")
|
321
|
+
expect(replies.last).to eq("some thing: 1")
|
322
|
+
end
|
323
|
+
|
324
|
+
it "increments terms with symbols that are bounded by delimeters" do
|
325
|
+
send_message("<C++>++")
|
326
|
+
expect(replies.last).to eq("c++: 1")
|
327
|
+
end
|
328
|
+
|
329
|
+
it "decrements multi-word terms bounded by delimeters" do
|
330
|
+
send_message(":Some Thing:--")
|
331
|
+
expect(replies.last).to eq("some thing: -1")
|
332
|
+
end
|
333
|
+
|
334
|
+
it "checks multi-word terms bounded by delimeters" do
|
335
|
+
send_message(":Some Thing:~~")
|
336
|
+
expect(replies.last).to eq("some thing: 0")
|
337
|
+
end
|
338
|
+
end
|
339
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lita-conferenz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Limanowski
|
@@ -111,6 +111,7 @@ files:
|
|
111
111
|
- lita-conferenz.gemspec
|
112
112
|
- locales/en.yml
|
113
113
|
- spec/lita/handlers/conferenz/chat_spec.rb
|
114
|
+
- spec/lita/handlers/karma/chat_spec.rb
|
114
115
|
- spec/spec_helper.rb
|
115
116
|
homepage: https://github.com/peel/conferenz
|
116
117
|
licenses:
|
@@ -139,4 +140,5 @@ specification_version: 4
|
|
139
140
|
summary: A Lita handler for tracking conferences attendance.
|
140
141
|
test_files:
|
141
142
|
- spec/lita/handlers/conferenz/chat_spec.rb
|
143
|
+
- spec/lita/handlers/karma/chat_spec.rb
|
142
144
|
- spec/spec_helper.rb
|