lita-coffee 0.0.2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -16
- data/lib/lita/handlers/coffee.rb +239 -120
- data/lib/lita-coffee/version.rb +6 -0
- data/lib/lita-coffee.rb +1 -0
- data/lita-coffee.gemspec +6 -3
- data/spec/lita/handlers/coffee_spec.rb +92 -20
- metadata +9 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c162431752710f02765329fd0069db1ec4ad97e6
|
4
|
+
data.tar.gz: 07c85dc2df9409970da32028f9ead325150cd20f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0301877fcaf23733f15f37d2acbecd2cdf73c05d274fd3a569a62fe5b4a2a1f07179674556ae848d8eef1049cc99d50b8e7a59fd45774106e06c81853cba8499
|
7
|
+
data.tar.gz: fddb2a37595679ae62937bc91eabf0894079eaae42fbb8ec5f5068982dff8165deb4f00dafe4f1ac62d36667923fdd22d2f311c9385277f5d28479e89f353a79
|
data/README.md
CHANGED
@@ -21,22 +21,8 @@ config.handlers.lita-coffee.default_coffee = "Single origin espresso"
|
|
21
21
|
|
22
22
|
## Usage
|
23
23
|
|
24
|
-
```
|
25
|
-
|
26
|
-
/^\(coffee\)(\s+\-[bcdgist]?|\s+\+)?(.*)/i,
|
27
|
-
:coffee,
|
28
|
-
help: {
|
29
|
-
'(coffee)' => "List the (coffee) orders for your group",
|
30
|
-
'(coffee) -i' => "Display your (coffee) profile",
|
31
|
-
'(coffee) -s Colombian Filter' => "Set your (coffee) preference",
|
32
|
-
'(coffee) -g Cool Kids' => "Change your (coffee) group",
|
33
|
-
'(coffee) +' => "Order a (coffee)",
|
34
|
-
'(coffee) -c' => "Cancel your (coffee) order",
|
35
|
-
'(coffee) -b You owe me one!' => "Buy (coffee) for your group, clear the orders and send a message",
|
36
|
-
'(coffee) -t' => "Display (coffee) system settings",
|
37
|
-
'(coffee) -d' => "Delete you from the (coffee) system",
|
38
|
-
}
|
39
|
-
)
|
24
|
+
```
|
25
|
+
help coffee
|
40
26
|
```
|
41
27
|
|
42
28
|
## License
|
data/lib/lita/handlers/coffee.rb
CHANGED
@@ -11,182 +11,297 @@ module Lita
|
|
11
11
|
# default_coffee - the coffee we will order if users don't specify what they would like
|
12
12
|
config :default_group, type: String, default: 'coffee-lovers'
|
13
13
|
config :default_coffee, type: String, default: 'Single origin espresso'
|
14
|
+
config :default_timeout, type: Integer, default: 28800
|
14
15
|
on :loaded, :set_constants
|
15
16
|
|
16
17
|
def set_constants(payload)
|
17
18
|
@@DEFAULT_GROUP = config.default_group
|
18
19
|
@@DEFAULT_COFFEE = config.default_coffee
|
20
|
+
@@DEFAULT_GROUP_TIMEOUT = config.default_timeout
|
19
21
|
end
|
20
22
|
|
23
|
+
# ---------------
|
24
|
+
# Nice new routes
|
25
|
+
# ---------------
|
26
|
+
|
27
|
+
# Welcome new users
|
28
|
+
route(
|
29
|
+
/coffee/i,
|
30
|
+
:init_user,
|
31
|
+
)
|
32
|
+
|
33
|
+
# Order a coffee
|
34
|
+
route(
|
35
|
+
/^\s*\(?coffee\)?\s+\+\s*(\S.*)?$/i,
|
36
|
+
:get_me_a_coffee,
|
37
|
+
help: {
|
38
|
+
'coffee +' => "Order a coffee",
|
39
|
+
}
|
40
|
+
)
|
41
|
+
|
42
|
+
# Cancel your order
|
21
43
|
route(
|
22
|
-
/^\(?coffee\)
|
23
|
-
:
|
44
|
+
/^\s*\(?coffee\)?\s+\-c\s*$/i,
|
45
|
+
:cancel_order,
|
46
|
+
help: {
|
47
|
+
'coffee -c' => "Cancel your order",
|
48
|
+
}
|
49
|
+
)
|
50
|
+
|
51
|
+
# List orders
|
52
|
+
route(
|
53
|
+
/^\s*\(?coffee\)?\s*$/i,
|
54
|
+
:list_orders,
|
24
55
|
help: {
|
25
56
|
'coffee' => "List the orders for your group",
|
57
|
+
}
|
58
|
+
)
|
59
|
+
|
60
|
+
# Display profile informatino
|
61
|
+
route(
|
62
|
+
/^\s*\(?coffee\)?\s+\-i\s*$/i,
|
63
|
+
:display_profile,
|
64
|
+
help: {
|
26
65
|
'coffee -i' => "Display your profile",
|
66
|
+
}
|
67
|
+
)
|
68
|
+
|
69
|
+
# Set preferences
|
70
|
+
route(
|
71
|
+
/^\s*\(?coffee\)?\s+\-s\s+(.*)$/i,
|
72
|
+
:set_prefs,
|
73
|
+
help: {
|
27
74
|
'coffee -s Colombian Filter' => "Set your coffee preference",
|
28
|
-
|
29
|
-
|
30
|
-
|
75
|
+
}
|
76
|
+
)
|
77
|
+
|
78
|
+
# Set group
|
79
|
+
route(
|
80
|
+
/^\s*\(?coffee\)?\s+\-g\s+(.*)$/i,
|
81
|
+
:set_group,
|
82
|
+
help: {
|
83
|
+
'coffee -g Cool Kids' => "Change your group",
|
84
|
+
}
|
85
|
+
)
|
86
|
+
|
87
|
+
# Buy coffees
|
88
|
+
route(
|
89
|
+
/^\s*\(?coffee\)?\s+\-b\s*(.*)$/i,
|
90
|
+
:buy_coffees,
|
91
|
+
help: {
|
31
92
|
'coffee -b You owe me one!' => "Buy coffee for your group, clear the orders and send a message to each coffee drinker",
|
93
|
+
}
|
94
|
+
)
|
95
|
+
|
96
|
+
# Display system settings
|
97
|
+
route(
|
98
|
+
/^\s*\(?coffee\)?\s+\-t\s*$/i,
|
99
|
+
:system_settings,
|
100
|
+
help: {
|
32
101
|
'coffee -t' => "Display system settings",
|
102
|
+
}
|
103
|
+
)
|
104
|
+
|
105
|
+
# Delete me
|
106
|
+
route(
|
107
|
+
/^\s*\(?coffee\)?\s+\-d\s*$/i,
|
108
|
+
:delete_me,
|
109
|
+
help: {
|
33
110
|
'coffee -d' => "Delete you from the coffee system",
|
34
111
|
}
|
35
112
|
)
|
36
113
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
elsif delete_me
|
69
|
-
result = delete_user(my_user)
|
70
|
-
if result == 1
|
71
|
-
response.reply("You have been deleted from coffee")
|
72
|
-
else
|
73
|
-
response.reply("(sadpanda) Failed to delete you from coffee for some reason: #{result.inspect}")
|
74
|
-
end
|
75
|
-
# Change my coffee group
|
76
|
-
elsif change_group
|
77
|
-
result = set_coffee_group(my_user,preference)
|
78
|
-
if result == "OK"
|
79
|
-
response.reply("Group set to #{preference}")
|
80
|
-
else
|
81
|
-
response.reply("(sadpanda) Failed to set your coffee group for some reason: #{result.inspect}")
|
82
|
-
end
|
83
|
-
# Order a coffee
|
84
|
-
elsif order
|
85
|
-
result = order_coffee(my_user)
|
86
|
-
if result == "OK"
|
87
|
-
response.reply("Ordered you a coffee")
|
88
|
-
else
|
89
|
-
response.reply("(sadpanda) Failed to order your coffee for some reason: #{result.inspect}")
|
90
|
-
end
|
91
|
-
# Cancel a coffee
|
92
|
-
elsif cancel
|
93
|
-
result = cancel_coffee(my_user)
|
94
|
-
if result == "OK"
|
95
|
-
response.reply("Cancelled your coffee")
|
96
|
-
else
|
97
|
-
response.reply("(sadpanda) Failed to cancel your coffee for some reason: #{result.inspect}")
|
98
|
-
end
|
99
|
-
# Buy the coffees and clear the orders
|
100
|
-
elsif buy_coffee
|
101
|
-
response.reply("Thanks for ordering the coffee for #{group}!\n--")
|
102
|
-
get_orders(group).each do |order|
|
103
|
-
response.reply("#{order}: #{get_coffee(order)}")
|
104
|
-
send_coffee_message(order,my_user,preference) unless order == my_user
|
105
|
-
end
|
106
|
-
result = clear_orders(group)
|
107
|
-
if result == "OK"
|
108
|
-
response.reply("Cleared all orders for #{group}")
|
109
|
-
else
|
110
|
-
response.reply("(sadpanda) Failed to clear the orders for some reason: #{result.inspect}")
|
111
|
-
end
|
112
|
-
# tests
|
113
|
-
elsif system_settings
|
114
|
-
response.reply("Default coffee: #{@@DEFAULT_COFFEE}, Default group: #{@@DEFAULT_GROUP}")
|
115
|
-
# List the orders
|
114
|
+
# List all groups
|
115
|
+
route(
|
116
|
+
/^\s*\(?coffee\)?\s+\-l\s*$/i,
|
117
|
+
:list_groups,
|
118
|
+
help: {
|
119
|
+
'coffee -l' => "List the available coffee groups",
|
120
|
+
}
|
121
|
+
)
|
122
|
+
|
123
|
+
# Coffee stats a.k.a. who owes whom?
|
124
|
+
route(
|
125
|
+
/^\s*\(?coffee\)?\s+\-w\s*(.*)$/i,
|
126
|
+
:show_stats,
|
127
|
+
help: {
|
128
|
+
'coffee -w' => "Show stats for a group",
|
129
|
+
}
|
130
|
+
)
|
131
|
+
|
132
|
+
# Setup new users
|
133
|
+
def init_user(response)
|
134
|
+
response.reply("Welcome to coffee! You have been added to the #{@@DEFAULT_GROUP} group with an order of #{@@DEFAULT_COFFEE}. Type help coffee for help.") if initialize_user_redis(response.user.name) == :new_user
|
135
|
+
end
|
136
|
+
|
137
|
+
# Order coffee
|
138
|
+
def get_me_a_coffee(response)
|
139
|
+
group = response.matches[0][0].strip rescue get_group(response.user.name)
|
140
|
+
orders = (get_orders(group) + [response.user.name]).uniq
|
141
|
+
result = redis.set("orders:#{group}",orders.to_json)
|
142
|
+
set_timeout(group)
|
143
|
+
if result == "OK"
|
144
|
+
response.reply("Ordered you a coffee from #{group}")
|
116
145
|
else
|
117
|
-
response.reply("
|
118
|
-
get_orders(group).each do |order|
|
119
|
-
response.reply("#{order}: #{get_coffee(order)}")
|
120
|
-
end
|
146
|
+
response.reply("(sadpanda) Failed to order your coffee for some reason: #{result.inspect}")
|
121
147
|
end
|
148
|
+
end
|
122
149
|
|
150
|
+
# Cancel coffee order
|
151
|
+
def cancel_order(response)
|
152
|
+
group = get_group(response.user.name)
|
153
|
+
orders = get_orders(group)
|
154
|
+
orders.delete(response.user.name)
|
155
|
+
result = redis.set("orders:#{group}",orders.to_json)
|
156
|
+
set_timeout(group)
|
157
|
+
if result == "OK"
|
158
|
+
response.reply("Cancelled your coffee")
|
159
|
+
else
|
160
|
+
response.reply("(sadpanda) Failed to cancel your coffee for some reason: #{result.inspect}")
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
# List the coffee orders for your group
|
165
|
+
def list_orders(response)
|
166
|
+
group = get_group(response.user.name)
|
167
|
+
response.reply("Current orders for #{group}:-\n--")
|
168
|
+
get_orders(group).each do |order|
|
169
|
+
response.reply("#{order}: #{get_coffee(order)}")
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
# Display profile
|
174
|
+
def display_profile(response)
|
175
|
+
settings = get_settings(response.user.name)
|
176
|
+
response.reply("Your current coffee is #{settings['coffee']}. You are in the #{settings['group']} group.")
|
177
|
+
end
|
178
|
+
|
179
|
+
# Set coffee preference
|
180
|
+
# TODO: a single method to update user info
|
181
|
+
def set_prefs(response)
|
182
|
+
preference = response.matches[0][0].strip rescue nil
|
183
|
+
result = update_user_coffee(response.user.name,preference)
|
184
|
+
if result == "OK"
|
185
|
+
response.reply("Coffee set to #{preference}")
|
186
|
+
else
|
187
|
+
response.reply("(sadpanda) Failed to set your coffee for some reason: #{result.inspect}")
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
# Set coffee group
|
192
|
+
# TODO: merge with coffee preference
|
193
|
+
def set_group(response)
|
194
|
+
preference = response.matches[0][0].strip rescue nil
|
195
|
+
result = set_coffee_group(response.user.name,preference)
|
196
|
+
if result == "OK"
|
197
|
+
response.reply("Group set to #{preference}")
|
198
|
+
else
|
199
|
+
response.reply("(sadpanda) Failed to set your coffee group for some reason: #{result.inspect}")
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
# Buy all the coffee for your group
|
204
|
+
def buy_coffees(response)
|
205
|
+
group = get_group(response.user.name)
|
206
|
+
message = response.matches[0][0].strip rescue nil
|
207
|
+
response.reply("Thanks for ordering the coffee for #{group}!\n--")
|
208
|
+
stats = get_coffee_stats(group)
|
209
|
+
get_orders(group).each do |order|
|
210
|
+
response.reply("#{order}: #{get_coffee(order)}")
|
211
|
+
send_coffee_message(order,response.user.name,message) unless order == response.user.name
|
212
|
+
stats[order] -= 1 rescue stats[order] = -1
|
213
|
+
stats[response.user.name] += 1 rescue stats[response.user.name] = 1
|
214
|
+
end
|
215
|
+
set_coffee_stats(group,stats)
|
216
|
+
result = clear_orders(group)
|
217
|
+
if result == 1
|
218
|
+
response.reply("Cleared all orders for #{group}")
|
219
|
+
else
|
220
|
+
response.reply("(sadpanda) Failed to clear the orders for some reason: #{result.inspect}")
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
# Display the system settings
|
225
|
+
def system_settings(response)
|
226
|
+
response.reply("Default coffee: #{@@DEFAULT_COFFEE}, Default group: #{@@DEFAULT_GROUP}")
|
227
|
+
end
|
228
|
+
|
229
|
+
# Delete a user
|
230
|
+
def delete_me(response)
|
231
|
+
result = redis.del("settings:#{response.user.name}")
|
232
|
+
if result == 1
|
233
|
+
response.reply("You have been deleted from coffee")
|
234
|
+
else
|
235
|
+
response.reply("(sadpanda) Failed to delete you from coffee for some reason: #{result.inspect}")
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
# List groups
|
240
|
+
def list_groups(response)
|
241
|
+
groups = redis.keys('stats:*')
|
242
|
+
response.reply("The following groups are active:-\n--\n#{groups.map{|g| g.split(':')[1]}.join("\n")}")
|
243
|
+
end
|
244
|
+
|
245
|
+
# Display the stats
|
246
|
+
def show_stats(response)
|
247
|
+
group = response.matches[0][0].strip rescue get_group(response.user.name)
|
248
|
+
stats = get_coffee_stats(group)
|
249
|
+
response.reply("Who owes whom?\n--\n#{stats.map{|s| "#{s[0]}: #{s[1]}"}.join("\n")}")
|
123
250
|
end
|
124
251
|
|
125
252
|
#######
|
126
253
|
private
|
127
254
|
#######
|
128
255
|
|
256
|
+
def get_coffee_stats(group)
|
257
|
+
JSON.parse(redis.get("stats:#{group}")) rescue {}
|
258
|
+
end
|
259
|
+
|
260
|
+
def set_coffee_stats(group,stats)
|
261
|
+
redis.set("stats:#{group}",stats.to_json)
|
262
|
+
end
|
263
|
+
|
129
264
|
def initialize_user_redis(user)
|
130
|
-
if redis.get("settings
|
131
|
-
redis.set("settings
|
265
|
+
if redis.get("settings:#{user}").nil?
|
266
|
+
redis.set("settings:#{user}",{group: @@DEFAULT_GROUP, coffee: @@DEFAULT_COFFEE}.to_json)
|
132
267
|
return :new_user
|
133
268
|
else
|
134
269
|
return :existing_user
|
135
270
|
end
|
136
271
|
end
|
137
272
|
|
138
|
-
def delete_user(user)
|
139
|
-
redis.del("settings-#{user}")
|
140
|
-
end
|
141
|
-
|
142
273
|
def get_settings(user)
|
143
|
-
JSON.parse(redis.get("settings
|
274
|
+
JSON.parse(redis.get("settings:#{user}")) rescue {group: @@DEFAULT_GROUP, coffee: @@DEFAULT_COFFEE}
|
144
275
|
end
|
145
276
|
|
146
277
|
def get_orders(group)
|
147
|
-
|
278
|
+
set_timeout(group)
|
279
|
+
JSON.parse(redis.get("orders:#{group}")) rescue []
|
148
280
|
end
|
149
281
|
|
150
282
|
def get_coffee(user)
|
151
|
-
JSON.parse(redis.get("settings
|
283
|
+
JSON.parse(redis.get("settings:#{user}"))['coffee'] rescue @@DEFAULT_COFFEE
|
152
284
|
end
|
153
285
|
|
154
286
|
def get_group(user)
|
155
|
-
JSON.parse(redis.get("settings
|
287
|
+
JSON.parse(redis.get("settings:#{user}"))['group'] rescue @@DEFAULT_GROUP
|
156
288
|
end
|
157
289
|
|
158
|
-
def
|
290
|
+
def update_user_coffee(user,coffee)
|
159
291
|
my_settings = get_settings(user)
|
160
292
|
my_settings[:coffee] = coffee
|
161
|
-
redis.set("settings
|
293
|
+
redis.set("settings:#{user}",my_settings.to_json)
|
162
294
|
end
|
163
295
|
|
164
296
|
def set_coffee_group(user,group)
|
165
297
|
my_settings = get_settings(user)
|
166
298
|
my_settings[:group] = group
|
167
|
-
redis.set("settings
|
168
|
-
end
|
169
|
-
|
170
|
-
def order_coffee(user)
|
171
|
-
group = get_group(user)
|
172
|
-
Lita.logger.debug("Group: #{group}")
|
173
|
-
orders = get_orders(group)
|
174
|
-
Lita.logger.debug("Orders: #{orders}")
|
175
|
-
orders << user
|
176
|
-
orders.uniq!
|
177
|
-
Lita.logger.debug("New orders: #{orders}")
|
178
|
-
redis.set("#{group}-orders",orders.to_json)
|
179
|
-
end
|
180
|
-
|
181
|
-
def cancel_coffee(user)
|
182
|
-
group = get_group(user)
|
183
|
-
orders = get_orders(group)
|
184
|
-
orders.delete(user)
|
185
|
-
redis.set("#{group}-orders",orders.to_json)
|
299
|
+
redis.set("settings:#{user}",my_settings.to_json)
|
186
300
|
end
|
187
301
|
|
188
302
|
def clear_orders(group)
|
189
|
-
|
303
|
+
set_timeout(group)
|
304
|
+
redis.del("orders:#{group}")
|
190
305
|
end
|
191
306
|
|
192
307
|
def send_coffee_message(user,purchaser,message)
|
@@ -198,6 +313,10 @@ module Lita
|
|
198
313
|
Lita.logger.error("Coffee#send_coffee_message raised #{e.class}: #{e.message}\n#{e.backtrace}")
|
199
314
|
end
|
200
315
|
|
316
|
+
def set_timeout(group)
|
317
|
+
redis.expire("orders:#{group}",@@DEFAULT_GROUP_TIMEOUT)
|
318
|
+
end
|
319
|
+
|
201
320
|
|
202
321
|
end
|
203
322
|
|
data/lib/lita-coffee.rb
CHANGED
data/lita-coffee.gemspec
CHANGED
@@ -1,6 +1,9 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.expand_path('../lib', __FILE__))
|
2
|
+
require 'lita-coffee/version'
|
3
|
+
|
1
4
|
Gem::Specification.new do |spec|
|
2
5
|
spec.name = 'lita-coffee'
|
3
|
-
spec.version =
|
6
|
+
spec.version = LitaCoffee::VERSION
|
4
7
|
spec.authors = ['Stuart Auld']
|
5
8
|
spec.email = ['sja@marsupialmusic.net']
|
6
9
|
spec.description = %q{Lita integration to manage office coffee orders}
|
@@ -14,12 +17,12 @@ Gem::Specification.new do |spec|
|
|
14
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
15
18
|
spec.require_paths = ['lib']
|
16
19
|
|
17
|
-
spec.add_runtime_dependency 'lita', '
|
20
|
+
spec.add_runtime_dependency 'lita', '~> 4.2'
|
18
21
|
spec.add_runtime_dependency 'json'
|
19
22
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
20
23
|
spec.add_development_dependency 'rake'
|
21
24
|
spec.add_development_dependency 'rack-test'
|
22
|
-
spec.add_development_dependency 'rspec', '
|
25
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
23
26
|
spec.add_development_dependency 'simplecov'
|
24
27
|
spec.add_development_dependency 'coveralls'
|
25
28
|
end
|
@@ -2,8 +2,31 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
describe Lita::Handlers::Coffee, lita_handler: true do
|
4
4
|
|
5
|
-
|
6
|
-
|
5
|
+
# Sample office
|
6
|
+
SAMPLE_DATA = [
|
7
|
+
{name: 'stu', group: 'cool kids', coffee: 'Colombian filter'},
|
8
|
+
{name: 'joel', group: 'cool kids', coffee: 'Strong cap w/ 1/2 sugar'},
|
9
|
+
{name: 'arun', group: 'cool kids', coffee: 'Warragamba highball'},
|
10
|
+
{name: 'danielle', group: 'latte socialists', coffee: 'Latte'},
|
11
|
+
{name: 'jack', group: 'latte socialists', coffee: 'Latte'},
|
12
|
+
{name: 'john', group: 'latte socialists', coffee: 'Latte'},
|
13
|
+
{name: 'alex', group: 'latte socialists', coffee: 'Latte'},
|
14
|
+
{name: 'geoff', group: 'traditionalists', coffee: 'Flat white'},
|
15
|
+
{name: 'simon', group: 'traditionalists', coffee: 'Skim flat white'},
|
16
|
+
]
|
17
|
+
|
18
|
+
it { is_expected.to route('coffee').to(:list_orders) }
|
19
|
+
it { is_expected.to route('I really like coffee!').to(:init_user)}
|
20
|
+
it { is_expected.to route('coffee +').to(:get_me_a_coffee)}
|
21
|
+
it { is_expected.to route('coffee + cool dudes').to(:get_me_a_coffee)}
|
22
|
+
it { is_expected.to route('coffee -c').to(:cancel_order)}
|
23
|
+
it { is_expected.to route('coffee -i').to(:display_profile)}
|
24
|
+
it { is_expected.to route('coffee -s Latte').to(:set_prefs)}
|
25
|
+
it { is_expected.to route('coffee -g Testers').to(:set_group)}
|
26
|
+
it { is_expected.to route('coffee -b This one is on me :)').to(:buy_coffees)}
|
27
|
+
it { is_expected.to route('coffee -t').to(:system_settings)}
|
28
|
+
it { is_expected.to route('coffee -d').to(:delete_me)}
|
29
|
+
it { is_expected.to route('coffee -l').to(:list_groups)}
|
7
30
|
|
8
31
|
describe '#coffee' do
|
9
32
|
before{robot.trigger(:loaded)}
|
@@ -18,13 +41,18 @@ describe Lita::Handlers::Coffee, lita_handler: true do
|
|
18
41
|
expect(replies.last).to start_with("Current orders")
|
19
42
|
end
|
20
43
|
|
21
|
-
it 'orders
|
44
|
+
it 'orders you a coffee if you ask it!' do
|
22
45
|
send_message("coffee +")
|
23
|
-
expect(replies.last).to eq("Ordered you a coffee")
|
46
|
+
expect(replies.last).to eq("Ordered you a coffee from coffee-lovers")
|
24
47
|
send_message("coffee")
|
25
48
|
expect(replies.last).to start_with("Test User:")
|
26
49
|
end
|
27
50
|
|
51
|
+
it 'orders me a coffee from a different group too' do
|
52
|
+
send_message("coffee + testers")
|
53
|
+
expect(replies.last).to eq("Ordered you a coffee from testers")
|
54
|
+
end
|
55
|
+
|
28
56
|
it 'displays my profile settings' do
|
29
57
|
send_message("coffee -i")
|
30
58
|
expect(replies.last).to start_with("Your current coffee is")
|
@@ -38,20 +66,18 @@ describe Lita::Handlers::Coffee, lita_handler: true do
|
|
38
66
|
end
|
39
67
|
|
40
68
|
it 'changes my coffee group' do
|
41
|
-
|
69
|
+
set_prefs('stu',{group: 'testing team'})
|
42
70
|
expect(replies.last).to eq("Group set to testing team")
|
43
|
-
|
71
|
+
check_prefs('stu')
|
44
72
|
expect(replies.last).to end_with("You are in the testing team group.")
|
45
73
|
end
|
46
74
|
|
47
75
|
it 'cancels my order' do
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
expect(coffees_in_the_queue).to eq(3)
|
52
|
-
send_message("coffee -c")
|
76
|
+
populate_the_database
|
77
|
+
expect(coffees_in_the_queue('cool kids')).to eq(3)
|
78
|
+
cancel_order('stu')
|
53
79
|
expect(replies.last).to eq("Cancelled your coffee") #TODO: check that my name has been removed from the queue
|
54
|
-
expect(coffees_in_the_queue).to eq(2)
|
80
|
+
expect(coffees_in_the_queue('cool kids')).to eq(2)
|
55
81
|
end
|
56
82
|
|
57
83
|
it 'deletes me from the system' do
|
@@ -65,25 +91,71 @@ describe Lita::Handlers::Coffee, lita_handler: true do
|
|
65
91
|
end
|
66
92
|
|
67
93
|
it 'buys the coffees and clears the queue' do
|
68
|
-
|
69
|
-
|
70
|
-
send_message("coffee -b")
|
94
|
+
populate_the_database
|
95
|
+
buy_coffees_for('cool kids')
|
71
96
|
expect(replies.last).to start_with("Cleared all orders")
|
72
97
|
send_message("coffee")
|
73
98
|
expect(replies.last).to end_with("--")
|
74
|
-
expect(replies.select{|x| x == "Test User has bought you a coffee!"}.count).to eq(
|
99
|
+
expect(replies.select{|x| x == "Test User has bought you a coffee!"}.count).to eq(3)
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'lists the available groups' do
|
103
|
+
populate_the_database
|
104
|
+
send_message("coffee -l")
|
105
|
+
expect(replies.last).to start_with("The following groups are active:-")
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'gets some stats' do
|
109
|
+
populate_the_database
|
110
|
+
buy_coffees_for('cool kids')
|
111
|
+
send_message("coffee -w cool kids")
|
112
|
+
expect(replies.last).to start_with("Who owes whom?")
|
113
|
+
end
|
114
|
+
|
115
|
+
def set_prefs(name,opts={})
|
116
|
+
user = init_user(name)
|
117
|
+
send_message("coffee -g #{opts[:group]}", as: user) unless opts[:group].nil?
|
118
|
+
send_message("coffee -s #{opts[:coffee]}", as: user) unless opts[:coffee].nil?
|
119
|
+
end
|
120
|
+
|
121
|
+
def check_prefs(name)
|
122
|
+
user = init_user(name)
|
123
|
+
send_message("coffee -i", as: user)
|
75
124
|
end
|
76
125
|
|
77
|
-
def order_a_coffee(
|
78
|
-
user =
|
126
|
+
def order_a_coffee(name)
|
127
|
+
user = init_user(name)
|
79
128
|
send_message('coffee +', as: user)
|
80
129
|
end
|
81
130
|
|
82
|
-
def
|
83
|
-
|
131
|
+
def cancel_order(name)
|
132
|
+
user = init_user(name)
|
133
|
+
send_message('coffee -c', as: user)
|
134
|
+
end
|
135
|
+
|
136
|
+
def coffees_in_the_queue(group)
|
137
|
+
send_message("coffee -g #{group}")
|
138
|
+
send_message("coffee")
|
84
139
|
replies.reverse.slice(0,replies.reverse.index{|x| ( x =~ /^Current orders/ ) == 0}).count
|
85
140
|
end
|
86
141
|
|
142
|
+
def populate_the_database
|
143
|
+
SAMPLE_DATA.each do |x|
|
144
|
+
set_prefs(x[:name],{coffee: x[:coffee],group: x[:group]})
|
145
|
+
order_a_coffee(x[:name])
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
def init_user(name)
|
150
|
+
Lita::User.create(1,name: name)
|
151
|
+
end
|
152
|
+
|
153
|
+
def buy_coffees_for(group)
|
154
|
+
send_message("coffee -g #{group}")
|
155
|
+
send_message("coffee -b")
|
156
|
+
end
|
157
|
+
|
158
|
+
|
87
159
|
|
88
160
|
|
89
161
|
|
metadata
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lita-coffee
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stuart Auld
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: lita
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '4.2'
|
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
26
|
version: '4.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
@@ -84,16 +84,16 @@ dependencies:
|
|
84
84
|
name: rspec
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 3.0
|
89
|
+
version: '3.0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 3.0
|
96
|
+
version: '3.0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: simplecov
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -135,6 +135,7 @@ files:
|
|
135
135
|
- README.md
|
136
136
|
- Rakefile
|
137
137
|
- lib/lita-coffee.rb
|
138
|
+
- lib/lita-coffee/version.rb
|
138
139
|
- lib/lita/handlers/coffee.rb
|
139
140
|
- lita-coffee.gemspec
|
140
141
|
- locales/en.yml
|