toji 2.25.0 → 2.26.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 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