toji 2.9.0 → 2.13.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +4 -4
  2. data/example/calendar.ipynb +42 -51
  3. data/example/calendar.yaml +6 -6
  4. data/example/calendar_file.ipynb +36 -36
  5. data/example/example_core.rb +877 -205
  6. data/example/kake_ingredient.rb +21 -15
  7. data/example/koji_ingredient.rb +31 -21
  8. data/example/{koji_making.ipynb → koji_progress.ipynb} +14 -14
  9. data/example/{koji_making.rb → koji_progress.rb} +3 -2
  10. data/example/{koji_making.yaml → koji_progress.yaml} +8 -9
  11. data/example/{koji_making_multi.ipynb → koji_progress_multi.ipynb} +21 -22
  12. data/example/{moromi.ipynb → moromi_progress.ipynb} +22 -22
  13. data/example/{moromi.rb → moromi_progress.rb} +3 -2
  14. data/example/{moromi.yaml → moromi_progress.yaml} +0 -0
  15. data/example/moto_progress.ipynb +121 -0
  16. data/example/{moto.rb → moto_progress.rb} +3 -2
  17. data/example/{moto.yaml → moto_progress.yaml} +14 -15
  18. data/example/recipe.rb +44 -32
  19. data/lib/toji.rb +4 -1
  20. data/lib/toji/calendar.rb +18 -18
  21. data/lib/toji/calendar/date_column.rb +7 -22
  22. data/lib/toji/calendar/date_row.rb +6 -6
  23. data/lib/toji/ingredient.rb +6 -2
  24. data/lib/toji/ingredient/alcohol.rb +14 -0
  25. data/lib/toji/ingredient/base.rb +11 -0
  26. data/lib/toji/ingredient/kake.rb +3 -9
  27. data/lib/toji/ingredient/koji.rb +19 -10
  28. data/lib/toji/ingredient/lactic_acid.rb +14 -0
  29. data/lib/toji/ingredient/rice.rb +50 -4
  30. data/lib/toji/ingredient/tanekoji.rb +29 -0
  31. data/lib/toji/ingredient/water.rb +18 -0
  32. data/lib/toji/ingredient/yeast.rb +20 -0
  33. data/lib/toji/processing.rb +18 -0
  34. data/lib/toji/processing/base.rb +7 -0
  35. data/lib/toji/processing/cooled_rice.rb +22 -0
  36. data/lib/toji/processing/cooled_rice_element.rb +8 -0
  37. data/lib/toji/processing/dekoji.rb +22 -0
  38. data/lib/toji/processing/dekoji_element.rb +8 -0
  39. data/lib/toji/processing/kake_processing.rb +7 -0
  40. data/lib/toji/processing/koji_processing.rb +10 -0
  41. data/lib/toji/processing/rice_processing.rb +19 -0
  42. data/lib/toji/processing/soaked_rice.rb +49 -0
  43. data/lib/toji/processing/soaked_rice_element.rb +18 -0
  44. data/lib/toji/processing/steamed_rice.rb +22 -0
  45. data/lib/toji/processing/steamed_rice_element.rb +8 -0
  46. data/lib/toji/product.rb +11 -83
  47. data/lib/toji/product/schedule_factory.rb +74 -0
  48. data/lib/toji/progress.rb +23 -0
  49. data/lib/toji/progress/base_progress.rb +37 -0
  50. data/lib/toji/progress/base_state.rb +39 -0
  51. data/lib/toji/progress/builder.rb +53 -0
  52. data/lib/toji/progress/graph.rb +11 -0
  53. data/lib/toji/{brew → progress}/graph/ab.rb +4 -4
  54. data/lib/toji/{brew → progress}/graph/bmd.rb +2 -2
  55. data/lib/toji/{brew/graph/multi_progress.rb → progress/graph/multi_progress_note.rb} +11 -11
  56. data/lib/toji/{brew/graph/progress.rb → progress/graph/progress_note.rb} +20 -18
  57. data/lib/toji/progress/koji_progress.rb +15 -0
  58. data/lib/toji/progress/koji_state.rb +23 -0
  59. data/lib/toji/{brew/moromi.rb → progress/moromi_progress.rb} +9 -5
  60. data/lib/toji/progress/moromi_state.rb +77 -0
  61. data/lib/toji/progress/moto_progress.rb +15 -0
  62. data/lib/toji/progress/moto_state.rb +31 -0
  63. data/lib/toji/progress/progress.rb +15 -0
  64. data/lib/toji/progress/state.rb +9 -0
  65. data/lib/toji/progress/state/baume_to_nihonshudo.rb +21 -0
  66. data/lib/toji/progress/state/nihonshudo_to_baume.rb +21 -0
  67. data/lib/toji/recipe.rb +52 -39
  68. data/lib/toji/recipe/ab_expect.rb +2 -2
  69. data/lib/toji/recipe/action.rb +8 -0
  70. data/lib/toji/recipe/step.rb +97 -71
  71. data/lib/toji/schedule.rb +5 -0
  72. data/lib/toji/schedule/action_schedule.rb +9 -0
  73. data/lib/toji/schedule/base.rb +9 -0
  74. data/lib/toji/schedule/kake_schedule.rb +11 -0
  75. data/lib/toji/schedule/koji_schedule.rb +11 -0
  76. data/lib/toji/schedule/rice_schedule.rb +16 -0
  77. data/lib/toji/utils.rb +43 -0
  78. data/lib/toji/version.rb +1 -1
  79. metadata +60 -41
  80. data/lib/toji/brew.rb +0 -18
  81. data/lib/toji/brew/base.rb +0 -55
  82. data/lib/toji/brew/builder.rb +0 -98
  83. data/lib/toji/brew/graph.rb +0 -11
  84. data/lib/toji/brew/koji.rb +0 -11
  85. data/lib/toji/brew/moto.rb +0 -11
  86. data/lib/toji/brew/state.rb +0 -122
  87. data/lib/toji/brew/wrapped_state.rb +0 -109
  88. data/lib/toji/ingredient/kake/actual.rb +0 -26
  89. data/lib/toji/ingredient/kake/base.rb +0 -18
  90. data/lib/toji/ingredient/kake/expected.rb +0 -40
  91. data/lib/toji/ingredient/koji/actual.rb +0 -29
  92. data/lib/toji/ingredient/koji/actual_fermentable.rb +0 -15
  93. data/lib/toji/ingredient/koji/base.rb +0 -35
  94. data/lib/toji/ingredient/koji/expected.rb +0 -45
  95. data/lib/toji/ingredient/koji/expected_fermentable.rb +0 -15
  96. data/lib/toji/ingredient/koji_rate.rb +0 -16
  97. data/lib/toji/ingredient/rice/actual_steamable.rb +0 -27
  98. data/lib/toji/ingredient/rice/base.rb +0 -40
  99. data/lib/toji/ingredient/rice/expected_steamable.rb +0 -27
  100. data/lib/toji/ingredient/rice_rate.rb +0 -23
  101. data/lib/toji/product/event.rb +0 -13
  102. data/lib/toji/product/rice_event.rb +0 -30
  103. data/lib/toji/product/rice_event_group.rb +0 -21
@@ -1,5 +1,5 @@
1
1
  module Toji
2
- module Brew
2
+ module Progress
3
3
  module Graph
4
4
  class Ab
5
5
  def initialize
@@ -34,7 +34,7 @@ module Toji
34
34
  result = []
35
35
 
36
36
  @actuals.each {|moromi, name|
37
- states = moromi.wrapped_states.select{|s| s.alcohol && s.baume}
37
+ states = moromi.states.select{|s| s.alcohol && s.baume}
38
38
 
39
39
  xs = states.map(&:alcohol)
40
40
  ys = states.map(&:baume)
@@ -57,13 +57,13 @@ module Toji
57
57
 
58
58
  def min_baume
59
59
  @actuals.map {|moromi, name|
60
- moromi.wrapped_states.map(&:baume).compact.min
60
+ moromi.states.map(&:baume).compact.min
61
61
  }.compact.min || 0
62
62
  end
63
63
 
64
64
  def max_baume
65
65
  @actuals.map {|moromi, name|
66
- moromi.wrapped_states.map(&:baume).compact.max
66
+ moromi.states.map(&:baume).compact.max
67
67
  }.compact.max || 0
68
68
  end
69
69
 
@@ -1,5 +1,5 @@
1
1
  module Toji
2
- module Brew
2
+ module Progress
3
3
  module Graph
4
4
  class Bmd
5
5
 
@@ -16,7 +16,7 @@ module Toji
16
16
  result = []
17
17
 
18
18
  @actuals.each {|moromi, name|
19
- states = moromi.wrapped_states.select{|s| s.moromi_day && s.bmd}
19
+ states = moromi.states.select{|s| s.moromi_day && s.bmd}
20
20
 
21
21
  xs = states.map(&:moromi_day).map{|d| d*DAY}
22
22
  ys = states.map(&:bmd)
@@ -1,7 +1,7 @@
1
1
  module Toji
2
- module Brew
2
+ module Progress
3
3
  module Graph
4
- class MultiProgress
4
+ class MultiProgressNote
5
5
 
6
6
  LINE_DASHES = [
7
7
  :solid,
@@ -23,15 +23,15 @@ module Toji
23
23
  end
24
24
 
25
25
  case source
26
- when Progress
26
+ when ProgressNote
27
27
  progress = source.dup
28
28
  progress.name = name
29
29
  progress.dash = dash
30
30
  progress.enable_annotations = enable_annotations
31
- when Base
32
- progress = source.progress(name: name, dash: dash, enable_annotations: enable_annotations)
31
+ when Progress
32
+ progress = source.progress_note(name: name, dash: dash, enable_annotations: enable_annotations)
33
33
  else
34
- raise Error, "ArgumentError: Progress or Base required"
34
+ raise Error, "ArgumentError: Toji::Progress::Graph::ProgressNote or Toji::Progress::Progress required"
35
35
  end
36
36
 
37
37
  @progresses << progress
@@ -52,17 +52,17 @@ module Toji
52
52
  end
53
53
 
54
54
  def plot(keys=nil)
55
- brews = @progresses.map(&:brew)
56
- max_brew_days = brews.map(&:days).max
57
- index = brews.index{|brew| brew.days==max_brew_days}
58
- day_labels = brews[index].day_labels
55
+ progresses = @progresses.map(&:progress)
56
+ max_days = progresses.map(&:days).max
57
+ index = progresses.index{|progress| progress.days==max_days}
58
+ day_labels = progresses[index].day_labels
59
59
 
60
60
  Plotly::Plot.new(
61
61
  data: plot_data(keys),
62
62
  layout: {
63
63
  xaxis: {
64
64
  dtick: DAY,
65
- tickvals: max_brew_days.times.map{|d| d*DAY},
65
+ tickvals: max_days.times.map{|d| d*DAY},
66
66
  ticktext: day_labels
67
67
  },
68
68
  annotations: annotations,
@@ -1,7 +1,7 @@
1
1
  module Toji
2
- module Brew
2
+ module Progress
3
3
  module Graph
4
- class Progress
4
+ class ProgressNote
5
5
 
6
6
  PLOT_KEYS = [:temps, :preset_temp, :room_temp, :room_psychrometry, :baume, :acid, :amino_acid, :alcohol, :bmd].freeze
7
7
 
@@ -26,13 +26,13 @@ module Toji
26
26
  :dashdot,
27
27
  ].freeze
28
28
 
29
- attr_reader :brew
29
+ attr_reader :progress
30
30
  attr_accessor :name
31
31
  attr_accessor :dash
32
32
  attr_accessor :enable_annotations
33
33
 
34
- def initialize(brew, name: nil, dash: :solid, enable_annotations: true)
35
- @brew = brew
34
+ def initialize(progress, name: nil, dash: :solid, enable_annotations: true)
35
+ @progress = progress
36
36
  @name = name
37
37
  @dash = dash
38
38
  @enable_annotations = enable_annotations
@@ -40,7 +40,7 @@ module Toji
40
40
 
41
41
  def plot_data(keys=nil, use_name=false)
42
42
  if !keys
43
- keys = @brew.has_keys
43
+ keys = @progress.has_keys
44
44
  end
45
45
 
46
46
  name = ""
@@ -56,7 +56,7 @@ module Toji
56
56
  xs = []
57
57
  ys = []
58
58
  text = []
59
- @brew.wrapped_states.each {|s|
59
+ @progress.states.each {|s|
60
60
  val = s.send(key)
61
61
  if val
62
62
  [val].flatten.each_with_index {|v,i|
@@ -75,7 +75,7 @@ module Toji
75
75
  result << {x: xs, y: ys, text: text, name: "#{name}#{key}", line: {dash: @dash, shape: line_shape}, marker: {color: PLOT_COLORS[key]}}
76
76
  }
77
77
 
78
- if 0<@brew.wrapped_states.length && 0<@brew.day_offset
78
+ if 0<@progress.states.length && 0<@progress.day_offset
79
79
  result = result.map{|h|
80
80
  h[:x].unshift(0)
81
81
  h[:y].unshift(nil)
@@ -84,8 +84,8 @@ module Toji
84
84
  }
85
85
  end
86
86
 
87
- #if 0<@brew.wrapped_states.length && @brew.wrapped_states.last.time.strftime("%T")!="00:00:00"
88
- # t = @brew.wrapped_states.last.elapsed_time_with_offset
87
+ #if 0<@progress.states.length && @progress.states.last.time.strftime("%T")!="00:00:00"
88
+ # t = @progress.states.last.elapsed_time_with_offset
89
89
  # t -= (t % DAY) - DAY
90
90
  #
91
91
  # result = result.map{|h|
@@ -102,7 +102,7 @@ module Toji
102
102
  def annotations
103
103
  return [] if !@enable_annotations
104
104
 
105
- @brew.wrapped_states.select{|s| s.mark}.map {|s|
105
+ @progress.states.select{|s| s.mark}.map {|s|
106
106
  {
107
107
  x: s.elapsed_time_with_offset,
108
108
  y: s.temps.first || 0,
@@ -119,19 +119,21 @@ module Toji
119
119
 
120
120
  def table_data(keys=nil)
121
121
  if !keys
122
- keys = @brew.has_keys
122
+ keys = @progress.has_keys
123
123
  keys.delete(:elapsed_time)
124
124
  keys.delete(:time)
125
125
  keys.delete(:day)
126
126
  keys.delete(:moromi_day)
127
- keys.delete(:baume)
128
- keys.delete(:nihonshudo)
127
+ if keys.include?(:display_baume)
128
+ keys.delete(:baume)
129
+ keys.delete(:nihonshudo)
130
+ end
129
131
  else
130
- keys &= @brew.has_keys
132
+ keys &= @progress.has_keys
131
133
  end
132
134
 
133
135
  rows = []
134
- @brew.wrapped_states.each {|state|
136
+ @progress.states.each {|state|
135
137
  rows << keys.map {|k|
136
138
  v = state&.send(k)
137
139
  if Array===v
@@ -155,8 +157,8 @@ module Toji
155
157
  layout: {
156
158
  xaxis: {
157
159
  dtick: DAY,
158
- tickvals: @brew.days.times.map{|d| d*DAY},
159
- ticktext: @brew.day_labels
160
+ tickvals: @progress.days.times.map{|d| d*DAY},
161
+ ticktext: @progress.day_labels
160
162
  },
161
163
  annotations: annotations,
162
164
  }
@@ -0,0 +1,15 @@
1
+ module Toji
2
+ module Progress
3
+ module KojiProgress
4
+ include BaseProgress
5
+
6
+ def all_keys
7
+ KojiState::REQUIRED_KEYS + KojiState::OPTIONAL_KEYS
8
+ end
9
+
10
+ def progress_note(name: nil, dash: :solid, enable_annotations: true)
11
+ Graph::ProgressNote.new(self, name: name, dash: dash, enable_annotations: enable_annotations)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,23 @@
1
+ module Toji
2
+ module Progress
3
+ module KojiState
4
+ include BaseState
5
+
6
+ OPTIONAL_KEYS = [
7
+ :temps,
8
+ :preset_temp,
9
+ :room_temp,
10
+ :room_psychrometry,
11
+
12
+ :note,
13
+ ].freeze
14
+
15
+ attr_accessor :temps
16
+ attr_accessor :preset_temp
17
+ attr_accessor :room_temp
18
+ attr_accessor :room_psychrometry
19
+
20
+ attr_accessor :note
21
+ end
22
+ end
23
+ end
@@ -1,7 +1,7 @@
1
1
  module Toji
2
- module Brew
3
- module Moromi
4
- include Base
2
+ module Progress
3
+ module MoromiProgress
4
+ include BaseProgress
5
5
 
6
6
  attr_accessor :prefix_day_labels
7
7
 
@@ -28,8 +28,12 @@ module Toji
28
28
  end
29
29
  end
30
30
 
31
- def progress(name: nil, dash: :solid, enable_annotations: true)
32
- Graph::Progress.new(self, name: name, dash: dash, enable_annotations: enable_annotations)
31
+ def all_keys
32
+ MoromiState::REQUIRED_KEYS + MoromiState::OPTIONAL_KEYS
33
+ end
34
+
35
+ def progress_note(name: nil, dash: :solid, enable_annotations: true)
36
+ Graph::ProgressNote.new(self, name: name, dash: dash, enable_annotations: enable_annotations)
33
37
  end
34
38
 
35
39
  def bmd
@@ -0,0 +1,77 @@
1
+ module Toji
2
+ module Progress
3
+ module MoromiState
4
+ include BaseState
5
+
6
+ OPTIONAL_KEYS = [
7
+ :moromi_day,
8
+ :temps,
9
+ :preset_temp,
10
+ :room_temp,
11
+ :room_psychrometry,
12
+
13
+ :baume,
14
+ :nihonshudo,
15
+ :display_baume,
16
+ :acid,
17
+ :amino_acid,
18
+ :alcohol,
19
+ :bmd,
20
+
21
+ :warmings,
22
+ :note,
23
+ ].freeze
24
+
25
+ attr_accessor :temps
26
+ attr_accessor :preset_temp
27
+ attr_accessor :room_temp
28
+ attr_accessor :room_psychrometry
29
+
30
+ attr_accessor :baume
31
+ attr_accessor :nihonshudo
32
+ attr_accessor :acid
33
+ attr_accessor :amino_acid
34
+ attr_accessor :alcohol
35
+
36
+ attr_accessor :warmings
37
+ attr_accessor :note
38
+
39
+ def moromi_day
40
+ _tome_day = progress.moromi_tome_day
41
+ _now_day = day
42
+
43
+ if _tome_day && _tome_day < _now_day
44
+ _now_day - _tome_day + 1
45
+ end
46
+ end
47
+
48
+ def display_baume
49
+ _baume = baume
50
+ if _baume
51
+ if _baume<3.0
52
+ nihonshudo
53
+ else
54
+ _baume
55
+ end
56
+ end
57
+ end
58
+
59
+ def bmd
60
+ _moromi_day = moromi_day
61
+ _baume = baume
62
+
63
+ if _moromi_day && _baume
64
+ _moromi_day * _baume
65
+ end
66
+ end
67
+
68
+ def expected_alcohol(target_alc, target_nihonshudo, coef)
69
+ _baume = baume
70
+
71
+ if _baume
72
+ target_alc - (_baume - target_nihonshudo * -0.1) * coef
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,15 @@
1
+ module Toji
2
+ module Progress
3
+ module MotoProgress
4
+ include BaseProgress
5
+
6
+ def all_keys
7
+ MotoState::REQUIRED_KEYS + MotoState::OPTIONAL_KEYS
8
+ end
9
+
10
+ def progress_note(name: nil, dash: :solid, enable_annotations: true)
11
+ Graph::ProgressNote.new(self, name: name, dash: dash, enable_annotations: enable_annotations)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,31 @@
1
+ module Toji
2
+ module Progress
3
+ module MotoState
4
+ include BaseState
5
+
6
+ OPTIONAL_KEYS = [
7
+ :temps,
8
+ :preset_temp,
9
+ :room_temp,
10
+ :room_psychrometry,
11
+
12
+ :baume,
13
+ :acid,
14
+
15
+ :warmings,
16
+ :note,
17
+ ].freeze
18
+
19
+ attr_accessor :temps
20
+ attr_accessor :preset_temp
21
+ attr_accessor :room_temp
22
+ attr_accessor :room_psychrometry
23
+
24
+ attr_accessor :baume
25
+ attr_accessor :acid
26
+
27
+ attr_accessor :warmings
28
+ attr_accessor :note
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,15 @@
1
+ module Toji
2
+ module Progress
3
+ module Progress
4
+ attr_reader :states
5
+ attr_reader :date_line
6
+
7
+ attr_reader :base_time
8
+ attr_reader :day_offset
9
+ attr_reader :days
10
+ attr_reader :day_labels
11
+
12
+ attr_reader :all_keys
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,9 @@
1
+ require 'toji/progress/state/baume_to_nihonshudo'
2
+ require 'toji/progress/state/nihonshudo_to_baume'
3
+
4
+ module Toji
5
+ module Progress
6
+ module State
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,21 @@
1
+ module Toji
2
+ module Progress
3
+ module State
4
+ module BaumeToNihonshudo
5
+ def nihonshudo
6
+ if self.baume
7
+ self.baume * -10
8
+ end
9
+ end
10
+
11
+ def nihonshudo=(val)
12
+ if val
13
+ self.baume = val.to_f / -10.0
14
+ else
15
+ self.baume = nil
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end