lita-coffee 0.0.2 → 0.1.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 +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
|