brewby 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.
@@ -0,0 +1,32 @@
1
+ recipe 'Honey Ale' do
2
+ step 'Strike Water' do
3
+ type :temp_control
4
+ mode :auto
5
+ target 168.0
6
+ hold_duration 5
7
+ input :hlt
8
+ output :hlt
9
+ end
10
+
11
+ step 'Infusion Mash Step' do
12
+ type :temp_control, mode: :auto, target: 150.0, duration: 60
13
+ input :mlt
14
+ output :hlt
15
+ end
16
+
17
+ step 'Fly Sparge' do
18
+ type :temp_control
19
+ mode :auto
20
+ target 168.0
21
+ hold_duration 45
22
+ input :hlt
23
+ output :mlt
24
+ end
25
+
26
+ step 'Boil' do
27
+ type :temp_control
28
+ mode :manual
29
+ input :bk
30
+ output :bk
31
+ end
32
+ end
@@ -0,0 +1,31 @@
1
+ require 'stringio'
2
+
3
+ module Brewby
4
+ class VirtualView
5
+ def initialize
6
+ @output = []
7
+ end
8
+
9
+ def move row, col
10
+ @output[row] ||= StringIO.new("".ljust(70))
11
+ @output[row].pos = col
12
+ @current_row = row
13
+ end
14
+
15
+ def addstr string
16
+ @output[@current_row].write string
17
+ end
18
+
19
+ def readline lineno
20
+ @output[lineno].string
21
+ end
22
+
23
+ def refresh
24
+ # no-op
25
+ end
26
+
27
+ def getch
28
+ # no-op. this will get stubbed by a test
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,110 @@
1
+ require 'spec_helper'
2
+
3
+ class FakeStep
4
+ include Brewby::Timed
5
+ end
6
+
7
+ describe Brewby::Timed do
8
+ before do
9
+ @step = FakeStep.new
10
+ end
11
+
12
+ it 'has a start time' do
13
+ @step.start_time.should be_nil
14
+ end
15
+
16
+ it 'has an end time' do
17
+ @step.end_time.should be_nil
18
+ end
19
+
20
+ context 'unstarted' do
21
+ it 'is unstarted' do
22
+ @step.started?.should be_false
23
+ end
24
+
25
+ it 'is unended' do
26
+ @step.ended?.should be_false
27
+ end
28
+
29
+ it 'is not in progress' do
30
+ @step.in_progress?.should be_false
31
+ end
32
+
33
+ it 'has no elapsed time' do
34
+ @step.elapsed.should == 0
35
+ end
36
+ end
37
+
38
+ context 'started' do
39
+ before do
40
+ @step.start_timer
41
+ end
42
+
43
+ it 'is started' do
44
+ @step.started?.should be_true
45
+ end
46
+
47
+ it 'is not ended' do
48
+ @step.ended?.should be_false
49
+ end
50
+
51
+ it 'is in progress' do
52
+ @step.in_progress?.should be_true
53
+ end
54
+
55
+ it 'has an elapsed time' do
56
+ elapsed = Time.now - @step.start_time
57
+ @step.elapsed.should be_within(1).of(elapsed)
58
+ end
59
+ end
60
+
61
+ context 'ended' do
62
+ before do
63
+ @step.start_timer
64
+ @step.stop_timer
65
+ end
66
+
67
+ it 'is started' do
68
+ @step.started?.should be_true
69
+ end
70
+
71
+ it 'is ended' do
72
+ @step.ended?.should be_true
73
+ end
74
+
75
+ it 'is not in progress' do
76
+ @step.in_progress?.should be_false
77
+ end
78
+
79
+ it 'has an elapsed time' do
80
+ elapsed = @step.end_time - @step.start_time
81
+ @step.elapsed.should == elapsed
82
+ end
83
+ end
84
+
85
+ context 'timer display' do
86
+ context 'time is greater than zero' do
87
+ let(:time_remaining) { 3750 }
88
+
89
+ it 'gives a formatted timer' do
90
+ @step.timer_for(time_remaining).should == "01:02:30"
91
+ end
92
+
93
+ it 'gives a formatted countdown' do
94
+ @step.countdown_for(time_remaining).should == "01:02:30"
95
+ end
96
+ end
97
+
98
+ context 'time is less than zero' do
99
+ let(:time_remaining) { -95 }
100
+
101
+ it 'gives a zeroed counter for timers' do
102
+ @step.timer_for(time_remaining).should == "00:00:00"
103
+ end
104
+
105
+ it 'gives a negative counter countdown' do
106
+ @step.countdown_for(time_remaining).should == "+00:01:35"
107
+ end
108
+ end
109
+ end
110
+ end
metadata ADDED
@@ -0,0 +1,151 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: brewby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Andrew Nordman
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-01-31 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: temper-control
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description:
70
+ email:
71
+ - cadwallion@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - .gitignore
77
+ - Gemfile
78
+ - LICENSE
79
+ - README.md
80
+ - Rakefile
81
+ - brewby.gemspec
82
+ - examples/basic_control.rb
83
+ - examples/brewby_recipe.rb
84
+ - examples/config.json
85
+ - examples/recipe_loader.rb
86
+ - lib/brewby.rb
87
+ - lib/brewby/application.rb
88
+ - lib/brewby/heating_element.rb
89
+ - lib/brewby/inputs.rb
90
+ - lib/brewby/inputs/ds18b20.rb
91
+ - lib/brewby/inputs/test.rb
92
+ - lib/brewby/outputs.rb
93
+ - lib/brewby/outputs/gpio.rb
94
+ - lib/brewby/outputs/test.rb
95
+ - lib/brewby/step_loader.rb
96
+ - lib/brewby/steps.rb
97
+ - lib/brewby/steps/dsl/step.rb
98
+ - lib/brewby/steps/temp_control.rb
99
+ - lib/brewby/temp_sensor.rb
100
+ - lib/brewby/timed.rb
101
+ - lib/brewby/version.rb
102
+ - spec/application_spec.rb
103
+ - spec/heating_element_spec.rb
104
+ - spec/inputs/ds18b20_spec.rb
105
+ - spec/inputs_spec.rb
106
+ - spec/outputs/gpio_spec.rb
107
+ - spec/outputs_spec.rb
108
+ - spec/spec_helper.rb
109
+ - spec/step_loader_spec.rb
110
+ - spec/steps/dsl/step_spec.rb
111
+ - spec/steps/temp_control_spec.rb
112
+ - spec/support/sample_recipe.rb
113
+ - spec/support/virtual_view.rb
114
+ - spec/timed_spec.rb
115
+ homepage: ''
116
+ licenses: []
117
+ metadata: {}
118
+ post_install_message:
119
+ rdoc_options: []
120
+ require_paths:
121
+ - lib
122
+ required_ruby_version: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ required_rubygems_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ requirements: []
133
+ rubyforge_project:
134
+ rubygems_version: 2.0.14
135
+ signing_key:
136
+ specification_version: 4
137
+ summary: The core components of the Brewby brewing system
138
+ test_files:
139
+ - spec/application_spec.rb
140
+ - spec/heating_element_spec.rb
141
+ - spec/inputs/ds18b20_spec.rb
142
+ - spec/inputs_spec.rb
143
+ - spec/outputs/gpio_spec.rb
144
+ - spec/outputs_spec.rb
145
+ - spec/spec_helper.rb
146
+ - spec/step_loader_spec.rb
147
+ - spec/steps/dsl/step_spec.rb
148
+ - spec/steps/temp_control_spec.rb
149
+ - spec/support/sample_recipe.rb
150
+ - spec/support/virtual_view.rb
151
+ - spec/timed_spec.rb