toji 2.6.0 → 2.7.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: 230074f3cfc1c17026ac87d7c6ccd0268a75f4dc5fe23e2c3fceaffc3c7dd426
4
- data.tar.gz: 82e735ce458faced833dc0c1c40443a43d0d486e9663837d7040388336a7f3db
3
+ metadata.gz: 429e9eeeffb945a1a475dd46b905218bb37957949f546dbe397340cd676126ec
4
+ data.tar.gz: ba6ce92d393d67ba66454f8d15d9f7f7aaf2ca652be94480c8e7770198357a3d
5
5
  SHA512:
6
- metadata.gz: cda9a70705ef31fcfd903f00f217038e048a4a85f8253895d14050b97cf61984151077f718a635102b07f766a0a7ad79ab413e4b76baa37177305cccb0ffe271
7
- data.tar.gz: cfe743bbc06280ecfb41a0d208b959efcff8c69d757cbafde3595cd7278a825f5971c76f6ee5dc114e0d8b645d7903972024d5d415117349ad15bea4a3ae9ae8
6
+ metadata.gz: 34139f9cb7e87b8f7a55fad1ffea779dfcf17a1c4575e2f59d49e50c4930691886a3853fe4ed9c408c60740b28fcde5ce347b358d9919c1a8e5faf1a94d37dbb
7
+ data.tar.gz: ae9df3f15afc81b8b4c239d2f0d18ee5c77bc293327aae8c1cee44dad98948a6abde97c498df83b3a3d0a29a44c015e25f5c88969425d345e21516911018eb00
@@ -16,7 +16,7 @@ module Toji
16
16
  alias_method :add, :<<
17
17
 
18
18
  def date_rows
19
- events = @products.map{|product| product.events}.flatten
19
+ events = @products.map{|product| product.rice_events}.flatten
20
20
 
21
21
  result = {}
22
22
  events.each {|event|
@@ -28,7 +28,7 @@ module Toji
28
28
  end
29
29
 
30
30
  def table_data
31
- events = @products.map{|product| product.events}.flatten
31
+ events = @products.map{|product| product.rice_events}.flatten
32
32
 
33
33
  koji_len = events.select{|e| e.type==:koji}.map(&:group_index).max + 1
34
34
  kake_len = events.select{|e| e.type==:kake}.map(&:group_index).max + 1
@@ -1,19 +1,19 @@
1
1
  module Toji
2
2
  class Calendar
3
3
  class DateColumn
4
- attr_reader :events
4
+ attr_reader :rice_events
5
5
 
6
6
  def initialize
7
- @events = []
7
+ @rice_events = []
8
8
  end
9
9
 
10
10
  def <<(event)
11
- @events << event
11
+ @rice_events << event
12
12
  end
13
13
  alias_method :add, :<<
14
14
 
15
15
  def event_groups
16
- @events.group_by {|e|
16
+ @rice_events.group_by {|e|
17
17
  e.group_key
18
18
  }.values
19
19
  end
@@ -1,4 +1,6 @@
1
1
  require 'toji/product/event'
2
+ require 'toji/product/rice_event'
3
+ require 'toji/product/rice_event_group'
2
4
 
3
5
  module Toji
4
6
  module Product
@@ -21,45 +23,75 @@ module Toji
21
23
  }
22
24
  end
23
25
 
24
- def events
25
- events = []
26
+ def squeeze_date
27
+ base_date.next_day(recipe.squeeze_interval_days)
28
+ end
26
29
 
27
- koji_dates.length.times {|i|
28
- events << Event.new(self, :koji, i)
30
+ def koji_events
31
+ koji_dates.map.with_index {|date,i|
32
+ RiceEvent.new(
33
+ product: self,
34
+ type: :koji,
35
+ index: i,
36
+ group_index: koji_dates.find_index(date),
37
+ date: date,
38
+ weight: recipe.steps[i].koji,
39
+ )
29
40
  }
41
+ end
30
42
 
31
- kake_dates.length
32
- .times.map {|i|
33
- Event.new(self, :kake, i)
34
- }
35
- .delete_if {|e|
36
- 4<=e.index && e.weight==0
37
- }
38
- .each {|e|
39
- events << e
40
- }
43
+ def kake_events
44
+ kake_dates.map.with_index {|date,i|
45
+ RiceEvent.new(
46
+ product: self,
47
+ type: :kake,
48
+ index: i,
49
+ group_index: kake_dates.find_index(date),
50
+ date: date,
51
+ weight: recipe.steps[i].kake,
52
+ )
53
+ }
54
+ end
41
55
 
42
- events
56
+ def rice_events
57
+ koji_events + kake_events
43
58
  end
44
59
 
45
- def events_group
46
- events.group_by{|event|
60
+ def koji_event_groups
61
+ koji_events.group_by{|event|
47
62
  event.group_key
48
63
  }.map {|group_key,events|
49
- breakdown = events.map {|event|
50
- {index: event.index, weight: event.weight}
51
- }
52
- if 1<breakdown.length
53
- breakdown = breakdown.select{|event| 0<event[:weight]}
54
- end
64
+ events.select{|event| 0<event.weight}
65
+ }.select {|events|
66
+ 0<events.length
67
+ }.map {|events|
68
+ RiceEventGroup.new(events)
69
+ }
70
+ end
55
71
 
56
- {
57
- date: events.first.date,
58
- type: events.first.type,
59
- weight: events.map(&:weight).sum,
60
- breakdown: breakdown,
61
- }
72
+ def kake_event_groups
73
+ kake_events.group_by{|event|
74
+ event.group_key
75
+ }.map {|group_key,events|
76
+ events.select{|event| 0<event.weight}
77
+ }.select {|events|
78
+ 0<events.length
79
+ }.map {|events|
80
+ RiceEventGroup.new(events)
62
81
  }
63
82
  end
83
+
84
+ def rice_event_groups
85
+ koji_event_groups + kake_event_groups
86
+ end
87
+
88
+ def events
89
+ events = []
90
+
91
+ events += rice_event_groups
92
+ events << Event.new(squeeze_date, :squeeze)
93
+
94
+ events
95
+ end
64
96
  end
65
97
  end
@@ -1,43 +1,12 @@
1
1
  module Toji
2
2
  module Product
3
3
  class Event
4
- attr_reader :product
4
+ attr_reader :date
5
5
  attr_reader :type
6
- attr_reader :index
7
-
8
- def initialize(product, type, index)
9
- @product = product
10
- @type = type
11
- @index = index
12
- end
13
-
14
- def date
15
- method = "#{@type}_dates".to_sym
16
- @product.send(method)[@index]
17
- end
18
-
19
- def group_index
20
- method = "#{@type}_dates".to_sym
21
- dates = @product.send(method)
22
- date = dates[@index]
23
6
 
24
- if @type==:koji && dates.all? {|d| d==date}
25
- 1
26
- else
27
- dates.index(date)
28
- end
29
- end
30
-
31
- def group_key
32
- a = []
33
- a << product.reduce_key
34
- a << type
35
- a << group_index
36
- a.map(&:to_s).join(":")
37
- end
38
-
39
- def weight
40
- @product.recipe.steps[@index].send(@type)
7
+ def initialize(date, type)
8
+ @date = date
9
+ @type = type
41
10
  end
42
11
  end
43
12
  end
@@ -0,0 +1,28 @@
1
+ require 'toji/product/event'
2
+
3
+ module Toji
4
+ module Product
5
+ class RiceEvent < Event
6
+ attr_reader :product
7
+ attr_reader :index
8
+ attr_reader :group_index
9
+ attr_reader :weight
10
+
11
+ def initialize(product:, type:, index:, group_index:, date:, weight:)
12
+ super(date, type)
13
+ @product = product
14
+ @index = index
15
+ @group_index = group_index
16
+ @weight = weight
17
+ end
18
+
19
+ def group_key
20
+ a = []
21
+ a << product.reduce_key
22
+ a << type
23
+ a << group_index
24
+ a.map(&:to_s).join(":")
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,19 @@
1
+ require 'toji/product/event'
2
+
3
+ module Toji
4
+ module Product
5
+ class RiceEventGroup < Event
6
+ attr_reader :breakdown
7
+
8
+ def initialize(events)
9
+ o = events.first
10
+ super(o&.date, o&.type)
11
+ @breakdown = events
12
+ end
13
+
14
+ def weight
15
+ @breakdown.map(&:weight).sum
16
+ end
17
+ end
18
+ end
19
+ end
@@ -6,6 +6,7 @@ module Toji
6
6
  attr_accessor :steps
7
7
  attr_accessor :ab_coef
8
8
  attr_accessor :ab_expects
9
+ attr_accessor :squeeze_interval_days
9
10
 
10
11
  def scale(rice_total)
11
12
  rate = rice_total / steps.map(&:rice_total).sum
@@ -15,6 +16,9 @@ module Toji
15
16
 
16
17
  self.class.new.tap {|o|
17
18
  o.steps = new_steps
19
+ o.ab_coef = ab_coef
20
+ o.ab_expects = ab_expects.deep_dup
21
+ o.squeeze_interval_days = squeeze_interval_days
18
22
  }
19
23
  end
20
24
 
@@ -25,6 +29,9 @@ module Toji
25
29
 
26
30
  self.class.new.tap {|o|
27
31
  o.steps = new_steps
32
+ o.ab_coef = ab_coef
33
+ o.ab_expects = ab_expects.deep_dup
34
+ o.squeeze_interval_days = squeeze_interval_days
28
35
  }
29
36
  end
30
37
 
@@ -1,3 +1,3 @@
1
1
  module Toji
2
- VERSION = "2.6.0"
2
+ VERSION = "2.7.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.6.0
4
+ version: 2.7.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-09-02 00:00:00.000000000 Z
11
+ date: 2020-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -162,6 +162,8 @@ files:
162
162
  - lib/toji/ingredient/rice_rate.rb
163
163
  - lib/toji/product.rb
164
164
  - lib/toji/product/event.rb
165
+ - lib/toji/product/rice_event.rb
166
+ - lib/toji/product/rice_event_group.rb
165
167
  - lib/toji/recipe.rb
166
168
  - lib/toji/recipe/ab_expect.rb
167
169
  - lib/toji/recipe/step.rb