toji 2.13.1 → 2.18.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 +4 -4
- data/example/example_core.rb +224 -39
- data/lib/toji/calendar.rb +2 -2
- data/lib/toji/calendar/date_row.rb +2 -2
- data/lib/toji/ingredient/alcohol.rb +1 -1
- data/lib/toji/ingredient/base.rb +3 -2
- data/lib/toji/ingredient/koji.rb +2 -2
- data/lib/toji/ingredient/lactic_acid.rb +1 -1
- data/lib/toji/ingredient/rice.rb +10 -9
- data/lib/toji/ingredient/tanekoji.rb +3 -3
- data/lib/toji/ingredient/water.rb +3 -3
- data/lib/toji/ingredient/yeast.rb +4 -3
- data/lib/toji/processing/base.rb +1 -1
- data/lib/toji/processing/cooled_rice.rb +2 -2
- data/lib/toji/processing/cooled_rice_element.rb +1 -1
- data/lib/toji/processing/dekoji.rb +2 -2
- data/lib/toji/processing/dekoji_element.rb +1 -1
- data/lib/toji/processing/koji_processing.rb +1 -1
- data/lib/toji/processing/rice_processing.rb +4 -4
- data/lib/toji/processing/soaked_rice.rb +7 -7
- data/lib/toji/processing/soaked_rice_element.rb +3 -3
- data/lib/toji/processing/steamed_rice.rb +2 -2
- data/lib/toji/processing/steamed_rice_element.rb +1 -1
- data/lib/toji/product.rb +9 -15
- data/lib/toji/product/schedule_factory.rb +23 -9
- data/lib/toji/progress/base_state.rb +2 -5
- data/lib/toji/progress/graph/ab.rb +2 -2
- data/lib/toji/progress/koji_state.rb +5 -5
- data/lib/toji/progress/moromi_progress.rb +1 -1
- data/lib/toji/progress/moromi_state.rb +11 -11
- data/lib/toji/progress/moto_state.rb +8 -8
- data/lib/toji/progress/progress.rb +8 -7
- data/lib/toji/progress/state.rb +13 -0
- data/lib/toji/recipe.rb +5 -5
- data/lib/toji/recipe/ab_expect.rb +2 -2
- data/lib/toji/recipe/action.rb +2 -2
- data/lib/toji/recipe/step.rb +15 -6
- data/lib/toji/schedule/action_schedule.rb +1 -1
- data/lib/toji/schedule/base.rb +3 -3
- data/lib/toji/schedule/rice_schedule.rb +3 -3
- data/lib/toji/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b23be7a53efdbae7c439914868bcb41c222c062019fecde2e5471cb0e9051e48
|
4
|
+
data.tar.gz: 8c9a20caf415f8c6a67d21cb9d52129352fcca1a0899e54e8070d1f8fe0ec54d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d185b9e06e1f4498e21f57cb0e95f93a4be19b6f35230f1673a7c75ffa145948b405df1702f02b64cddff8c5a0a62d4488f536fd06413c9e3be75912d238d858
|
7
|
+
data.tar.gz: 67b56cda1946dd6619707f3c899fe20396b50394b5869c2110b282f2c0c61691d37e78b2d4d4b0e9f8b213317fccf29d82d4b234c9a45ca28025433ff16fdc7f
|
data/example/example_core.rb
CHANGED
@@ -8,8 +8,12 @@ module Example
|
|
8
8
|
include Toji::Product
|
9
9
|
include Toji::Product::ScheduleFactory
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
attr_reader :name
|
12
|
+
attr_reader :recipe
|
13
|
+
attr_reader :base_date
|
14
|
+
|
15
|
+
attr_reader :description
|
16
|
+
attr_reader :color
|
13
17
|
|
14
18
|
def initialize(id, name, description, recipe, base_date, color=nil)
|
15
19
|
@id = id
|
@@ -86,7 +90,18 @@ module Example
|
|
86
90
|
class Step
|
87
91
|
include Toji::Recipe::Step
|
88
92
|
|
89
|
-
|
93
|
+
attr_reader :index
|
94
|
+
attr_reader :subindex
|
95
|
+
attr_accessor :kojis
|
96
|
+
attr_accessor :kakes
|
97
|
+
attr_accessor :waters
|
98
|
+
attr_accessor :lactic_acids
|
99
|
+
attr_accessor :alcohols
|
100
|
+
attr_accessor :yeasts
|
101
|
+
|
102
|
+
def initialize(index:, subindex:, kojis: [], kakes: [], waters: [], lactic_acids: [], alcohols: [], yeasts: [])
|
103
|
+
@index = index
|
104
|
+
@subindex = subindex
|
90
105
|
@kojis = kojis
|
91
106
|
@kakes = kakes
|
92
107
|
@waters = waters
|
@@ -108,6 +123,18 @@ module Example
|
|
108
123
|
class Koji
|
109
124
|
include Toji::Ingredient::Koji
|
110
125
|
|
126
|
+
attr_accessor :weight
|
127
|
+
attr_reader :brand
|
128
|
+
attr_reader :polishing_ratio
|
129
|
+
attr_reader :made_in
|
130
|
+
attr_reader :year
|
131
|
+
attr_reader :soaking_ratio
|
132
|
+
attr_reader :steaming_ratio
|
133
|
+
attr_reader :cooling_ratio
|
134
|
+
attr_reader :tanekojis
|
135
|
+
attr_reader :dekoji_ratio
|
136
|
+
attr_reader :interval_days
|
137
|
+
|
111
138
|
def initialize(weight:, brand:, polishing_ratio:, made_in:, year:, soaking_ratio:, steaming_ratio:, cooling_ratio:, tanekojis:, dekoji_ratio:, interval_days:)
|
112
139
|
@weight = weight
|
113
140
|
@brand = brand
|
@@ -150,6 +177,8 @@ module Example
|
|
150
177
|
include Toji::Ingredient::Tanekoji
|
151
178
|
|
152
179
|
attr_accessor :koji
|
180
|
+
attr_reader :brand
|
181
|
+
attr_reader :ratio
|
153
182
|
|
154
183
|
def initialize(koji: nil, brand:, ratio:)
|
155
184
|
@brand = brand
|
@@ -165,6 +194,16 @@ module Example
|
|
165
194
|
class Kake
|
166
195
|
include Toji::Ingredient::Kake
|
167
196
|
|
197
|
+
attr_accessor :weight
|
198
|
+
attr_reader :brand
|
199
|
+
attr_reader :polishing_ratio
|
200
|
+
attr_reader :made_in
|
201
|
+
attr_reader :year
|
202
|
+
attr_reader :soaking_ratio
|
203
|
+
attr_reader :steaming_ratio
|
204
|
+
attr_reader :cooling_ratio
|
205
|
+
attr_reader :interval_days
|
206
|
+
|
168
207
|
def initialize(weight:, brand:, polishing_ratio:, made_in:, year:, soaking_ratio:, steaming_ratio:, cooling_ratio:, interval_days:)
|
169
208
|
@weight = weight
|
170
209
|
@brand = brand
|
@@ -181,6 +220,10 @@ module Example
|
|
181
220
|
class Water
|
182
221
|
include Toji::Ingredient::Water
|
183
222
|
|
223
|
+
attr_accessor :weight
|
224
|
+
attr_reader :calcium_hardness
|
225
|
+
attr_reader :magnesium_hardness
|
226
|
+
|
184
227
|
def initialize(weight:)
|
185
228
|
@weight = weight
|
186
229
|
end
|
@@ -189,6 +232,8 @@ module Example
|
|
189
232
|
class LacticAcid
|
190
233
|
include Toji::Ingredient::LacticAcid
|
191
234
|
|
235
|
+
attr_accessor :weight
|
236
|
+
|
192
237
|
def initialize(weight:)
|
193
238
|
@weight = weight
|
194
239
|
end
|
@@ -197,6 +242,8 @@ module Example
|
|
197
242
|
class Alcohol
|
198
243
|
include Toji::Ingredient::Alcohol
|
199
244
|
|
245
|
+
attr_accessor :weight
|
246
|
+
|
200
247
|
def initialize(weight:)
|
201
248
|
@weight = weight
|
202
249
|
end
|
@@ -205,6 +252,10 @@ module Example
|
|
205
252
|
class Yeast
|
206
253
|
include Toji::Ingredient::Yeast
|
207
254
|
|
255
|
+
attr_accessor :weight
|
256
|
+
attr_reader :unit
|
257
|
+
attr_reader :brand
|
258
|
+
|
208
259
|
def initialize(weight:)
|
209
260
|
@weight = weight
|
210
261
|
end
|
@@ -214,22 +265,48 @@ module Example
|
|
214
265
|
class Action
|
215
266
|
include Toji::Recipe::Action
|
216
267
|
|
268
|
+
attr_reader :type
|
269
|
+
attr_reader :interval_days
|
270
|
+
|
217
271
|
def initialize(type:, interval_days:)
|
218
272
|
@type = type
|
219
273
|
@interval_days = interval_days
|
220
274
|
end
|
221
275
|
end
|
222
276
|
|
277
|
+
class AbExpect
|
278
|
+
include Toji::Recipe::AbExpect
|
279
|
+
|
280
|
+
attr_reader :alcohol
|
281
|
+
attr_reader :nihonshudo
|
282
|
+
|
283
|
+
def initialize(alcohol:, nihonshudo:)
|
284
|
+
@alcohol = alcohol
|
285
|
+
@nihonshudo = nihonshudo
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
223
289
|
|
224
290
|
class Recipe
|
225
291
|
include Toji::Recipe
|
226
292
|
|
227
|
-
|
293
|
+
attr_reader :steps
|
294
|
+
attr_reader :actions
|
295
|
+
attr_reader :ab_coef
|
296
|
+
attr_reader :ab_expects
|
297
|
+
|
298
|
+
def initialize(steps:, actions:, ab_coef:, ab_expects:)
|
228
299
|
@steps = steps
|
300
|
+
@actions = actions
|
301
|
+
@ab_coef = ab_coef
|
302
|
+
@ab_expects = ab_expects
|
229
303
|
end
|
230
304
|
|
231
305
|
def initialize_copy(obj)
|
232
306
|
@steps = obj.steps.deep_dup
|
307
|
+
@actions = obj.actions.deep_dup
|
308
|
+
@ab_coef = obj.ab_coef.dup
|
309
|
+
@ab_expects = obj.ab_expects.deep_dup
|
233
310
|
end
|
234
311
|
|
235
312
|
# 乳酸は汲水100L当たり比重1.21の乳酸(90%乳酸と称される)を650〜720ml添加する。
|
@@ -242,8 +319,10 @@ module Example
|
|
242
319
|
# 酒造教本による標準型仕込配合
|
243
320
|
# 出典: 酒造教本 P97
|
244
321
|
sokujo_textbook: new(
|
245
|
-
[
|
322
|
+
steps: [
|
246
323
|
Step.new(
|
324
|
+
index: 0,
|
325
|
+
subindex: 0,
|
247
326
|
kojis: [
|
248
327
|
Koji.new(
|
249
328
|
weight: 20,
|
@@ -294,6 +373,8 @@ module Example
|
|
294
373
|
]
|
295
374
|
),
|
296
375
|
Step.new(
|
376
|
+
index: 1,
|
377
|
+
subindex: 0,
|
297
378
|
kojis: [
|
298
379
|
Koji.new(
|
299
380
|
weight: 40,
|
@@ -334,6 +415,8 @@ module Example
|
|
334
415
|
],
|
335
416
|
),
|
336
417
|
Step.new(
|
418
|
+
index: 2,
|
419
|
+
subindex: 0,
|
337
420
|
kojis: [
|
338
421
|
Koji.new(
|
339
422
|
weight: 60,
|
@@ -374,6 +457,8 @@ module Example
|
|
374
457
|
],
|
375
458
|
),
|
376
459
|
Step.new(
|
460
|
+
index: 3,
|
461
|
+
subindex: 0,
|
377
462
|
kojis: [
|
378
463
|
Koji.new(
|
379
464
|
weight: 80,
|
@@ -414,6 +499,8 @@ module Example
|
|
414
499
|
],
|
415
500
|
),
|
416
501
|
Step.new(
|
502
|
+
index: 4,
|
503
|
+
subindex: 0,
|
417
504
|
kakes: [
|
418
505
|
Kake.new(
|
419
506
|
weight: 80,
|
@@ -433,13 +520,32 @@ module Example
|
|
433
520
|
),
|
434
521
|
],
|
435
522
|
),
|
436
|
-
].map(&:freeze).freeze
|
523
|
+
].map(&:freeze).freeze,
|
524
|
+
actions: [
|
525
|
+
Action.new(
|
526
|
+
type: :squeeze,
|
527
|
+
interval_days: 50,
|
528
|
+
),
|
529
|
+
].map(&:freeze).freeze,
|
530
|
+
ab_coef: 1.4,
|
531
|
+
ab_expects: [
|
532
|
+
AbExpect.new(
|
533
|
+
alcohol: 15.0,
|
534
|
+
nihonshudo: 0.0,
|
535
|
+
),
|
536
|
+
AbExpect.new(
|
537
|
+
alcohol: 16.0,
|
538
|
+
nihonshudo: 3.0,
|
539
|
+
),
|
540
|
+
].map(&:freeze).freeze,
|
437
541
|
).freeze,
|
438
542
|
# 灘における仕込配合の平均値
|
439
543
|
# 出典: http://www.nada-ken.com/main/jp/index_shi/234.html
|
440
544
|
sokujo_nada: new(
|
441
|
-
[
|
545
|
+
steps: [
|
442
546
|
Step.new(
|
547
|
+
index: 0,
|
548
|
+
subindex: 0,
|
443
549
|
kojis: [
|
444
550
|
Koji.new(
|
445
551
|
weight: 47,
|
@@ -490,6 +596,8 @@ module Example
|
|
490
596
|
],
|
491
597
|
),
|
492
598
|
Step.new(
|
599
|
+
index: 1,
|
600
|
+
subindex: 0,
|
493
601
|
kojis: [
|
494
602
|
Koji.new(
|
495
603
|
weight: 99,
|
@@ -530,6 +638,8 @@ module Example
|
|
530
638
|
],
|
531
639
|
),
|
532
640
|
Step.new(
|
641
|
+
index: 2,
|
642
|
+
subindex: 0,
|
533
643
|
kojis: [
|
534
644
|
Koji.new(
|
535
645
|
weight: 143,
|
@@ -570,6 +680,8 @@ module Example
|
|
570
680
|
],
|
571
681
|
),
|
572
682
|
Step.new(
|
683
|
+
index: 3,
|
684
|
+
subindex: 0,
|
573
685
|
kojis: [
|
574
686
|
Koji.new(
|
575
687
|
weight: 165,
|
@@ -610,19 +722,40 @@ module Example
|
|
610
722
|
],
|
611
723
|
),
|
612
724
|
Step.new(
|
725
|
+
index: 4,
|
726
|
+
subindex: 0,
|
613
727
|
alcohols: [
|
614
728
|
Alcohol.new(
|
615
729
|
weight: 900,
|
616
730
|
),
|
617
731
|
],
|
618
732
|
),
|
619
|
-
].map(&:freeze).freeze
|
733
|
+
].map(&:freeze).freeze,
|
734
|
+
actions: [
|
735
|
+
Action.new(
|
736
|
+
type: :squeeze,
|
737
|
+
interval_days: 50,
|
738
|
+
),
|
739
|
+
].map(&:freeze).freeze,
|
740
|
+
ab_coef: 1.4,
|
741
|
+
ab_expects: [
|
742
|
+
AbExpect.new(
|
743
|
+
alcohol: 15.0,
|
744
|
+
nihonshudo: 0.0,
|
745
|
+
),
|
746
|
+
AbExpect.new(
|
747
|
+
alcohol: 16.0,
|
748
|
+
nihonshudo: 3.0,
|
749
|
+
),
|
750
|
+
].map(&:freeze).freeze,
|
620
751
|
).freeze,
|
621
752
|
# 簡易酒母省略仕込
|
622
753
|
# 出典: https://www.jstage.jst.go.jp/article/jbrewsocjapan1915/60/11/60_11_999/_article/-char/ja/
|
623
754
|
simple_sokujo_himeno: new(
|
624
|
-
[
|
755
|
+
steps: [
|
625
756
|
Step.new(
|
757
|
+
index: 0,
|
758
|
+
subindex: 0,
|
626
759
|
kojis: [
|
627
760
|
Koji.new(
|
628
761
|
weight: 70,
|
@@ -644,17 +777,6 @@ module Example
|
|
644
777
|
),
|
645
778
|
],
|
646
779
|
kakes: [
|
647
|
-
Kake.new(
|
648
|
-
weight: 0,
|
649
|
-
brand: :yamadanishiki,
|
650
|
-
polishing_ratio: 0.55,
|
651
|
-
made_in: :hyogo,
|
652
|
-
year: 2020,
|
653
|
-
soaking_ratio: 0.33,
|
654
|
-
steaming_ratio: 0.41,
|
655
|
-
cooling_ratio: 0.33,
|
656
|
-
interval_days: 6,
|
657
|
-
),
|
658
780
|
],
|
659
781
|
waters: [
|
660
782
|
Water.new(
|
@@ -673,25 +795,9 @@ module Example
|
|
673
795
|
],
|
674
796
|
),
|
675
797
|
Step.new(
|
798
|
+
index: 1,
|
799
|
+
subindex: 0,
|
676
800
|
kojis: [
|
677
|
-
Koji.new(
|
678
|
-
weight: 0,
|
679
|
-
brand: :yamadanishiki,
|
680
|
-
polishing_ratio: 0.55,
|
681
|
-
made_in: :hyogo,
|
682
|
-
year: 2020,
|
683
|
-
soaking_ratio: 0.33,
|
684
|
-
steaming_ratio: 0.41,
|
685
|
-
cooling_ratio: 0.33,
|
686
|
-
tanekojis: [
|
687
|
-
Tanekoji.new(
|
688
|
-
brand: :byakuya,
|
689
|
-
ratio: 0.001,
|
690
|
-
),
|
691
|
-
],
|
692
|
-
dekoji_ratio: 0.18,
|
693
|
-
interval_days: 0,
|
694
|
-
),
|
695
801
|
],
|
696
802
|
kakes: [
|
697
803
|
Kake.new(
|
@@ -713,6 +819,8 @@ module Example
|
|
713
819
|
],
|
714
820
|
),
|
715
821
|
Step.new(
|
822
|
+
index: 2,
|
823
|
+
subindex: 0,
|
716
824
|
kojis: [
|
717
825
|
Koji.new(
|
718
826
|
weight: 100,
|
@@ -753,6 +861,8 @@ module Example
|
|
753
861
|
],
|
754
862
|
),
|
755
863
|
Step.new(
|
864
|
+
index: 3,
|
865
|
+
subindex: 0,
|
756
866
|
kojis: [
|
757
867
|
Koji.new(
|
758
868
|
weight: 110,
|
@@ -793,13 +903,32 @@ module Example
|
|
793
903
|
],
|
794
904
|
),
|
795
905
|
Step.new(
|
906
|
+
index: 4,
|
907
|
+
subindex: 0,
|
796
908
|
waters: [
|
797
909
|
Water.new(
|
798
910
|
weight: 255,
|
799
911
|
),
|
800
912
|
],
|
801
913
|
),
|
802
|
-
].map(&:freeze).freeze
|
914
|
+
].map(&:freeze).freeze,
|
915
|
+
actions: [
|
916
|
+
Action.new(
|
917
|
+
type: :squeeze,
|
918
|
+
interval_days: 50,
|
919
|
+
),
|
920
|
+
].map(&:freeze).freeze,
|
921
|
+
ab_coef: 1.4,
|
922
|
+
ab_expects: [
|
923
|
+
AbExpect.new(
|
924
|
+
alcohol: 15.0,
|
925
|
+
nihonshudo: 0.0,
|
926
|
+
),
|
927
|
+
AbExpect.new(
|
928
|
+
alcohol: 16.0,
|
929
|
+
nihonshudo: 3.0,
|
930
|
+
),
|
931
|
+
].map(&:freeze).freeze,
|
803
932
|
).freeze,
|
804
933
|
}.freeze
|
805
934
|
end
|
@@ -808,6 +937,12 @@ module Example
|
|
808
937
|
class KojiSchedule
|
809
938
|
include Toji::Schedule::KojiSchedule
|
810
939
|
|
940
|
+
attr_reader :product
|
941
|
+
attr_reader :date
|
942
|
+
|
943
|
+
attr_reader :step_indexes
|
944
|
+
attr_reader :expect
|
945
|
+
|
811
946
|
def initialize(product:, date:, step_indexes:, expect:)
|
812
947
|
@product = product
|
813
948
|
@date = date
|
@@ -819,6 +954,12 @@ module Example
|
|
819
954
|
class KakeSchedule
|
820
955
|
include Toji::Schedule::KakeSchedule
|
821
956
|
|
957
|
+
attr_reader :product
|
958
|
+
attr_reader :date
|
959
|
+
|
960
|
+
attr_reader :step_indexes
|
961
|
+
attr_reader :expect
|
962
|
+
|
822
963
|
def initialize(product:, date:, step_indexes:, expect:)
|
823
964
|
@product = product
|
824
965
|
@date = date
|
@@ -830,6 +971,12 @@ module Example
|
|
830
971
|
class ActionSchedule
|
831
972
|
include Toji::Schedule::ActionSchedule
|
832
973
|
|
974
|
+
attr_reader :product
|
975
|
+
attr_reader :date
|
976
|
+
attr_reader :type
|
977
|
+
|
978
|
+
attr_reader :index_index
|
979
|
+
|
833
980
|
def initialize(product:, date:, type:, action_index:)
|
834
981
|
@product = product
|
835
982
|
@date = date
|
@@ -872,6 +1019,16 @@ module Example
|
|
872
1019
|
class KojiState
|
873
1020
|
include Toji::Progress::KojiState
|
874
1021
|
|
1022
|
+
attr_accessor :progress
|
1023
|
+
attr_accessor :time
|
1024
|
+
attr_accessor :mark
|
1025
|
+
|
1026
|
+
attr_accessor :temps
|
1027
|
+
attr_accessor :preset_temp
|
1028
|
+
attr_accessor :room_temp
|
1029
|
+
attr_accessor :room_psychrometry
|
1030
|
+
attr_accessor :note
|
1031
|
+
|
875
1032
|
def self.create(args)
|
876
1033
|
new.tap {|s|
|
877
1034
|
s.progress = args[:progress]
|
@@ -901,6 +1058,19 @@ module Example
|
|
901
1058
|
class MotoState
|
902
1059
|
include Toji::Progress::MotoState
|
903
1060
|
|
1061
|
+
attr_accessor :progress
|
1062
|
+
attr_accessor :time
|
1063
|
+
attr_accessor :mark
|
1064
|
+
|
1065
|
+
attr_accessor :temps
|
1066
|
+
attr_accessor :preset_temp
|
1067
|
+
attr_accessor :room_temp
|
1068
|
+
attr_accessor :room_psychrometry
|
1069
|
+
attr_accessor :baume
|
1070
|
+
attr_accessor :acid
|
1071
|
+
attr_accessor :warmings
|
1072
|
+
attr_accessor :note
|
1073
|
+
|
904
1074
|
def self.create(args)
|
905
1075
|
new.tap {|s|
|
906
1076
|
s.progress = args[:progress]
|
@@ -936,6 +1106,21 @@ module Example
|
|
936
1106
|
include Toji::Progress::MoromiState
|
937
1107
|
include Toji::Progress::State::BaumeToNihonshudo
|
938
1108
|
|
1109
|
+
attr_accessor :progress
|
1110
|
+
attr_accessor :time
|
1111
|
+
attr_accessor :mark
|
1112
|
+
|
1113
|
+
attr_accessor :temps
|
1114
|
+
attr_accessor :preset_temp
|
1115
|
+
attr_accessor :room_temp
|
1116
|
+
attr_accessor :room_psychrometry
|
1117
|
+
attr_accessor :baume
|
1118
|
+
attr_accessor :acid
|
1119
|
+
attr_accessor :amino_acid
|
1120
|
+
attr_accessor :alcohol
|
1121
|
+
attr_accessor :warmings
|
1122
|
+
attr_accessor :note
|
1123
|
+
|
939
1124
|
def self.create(args)
|
940
1125
|
new.tap {|s|
|
941
1126
|
s.progress = args[:progress]
|