brewer 0.0.70 → 0.0.71
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/brewer +3 -10
- data/brewer.gemspec +5 -1
- data/lib/adaptibrew.rb +1 -5
- data/lib/autoload.rb +14 -0
- data/lib/brewer.rb +32 -297
- data/lib/communicator.rb +66 -0
- data/lib/helpers.rb +14 -17
- data/lib/procedures.rb +243 -0
- data/lib/settings.rb +1 -2
- data/notes.md +16 -0
- data/spec/brewer_spec.rb +2 -106
- data/spec/hardware_spec.rb +95 -0
- data/spec/helpers_spec.rb +0 -26
- data/spec/spec_helper.rb +1 -4
- metadata +49 -2
- data/lib/slacker.rb +0 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd9b1df8720156b66f88424e65d7ebd530440ecf
|
4
|
+
data.tar.gz: 98e6e8df275b44be023a37cff481fced3ac20888
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a6d1f4a460c83ee94be5ec03fdcba1460c2fcdd196409412c5b690e9032ea2977b15f869995a36a62f9c8da1d8cf73b2c61f410d3642eae7249e97e2244a3ab2
|
7
|
+
data.tar.gz: 2163b804379374756c9ed1161bca468dae3993ae3cd079d6da16474cec2150b36ce8c6c6d9dda858c9eddafe0665c65403059e3c75e9cb17b378079e7f6a1425
|
data/bin/brewer
CHANGED
@@ -1,17 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
2
|
+
require_relative "../lib/autoload"
|
3
3
|
|
4
|
-
require 'ripl'
|
5
|
-
|
6
|
-
require_relative "../lib/adaptibrew"
|
7
|
-
require_relative "../lib/brewer"
|
8
|
-
require_relative "../lib/helpers"
|
9
|
-
|
10
|
-
include Helpers
|
11
|
-
|
12
|
-
# Refresh to make sure we have the lastest version of adaptibrew
|
13
4
|
brewer = Brewer.new
|
14
5
|
adaptibrew = Adaptibrew.new.refresh
|
6
|
+
com = Communicator.new
|
7
|
+
procedures = Procedures.new
|
15
8
|
|
16
9
|
puts "🍺 have fun 🍺"
|
17
10
|
Ripl.start :binding => binding
|
data/brewer.gemspec
CHANGED
@@ -2,7 +2,7 @@ require 'rake'
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "brewer"
|
5
|
-
s.version = "0.0.
|
5
|
+
s.version = "0.0.71"
|
6
6
|
s.default_executable = "brewer"
|
7
7
|
|
8
8
|
s.authors = ["Luke Sweeney"]
|
@@ -24,7 +24,11 @@ Gem::Specification.new do |s|
|
|
24
24
|
s.add_runtime_dependency 'git', '~> 1.3', '>= 1.3.0'
|
25
25
|
s.add_runtime_dependency 'ripl', '~> 0.7.0'
|
26
26
|
s.add_runtime_dependency 'net-ping', '~> 1.7'
|
27
|
+
s.add_runtime_dependency 'wannabe_bool', '~> 1.7'
|
27
28
|
s.add_runtime_dependency 'slack-notifier'
|
29
|
+
s.add_runtime_dependency 'require_all'
|
30
|
+
s.add_runtime_dependency 'terminal-table'
|
31
|
+
|
28
32
|
|
29
33
|
# Dev dependencies
|
30
34
|
s.add_development_dependency 'rake', '~> 12.0', '>= 12.0.0'
|
data/lib/adaptibrew.rb
CHANGED
data/lib/autoload.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require "require_all"
|
2
|
+
require 'git'
|
3
|
+
require 'fileutils'
|
4
|
+
require 'slack-notifier'
|
5
|
+
require 'yaml'
|
6
|
+
require 'yaml/store'
|
7
|
+
require 'net/ping'
|
8
|
+
require 'ripl'
|
9
|
+
require 'wannabe_bool'
|
10
|
+
require 'terminal-table'
|
11
|
+
|
12
|
+
require_all 'lib'
|
13
|
+
|
14
|
+
include Helpers
|
data/lib/brewer.rb
CHANGED
@@ -1,20 +1,14 @@
|
|
1
|
-
|
2
|
-
require_relative 'helpers'
|
3
|
-
require_relative 'adaptibrew'
|
4
|
-
require_relative 'settings'
|
5
|
-
|
6
|
-
include Helpers
|
1
|
+
require_relative "autoload"
|
7
2
|
|
8
3
|
class Brewer
|
9
4
|
|
10
5
|
attr_reader :base_path
|
11
|
-
attr_accessor :out, :
|
6
|
+
attr_accessor :out, :temps
|
12
7
|
|
13
8
|
def initialize
|
14
9
|
@base_path = Dir.home + '/.brewer'
|
15
10
|
# Output of adaptibrew
|
16
11
|
@out = []
|
17
|
-
@log = @base_path + '/logs/output'
|
18
12
|
@temps = {}
|
19
13
|
end
|
20
14
|
|
@@ -24,23 +18,10 @@ class Brewer
|
|
24
18
|
# general utilities for the brewer class
|
25
19
|
|
26
20
|
def wait(time=30)
|
27
|
-
sleep(time)
|
21
|
+
sleep(time.to_f)
|
28
22
|
true
|
29
23
|
end
|
30
24
|
|
31
|
-
# Sends a slack message in #brewing
|
32
|
-
def ping(message="ping at #{Time.now}")
|
33
|
-
require_relative 'slacker'
|
34
|
-
$slack.ping(message)
|
35
|
-
end
|
36
|
-
|
37
|
-
# Only works on Mac :(
|
38
|
-
# :nocov:
|
39
|
-
def say(message="done")
|
40
|
-
system("say #{message}")
|
41
|
-
end
|
42
|
-
# :nocov:
|
43
|
-
|
44
25
|
# Runs an adaptibrew script
|
45
26
|
# Output will be stored in @out
|
46
27
|
# you may see `echo` quite a bit. This will almost always be directly after calling a script
|
@@ -50,31 +31,22 @@ class Brewer
|
|
50
31
|
@out.first
|
51
32
|
end
|
52
33
|
|
53
|
-
# Clears the @out array
|
54
|
-
# Writes current @out to log
|
55
34
|
def clear
|
56
35
|
@out = []
|
57
36
|
end
|
58
37
|
|
59
|
-
# This lil' divider is default for large return blocks
|
60
|
-
def echo(string=nil)
|
61
|
-
if string == nil
|
62
|
-
puts @out.first
|
63
|
-
return @out.first
|
64
|
-
end
|
65
|
-
puts string
|
66
|
-
return string
|
67
|
-
end
|
68
|
-
|
69
|
-
|
70
38
|
# Adaptibrew methods ----------------------------------------------
|
71
39
|
# for working with the rig
|
72
40
|
|
73
|
-
def pump(state=
|
41
|
+
def pump(state="status")
|
42
|
+
if state == "status"
|
43
|
+
return relay_status($settings['pumpRelay'])
|
44
|
+
end
|
45
|
+
|
74
46
|
if state == 1
|
75
47
|
return script("set_pump_on")
|
76
|
-
|
77
|
-
if pid['pid_running']
|
48
|
+
else
|
49
|
+
if pid['pid_running'].to_b
|
78
50
|
pid(0)
|
79
51
|
echo
|
80
52
|
end
|
@@ -96,27 +68,30 @@ class Brewer
|
|
96
68
|
script('set_pid_on')
|
97
69
|
pump(1)
|
98
70
|
return "Pump and PID are now on"
|
99
|
-
|
71
|
+
else
|
100
72
|
return script("set_pid_off")
|
101
73
|
end
|
102
74
|
end
|
103
75
|
|
104
76
|
def sv(temp=nil)
|
105
77
|
if temp
|
106
|
-
|
107
|
-
return script('set_sv', temp)
|
108
|
-
else
|
109
|
-
return script('get_sv')
|
78
|
+
return script('set_sv', temp).to_f
|
110
79
|
end
|
80
|
+
script('get_sv').to_f
|
111
81
|
end
|
112
82
|
|
113
83
|
def pv
|
114
|
-
|
84
|
+
script('get_pv').to_f
|
115
85
|
end
|
116
86
|
|
117
87
|
def relay(relay, state)
|
88
|
+
# If you try to turn the relay to a state that it is already in, this skips the wait
|
89
|
+
if relay_status(relay).to_b == state.to_b
|
90
|
+
return true
|
91
|
+
end
|
118
92
|
script("set_relay", "#{relay} #{state}")
|
119
93
|
wait(10)
|
94
|
+
true
|
120
95
|
end
|
121
96
|
|
122
97
|
def all_relays_status
|
@@ -126,59 +101,24 @@ class Brewer
|
|
126
101
|
true
|
127
102
|
end
|
128
103
|
|
129
|
-
# TODO: Fix the return value here
|
130
104
|
def relay_status(relay)
|
131
|
-
raise "Relay number needs to be an integer" unless relay.is_a? Integer
|
132
105
|
script("get_relay_status", "#{relay}")
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
def watch
|
138
|
-
until pv.to_f >= sv.to_f do
|
139
|
-
wait(8)
|
140
|
-
end
|
141
|
-
true
|
142
|
-
end
|
143
|
-
# :nocov:
|
144
|
-
|
145
|
-
def monitor
|
146
|
-
while true do
|
147
|
-
ping("#{puts pid}")
|
148
|
-
wait(10)
|
106
|
+
if @out.include? "on"
|
107
|
+
return "on"
|
108
|
+
else
|
109
|
+
return "off"
|
149
110
|
end
|
150
111
|
end
|
151
112
|
|
152
|
-
# WaterVolInQuarts, GrainMassInPounds, GrainTemp, MashTemp
|
153
113
|
# :nocov:
|
154
|
-
def
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
print "Input amount of grain in lbs: "
|
159
|
-
grain = gets.chomp
|
160
|
-
|
161
|
-
print "Input current grain temp (#{pv}): "
|
162
|
-
grain_temp = gets.chomp
|
163
|
-
if grain_temp == ""
|
164
|
-
grain_temp = pv.to_i
|
165
|
-
end
|
166
|
-
|
167
|
-
print "Input desired mash temp (150): "
|
168
|
-
desired_mash_temp = gets.chomp
|
169
|
-
if desired_mash_temp == ""
|
170
|
-
desired_mash_temp = 150
|
114
|
+
def watch
|
115
|
+
until pv >= sv do
|
116
|
+
wait(2)
|
171
117
|
end
|
172
|
-
|
173
|
-
|
174
|
-
# this is where the magic happens
|
175
|
-
@temps['strike_water_temp'] = script('get_strike_temp', "#{water} #{grain} #{grain_temp} #{desired_mash_temp}")
|
176
|
-
sv(echo.to_i)
|
177
|
-
puts "SV has been set to #{sv} degrees"
|
118
|
+
self
|
178
119
|
end
|
179
120
|
# :nocov:
|
180
121
|
|
181
|
-
# Relays ----------
|
182
122
|
def rims_to(location)
|
183
123
|
if location == "mash"
|
184
124
|
# we ended up swapping this relay, so the name is backwards
|
@@ -186,7 +126,7 @@ class Brewer
|
|
186
126
|
elsif location == "boil"
|
187
127
|
relay($settings['rimsToMashRelay'], 1)
|
188
128
|
end
|
189
|
-
|
129
|
+
self
|
190
130
|
end
|
191
131
|
|
192
132
|
def hlt_to(location)
|
@@ -195,221 +135,16 @@ class Brewer
|
|
195
135
|
elsif location == "boil"
|
196
136
|
relay($settings['spargeToMashRelay'], 1)
|
197
137
|
end
|
198
|
-
|
138
|
+
self
|
199
139
|
end
|
200
140
|
|
201
141
|
def hlt(state)
|
202
|
-
if state
|
142
|
+
if state.to_b
|
203
143
|
relay($settings['spargeRelay'], 1)
|
204
|
-
elsif state
|
144
|
+
elsif !state.to_b
|
205
145
|
relay($settings['spargeRelay'], 0)
|
206
146
|
end
|
207
|
-
|
208
|
-
end
|
209
|
-
|
210
|
-
# Master Procedures -----------------------------------------------------
|
211
|
-
# The main steps in the brewing proccess
|
212
|
-
def boot
|
213
|
-
# These are the states required for starting. Should be called on boot.
|
214
|
-
# Print PID status at end
|
215
|
-
ping("booting...")
|
216
|
-
pid(0)
|
217
|
-
pump(0)
|
218
|
-
rims_to('mash')
|
219
|
-
hlt_to('mash')
|
220
|
-
all_relays_status
|
221
|
-
puts pid
|
222
|
-
|
223
|
-
clear
|
224
|
-
puts "Boot successful!"
|
225
|
-
@out.unshift("successful boot at #{Time.now}")
|
226
|
-
ping("🍺 boot successful 🍺")
|
227
|
-
true
|
228
|
-
end
|
229
|
-
|
230
|
-
# :nocov:
|
231
|
-
def heat_strike_water
|
232
|
-
puts "heat-strike-water procedure started"
|
233
|
-
# Confirm strike water is in the mash tun
|
234
|
-
print "Is the strike water in the mash tun? "
|
235
|
-
# -> response
|
236
|
-
confirm ? nil : abort
|
237
|
-
|
238
|
-
# confirm return manifold is in the mash tun
|
239
|
-
print "Is the return manifold in the mash tun? "
|
240
|
-
# -> response
|
241
|
-
confirm ? nil : abort
|
242
|
-
|
243
|
-
print "Is the mash tun valve open? "
|
244
|
-
confirm ? nil : abort
|
245
|
-
|
246
|
-
# confirm RIMS relay is on
|
247
|
-
rims_to('mash')
|
248
|
-
puts "RIMS-to-mash relay is now on"
|
249
|
-
|
250
|
-
# turn on pump
|
251
|
-
pump(1)
|
252
|
-
puts "Pump is now on"
|
253
|
-
|
254
|
-
# wait ~30 seconds
|
255
|
-
print "How long do you want to wait for the water to start circulating? (30) "
|
256
|
-
time = gets.chomp
|
257
|
-
if time == ""
|
258
|
-
time = 30
|
259
|
-
end
|
260
|
-
puts "Waiting for #{time} seconds for strike water to start circulating"
|
261
|
-
puts "(ctrl-c to exit proccess now)"
|
262
|
-
wait(time.to_i)
|
263
|
-
|
264
|
-
# confirm that strike water is circulating well
|
265
|
-
print "Is the strike water circulating well? "
|
266
|
-
# -> response
|
267
|
-
confirm ? nil : abort
|
268
|
-
|
269
|
-
|
270
|
-
# calculate strike temp & set PID to strike temp
|
271
|
-
# this sets PID SV to calculated strike temp automagically
|
272
|
-
get_strike_temp
|
273
|
-
# turn on RIMS heater
|
274
|
-
pid(1)
|
275
|
-
|
276
|
-
# measure current strike water temp and save
|
277
|
-
@temps['starting_strike_temp'] = pv.to_i
|
278
|
-
puts "current strike water temp is #{pv}. Saved."
|
279
|
-
puts "Heating to #{sv}"
|
280
|
-
|
281
|
-
ping("Strike water beginning to heat. This may take a few minutes.")
|
282
|
-
|
283
|
-
# when strike temp is reached, ping slack
|
284
|
-
watch
|
285
|
-
ping("Strike water heated to #{pv}. Maintaining temperature.")
|
286
|
-
ping("Next step: dough in")
|
287
|
-
puts "Next step: dough in"
|
288
|
-
puts "command: brewer.dough_in"
|
289
|
-
|
290
|
-
true
|
291
|
-
end
|
292
|
-
# :nocov:
|
293
|
-
|
294
|
-
def dough_in
|
295
|
-
ping("dough-in procedure started")
|
296
|
-
puts "dough-in procedure started"
|
297
|
-
# turn pump off
|
298
|
-
# turn PID off
|
299
|
-
pump(0)
|
300
|
-
ping("Ready to dough in")
|
301
|
-
puts "Ready to dough in"
|
302
|
-
|
303
|
-
print "Confirm when you're done with dough-in (y): "
|
304
|
-
confirm ? nil : abort
|
305
|
-
|
306
|
-
ping("next step: mash")
|
307
|
-
puts "Next step: mash"
|
308
|
-
puts "command: brewer.mash"
|
309
|
-
# pour in grain
|
310
|
-
true
|
311
|
-
end
|
312
|
-
|
313
|
-
def mash
|
314
|
-
print "Enter mash temperature (#{@temps['desired_mash'].to_s} F): "
|
315
|
-
temp = gets.chomp
|
316
|
-
|
317
|
-
if temp != ""
|
318
|
-
@temps['desired_mash'] = temp.to_i
|
319
|
-
end
|
320
|
-
|
321
|
-
sv(@temps['desired_mash'])
|
322
|
-
|
323
|
-
print "Enter mash time in seconds (3600 seconds for 1 hour). This timer will start once mash temp has been reached: "
|
324
|
-
mash_time_input = gets.chomp
|
325
|
-
|
326
|
-
puts "This will take a while. You'll get a slack message next time you need to do something."
|
327
|
-
ping("Mash started. This will take a while. You'll get a slack message next time you need to do something.")
|
328
|
-
|
329
|
-
if mash_time_input == ""
|
330
|
-
mash_time = 3600
|
331
|
-
else
|
332
|
-
mash_time = mash_time_input.to_i
|
333
|
-
end
|
334
|
-
|
335
|
-
rims_to('mash')
|
336
|
-
|
337
|
-
pump(1)
|
338
|
-
pid(1)
|
339
|
-
|
340
|
-
watch
|
341
|
-
ping("Mash temp (#{pv} F) reached. Starting timer for #{mash_time} seconds. You'll get a slack message next time you need to do something.")
|
342
|
-
puts "Mash temp (#{pv} F) reached. Starting timer for #{mash_time} seconds. You'll get a slack message next time you need to do something."
|
343
|
-
wait(mash_time)
|
344
|
-
ping("🍺 Mash complete 🍺. Check for starch conversion. Next step: mashout")
|
345
|
-
puts "Mash complete"
|
346
|
-
puts "Check for starch conversion"
|
347
|
-
puts "next step: mashout"
|
348
|
-
puts "command: brewer.mashout"
|
349
|
-
end
|
350
|
-
|
351
|
-
def mashout
|
352
|
-
puts "mashout procedure started"
|
353
|
-
|
354
|
-
print "Enter mashout temp (172 F): "
|
355
|
-
mashout_temp_input = gets.chomp
|
356
|
-
|
357
|
-
ping("Start heating sparge water")
|
358
|
-
|
359
|
-
if mashout_temp_input == ""
|
360
|
-
mashout_temp = 172.0
|
361
|
-
else
|
362
|
-
mashout_temp == mashout_temp_input.to_f
|
363
|
-
end
|
364
|
-
|
365
|
-
sv(mashout_temp)
|
366
|
-
|
367
|
-
pump(1)
|
368
|
-
pid(1)
|
369
|
-
|
370
|
-
ping("Heating to #{sv}... this could take a few minutes.")
|
371
|
-
watch
|
372
|
-
ping("Mashout temperature (#{pv}) reached. Mashout complete.")
|
373
|
-
end
|
374
|
-
|
375
|
-
def sparge
|
376
|
-
print "Is the sparge water heated to the correct temperature? "
|
377
|
-
confirm ? nil : abort
|
378
|
-
|
379
|
-
hlt_to('mash')
|
380
|
-
hlt('open')
|
381
|
-
|
382
|
-
puts "Waiting for 30 seconds. Regulate sparge balance."
|
383
|
-
puts "(ctrl-c to abort proccess)"
|
384
|
-
wait(30)
|
385
|
-
|
386
|
-
rims_to('boil')
|
387
|
-
pump(1)
|
388
|
-
|
389
|
-
ping("Please check the sparge balance and ignite boil tun burner")
|
390
|
-
|
391
|
-
puts "Waiting until intervention to turn off pump (y): "
|
392
|
-
confirm ? nil : abort
|
393
|
-
|
394
|
-
pid(0)
|
395
|
-
pump(0)
|
396
|
-
|
397
|
-
hlt('close')
|
398
|
-
|
399
|
-
ping("Sparge complete")
|
400
|
-
end
|
401
|
-
|
402
|
-
def top_off
|
403
|
-
hlt_to('boil')
|
404
|
-
|
405
|
-
hlt('open')
|
406
|
-
|
407
|
-
print "waiting for intervention to turn off hlt (y): "
|
408
|
-
confirm ? nil : abort
|
409
|
-
|
410
|
-
hlt('close')
|
411
|
-
|
412
|
-
ping('Topping off completed')
|
147
|
+
self
|
413
148
|
end
|
414
149
|
|
415
150
|
end
|
data/lib/communicator.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
require_relative "autoload"
|
2
|
+
|
3
|
+
class Communicator
|
4
|
+
|
5
|
+
attr_accessor :slack, :brewer
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@slack = configure_slack
|
9
|
+
@brewer = Brewer.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def configure_slack
|
13
|
+
slack_file = Dir.home + "/.brewer/.slack.yml"
|
14
|
+
if !File.file?(slack_file)
|
15
|
+
store = YAML::Store.new slack_file
|
16
|
+
print "Enter your Slack webhook url: "
|
17
|
+
webhook_url = gets.chomp
|
18
|
+
store.transaction { store['webhook_url'] = webhook_url }
|
19
|
+
end
|
20
|
+
return Slack::Notifier.new YAML.load(File.open(slack_file))['webhook_url']
|
21
|
+
end
|
22
|
+
|
23
|
+
def ping(message="ping at #{Time.now}")
|
24
|
+
if message.is_a? Array
|
25
|
+
final = message.join("\n")
|
26
|
+
@slack.ping(final)
|
27
|
+
end
|
28
|
+
@slack.ping(message)
|
29
|
+
end
|
30
|
+
|
31
|
+
# TODO: test these methods
|
32
|
+
def slack_monitor(delay=10)
|
33
|
+
while true do
|
34
|
+
before_temp = @brewer.pv
|
35
|
+
@brewer.wait(to_seconds(delay))
|
36
|
+
diff = @brewer.pv - before_temp
|
37
|
+
|
38
|
+
ping([
|
39
|
+
"Current Temperature: #{@brewer.pid['pv_temp']} F",
|
40
|
+
"Set Value Temperature: #{@brewer.pid['sv_temp']} F",
|
41
|
+
"Current temperature has climed #{diff} F since #{delay} minute(s) ago",
|
42
|
+
"Sent at #{Time.now.strftime("%H:%M")}",
|
43
|
+
""
|
44
|
+
])
|
45
|
+
end
|
46
|
+
true
|
47
|
+
end
|
48
|
+
|
49
|
+
def monitor
|
50
|
+
while true do
|
51
|
+
status_table_rows = [
|
52
|
+
["Current Temp", @brewer.pv],
|
53
|
+
["Set Value Temp", @brewer.sv],
|
54
|
+
["PID is: ", @brewer.pid['pid_running'].to_b ? "on" : "off"],
|
55
|
+
["Pump is: ", @brewer.pump]
|
56
|
+
]
|
57
|
+
|
58
|
+
status_table = Terminal::Table.new :headings ["Item", "Status"], :rows => status_table_rows
|
59
|
+
|
60
|
+
clear_screen
|
61
|
+
puts status_table
|
62
|
+
sleep(1)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
data/lib/helpers.rb
CHANGED
@@ -1,11 +1,7 @@
|
|
1
|
-
|
1
|
+
require_relative "autoload"
|
2
2
|
|
3
3
|
module Helpers
|
4
4
|
|
5
|
-
def log
|
6
|
-
Dir.pwd + '/logs/output'
|
7
|
-
end
|
8
|
-
|
9
5
|
# Formatted as: 03/07/2017 14:26
|
10
6
|
def time
|
11
7
|
Time.now.strftime("%m/%d/%Y %H:%M")
|
@@ -16,22 +12,23 @@ module Helpers
|
|
16
12
|
connection.ping?
|
17
13
|
end
|
18
14
|
|
19
|
-
def
|
20
|
-
|
15
|
+
def confirm(input=gets.chomp)
|
16
|
+
if input.to_b
|
17
|
+
return true
|
18
|
+
end
|
19
|
+
false
|
21
20
|
end
|
22
21
|
|
23
|
-
def
|
24
|
-
|
25
|
-
lines.each do |line|
|
26
|
-
file.puts "[#{time}]: #{line}"
|
27
|
-
end
|
28
|
-
end
|
22
|
+
def to_minutes(seconds)
|
23
|
+
seconds.to_f / 60
|
29
24
|
end
|
30
25
|
|
31
|
-
def
|
32
|
-
|
33
|
-
|
34
|
-
|
26
|
+
def to_seconds(minutes)
|
27
|
+
minutes.to_f * 60
|
28
|
+
end
|
29
|
+
|
30
|
+
def clear_screen
|
31
|
+
Gem.win_platform? ? (system "cls") : (system "clear")
|
35
32
|
end
|
36
33
|
|
37
34
|
end
|
data/lib/procedures.rb
ADDED
@@ -0,0 +1,243 @@
|
|
1
|
+
require_relative "autoload"
|
2
|
+
|
3
|
+
include Helpers
|
4
|
+
|
5
|
+
class Procedures
|
6
|
+
|
7
|
+
attr_accessor :com, :brewer, :recipe
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@brewer = Brewer.new
|
11
|
+
@com = Communicator.new
|
12
|
+
@recipe = {}
|
13
|
+
end
|
14
|
+
|
15
|
+
def get_recipe_vars
|
16
|
+
puts "Variables for heating strike water ---"
|
17
|
+
get_strike_temp
|
18
|
+
|
19
|
+
puts "Variables for mash ---"
|
20
|
+
print "Enter mash temperature: "
|
21
|
+
@recipe['mash_temp'] = gets.chomp.to_f
|
22
|
+
print "Enter mash time in minutes: "
|
23
|
+
@recipe['mash_time'] = to_seconds(gets.chomp.to_f)
|
24
|
+
|
25
|
+
puts "Variables for mashout ---"
|
26
|
+
print "Enter mashout temp: "
|
27
|
+
@recipe['mashout_temp'] = gets.chomp.to_f
|
28
|
+
end
|
29
|
+
|
30
|
+
def get_strike_temp
|
31
|
+
print "Input amount of water in quarts: "
|
32
|
+
@recipe['water'] = gets.chomp.to_f
|
33
|
+
|
34
|
+
print "Input amount of grain in lbs: "
|
35
|
+
@recipe['grain'] = gets.chomp.to_f
|
36
|
+
|
37
|
+
print "Input current grain temp (#{pv.to_s} F): "
|
38
|
+
@recipe['grain_temp'] = gets.chomp.to_f
|
39
|
+
if @recipe['grain_temp'] == ""
|
40
|
+
@recipe['grain_temp'] = pv
|
41
|
+
end
|
42
|
+
|
43
|
+
print "Input desired mash temp (150 F): "
|
44
|
+
@recipe['desired_mash_temp'] = gets.chomp
|
45
|
+
if @recipe['desired_mash_temp'] == ""
|
46
|
+
@recipe['desired_mash_temp'] = 150
|
47
|
+
end
|
48
|
+
@recipe['desired_mash_temp']
|
49
|
+
|
50
|
+
@recipe['strike_water_temp'] = script('get_strike_temp', "#{water} #{grain} #{grain_temp} #{@recipe['desired_mash_temp']}").to_f
|
51
|
+
end
|
52
|
+
|
53
|
+
def master
|
54
|
+
get_recipe_vars
|
55
|
+
boot
|
56
|
+
heat_strike_water
|
57
|
+
dough_in
|
58
|
+
mash
|
59
|
+
mashout
|
60
|
+
sparge
|
61
|
+
top_off
|
62
|
+
boil
|
63
|
+
end
|
64
|
+
|
65
|
+
def boot
|
66
|
+
puts "booting..."
|
67
|
+
@brewer.pid(0)
|
68
|
+
@brewer.pump(0)
|
69
|
+
@brewer.rims_to('mash')
|
70
|
+
@brewer.hlt_to('mash')
|
71
|
+
@brewer.all_relays_status
|
72
|
+
puts @brewer.pid
|
73
|
+
|
74
|
+
@brewer.clear
|
75
|
+
puts "Boot successful!"
|
76
|
+
@brewer.out.unshift("successful boot at #{Time.now}")
|
77
|
+
@com.ping("🍺 boot successful 🍺")
|
78
|
+
true
|
79
|
+
end
|
80
|
+
|
81
|
+
# :nocov:
|
82
|
+
def heat_strike_water
|
83
|
+
puts "heat-strike-water procedure started"
|
84
|
+
|
85
|
+
# Confirm strike water is in the mash tun
|
86
|
+
print "Is the strike water in the mash tun? "
|
87
|
+
# -> response
|
88
|
+
confirm ? nil : abort
|
89
|
+
|
90
|
+
# confirm return manifold is in the mash tun
|
91
|
+
print "Is the return manifold in the mash tun? "
|
92
|
+
# -> response
|
93
|
+
confirm ? nil : abort
|
94
|
+
|
95
|
+
print "Is the mash tun valve open? "
|
96
|
+
confirm ? nil : abort
|
97
|
+
|
98
|
+
# confirm RIMS relay is on
|
99
|
+
@brewer.rims_to('mash')
|
100
|
+
puts "RIMS-to-mash relay is now on"
|
101
|
+
|
102
|
+
# turn on pump
|
103
|
+
@brewer.pump(1)
|
104
|
+
puts "Pump is now on"
|
105
|
+
|
106
|
+
puts "Is the pump running properly? "
|
107
|
+
until confirm
|
108
|
+
puts "restarting pump"
|
109
|
+
@brewer.pump(0)
|
110
|
+
@brewer.wait(2)
|
111
|
+
@brewer.pump(1)
|
112
|
+
end
|
113
|
+
|
114
|
+
# confirm that strike water is circulating well
|
115
|
+
print "Is the strike water circulating well? "
|
116
|
+
# -> response
|
117
|
+
confirm ? nil : abort
|
118
|
+
|
119
|
+
|
120
|
+
# calculate strike temp & set PID to strike temp
|
121
|
+
# this sets PID SV to calculated strike temp automagically
|
122
|
+
@brewer.sv(@recipe['strike_water_temp'])
|
123
|
+
puts "SV has been set to calculated strike water temp"
|
124
|
+
# turn on RIMS heater
|
125
|
+
@brewer.pid(1)
|
126
|
+
|
127
|
+
# measure current strike water temp and save
|
128
|
+
@recipe['starting_strike_temp'] = @brewer.pv
|
129
|
+
puts "current strike water temp is #{@brewer.pv}. Saved."
|
130
|
+
puts "Heating to #{@brewer.sv}"
|
131
|
+
|
132
|
+
@com.ping("Strike water beginning to heat. This may take a few minutes.")
|
133
|
+
|
134
|
+
# when strike temp is reached, @com.ping slack
|
135
|
+
@brewer.watch
|
136
|
+
@com.ping("Strike water heated to #{@brewer.pv}. Maintaining temperature.")
|
137
|
+
@com.ping("Next step: dough in")
|
138
|
+
puts "Next step: dough in"
|
139
|
+
puts "command: brewer.dough_in"
|
140
|
+
|
141
|
+
true
|
142
|
+
end
|
143
|
+
# :nocov:
|
144
|
+
|
145
|
+
def dough_in
|
146
|
+
# turn pump off
|
147
|
+
@brewer.pump(0)
|
148
|
+
# turn PID off
|
149
|
+
@brewer.pid(0)
|
150
|
+
@brewer.wait(3)
|
151
|
+
@com.ping("Ready to dough in")
|
152
|
+
puts "Ready to dough in"
|
153
|
+
|
154
|
+
# pour in grain
|
155
|
+
|
156
|
+
print "Confirm when you're done with dough-in (y): "
|
157
|
+
confirm ? nil : abort
|
158
|
+
true
|
159
|
+
end
|
160
|
+
|
161
|
+
def mash
|
162
|
+
@brewer.sv(@recipe['mash_temp'])
|
163
|
+
|
164
|
+
puts "mash stated. This will take a while."
|
165
|
+
@com.ping("Mash started. This will take a while.")
|
166
|
+
|
167
|
+
@brewer.rims_to('mash')
|
168
|
+
|
169
|
+
@brewer.pump(1)
|
170
|
+
@brewer.pid(1)
|
171
|
+
|
172
|
+
@brewer.watch
|
173
|
+
@com.ping("Mash temp (#{@brewer.pv} F) reached. Starting timer for #{@recipe['mash_time']} minutes.")
|
174
|
+
@brewer.wait(@recipe['mash_time'])
|
175
|
+
@com.ping("🍺 Mash complete 🍺. Check for starch conversion.")
|
176
|
+
puts "Mash complete"
|
177
|
+
puts "Check for starch conversion"
|
178
|
+
end
|
179
|
+
|
180
|
+
def mashout
|
181
|
+
@com.ping("Start heating sparge water")
|
182
|
+
|
183
|
+
@brewer.sv(@recipe['mashout_temp'])
|
184
|
+
|
185
|
+
@brewer.pump(1)
|
186
|
+
@brewer.pid(1)
|
187
|
+
|
188
|
+
@com.ping("Heating to #{@brewer.sv}... this could take a few minutes.")
|
189
|
+
@brewer.watch
|
190
|
+
@com.ping("Mashout temperature (#{@brewer.pv}) reached. Mashout complete.")
|
191
|
+
end
|
192
|
+
|
193
|
+
def sparge
|
194
|
+
print "Is the sparge water heated to the correct temperature? "
|
195
|
+
confirm ? nil : abort
|
196
|
+
|
197
|
+
@brewer.hlt_to('mash')
|
198
|
+
@brewer.hlt(1)
|
199
|
+
|
200
|
+
puts "Waiting for 10 seconds. Regulate sparge balance."
|
201
|
+
puts "(ctrl-c to abort proccess)"
|
202
|
+
@brewer.wait(30)
|
203
|
+
|
204
|
+
@brewer.rims_to('boil')
|
205
|
+
@brewer.pump(1)
|
206
|
+
|
207
|
+
@com.ping("Please check the sparge balance and ignite boil tun burner")
|
208
|
+
|
209
|
+
puts "Waiting until intervention to turn off pump (y): "
|
210
|
+
confirm ? nil : abort
|
211
|
+
|
212
|
+
@brewer.pid(0)
|
213
|
+
@brewer.pump(0)
|
214
|
+
|
215
|
+
@brewer.hlt(0)
|
216
|
+
end
|
217
|
+
|
218
|
+
def top_off
|
219
|
+
@brewer.hlt_to('boil')
|
220
|
+
|
221
|
+
@brewer.hlt(1)
|
222
|
+
|
223
|
+
print "waiting for intervention to turn off hlt (y): "
|
224
|
+
confirm ? nil : abort
|
225
|
+
|
226
|
+
@brewer.hlt(0)
|
227
|
+
|
228
|
+
@com.ping('Topping off completed')
|
229
|
+
end
|
230
|
+
|
231
|
+
def boil
|
232
|
+
@com.ping("starting boil procedure")
|
233
|
+
@brewer.wait(to_seconds(5))
|
234
|
+
@com.ping("Add boil hops")
|
235
|
+
@brewer.wait(to_seconds(40))
|
236
|
+
@com.ping("Add flovering hops")
|
237
|
+
@brewer.wait(to_seconds(13))
|
238
|
+
@com.ping("Add finishing hops")
|
239
|
+
@brewer.wait(30)
|
240
|
+
@com.ping("All done")
|
241
|
+
end
|
242
|
+
|
243
|
+
end
|
data/lib/settings.rb
CHANGED
data/notes.md
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
class roles:
|
2
|
+
Brewer:
|
3
|
+
- Directly control each component of the physical brew rig
|
4
|
+
|
5
|
+
Procedures:
|
6
|
+
- compile brewer methods into scripted procedures
|
7
|
+
|
8
|
+
Helpers:
|
9
|
+
- assorted methods, helpers module
|
10
|
+
|
11
|
+
Adaptibrew:
|
12
|
+
- Clone and maintain the adaptibrew directory
|
13
|
+
|
14
|
+
Communicator:
|
15
|
+
- Communicates the status of the brew rig
|
16
|
+
- Communicates actions the brew rig is doing/actions that the brewer class does
|
data/spec/brewer_spec.rb
CHANGED
@@ -10,14 +10,6 @@ describe Brewer do
|
|
10
10
|
Adaptibrew.new.refresh
|
11
11
|
end
|
12
12
|
|
13
|
-
after :all do
|
14
|
-
# in case something goes wrong, everything needs to be reset
|
15
|
-
@brewer = Brewer.new
|
16
|
-
@brewer.pump(0)
|
17
|
-
@brewer.pid(0)
|
18
|
-
@brewer.boot
|
19
|
-
end
|
20
|
-
|
21
13
|
describe "#new" do
|
22
14
|
it "returns a brewer object" do
|
23
15
|
expect(Brewer.new).to be_an_instance_of Brewer
|
@@ -32,9 +24,9 @@ describe Brewer do
|
|
32
24
|
it "can wait for a number of seconds" do
|
33
25
|
# not using let(:current_time) etc. because
|
34
26
|
# the var is created upon the first calling, which is in the expect()
|
35
|
-
current_time = Time.now.
|
27
|
+
current_time = Time.now.to_f
|
36
28
|
@brewer.wait(1)
|
37
|
-
expect(current_time + 1).to eq(Time.now.
|
29
|
+
expect(current_time + 1).to eq(Time.now.to_f)
|
38
30
|
end
|
39
31
|
end
|
40
32
|
|
@@ -57,100 +49,4 @@ describe Brewer do
|
|
57
49
|
end
|
58
50
|
end
|
59
51
|
|
60
|
-
describe ".pump" do
|
61
|
-
# If the pump is already on it does nothing
|
62
|
-
it "turns the pump on" do
|
63
|
-
expect(@brewer.pump(1)).to eq("pump on")
|
64
|
-
@brewer.wait(2)
|
65
|
-
end
|
66
|
-
|
67
|
-
# If the pump is already off it does nothing
|
68
|
-
it "turns the pump off" do
|
69
|
-
expect(@brewer.pump(0)).to eq("pump off")
|
70
|
-
end
|
71
|
-
|
72
|
-
# cant really test this one...
|
73
|
-
context "when the pid is also on" do
|
74
|
-
# This turns on both pump and pid
|
75
|
-
before { @brewer.pid(1) }
|
76
|
-
it "turns the pump and pid off" do
|
77
|
-
expect(@brewer.pump(0)).to eq("pump off")
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
describe ".relay" do
|
83
|
-
it "turns the relay on" do
|
84
|
-
expect(@brewer.relay(2, 1)).to eq("relay 2 on")
|
85
|
-
@brewer.wait(7)
|
86
|
-
end
|
87
|
-
|
88
|
-
it "turns the relay off" do
|
89
|
-
expect(@brewer.relay(2, 0)).to eq("relay 2 off")
|
90
|
-
@brewer.wait(7)
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
describe ".pid" do
|
95
|
-
it "turns the pid on" do
|
96
|
-
expect(@brewer.pid(1)).to eq("Pump and PID are now on")
|
97
|
-
@brewer.wait(2)
|
98
|
-
end
|
99
|
-
|
100
|
-
it "turns the pid off" do
|
101
|
-
expect(@brewer.pid(0)).to eq("PID off")
|
102
|
-
end
|
103
|
-
|
104
|
-
it "returns the pid status" do
|
105
|
-
expect(@brewer.pid).to be_an_instance_of Hash
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
describe ".sv" do
|
110
|
-
context "when there is no argument" do
|
111
|
-
it "returns the sv temp" do
|
112
|
-
expect(@brewer.sv).to be_an_instance_of String
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
context "when there is an argument" do
|
117
|
-
it "sets the sv temp" do
|
118
|
-
expect(@brewer.sv(150)).to be_an_instance_of String
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
describe ".pv" do
|
124
|
-
it "returns the pv" do
|
125
|
-
expect(@brewer.pv).to be_an_instance_of String
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
describe ".ping" do
|
130
|
-
it "pings slack" do
|
131
|
-
expect(@brewer.ping("Tests are passing :D")).to be_an_instance_of Net::HTTPOK
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
describe ".echo" do
|
136
|
-
context "when there is an argument" do
|
137
|
-
it "prints the arg" do
|
138
|
-
expect(@brewer.echo("just part of a test")).to eq("just part of a test")
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
context "when there is no argument" do
|
143
|
-
before { @brewer.pv }
|
144
|
-
it "prints the last output" do
|
145
|
-
expect(@brewer.echo).to be_an_instance_of String
|
146
|
-
end
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
describe ".relay_status" do
|
151
|
-
it "returns the status of a relay" do
|
152
|
-
expect(@brewer.relay_status($settings['rimsToMashRelay'].to_i)).not_to be_empty
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
52
|
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require_relative 'spec_helper'
|
2
|
+
|
3
|
+
describe Brewer do
|
4
|
+
before :each do
|
5
|
+
@brewer = Brewer.new
|
6
|
+
end
|
7
|
+
|
8
|
+
before :all do
|
9
|
+
Adaptibrew.new.refresh
|
10
|
+
end
|
11
|
+
|
12
|
+
after :all do
|
13
|
+
# in case something goes wrong, everything needs to be reset
|
14
|
+
@brewer = Brewer.new
|
15
|
+
@brewer.pump(0)
|
16
|
+
@brewer.pid(0)
|
17
|
+
@brewer.boot
|
18
|
+
end
|
19
|
+
|
20
|
+
describe ".pump" do
|
21
|
+
# If the pump is already on it does nothing
|
22
|
+
it "turns the pump on" do
|
23
|
+
expect(@brewer.pump(1)).to eq("pump on")
|
24
|
+
@brewer.wait(2)
|
25
|
+
end
|
26
|
+
|
27
|
+
# If the pump is already off it does nothing
|
28
|
+
it "turns the pump off" do
|
29
|
+
expect(@brewer.pump(0)).to eq("pump off")
|
30
|
+
end
|
31
|
+
|
32
|
+
# cant really test this one...
|
33
|
+
context "when the pid is also on" do
|
34
|
+
# This turns on both pump and pid
|
35
|
+
before { @brewer.pid(1) }
|
36
|
+
it "turns the pump and pid off" do
|
37
|
+
expect(@brewer.pump(0)).to eq("pump off")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe ".relay" do
|
43
|
+
it "turns the relay on" do
|
44
|
+
expect(@brewer.relay(2, 1)).to eq("relay 2 on")
|
45
|
+
@brewer.wait(7)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "turns the relay off" do
|
49
|
+
expect(@brewer.relay(2, 0)).to eq("relay 2 off")
|
50
|
+
@brewer.wait(7)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe ".pid" do
|
55
|
+
it "turns the pid on" do
|
56
|
+
expect(@brewer.pid(1)).to eq("Pump and PID are now on")
|
57
|
+
@brewer.wait(2)
|
58
|
+
end
|
59
|
+
|
60
|
+
it "turns the pid off" do
|
61
|
+
expect(@brewer.pid(0)).to eq("PID off")
|
62
|
+
end
|
63
|
+
|
64
|
+
it "returns the pid status" do
|
65
|
+
expect(@brewer.pid).to be_an_instance_of Hash
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe ".sv" do
|
70
|
+
context "when there is no argument" do
|
71
|
+
it "returns the sv temp" do
|
72
|
+
expect(@brewer.sv).to be_an_instance_of String
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
context "when there is an argument" do
|
77
|
+
it "sets the sv temp" do
|
78
|
+
expect(@brewer.sv(150)).to be_an_instance_of String
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
describe ".pv" do
|
84
|
+
it "returns the pv" do
|
85
|
+
expect(@brewer.pv).to be_an_instance_of String
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe ".relay_status" do
|
90
|
+
it "returns the status of a relay" do
|
91
|
+
expect(@brewer.relay_status($settings['rimsToMashRelay'].to_i)).not_to be_empty
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
data/spec/helpers_spec.rb
CHANGED
@@ -4,12 +4,6 @@ include Helpers
|
|
4
4
|
|
5
5
|
describe "Helpers" do
|
6
6
|
|
7
|
-
describe "#log" do
|
8
|
-
it "returns the log file path" do
|
9
|
-
expect(log).to eq(Dir.pwd + '/logs/output')
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
7
|
describe "#time" do
|
14
8
|
it "can return the date/time" do
|
15
9
|
# This might not be consistent???
|
@@ -19,26 +13,6 @@ describe "Helpers" do
|
|
19
13
|
end
|
20
14
|
end
|
21
15
|
|
22
|
-
describe "#write_log and #clear_log" do
|
23
|
-
context "when the log is empty" do
|
24
|
-
before { clear_log(log) }
|
25
|
-
specify { expect(File.zero?(log)).to be true }
|
26
|
-
it "can write to the log" do
|
27
|
-
write_log(log, ['log entry'])
|
28
|
-
expect(File.zero?(log)).to be false
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
context "when the log is not empty" do
|
33
|
-
write_log(log, ['log entry'])
|
34
|
-
specify { expect(File.zero?(log)).to be false }
|
35
|
-
it "can clear the log" do
|
36
|
-
clear_log(log)
|
37
|
-
expect(File.zero?(log)).to be true
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
16
|
describe "#confirm" do
|
43
17
|
it "should return true" do
|
44
18
|
expect(confirm('y')).to be true
|
data/spec/spec_helper.rb
CHANGED
@@ -5,7 +5,4 @@ require 'simplecov'
|
|
5
5
|
SimpleCov.command_name 'RSpec'
|
6
6
|
SimpleCov.start
|
7
7
|
|
8
|
-
require_relative
|
9
|
-
require_relative '../lib/brewer.rb'
|
10
|
-
require_relative '../lib/helpers.rb'
|
11
|
-
require_relative '../lib/settings.rb'
|
8
|
+
require_relative "../lib/autoload"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brewer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.71
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luke Sweeney
|
@@ -58,6 +58,20 @@ dependencies:
|
|
58
58
|
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: '1.7'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: wannabe_bool
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '1.7'
|
68
|
+
type: :runtime
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '1.7'
|
61
75
|
- !ruby/object:Gem::Dependency
|
62
76
|
name: slack-notifier
|
63
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,6 +86,34 @@ dependencies:
|
|
72
86
|
- - ">="
|
73
87
|
- !ruby/object:Gem::Version
|
74
88
|
version: '0'
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: require_all
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
type: :runtime
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: terminal-table
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :runtime
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
75
117
|
- !ruby/object:Gem::Dependency
|
76
118
|
name: rake
|
77
119
|
requirement: !ruby/object:Gem::Requirement
|
@@ -194,12 +236,16 @@ files:
|
|
194
236
|
- bin/brewer
|
195
237
|
- brewer.gemspec
|
196
238
|
- lib/adaptibrew.rb
|
239
|
+
- lib/autoload.rb
|
197
240
|
- lib/brewer.rb
|
241
|
+
- lib/communicator.rb
|
198
242
|
- lib/helpers.rb
|
243
|
+
- lib/procedures.rb
|
199
244
|
- lib/settings.rb
|
200
|
-
-
|
245
|
+
- notes.md
|
201
246
|
- spec/adaptibrew_spec.rb
|
202
247
|
- spec/brewer_spec.rb
|
248
|
+
- spec/hardware_spec.rb
|
203
249
|
- spec/helpers_spec.rb
|
204
250
|
- spec/settings_spec.rb
|
205
251
|
- spec/spec_helper.rb
|
@@ -231,6 +277,7 @@ summary: A shell interface for adaptibrew
|
|
231
277
|
test_files:
|
232
278
|
- spec/adaptibrew_spec.rb
|
233
279
|
- spec/brewer_spec.rb
|
280
|
+
- spec/hardware_spec.rb
|
234
281
|
- spec/helpers_spec.rb
|
235
282
|
- spec/settings_spec.rb
|
236
283
|
- spec/spec_helper.rb
|
data/lib/slacker.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
require 'slack-notifier'
|
2
|
-
require 'yaml'
|
3
|
-
require 'yaml/store'
|
4
|
-
|
5
|
-
slack_file = Dir.home + "/.brewer/.slack.yml"
|
6
|
-
|
7
|
-
if !File.file?(slack_file)
|
8
|
-
|
9
|
-
# this will create the file if it doesn't exists, which it doesn't in this context
|
10
|
-
store = YAML::Store.new slack_file
|
11
|
-
|
12
|
-
# you can get this from your slack app integrations page
|
13
|
-
print "Enter your Slack webhook url: "
|
14
|
-
webhook_url = gets.chomp
|
15
|
-
|
16
|
-
# This just stores the webhook_url so you only have to enter it once
|
17
|
-
store.transaction do
|
18
|
-
store['webhook_url'] = webhook_url
|
19
|
-
end
|
20
|
-
|
21
|
-
# Here's a comment in .slack.yml so if you find it by accident you'll know what it does
|
22
|
-
File.open(slack_file, 'a') do |file|
|
23
|
-
file.puts "# This is the slack configuration file for the brewer gem"
|
24
|
-
file.puts "# You can delete this file and brewer will re-create it on start-up"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
|
29
|
-
# finally, start up a global variable for the brewer class to use
|
30
|
-
# A full `Slacker` class is not needed, since this only does one thing
|
31
|
-
$slack = Slack::Notifier.new YAML.load(File.open(slack_file))['webhook_url']
|