brewser 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,194 @@
1
+ require "spec_helper"
2
+
3
+ describe "ProMash tests" do
4
+
5
+ context "ProMashTxt" do
6
+
7
+ before :each do
8
+ @recipe = Brewser.parse(read_file('promash/VictoryIPA.txt'))
9
+ end
10
+
11
+ it "should deserialize the base recipe data" do
12
+ @recipe.class.should == ProMashTxt::Recipe
13
+ @recipe.name.should == "Victory IPA"
14
+ @recipe.method.should == "All Grain"
15
+
16
+ @recipe.recipe_volume.class.should == Unit
17
+ @recipe.recipe_volume.kind.should == :volume
18
+ @recipe.recipe_volume.scalar_in('gal').should be_within(0.01).of(6)
19
+
20
+ @recipe.boil_volume.class.should == Unit
21
+ @recipe.boil_volume.kind.should == :volume
22
+ @recipe.boil_volume.scalar_in('gal').should be_within(0.01).of(6)
23
+
24
+ @recipe.recipe_efficiency.should == 80.0
25
+
26
+ @recipe.boil_time.class.should == Unit
27
+ @recipe.boil_time.kind.should == :time
28
+ @recipe.boil_time.should == "60 min".u
29
+
30
+ @recipe.estimated_og.should == 1.059
31
+ @recipe.estimated_color.should == 11.0
32
+ @recipe.estimated_ibu.should == 53.5
33
+ end
34
+
35
+ it "should deserialize the hop data" do
36
+ @recipe.hops.count.should == 4
37
+ h=@recipe.hops[0]
38
+ h.name.should == "Cascade"
39
+ h.alpha_acids.should == 4.35
40
+ h.amount.should === "3 oz".u
41
+ h.added_when.should == "Boil"
42
+ h.time.should === "60 min".u
43
+ h.form.should == "Whole"
44
+ end
45
+
46
+ it "should deserialize the fermentable data" do
47
+ @recipe.fermentables.count.should == 6
48
+ f=@recipe.fermentables[0]
49
+ f.name.should == "Pale Malt(2-row)"
50
+ f.amount.should === "8 lb".u
51
+ f.potential.should == 1.038
52
+ f.color.should == 3.0
53
+ end
54
+
55
+ it "should deserialize the additive data" do
56
+ @recipe.additives.count.should == 1
57
+ a=@recipe.additives[0]
58
+ a.name.should == "Irish Moss"
59
+ a.type.should == "Fining"
60
+ a.added_when.should == "Boil"
61
+ a.amount.should == "1 tsp".u
62
+ a.time.should == "15 min".u
63
+ end
64
+
65
+ it "should deserialize the water profile data" do
66
+ w=@recipe.water_profile
67
+ w.name.should == "Marin Tap Water"
68
+ w.calcium.should == 12.0
69
+ w.bicarbonate.should == 74.0
70
+ w.sulfates.should == 17.0
71
+ w.chloride.should == 13.0
72
+ w.sodium.should == 15.0
73
+ w.magnesium.should == 10.0
74
+ w.ph.should == 8.31
75
+ end
76
+
77
+ it "should deserialize the style data" do
78
+ s=@recipe.style
79
+ s.name.should == "India Pale Ale"
80
+ s.category.should == "India Pale Ale"
81
+ s.style_letter.should == "0"
82
+ s.style_guide.should == "AHA"
83
+ end
84
+ end
85
+
86
+ context "ProMashRec" do
87
+
88
+ before :each do
89
+ @recipe = Brewser.parse(read_file('promash/BelgianWhite.rec'))
90
+ end
91
+
92
+ it "should deserialize the base recipe data" do
93
+ @recipe.class.should == ProMashRec::Recipe
94
+ @recipe.name.should == "Jeffrey's Winter White"
95
+ @recipe.method.should == "All Grain"
96
+ @recipe.type.should == "Ale"
97
+
98
+ @recipe.recipe_volume.class.should == Unit
99
+ @recipe.recipe_volume.kind.should == :volume
100
+ @recipe.recipe_volume.scalar_in('gal').should be_within(0.01).of(5)
101
+
102
+ @recipe.boil_volume.class.should == Unit
103
+ @recipe.boil_volume.kind.should == :volume
104
+ @recipe.boil_volume.scalar_in('gal').should be_within(0.01).of(5)
105
+
106
+ @recipe.recipe_efficiency.should == 75.0
107
+
108
+ @recipe.boil_time.class.should == Unit
109
+ @recipe.boil_time.kind.should == :time
110
+ @recipe.boil_time.should == "60 min".u
111
+
112
+ @recipe.estimated_og.should == 1.049
113
+ @recipe.estimated_ibu.should == 16.3
114
+ end
115
+
116
+ it "should deserialize the hop data" do
117
+ @recipe.hops.count.should == 4
118
+ h=@recipe.hops[0]
119
+ h.name.should == "Hallertauer"
120
+ h.alpha_acids.should == 4.00
121
+ h.amount.should == "0.5 oz".u
122
+ h.added_when.should == "Boil"
123
+ h.time.should === "60 min".u
124
+ h.form.should == "Whole"
125
+ end
126
+
127
+ it "should deserialize the fermentable data" do
128
+ @recipe.fermentables.count.should == 5
129
+ f=@recipe.fermentables[0]
130
+ f.name.should == "Pale Malt(2-row)"
131
+ f.amount.should == "4 lb".u
132
+ f.potential.should == 1.037
133
+ f.color.should == 3.0
134
+ end
135
+
136
+ it "should deserialize the additive data" do
137
+ @recipe.additives.count.should == 2
138
+ a=@recipe.additives[0]
139
+ a.name.should == "Corriander Seed"
140
+ a.type.should == "Spice"
141
+ a.added_when.should == "Boil"
142
+ #a.amount.should == "1.5 oz".u # TODO find out what is wrong with this
143
+ a.time.should == "5 min".u
144
+ end
145
+
146
+ it "should deserialize the yeast data" do
147
+ @recipe.yeasts.count.should == 1
148
+ y=@recipe.yeasts.first
149
+ y.name.should == "Belgian White Beer"
150
+ y.supplier.should == "WYeast"
151
+ y.catalog.should == "3944"
152
+ y.min_temperature.should == "65 dF".u
153
+ y.max_temperature.should == "65 dF".u
154
+ y.amount.should == "1 each".u
155
+ y.attenuation.should == 74.0
156
+ end
157
+
158
+ it "should deserialize the mash schedule data" do
159
+ m=@recipe.mash_schedule
160
+ m.name.should == "Simple"
161
+ end
162
+
163
+ it "should deserialize the mash step data" do
164
+ m=@recipe.mash_schedule
165
+ m.mash_steps.count.should == 3
166
+ s=m.mash_steps[0]
167
+ #s.index.should == 1
168
+ s.name.should == "Sac rest"
169
+ s.rest_time.should == "90 min".u
170
+ s.rest_temperature.should == "155 dF".u
171
+ end
172
+
173
+ it "should deserialize the water profile data" do
174
+ w=@recipe.water_profile
175
+ w.name.should == "Marin Tap Water"
176
+ w.calcium.should == 12.0
177
+ w.bicarbonate.should == 74.0
178
+ w.sulfates.should == 17.0
179
+ w.chloride.should == 13.0
180
+ w.sodium.should == 15.0
181
+ w.magnesium.should == 10.0
182
+ w.ph.should == 8.31
183
+ end
184
+
185
+ it "should deserialize the style data" do
186
+ s=@recipe.style
187
+ s.name.should == "Witbier"
188
+ s.category.should == "Belgian & French Ale"
189
+ s.style_letter.should == "B"
190
+ s.category_number.should == "19"
191
+ s.style_guide.should == "BJCP"
192
+ end
193
+ end
194
+ end
@@ -0,0 +1,29 @@
1
+ require 'simplecov'
2
+
3
+ SimpleCov.start do
4
+ add_filter "spec/"
5
+ end
6
+
7
+ require 'rubygems'
8
+ require 'bundler'
9
+ Bundler.require
10
+
11
+ require 'brewser'
12
+ require 'rspec'
13
+
14
+ RSpec.configure do |config|
15
+ config.treat_symbols_as_metadata_keys_with_true_values = true
16
+ config.filter_run :focus => true
17
+ config.run_all_when_everything_filtered = true
18
+
19
+ def filename(file)
20
+ "samples/#{file}"
21
+ end
22
+ def read_file(file)
23
+ File.read(filename(file))
24
+ end
25
+ def read_xml(file)
26
+ Nokogiri::XML(read_file(file)){|config| config.noblanks }
27
+ end
28
+
29
+ end
metadata ADDED
@@ -0,0 +1,187 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: brewser
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jon Lochner
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-06-13 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activesupport
16
+ requirement: &2169441920 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 2.3.14
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2169441920
25
+ - !ruby/object:Gem::Dependency
26
+ name: multi_json
27
+ requirement: &2169440260 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: '1.0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *2169440260
36
+ - !ruby/object:Gem::Dependency
37
+ name: ruby-units
38
+ requirement: &2169439720 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *2169439720
47
+ - !ruby/object:Gem::Dependency
48
+ name: nokogiri
49
+ requirement: &2169439220 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *2169439220
58
+ - !ruby/object:Gem::Dependency
59
+ name: roxml
60
+ requirement: &2169438420 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *2169438420
69
+ - !ruby/object:Gem::Dependency
70
+ name: bindata
71
+ requirement: &2169437620 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *2169437620
80
+ - !ruby/object:Gem::Dependency
81
+ name: builder
82
+ requirement: &2169436640 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: *2169436640
91
+ - !ruby/object:Gem::Dependency
92
+ name: dm-core
93
+ requirement: &2169434900 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ~>
97
+ - !ruby/object:Gem::Version
98
+ version: 1.2.0
99
+ type: :runtime
100
+ prerelease: false
101
+ version_requirements: *2169434900
102
+ - !ruby/object:Gem::Dependency
103
+ name: dm-validations
104
+ requirement: &2169433860 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 1.2.0
110
+ type: :runtime
111
+ prerelease: false
112
+ version_requirements: *2169433860
113
+ description:
114
+ email:
115
+ - jlochner@gmail.com
116
+ executables: []
117
+ extensions: []
118
+ extra_rdoc_files: []
119
+ files:
120
+ - MIT-LICENSE
121
+ - README.md
122
+ - lib/brewser/brewson.rb
123
+ - lib/brewser/engines/beerxml.rb
124
+ - lib/brewser/engines/beerxml2.rb
125
+ - lib/brewser/engines/brewson.rb
126
+ - lib/brewser/engines/promash_rec.rb
127
+ - lib/brewser/engines/promash_txt.rb
128
+ - lib/brewser/engines.rb
129
+ - lib/brewser/exceptions.rb
130
+ - lib/brewser/json-validation.rb
131
+ - lib/brewser/model/additive.rb
132
+ - lib/brewser/model/base.rb
133
+ - lib/brewser/model/batch.rb
134
+ - lib/brewser/model/fermentable.rb
135
+ - lib/brewser/model/fermentation_schedule.rb
136
+ - lib/brewser/model/fermentation_steps.rb
137
+ - lib/brewser/model/hop.rb
138
+ - lib/brewser/model/mash_schedule.rb
139
+ - lib/brewser/model/mash_steps.rb
140
+ - lib/brewser/model/recipe.rb
141
+ - lib/brewser/model/style.rb
142
+ - lib/brewser/model/units.rb
143
+ - lib/brewser/model/water_profile.rb
144
+ - lib/brewser/model/yeast.rb
145
+ - lib/brewser/ruby-units.rb
146
+ - lib/brewser/version.rb
147
+ - lib/brewser.rb
148
+ - spec/basic_spec.rb
149
+ - spec/beerxml_spec.rb
150
+ - spec/promash_spec.rb
151
+ - spec/spec_helper.rb
152
+ homepage: https://github.com/brewpoo/brewser
153
+ licenses: []
154
+ post_install_message:
155
+ rdoc_options: []
156
+ require_paths:
157
+ - lib
158
+ required_ruby_version: !ruby/object:Gem::Requirement
159
+ none: false
160
+ requirements:
161
+ - - ! '>='
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ segments:
165
+ - 0
166
+ hash: 3406155291406653551
167
+ required_rubygems_version: !ruby/object:Gem::Requirement
168
+ none: false
169
+ requirements:
170
+ - - ! '>='
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ segments:
174
+ - 0
175
+ hash: 3406155291406653551
176
+ requirements: []
177
+ rubyforge_project: brewser
178
+ rubygems_version: 1.8.6
179
+ signing_key:
180
+ specification_version: 3
181
+ summary: Library for parsing and generating serialized brewing data
182
+ test_files:
183
+ - spec/basic_spec.rb
184
+ - spec/beerxml_spec.rb
185
+ - spec/promash_spec.rb
186
+ - spec/spec_helper.rb
187
+ has_rdoc: