toji 2.9.0 → 2.13.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/example/calendar.ipynb +42 -51
- data/example/calendar.yaml +6 -6
- data/example/calendar_file.ipynb +36 -36
- data/example/example_core.rb +877 -205
- data/example/kake_ingredient.rb +21 -15
- data/example/koji_ingredient.rb +31 -21
- data/example/{koji_making.ipynb → koji_progress.ipynb} +14 -14
- data/example/{koji_making.rb → koji_progress.rb} +3 -2
- data/example/{koji_making.yaml → koji_progress.yaml} +8 -9
- data/example/{koji_making_multi.ipynb → koji_progress_multi.ipynb} +21 -22
- data/example/{moromi.ipynb → moromi_progress.ipynb} +22 -22
- data/example/{moromi.rb → moromi_progress.rb} +3 -2
- data/example/{moromi.yaml → moromi_progress.yaml} +0 -0
- data/example/moto_progress.ipynb +121 -0
- data/example/{moto.rb → moto_progress.rb} +3 -2
- data/example/{moto.yaml → moto_progress.yaml} +14 -15
- data/example/recipe.rb +44 -32
- data/lib/toji.rb +4 -1
- data/lib/toji/calendar.rb +18 -18
- data/lib/toji/calendar/date_column.rb +7 -22
- data/lib/toji/calendar/date_row.rb +6 -6
- data/lib/toji/ingredient.rb +6 -2
- data/lib/toji/ingredient/alcohol.rb +14 -0
- data/lib/toji/ingredient/base.rb +11 -0
- data/lib/toji/ingredient/kake.rb +3 -9
- data/lib/toji/ingredient/koji.rb +19 -10
- data/lib/toji/ingredient/lactic_acid.rb +14 -0
- data/lib/toji/ingredient/rice.rb +50 -4
- data/lib/toji/ingredient/tanekoji.rb +29 -0
- data/lib/toji/ingredient/water.rb +18 -0
- data/lib/toji/ingredient/yeast.rb +20 -0
- data/lib/toji/processing.rb +18 -0
- data/lib/toji/processing/base.rb +7 -0
- data/lib/toji/processing/cooled_rice.rb +22 -0
- data/lib/toji/processing/cooled_rice_element.rb +8 -0
- data/lib/toji/processing/dekoji.rb +22 -0
- data/lib/toji/processing/dekoji_element.rb +8 -0
- data/lib/toji/processing/kake_processing.rb +7 -0
- data/lib/toji/processing/koji_processing.rb +10 -0
- data/lib/toji/processing/rice_processing.rb +19 -0
- data/lib/toji/processing/soaked_rice.rb +49 -0
- data/lib/toji/processing/soaked_rice_element.rb +18 -0
- data/lib/toji/processing/steamed_rice.rb +22 -0
- data/lib/toji/processing/steamed_rice_element.rb +8 -0
- data/lib/toji/product.rb +11 -83
- data/lib/toji/product/schedule_factory.rb +74 -0
- data/lib/toji/progress.rb +23 -0
- data/lib/toji/progress/base_progress.rb +37 -0
- data/lib/toji/progress/base_state.rb +39 -0
- data/lib/toji/progress/builder.rb +53 -0
- data/lib/toji/progress/graph.rb +11 -0
- data/lib/toji/{brew → progress}/graph/ab.rb +4 -4
- data/lib/toji/{brew → progress}/graph/bmd.rb +2 -2
- data/lib/toji/{brew/graph/multi_progress.rb → progress/graph/multi_progress_note.rb} +11 -11
- data/lib/toji/{brew/graph/progress.rb → progress/graph/progress_note.rb} +20 -18
- data/lib/toji/progress/koji_progress.rb +15 -0
- data/lib/toji/progress/koji_state.rb +23 -0
- data/lib/toji/{brew/moromi.rb → progress/moromi_progress.rb} +9 -5
- data/lib/toji/progress/moromi_state.rb +77 -0
- data/lib/toji/progress/moto_progress.rb +15 -0
- data/lib/toji/progress/moto_state.rb +31 -0
- data/lib/toji/progress/progress.rb +15 -0
- data/lib/toji/progress/state.rb +9 -0
- data/lib/toji/progress/state/baume_to_nihonshudo.rb +21 -0
- data/lib/toji/progress/state/nihonshudo_to_baume.rb +21 -0
- data/lib/toji/recipe.rb +52 -39
- data/lib/toji/recipe/ab_expect.rb +2 -2
- data/lib/toji/recipe/action.rb +8 -0
- data/lib/toji/recipe/step.rb +97 -71
- data/lib/toji/schedule.rb +5 -0
- data/lib/toji/schedule/action_schedule.rb +9 -0
- data/lib/toji/schedule/base.rb +9 -0
- data/lib/toji/schedule/kake_schedule.rb +11 -0
- data/lib/toji/schedule/koji_schedule.rb +11 -0
- data/lib/toji/schedule/rice_schedule.rb +16 -0
- data/lib/toji/utils.rb +43 -0
- data/lib/toji/version.rb +1 -1
- metadata +60 -41
- data/lib/toji/brew.rb +0 -18
- data/lib/toji/brew/base.rb +0 -55
- data/lib/toji/brew/builder.rb +0 -98
- data/lib/toji/brew/graph.rb +0 -11
- data/lib/toji/brew/koji.rb +0 -11
- data/lib/toji/brew/moto.rb +0 -11
- data/lib/toji/brew/state.rb +0 -122
- data/lib/toji/brew/wrapped_state.rb +0 -109
- data/lib/toji/ingredient/kake/actual.rb +0 -26
- data/lib/toji/ingredient/kake/base.rb +0 -18
- data/lib/toji/ingredient/kake/expected.rb +0 -40
- data/lib/toji/ingredient/koji/actual.rb +0 -29
- data/lib/toji/ingredient/koji/actual_fermentable.rb +0 -15
- data/lib/toji/ingredient/koji/base.rb +0 -35
- data/lib/toji/ingredient/koji/expected.rb +0 -45
- data/lib/toji/ingredient/koji/expected_fermentable.rb +0 -15
- data/lib/toji/ingredient/koji_rate.rb +0 -16
- data/lib/toji/ingredient/rice/actual_steamable.rb +0 -27
- data/lib/toji/ingredient/rice/base.rb +0 -40
- data/lib/toji/ingredient/rice/expected_steamable.rb +0 -27
- data/lib/toji/ingredient/rice_rate.rb +0 -23
- data/lib/toji/product/event.rb +0 -13
- data/lib/toji/product/rice_event.rb +0 -30
- data/lib/toji/product/rice_event_group.rb +0 -21
@@ -1,39 +1,24 @@
|
|
1
1
|
module Toji
|
2
2
|
class Calendar
|
3
3
|
class DateColumn
|
4
|
-
attr_reader :
|
4
|
+
attr_reader :rice_schedules
|
5
5
|
|
6
6
|
def initialize
|
7
|
-
@
|
7
|
+
@rice_schedules = []
|
8
8
|
end
|
9
9
|
|
10
|
-
def <<(
|
11
|
-
@
|
10
|
+
def <<(schedule)
|
11
|
+
@rice_schedules << schedule
|
12
12
|
end
|
13
13
|
alias_method :add, :<<
|
14
14
|
|
15
|
-
def event_groups
|
16
|
-
@rice_events.group_by {|e|
|
17
|
-
e.group_key
|
18
|
-
}.values
|
19
|
-
end
|
20
|
-
|
21
15
|
def text
|
22
|
-
|
23
|
-
name =
|
24
|
-
weight = "%.17g" %
|
16
|
+
@rice_schedules.map {|schedule|
|
17
|
+
name = schedule.product.name
|
18
|
+
weight = "%.17g" % schedule.expect.weight
|
25
19
|
"#{name}: #{weight}"
|
26
20
|
}.join("<br>")
|
27
21
|
end
|
28
|
-
|
29
|
-
def column_events
|
30
|
-
event_groups.map {|es|
|
31
|
-
{
|
32
|
-
product: es.first.product,
|
33
|
-
weight: es.map(&:weight).sum,
|
34
|
-
}
|
35
|
-
}
|
36
|
-
end
|
37
22
|
end
|
38
23
|
end
|
39
24
|
end
|
@@ -11,16 +11,16 @@ module Toji
|
|
11
11
|
@kakes = []
|
12
12
|
end
|
13
13
|
|
14
|
-
def <<(
|
15
|
-
case
|
14
|
+
def <<(schedule)
|
15
|
+
case schedule.rice_type
|
16
16
|
when :koji
|
17
|
-
index =
|
17
|
+
index = schedule.step_indexes.first
|
18
18
|
@kojis[index] ||= DateColumn.new
|
19
|
-
@kojis[index] <<
|
19
|
+
@kojis[index] << schedule
|
20
20
|
when :kake
|
21
|
-
index =
|
21
|
+
index = schedule.step_indexes.first
|
22
22
|
@kakes[index] ||= DateColumn.new
|
23
|
-
@kakes[index] <<
|
23
|
+
@kakes[index] << schedule
|
24
24
|
end
|
25
25
|
end
|
26
26
|
alias_method :add, :<<
|
data/lib/toji/ingredient.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
|
+
require 'toji/ingredient/base'
|
1
2
|
require 'toji/ingredient/rice'
|
2
3
|
require 'toji/ingredient/kake'
|
3
4
|
require 'toji/ingredient/koji'
|
4
|
-
require 'toji/ingredient/
|
5
|
-
require 'toji/ingredient/
|
5
|
+
require 'toji/ingredient/tanekoji'
|
6
|
+
require 'toji/ingredient/water'
|
7
|
+
require 'toji/ingredient/lactic_acid'
|
8
|
+
require 'toji/ingredient/alcohol'
|
9
|
+
require 'toji/ingredient/yeast'
|
6
10
|
|
7
11
|
module Toji
|
8
12
|
module Ingredient
|
data/lib/toji/ingredient/kake.rb
CHANGED
@@ -1,16 +1,10 @@
|
|
1
|
-
require 'toji/ingredient/kake/base'
|
2
|
-
require 'toji/ingredient/kake/expected'
|
3
|
-
require 'toji/ingredient/kake/actual'
|
4
|
-
|
5
1
|
module Toji
|
6
2
|
module Ingredient
|
7
3
|
module Kake
|
8
|
-
|
9
|
-
Expected.new(raw, rice_rate: rice_rate)
|
10
|
-
end
|
4
|
+
include Rice
|
11
5
|
|
12
|
-
def
|
13
|
-
|
6
|
+
def group_key
|
7
|
+
[brand, polishing_ratio, made_in, year, soaking_ratio, steaming_ratio, cooling_ratio].join(":")
|
14
8
|
end
|
15
9
|
end
|
16
10
|
end
|
data/lib/toji/ingredient/koji.rb
CHANGED
@@ -1,18 +1,27 @@
|
|
1
|
-
require 'toji/ingredient/koji/base'
|
2
|
-
require 'toji/ingredient/koji/expected_fermentable'
|
3
|
-
require 'toji/ingredient/koji/expected'
|
4
|
-
require 'toji/ingredient/koji/actual_fermentable'
|
5
|
-
require 'toji/ingredient/koji/actual'
|
6
|
-
|
7
1
|
module Toji
|
8
2
|
module Ingredient
|
9
3
|
module Koji
|
10
|
-
|
11
|
-
|
4
|
+
include Rice
|
5
|
+
|
6
|
+
# 種麹 (has_many: Toji::Ingredient::Tanekoji)
|
7
|
+
attr_reader :tanekojis
|
8
|
+
|
9
|
+
# 出麹歩合
|
10
|
+
#
|
11
|
+
# 出麹歩合17〜19%のものが麹菌の繁殖のほどよい麹である
|
12
|
+
#
|
13
|
+
# 出典: 酒造教本 P67
|
14
|
+
attr_reader :dekoji_ratio
|
15
|
+
|
16
|
+
def dekoji
|
17
|
+
weight + weight * dekoji_ratio
|
12
18
|
end
|
13
19
|
|
14
|
-
|
15
|
-
|
20
|
+
# Scheduleへのグループ識別子
|
21
|
+
def group_key
|
22
|
+
keys1 = [brand, polishing_ratio, made_in, year, soaking_ratio, steaming_ratio, cooling_ratio, dekoji_ratio]
|
23
|
+
keys2 = tanekojis&.map(&:group_key)&.sort || []
|
24
|
+
(keys1 + keys2).join(":")
|
16
25
|
end
|
17
26
|
end
|
18
27
|
end
|
data/lib/toji/ingredient/rice.rb
CHANGED
@@ -1,10 +1,56 @@
|
|
1
|
-
require 'toji/ingredient/rice/base'
|
2
|
-
require 'toji/ingredient/rice/expected_steamable'
|
3
|
-
require 'toji/ingredient/rice/actual_steamable'
|
4
|
-
|
5
1
|
module Toji
|
6
2
|
module Ingredient
|
7
3
|
module Rice
|
4
|
+
include Base
|
5
|
+
|
6
|
+
# 白米
|
7
|
+
attr_accessor :weight
|
8
|
+
|
9
|
+
# 品種、精米歩合、産地、年度
|
10
|
+
attr_reader :brand
|
11
|
+
attr_reader :polishing_ratio
|
12
|
+
attr_reader :made_in
|
13
|
+
attr_reader :year
|
14
|
+
|
15
|
+
# 浸漬米吸水率
|
16
|
+
#
|
17
|
+
# 標準的な白米吸水率は掛米で30〜35%、麹米で33%前後で許容範囲はかなり狭い
|
18
|
+
#
|
19
|
+
# 出典: 酒造教本 P38
|
20
|
+
attr_reader :soaking_ratio
|
21
|
+
|
22
|
+
def soaked
|
23
|
+
weight + weight * soaking_ratio
|
24
|
+
end
|
25
|
+
|
26
|
+
# 蒸米吸水率
|
27
|
+
#
|
28
|
+
# 蒸しにより通常甑置き前の浸漬白米の重量よりさらに12〜13%吸水する
|
29
|
+
# 蒸しにより吸水の増加が13%を超える場合は、蒸米の表面が柔らかくべとつく蒸米になりやすい
|
30
|
+
# 蒸米吸水率は麹米及び酒母米で41〜43%、掛米は39〜40%で、吟醸造りの場合は数%低い
|
31
|
+
#
|
32
|
+
# 出典: 酒造教本 P48
|
33
|
+
attr_reader :steaming_ratio
|
34
|
+
|
35
|
+
def steamed
|
36
|
+
weight + weight * steaming_ratio
|
37
|
+
end
|
38
|
+
|
39
|
+
# 放冷
|
40
|
+
#
|
41
|
+
# 冷却法で若干異なるが蒸米の冷却により掛米で白米重量の10%、麹米で8%程度の水が失われる
|
42
|
+
# 出典: 酒造教本 P49
|
43
|
+
#
|
44
|
+
# 麹を造るのに適した蒸米は、引込時の吸水率が33%を理想とし、許容幅はプラスマイナス1%である
|
45
|
+
# 出典: 酒造教本 P59
|
46
|
+
attr_reader :cooling_ratio
|
47
|
+
|
48
|
+
def cooled
|
49
|
+
weight + weight * cooling_ratio
|
50
|
+
end
|
51
|
+
|
52
|
+
# Product.base_dateからの日数差
|
53
|
+
attr_reader :interval_days
|
8
54
|
end
|
9
55
|
end
|
10
56
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Toji
|
2
|
+
module Ingredient
|
3
|
+
module Tanekoji
|
4
|
+
include Base
|
5
|
+
|
6
|
+
# 麹 (belongs_to: Toji::Ingredient::Koji)
|
7
|
+
attr_reader :koji
|
8
|
+
|
9
|
+
# 種麹の種類
|
10
|
+
attr_reader :brand
|
11
|
+
|
12
|
+
# 種麹
|
13
|
+
#
|
14
|
+
# 総破精麹を造るには、種麹の量を麹米100kgあたり種麹100gとする
|
15
|
+
# 突き破精麹を造るには、種麹の量を麹米100kgあたり種麹80gとする
|
16
|
+
#
|
17
|
+
# 出典: 酒造教本 P66
|
18
|
+
attr_reader :ratio
|
19
|
+
|
20
|
+
def weight
|
21
|
+
koji.weight * ratio
|
22
|
+
end
|
23
|
+
|
24
|
+
def group_key
|
25
|
+
[brand, ratio].join(":")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Toji
|
2
|
+
module Ingredient
|
3
|
+
module Water
|
4
|
+
include Base
|
5
|
+
|
6
|
+
# 汲水
|
7
|
+
attr_accessor :weight
|
8
|
+
|
9
|
+
# 硬度
|
10
|
+
attr_reader :calcium_hardness
|
11
|
+
attr_reader :magnesium_hardness
|
12
|
+
|
13
|
+
def group_key
|
14
|
+
[calcium_hardness, magnesium_hardness].join(":")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Toji
|
2
|
+
module Ingredient
|
3
|
+
module Yeast
|
4
|
+
include Base
|
5
|
+
|
6
|
+
# 酵母
|
7
|
+
attr_accessor :weight
|
8
|
+
|
9
|
+
# 単位 (ex: ampoule, gram, ml)
|
10
|
+
attr_reader :unit
|
11
|
+
|
12
|
+
# 酵母名、協会酵母番号
|
13
|
+
attr_reader :brand
|
14
|
+
|
15
|
+
def group_key
|
16
|
+
[brand, unit].join(":")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'toji/processing/base'
|
2
|
+
require 'toji/processing/rice_processing'
|
3
|
+
require 'toji/processing/koji_processing'
|
4
|
+
require 'toji/processing/kake_processing'
|
5
|
+
|
6
|
+
require 'toji/processing/soaked_rice'
|
7
|
+
require 'toji/processing/soaked_rice_element'
|
8
|
+
require 'toji/processing/steamed_rice'
|
9
|
+
require 'toji/processing/steamed_rice_element'
|
10
|
+
require 'toji/processing/cooled_rice'
|
11
|
+
require 'toji/processing/cooled_rice_element'
|
12
|
+
require 'toji/processing/dekoji'
|
13
|
+
require 'toji/processing/dekoji_element'
|
14
|
+
|
15
|
+
module Toji
|
16
|
+
module Processing
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Toji
|
2
|
+
module Processing
|
3
|
+
module CooledRice
|
4
|
+
# 親 (belongs_to: Toji::Processing::RiceProcessing)
|
5
|
+
attr_reader :processing
|
6
|
+
|
7
|
+
# 要素 (has_many: Toji::Processing::CooledRiceElement)
|
8
|
+
attr_reader :elements
|
9
|
+
|
10
|
+
# 放冷後蒸米総重量
|
11
|
+
def weight
|
12
|
+
(elements || []).map(&:weight).sum
|
13
|
+
end
|
14
|
+
|
15
|
+
# 放冷後蒸米歩合
|
16
|
+
def cooling_ratio
|
17
|
+
raw_weight = processing.soaked_rice.weight.to_f
|
18
|
+
(weight.to_f - raw_weight) / raw_weight
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Toji
|
2
|
+
module Processing
|
3
|
+
module Dekoji
|
4
|
+
# 親 (belongs_to: Toji::Processing::RiceProcessing)
|
5
|
+
attr_reader :processing
|
6
|
+
|
7
|
+
# 要素 (has_many: Toji::Processing::DekojiElement)
|
8
|
+
attr_reader :elements
|
9
|
+
|
10
|
+
# 出麹総重量
|
11
|
+
def weight
|
12
|
+
(elements || []).map(&:weight).sum
|
13
|
+
end
|
14
|
+
|
15
|
+
# 出麹歩合
|
16
|
+
def dekoji_ratio
|
17
|
+
raw_weight = processing.soaked_rice.weight.to_f
|
18
|
+
(weight.to_f - raw_weight) / raw_weight
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Toji
|
2
|
+
module Processing
|
3
|
+
module RiceProcessing
|
4
|
+
include Base
|
5
|
+
|
6
|
+
# 目標値 (Toji::Ingredient::Rice)
|
7
|
+
attr_reader :expect
|
8
|
+
|
9
|
+
# 浸漬実績値 (Toji::Processing::SoakedRice)
|
10
|
+
attr_reader :soaked_rice
|
11
|
+
|
12
|
+
# 蒸米実績値 (Toji::Processing::SteamedRice)
|
13
|
+
attr_reader :steamed_rice
|
14
|
+
|
15
|
+
# 放冷実績値 (Toji::Processing::CooledRice)
|
16
|
+
attr_reader :cooled_rice
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|