toji 2.25.0 → 2.26.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 02c486b67d581213f10dd04a1815ed752f52cf4a97df331b14caec316c1aa5b4
4
- data.tar.gz: f510ec0c8fb9da7241e679477ffe0911f481146658da77311db0bdf6b5c36bdd
3
+ metadata.gz: 6c5c928141c50b2cb53f8a876745dae8de74474ba19a5bb3ce66628372fb3915
4
+ data.tar.gz: 8e8f47734c17433cddcce0e22a841c768d8e3a8d4dc850362dc35608c5f2b2b8
5
5
  SHA512:
6
- metadata.gz: b0ef97979a4c20e05780bf5d988030ae2cb1bbc9c71c890edf4b32a85dbf8302978df6dec3ee336e4d14f49945d190df3459425ce3154db205fb6a63143385ef
7
- data.tar.gz: 16e3917ad5a045f4d9e2e203e048f179efa4871389fd89cb1099c872eb1dd0a0e20bfe92859d5d34fa3bde45d7947bc6bf654f96d73227c4d3ea55de5148e7ad
6
+ metadata.gz: b0c491de20e80b714d92a742ac56f6cb9bb7563272485a04c5f43caf715cb1a69af2d6cb3607209fef99f3aad162d0b5e8b543481c01889271a43b34da3693b8
7
+ data.tar.gz: b60dd30b4e146431b2b7a3bbffe16058ffac5f9cf0d886b76a62ba1c0fd9d9de10ea5b5357651e1bcedf5e01eadcc5b2161da03ba7fc053e3d51416b84048e66
data/example/recipe.rb CHANGED
@@ -25,7 +25,7 @@ table = Terminal::Table.new do |t|
25
25
  t << ["[累計]"]
26
26
  t << ["総米(g)"] + recipe.cumulative_rice_totals
27
27
  t << ["白米比率"] + recipe.rice_ratios.map{|v| v&.round(2)}
28
- t << ["酒母歩合(%)"] + recipe.cumulative_moto_ratios.map{|s| s * 100}.map{|v| v&.round(2)}
28
+ t << ["酒母歩合(%)"] + recipe.moto_ratios.map{|s| s * 100}.map{|v| v&.round(2)}
29
29
  t << ["タンク内容量(ml)"] + recipe.steps.map {|s|
30
30
  s.yeasts.map(&:weight).sum + s.lactic_acids.map(&:weight).sum + s.kakes.map(&:steamed).sum + s.kojis.map(&:dekoji).sum + s.waters.map(&:weight).sum + s.alcohols.map(&:weight).sum
31
31
  }.then {|a|
data/lib/toji/recipe.rb CHANGED
@@ -52,23 +52,53 @@ module Toji
52
52
  dst.round!(ndigit, mini_ndigit, half: half)
53
53
  end
54
54
 
55
- # 総米の累計
56
- def cumulative_rice_totals
57
- rice_total = steps.map(&:rice_total)
55
+ def compact!
56
+ steps.map(&:compact!)
57
+ steps.select! {|step| 0<step.ingredients.to_a.length}
58
58
 
59
- rice_total.map.with_index {|x,i|
60
- rice_total[0..i].inject(&:+)
61
- }
59
+ ab_expects.select! {|ab| ab.alcohol && ab.nihonshudo}
60
+ ab_expects.uniq! {|ab| [ab.alcohol, ab.nihonshudo]}
61
+
62
+ self
62
63
  end
63
64
 
64
- # 酒母歩合の累計
65
- def cumulative_moto_ratios
66
- rice_total = steps.map(&:rice_total)
67
- moto = steps.select(&:moto?).map(&:rice_total).sum.to_f
65
+ def compact
66
+ Utils.check_dup(self)
68
67
 
69
- rice_total.map.with_index {|x,i|
70
- moto / rice_total[0..i].inject(&:+)
71
- }
68
+ dst = self.dup
69
+ dst.compact!
70
+ end
71
+
72
+
73
+ # 仕込み全体の集計値
74
+
75
+ # 総米
76
+ def rice_total
77
+ steps.map(&:rice_total).sum.to_f
78
+ end
79
+
80
+ # 麹歩合
81
+ # 原料白米に占める麹米の割合
82
+ # 留め仕込みまでの総米重量の20〜22%が標準である
83
+ # なお、留め仕込みまでの麹歩合が20%を下回ると蒸米の溶解糖化に影響が出るので注意がいる
84
+ # 出典: 酒造教本 P95
85
+ def koji_ratio
86
+ val = steps.map(&:koji_total).sum.to_f / rice_total
87
+ val.nan? ? 0.0 : val
88
+ end
89
+
90
+ # 汲水歩合
91
+ #
92
+ # 酒母: 110%が標準、高温糖化酒母は150〜180%
93
+ # 添: 85〜100%の範囲で90%が標準、湧き進め型は歩合が高い
94
+ # 仲: 120%が標準
95
+ # 留: 130〜150%の範囲
96
+ # 全体: 留までの総米に対し120〜130%、標準は125%、高級酒は130〜145%である
97
+ #
98
+ # 出典: 酒造教本 P96
99
+ def water_ratio
100
+ val = steps.map(&:water_total).sum.to_f / rice_total
101
+ val.nan? ? 0.0 : val
72
102
  end
73
103
 
74
104
  # 酒母歩合
@@ -78,9 +108,70 @@ module Toji
78
108
  #
79
109
  # 出典: 酒造教本 P96
80
110
  def moto_ratio
81
- cumulative_moto_ratios.last || 0.0
111
+ moto_ratios.last || 0.0
112
+ end
113
+
114
+ # 麹米精米歩合
115
+ def koji_polishing_ratio
116
+ kojis = steps.flat_map{|step| step.kojis}.select{|koji| 0<koji.weight}
117
+ if kojis.length==0 || kojis.find{|koji| !koji.polishing_ratio}
118
+ Float::NAN
119
+ else
120
+ ratio_sum = kojis.map{|koji| koji.polishing_ratio * koji.weight}.sum.to_f
121
+ ratio_sum / steps.map(&:koji_total).sum.to_f
122
+ end
82
123
  end
83
124
 
125
+ # 掛米精米歩合
126
+ def kake_polishing_ratio
127
+ kakes = steps.flat_map{|step| step.kakes}.select{|kake| 0<kake.weight}
128
+ if kakes.length==0 || kakes.find{|kake| !kake.polishing_ratio}
129
+ Float::NAN
130
+ else
131
+ ratio_sum = kakes.map{|kake| kake.polishing_ratio * kake.weight}.sum.to_f
132
+ ratio_sum / steps.map(&:kake_total).sum.to_f
133
+ end
134
+ end
135
+
136
+
137
+ # 累計
138
+
139
+ def cumulate(key)
140
+ values = steps.map(&key)
141
+
142
+ values.map.with_index {|x,i|
143
+ values[0..i].sum
144
+ }
145
+ end
146
+
147
+ # 総米の累計
148
+ def cumulative_rice_totals
149
+ cumulate(:rice_total)
150
+ end
151
+
152
+ # 麹歩合の累計
153
+ def cumulative_koji_ratios
154
+ rice_totals = cumulate(:rice_total)
155
+ koji_totals = cumulate(:koji_total)
156
+
157
+ rice_totals.map.with_index {|rice_total,i|
158
+ koji_totals[i] / rice_total
159
+ }
160
+ end
161
+
162
+ # 汲水歩合の累計
163
+ def cumulative_water_ratios
164
+ rice_totals = cumulate(:rice_total)
165
+ water_totals = cumulate(:water_total)
166
+
167
+ rice_totals.map.with_index {|rice_total,i|
168
+ water_totals[i] / rice_total
169
+ }
170
+ end
171
+
172
+
173
+ # 比率
174
+
84
175
  # 白米比率
85
176
  #
86
177
  # 発酵型と白米比率
@@ -97,6 +188,27 @@ module Toji
97
188
  }
98
189
  end
99
190
 
191
+ # 総米の割合
192
+ def rice_total_percentages
193
+ rice_totals = steps.map(&:rice_total)
194
+ total = rice_totals.sum
195
+
196
+ rice_totals.map {|rice_total|
197
+ rice_total / total
198
+ }
199
+ end
200
+
201
+ # 酒母歩合の累計
202
+ def moto_ratios
203
+ rice_total = steps.map(&:rice_total)
204
+ moto = steps.select(&:moto?).map(&:rice_total).sum.to_f
205
+
206
+ rice_total.map.with_index {|x,i|
207
+ moto / rice_total[0..i].inject(&:+)
208
+ }
209
+ end
210
+
211
+
100
212
  def table_data
101
213
  headers = [""] + steps.map.with_index{|s,i| :"Step#{i}"} + [:total]
102
214
  keys = [["RiceTotal", :rice_total], ["Kake", :kakes], ["Koji", :kojis], ["Alcohol", :alcohols], ["Water", :waters], ["LacticAcid", :lactic_acids]]
@@ -41,25 +41,23 @@ module Toji
41
41
  (waters || []).map(&:weight).map(&:to_f).sum.to_f
42
42
  end
43
43
 
44
+ # 乳酸
45
+ def lactic_acid_total
46
+ (lactic_acids || []).map(&:weight).map(&:to_f).sum.to_f
47
+ end
48
+
49
+ # 醸造アルコール
50
+ def alcohol_total
51
+ (alcohols || []).map(&:weight).map(&:to_f).sum.to_f
52
+ end
53
+
44
54
  # 麹歩合
45
- # 原料白米に占める麹米の割合
46
- # 留め仕込みまでの総米重量の20〜22%が標準である
47
- # なお、留め仕込みまでの麹歩合が20%を下回ると蒸米の溶解糖化に影響が出るので注意がいる
48
- # 出典: 酒造教本 P95
49
55
  def koji_ratio
50
56
  val = koji_total / rice_total
51
57
  val.nan? ? 0.0 : val
52
58
  end
53
59
 
54
60
  # 汲水歩合
55
- #
56
- # 酒母: 110%が標準、高温糖化酒母は150〜180%
57
- # 添: 85〜100%の範囲で90%が標準、湧き進め型は歩合が高い
58
- # 仲: 120%が標準
59
- # 留: 130〜150%の範囲
60
- # 全体: 留までの総米に対し120〜130%、標準は125%、高級酒は130〜145%である
61
- #
62
- # 出典: 酒造教本 P96
63
61
  def water_ratio
64
62
  val = water_total / rice_total
65
63
  val.nan? ? 0.0 : val
@@ -136,6 +134,27 @@ module Toji
136
134
  dst.round!(ndigit, mini_ndigit, half: half)
137
135
  end
138
136
 
137
+ def compact!
138
+ kojis.select! {|koji| 0<koji.weight.to_f}
139
+ kojis.each {|koji|
140
+ koji.tanekojis.select! {|tanekoji| 0<tanekoji.ratio.to_f}
141
+ }
142
+ kakes.select! {|kake| 0<kake.weight.to_f}
143
+ waters.select! {|water| 0<water.weight.to_f}
144
+ lactic_acids.select! {|lactic_acid| 0<lactic_acid.weight.to_f}
145
+ alcohols.select! {|alcohol| 0<alcohol.weight.to_f}
146
+ yeasts.select! {|yeast| 0<yeast.weight.to_f}
147
+
148
+ self
149
+ end
150
+
151
+ def compact
152
+ Utils.check_dup(self)
153
+
154
+ dst = self.dup
155
+ dst.compact!
156
+ end
157
+
139
158
  def +(other)
140
159
  if Step===other
141
160
  Utils.check_dup(self)
data/lib/toji/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Toji
2
- VERSION = "2.25.0"
2
+ VERSION = "2.26.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toji
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.25.0
4
+ version: 2.26.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yoshida Tetsuya
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-02-22 00:00:00.000000000 Z
11
+ date: 2021-03-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport