toji 2.17.0 → 2.22.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: bfa76ef9b8f8a73ea20b84bf68c9480a1664888c08fb2d541cdfd6023b4f93a3
4
- data.tar.gz: ce4f2d927d653d20a541d21a98954d27c70eba6e67022355e8cf9d887ca2842b
3
+ metadata.gz: 494121b64259737e8f8e942f688db54c630a5ae468d9a5530ad5e98b91d99ddb
4
+ data.tar.gz: 10585215b677950ecaebb9e4eccb7fa19fa0803e6e915c6d5d2dd2e1f0d1191d
5
5
  SHA512:
6
- metadata.gz: 134dfc5763d67f9dda33917ad51dfb923631e503e296ab97eea6733fb809b656d73d702263a6a3b565b27a9ac3594d1fd1b3f7599259947098b0a36a7ce86f33
7
- data.tar.gz: bd02c83d17c87aabfb3f24cc6386d48f7cc562dd61f5d66a75615dae70b93c100779e55772f7a821eae6ad6abc15c6c1e6dfc1ea51ab242ad84efd1459e13096
6
+ metadata.gz: 3b6b8d00a2f0b5f4494c07ab5c9eefb496db64eb1096e323c7d2f232ad32279a74da24c646b48ea0057ab3ac3a9bb3ec9548b9b66a1b995b2f4317d8471e9a23
7
+ data.tar.gz: 5dc4965df7dd65c8f3dafc41af8a884c557cb029875aa3694e9ff011402ac7614368c96aa9d55e592ae7fc0f52ba8a591152f414ad60dbd14d0d48de775868e8
@@ -24,26 +24,28 @@ module Example
24
24
  @color = color
25
25
  end
26
26
 
27
- def create_koji_schedule(date:, step_indexes:, kojis:)
27
+ def create_koji_schedule(date:, group_key:, step_weights:, kojis:)
28
28
  expect = kojis.first.dup
29
29
  expect.weight = kojis.map(&:weight).sum
30
30
 
31
31
  KojiSchedule.new(
32
32
  product: self,
33
33
  date: date,
34
- step_indexes: step_indexes,
34
+ group_key: group_key,
35
+ step_weights: step_weights,
35
36
  expect: expect,
36
37
  )
37
38
  end
38
39
 
39
- def create_kake_schedule(date:, step_indexes:, kakes:)
40
+ def create_kake_schedule(date:, group_key:, step_weights:, kakes:)
40
41
  expect = kakes.first.dup
41
42
  expect.weight = kakes.map(&:weight).sum
42
43
 
43
44
  KakeSchedule.new(
44
45
  product: self,
45
46
  date: date,
46
- step_indexes: step_indexes,
47
+ group_key: group_key,
48
+ step_weights: step_weights,
47
49
  expect: expect,
48
50
  )
49
51
  end
@@ -134,6 +136,7 @@ module Example
134
136
  attr_reader :tanekojis
135
137
  attr_reader :dekoji_ratio
136
138
  attr_reader :interval_days
139
+ attr_reader :process_group
137
140
 
138
141
  def initialize(weight:, brand:, polishing_ratio:, made_in:, year:, soaking_ratio:, steaming_ratio:, cooling_ratio:, tanekojis:, dekoji_ratio:, interval_days:)
139
142
  @weight = weight
@@ -203,6 +206,7 @@ module Example
203
206
  attr_reader :steaming_ratio
204
207
  attr_reader :cooling_ratio
205
208
  attr_reader :interval_days
209
+ attr_reader :process_group
206
210
 
207
211
  def initialize(weight:, brand:, polishing_ratio:, made_in:, year:, soaking_ratio:, steaming_ratio:, cooling_ratio:, interval_days:)
208
212
  @weight = weight
@@ -939,14 +943,16 @@ module Example
939
943
 
940
944
  attr_reader :product
941
945
  attr_reader :date
946
+ attr_reader :group_key
942
947
 
943
- attr_reader :step_indexes
948
+ attr_reader :step_weights
944
949
  attr_reader :expect
945
950
 
946
- def initialize(product:, date:, step_indexes:, expect:)
951
+ def initialize(product:, date:, group_key:, step_weights:, expect:)
947
952
  @product = product
948
953
  @date = date
949
- @step_indexes = step_indexes
954
+ @group_key = group_key
955
+ @step_weights = step_weights
950
956
  @expect = expect
951
957
  end
952
958
  end
@@ -956,14 +962,16 @@ module Example
956
962
 
957
963
  attr_reader :product
958
964
  attr_reader :date
965
+ attr_reader :group_key
959
966
 
960
- attr_reader :step_indexes
967
+ attr_reader :step_weights
961
968
  attr_reader :expect
962
969
 
963
- def initialize(product:, date:, step_indexes:, expect:)
970
+ def initialize(product:, date:, group_key:, step_weights:, expect:)
964
971
  @product = product
965
972
  @date = date
966
- @step_indexes = step_indexes
973
+ @group_key = group_key
974
+ @step_weights = step_weights
967
975
  @expect = expect
968
976
  end
969
977
  end
@@ -32,8 +32,8 @@ module Toji
32
32
  kake_schedules = @products.map{|product| product.kake_schedules}.flatten
33
33
  schedules = koji_schedules + kake_schedules
34
34
 
35
- koji_len = koji_schedules.map{|schedule| schedule.step_indexes.first[:index]}.max + 1
36
- kake_len = kake_schedules.map{|schedule| schedule.step_indexes.first[:index]}.max + 1
35
+ koji_len = koji_schedules.map{|schedule| schedule.step_weights.first[:index]}.max + 1
36
+ kake_len = kake_schedules.map{|schedule| schedule.step_weights.first[:index]}.max + 1
37
37
  min_date = schedules.map(&:date).min
38
38
  max_date = schedules.map(&:date).max
39
39
 
@@ -14,11 +14,11 @@ module Toji
14
14
  def <<(schedule)
15
15
  case schedule.rice_type
16
16
  when :koji
17
- index = schedule.step_indexes.first[:index]
17
+ index = schedule.step_weights.first[:index]
18
18
  @kojis[index] ||= DateColumn.new
19
19
  @kojis[index] << schedule
20
20
  when :kake
21
- index = schedule.step_indexes.first[:index]
21
+ index = schedule.step_weights.first[:index]
22
22
  @kakes[index] ||= DateColumn.new
23
23
  @kakes[index] << schedule
24
24
  end
@@ -6,8 +6,8 @@ module Toji
6
6
  # 醸造用アルコール
7
7
  # @dynamic weight
8
8
 
9
- def group_key
10
- ""
9
+ def ingredient_key
10
+ [].join(":")
11
11
  end
12
12
  end
13
13
  end
@@ -6,7 +6,7 @@ module Toji
6
6
  # @dynamic weight=
7
7
 
8
8
  # グループ識別子
9
- # @dynamic group_key
9
+ # @dynamic ingredient_key
10
10
  end
11
11
  end
12
12
  end
@@ -3,9 +3,13 @@ module Toji
3
3
  module Kake
4
4
  include Rice
5
5
 
6
- def group_key
6
+ def ingredient_key
7
7
  [brand, polishing_ratio, made_in, year, soaking_ratio, steaming_ratio, cooling_ratio].join(":")
8
8
  end
9
+
10
+ def default_process_group
11
+ self.hash
12
+ end
9
13
  end
10
14
  end
11
15
  end
@@ -18,11 +18,15 @@ module Toji
18
18
  end
19
19
 
20
20
  # Scheduleへのグループ識別子
21
- def group_key
21
+ def ingredient_key
22
22
  keys1 = [brand, polishing_ratio, made_in, year, soaking_ratio, steaming_ratio, cooling_ratio, dekoji_ratio]
23
- keys2 = tanekojis&.map(&:group_key)&.sort || []
23
+ keys2 = tanekojis&.map(&:ingredient_key)&.sort || []
24
24
  (keys1 + keys2).join(":")
25
25
  end
26
+
27
+ def default_process_group
28
+ ""
29
+ end
26
30
  end
27
31
  end
28
32
  end
@@ -6,8 +6,8 @@ module Toji
6
6
  # 乳酸
7
7
  # @dynamic weight
8
8
 
9
- def group_key
10
- ""
9
+ def ingredient_key
10
+ [].join(":")
11
11
  end
12
12
  end
13
13
  end
@@ -52,6 +52,17 @@ module Toji
52
52
 
53
53
  # Product.base_dateからの日数差
54
54
  # @dynamic interval_days
55
+
56
+ # グループ識別子
57
+ # @dynamic process_group
58
+ # @dyanmic default_process_group
59
+
60
+ def group_key
61
+ [
62
+ ingredient_key,
63
+ process_group.presence || default_process_group,
64
+ ].join(":")
65
+ end
55
66
  end
56
67
  end
57
68
  end
@@ -21,7 +21,7 @@ module Toji
21
21
  koji.weight * ratio
22
22
  end
23
23
 
24
- def group_key
24
+ def ingredient_key
25
25
  [brand, ratio].join(":")
26
26
  end
27
27
  end
@@ -10,7 +10,7 @@ module Toji
10
10
  # @dynamic calcium_hardness
11
11
  # @dynamic magnesium_hardness
12
12
 
13
- def group_key
13
+ def ingredient_key
14
14
  [calcium_hardness, magnesium_hardness].join(":")
15
15
  end
16
16
  end
@@ -13,7 +13,7 @@ module Toji
13
13
  # 酵母名、協会酵母番号
14
14
  # @dynamic brand
15
15
 
16
- def group_key
16
+ def ingredient_key
17
17
  [brand, unit].join(":")
18
18
  end
19
19
  end
@@ -1,7 +1,7 @@
1
1
  module Toji
2
2
  module Processing
3
3
  module Base
4
- attr_reader :date
4
+ # @dynamic date
5
5
  end
6
6
  end
7
7
  end
@@ -2,10 +2,10 @@ module Toji
2
2
  module Processing
3
3
  module CooledRice
4
4
  # 親 (belongs_to: Toji::Processing::RiceProcessing)
5
- attr_reader :processing
5
+ # @dynamic processing
6
6
 
7
7
  # 要素 (has_many: Toji::Processing::CooledRiceElement)
8
- attr_reader :elements
8
+ # @dynamic elements
9
9
 
10
10
  # 放冷後蒸米総重量
11
11
  def weight
@@ -2,7 +2,7 @@ module Toji
2
2
  module Processing
3
3
  module CooledRiceElement
4
4
  # 放冷後蒸米重量
5
- attr_reader :weight
5
+ # @dynamic weight
6
6
  end
7
7
  end
8
8
  end
@@ -2,10 +2,10 @@ module Toji
2
2
  module Processing
3
3
  module Dekoji
4
4
  # 親 (belongs_to: Toji::Processing::RiceProcessing)
5
- attr_reader :processing
5
+ # @dynamic processing
6
6
 
7
7
  # 要素 (has_many: Toji::Processing::DekojiElement)
8
- attr_reader :elements
8
+ # @dynamic elements
9
9
 
10
10
  # 出麹総重量
11
11
  def weight
@@ -2,7 +2,7 @@ module Toji
2
2
  module Processing
3
3
  module DekojiElement
4
4
  # 出麹重量
5
- attr_reader :weight
5
+ # @dynamic weight
6
6
  end
7
7
  end
8
8
  end
@@ -4,7 +4,7 @@ module Toji
4
4
  include RiceProcessing
5
5
 
6
6
  # 出麹実績値 (Toji::Processing::Dekoji)
7
- attr_reader :dekoji
7
+ # @dynamic dekoji
8
8
  end
9
9
  end
10
10
  end
@@ -4,16 +4,16 @@ module Toji
4
4
  include Base
5
5
 
6
6
  # 目標値 (Toji::Ingredient::Rice)
7
- attr_reader :expect
7
+ # @dynamic expect
8
8
 
9
9
  # 浸漬実績値 (Toji::Processing::SoakedRice)
10
- attr_reader :soaked_rice
10
+ # @dynamic soaked_rice
11
11
 
12
12
  # 蒸米実績値 (Toji::Processing::SteamedRice)
13
- attr_reader :steamed_rice
13
+ # @dynamic steamed_rice
14
14
 
15
15
  # 放冷実績値 (Toji::Processing::CooledRice)
16
- attr_reader :cooled_rice
16
+ # @dynamic cooled_rice
17
17
  end
18
18
  end
19
19
  end
@@ -2,25 +2,25 @@ module Toji
2
2
  module Processing
3
3
  module SoakedRice
4
4
  # 室内温度
5
- attr_reader :room_temp
5
+ # @dynamic room_temp
6
6
 
7
7
  # 外気温
8
- attr_reader :outside_temp
8
+ # @dynamic outside_temp
9
9
 
10
10
  # 白米の含水率
11
- attr_reader :rice_water_content
11
+ # @dynamic rice_water_content
12
12
 
13
13
  # 洗米に用いる水の温度
14
- attr_reader :washing_water_temp
14
+ # @dynamic washing_water_temp
15
15
 
16
16
  # 浸漬に用いる水の温度
17
- attr_reader :soaking_water_temp
17
+ # @dynamic soaking_water_temp
18
18
 
19
19
  # 親 (belongs_to: Toji::Processing::RiceProcessing)
20
- attr_reader :processing
20
+ # @dynamic processing
21
21
 
22
22
  # 要素 (has_many: Toji::Processing::SoakedRiceElement)
23
- attr_reader :elements
23
+ # @dynamic elements
24
24
 
25
25
  # 白米総重量
26
26
  def weight
@@ -2,13 +2,13 @@ module Toji
2
2
  module Processing
3
3
  module SoakedRiceElement
4
4
  # 白米重量
5
- attr_reader :weight
5
+ # @dynamic weight
6
6
 
7
7
  # 浸漬時間
8
- attr_reader :soaking_time
8
+ # @dynamic soaking_time
9
9
 
10
10
  # 浸漬米重量
11
- attr_reader :soaked
11
+ # @dynamic soaked
12
12
 
13
13
  def soaking_ratio
14
14
  (soaked.to_f - weight.to_f) / weight.to_f
@@ -2,10 +2,10 @@ module Toji
2
2
  module Processing
3
3
  module SteamedRice
4
4
  # 親 (belongs_to: Toji::Processing::RiceProcessing)
5
- attr_reader :processing
5
+ # @dynamic processing
6
6
 
7
7
  # 要素 (has_many: Toji::Processing::SteamedRiceElement)
8
- attr_reader :elements
8
+ # @dynamic elements
9
9
 
10
10
  # 蒸米総重量
11
11
  def weight
@@ -2,7 +2,7 @@ module Toji
2
2
  module Processing
3
3
  module SteamedRiceElement
4
4
  # 蒸米重量
5
- attr_reader :weight
5
+ # @dynamic weight
6
6
  end
7
7
  end
8
8
  end
@@ -2,11 +2,14 @@ module Toji
2
2
  module Product
3
3
  module ScheduleFactory
4
4
 
5
- def create_koji_schedule(date:, step_indexes:, kojis:)
5
+ # @dynamic recipe
6
+ # @dynamic base_date
7
+
8
+ def create_koji_schedule(date:, group_key:, step_weights:, kojis:)
6
9
  raise Error, "implement required: create_koji_schedule"
7
10
  end
8
11
 
9
- def create_kake_schedule(date:, step_indexes:, kakes:)
12
+ def create_kake_schedule(date:, group_key:, step_weights:, kakes:)
10
13
  raise Error, "implement required: create_kake_schedule"
11
14
  end
12
15
 
@@ -18,9 +21,10 @@ module Toji
18
21
  recipe.steps.inject([]) {|result, step|
19
22
  step.kojis&.each {|koji|
20
23
  result << {
21
- step_index: {
24
+ step_weight: {
22
25
  index: step.index,
23
26
  subindex: step.subindex,
27
+ weight: koji.weight,
24
28
  },
25
29
  date: base_date.next_day(koji.interval_days),
26
30
  koji: koji,
@@ -31,10 +35,11 @@ module Toji
31
35
  0<schedule[:koji]&.weight.to_f
32
36
  }.group_by {|schedule|
33
37
  [schedule[:date], schedule[:koji].group_key]
34
- }.map {|(date, _group_key), schedules|
38
+ }.map {|(date, group_key), schedules|
35
39
  create_koji_schedule(
36
40
  date: date,
37
- step_indexes: schedules.map {|schedule| schedule[:step_index]}.sort_by {|x| [x[:index], x[:subindex]]},
41
+ group_key: group_key,
42
+ step_weights: schedules.map {|schedule| schedule[:step_weight]}.sort_by {|x| [x[:index], x[:subindex]]},
38
43
  kojis: schedules.map{|schedule| schedule[:koji]},
39
44
  )
40
45
  }
@@ -44,9 +49,10 @@ module Toji
44
49
  recipe.steps.inject([]) {|result, step|
45
50
  step.kakes&.each {|kake|
46
51
  result << {
47
- step_index: {
52
+ step_weight: {
48
53
  index: step.index,
49
54
  subindex: step.subindex,
55
+ weight: kake.weight,
50
56
  },
51
57
  date: base_date.next_day(kake.interval_days),
52
58
  kake: kake,
@@ -56,11 +62,12 @@ module Toji
56
62
  }.select {|schedule|
57
63
  0<schedule[:kake]&.weight.to_f
58
64
  }.group_by {|schedule|
59
- [schedule[:date], schedule[:kake].group_key, schedule[:step_index]]
60
- }.map {|(date, _group_key, _step_index), schedules|
65
+ [schedule[:date], schedule[:kake].group_key]
66
+ }.map {|(date, group_key), schedules|
61
67
  create_kake_schedule(
62
68
  date: date,
63
- step_indexes: schedules.map {|schedule| schedule[:step_index]}.sort_by {|x| [x[:index], x[:subindex]]},
69
+ group_key: group_key,
70
+ step_weights: schedules.map {|schedule| schedule[:step_weight]}.sort_by {|x| [x[:index], x[:subindex]]},
64
71
  kakes: schedules.map{|schedule| schedule[:kake]},
65
72
  )
66
73
  }
@@ -9,6 +9,16 @@ module Toji
9
9
  # @dynamic ab_coef
10
10
  # @dynamic ab_expects
11
11
 
12
+ def ingredients(&block)
13
+ Enumerator.new do|y|
14
+ steps&.each {|step|
15
+ step.ingredients.each {|ingredient|
16
+ y << [step, ingredient]
17
+ }
18
+ }
19
+ end.each(&block)
20
+ end
21
+
12
22
  def scale_rice_total(rice_total)
13
23
  ratio = rice_total.to_f / steps.map(&:rice_total).sum
14
24
  scale(ratio)
@@ -54,7 +64,7 @@ module Toji
54
64
  # 酒母歩合の累計
55
65
  def cumulative_moto_ratios
56
66
  rice_total = steps.map(&:rice_total)
57
- moto = rice_total.first
67
+ moto = steps.select(&:moto?).map(&:rice_total).sum.to_f
58
68
 
59
69
  rice_total.map.with_index {|x,i|
60
70
  moto / rice_total[0..i].inject(&:+)
@@ -80,8 +90,10 @@ module Toji
80
90
  #
81
91
  # 出典: 酒造教本 P95
82
92
  def rice_ratios
93
+ moto = steps.select(&:moto?).map(&:rice_total).sum.to_f
94
+
83
95
  steps.map {|step|
84
- step.rice_total / steps.first.rice_total
96
+ step.rice_total / moto
85
97
  }
86
98
  end
87
99
 
@@ -17,6 +17,10 @@ module Toji
17
17
  # @dynamic yeasts
18
18
  # @dynamic yeasts=
19
19
 
20
+ def moto?
21
+ index==0
22
+ end
23
+
20
24
  # 麹米
21
25
  def koji_total
22
26
  (kojis || []).map(&:weight).map(&:to_f).sum.to_f
@@ -61,24 +65,32 @@ module Toji
61
65
  val.nan? ? 0.0 : val
62
66
  end
63
67
 
68
+ def ingredients(&block)
69
+ Enumerator.new do|y|
70
+ kojis&.each {|koji|
71
+ y << koji
72
+ }
73
+ kakes&.each {|kake|
74
+ y << kake
75
+ }
76
+ waters&.each {|water|
77
+ y << water
78
+ }
79
+ lactic_acids&.each {|lactic_acid|
80
+ y << lactic_acid
81
+ }
82
+ alcohols&.each {|alcohol|
83
+ y << alcohol
84
+ }
85
+ yeasts&.each {|yeast|
86
+ y << yeast
87
+ }
88
+ end.each(&block)
89
+ end
90
+
64
91
  def scale!(ratio)
65
- kojis&.each {|koji|
66
- koji.weight *= ratio
67
- }
68
- kakes&.each {|kake|
69
- kake.weight *= ratio
70
- }
71
- waters&.each {|water|
72
- water.weight *= ratio
73
- }
74
- lactic_acids&.each {|lactic_acid|
75
- lactic_acid.weight *= ratio
76
- }
77
- alcohols&.each {|alcohol|
78
- alcohol.weight *= ratio
79
- }
80
- yeasts&.each {|yeast|
81
- yeast.weight *= ratio
92
+ ingredients.each {|ingredient|
93
+ ingredient.weight *= ratio
82
94
  }
83
95
  self
84
96
  end
@@ -4,7 +4,7 @@ module Toji
4
4
  include Base
5
5
 
6
6
  # @dynamic rice_type
7
- # @dynamic step_indexes
7
+ # @dynamic step_weights
8
8
 
9
9
  # @dynamic expect
10
10
 
@@ -20,20 +20,20 @@ module Toji
20
20
  result = {}
21
21
 
22
22
  ingredients1&.each {|src|
23
- dst = result[src.group_key]
23
+ dst = result[src.ingredient_key]
24
24
  if dst
25
25
  dst.weight = dst.weight.to_f + src.weight.to_f
26
26
  else
27
- result[src.group_key] = src
27
+ result[src.ingredient_key] = src
28
28
  end
29
29
  }
30
30
 
31
31
  ingredients2&.each {|src|
32
- dst = result[src.group_key]
32
+ dst = result[src.ingredient_key]
33
33
  if dst
34
34
  dst.weight = dst.weight.to_f + src.weight.to_f
35
35
  else
36
- result[src.group_key] = src.dup
36
+ result[src.ingredient_key] = src.dup
37
37
  end
38
38
  }
39
39
 
@@ -1,3 +1,3 @@
1
1
  module Toji
2
- VERSION = "2.17.0"
2
+ VERSION = "2.22.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.17.0
4
+ version: 2.22.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: 2020-12-20 00:00:00.000000000 Z
11
+ date: 2021-01-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport