seshbot-packing 0.9.2 → 0.9.3

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: f77cf089e5f02caf10d7af67e7d75260d3529c560b2cfee232ba3b72f5f36e94
4
- data.tar.gz: ec54cf2361668f1c92789f9337f0feb8f744a1208192e74368d46773eddf1f4f
3
+ metadata.gz: 53640497418fe974662502d80ff742cee86798e16223b506cbc880af98297f60
4
+ data.tar.gz: a4242121d15f8229c6828a1040a02c06aac2c00ac82c58a71ac98a6ad5ef7e24
5
5
  SHA512:
6
- metadata.gz: 1e5539df5a295507c496115dfda6f972310c24ed88dfc97a2712f55e8c852e2f4f64bde98168e4d626f7a7f5484cfdf472705c0f4fec6139f06e90620bbc8ad4
7
- data.tar.gz: c482b9e179a56795a7ff2559d72f708ab27a684dae5e11f9d9fca423ea543752f80dd0e377cccbdb6241e6605b7ec20c75412bb5f4984e6d67caf7935e0fe28e
6
+ metadata.gz: 90a06fc6a5a757edaadaf5b0242e90daca9384fb8390f9ecb2cc0a43ca24e0ff0f893a459aaf89612e40d6ceeb4350e5e3f59931bbc46fc41713173388a1f65e
7
+ data.tar.gz: ee480ed3de2a785a7e40651543280ba805a2681a0863f9bef800e4f65e0195861adfe50d4cf3c5bd5ce740b03a6ac5c66d38e0a3a60346b962e9f86991cafd74
data/.gitignore CHANGED
@@ -9,3 +9,12 @@
9
9
  /spec/reports/
10
10
  /tmp/
11
11
  *.gem
12
+
13
+ # Ignore all logfiles and tempfiles.
14
+ /log/*
15
+ !/log/.keep
16
+ !/tmp/.keep
17
+
18
+ .idea/
19
+ .DS_Store
20
+ ngrok
@@ -8,21 +8,25 @@ module Seshbot
8
8
  @@logger = nil
9
9
  def logger
10
10
  if @@logger.nil?
11
- @@logger = Logger.new(STDERR)
12
- @@logger.level = 1
11
+ if defined?(Rails)
12
+ @@logger = Rails.logger
13
+ else
14
+ @@logger = Logger.new(STDERR)
15
+ @@logger.level = 1
16
+ end
13
17
  end
14
18
  @@logger
15
19
  end
16
20
 
17
21
  def bundle_items(recipes, items, fulfilled_at: nil)
18
22
  if !fulfilled_at.nil? && fulfilled_at < DateTime.parse('2020-01-14T08:00:00+09:00')
19
- logger.debug "== Not Bundling (pre-2020 order) =="
23
+ logger.debug "bundling - Not Bundling (pre-2020 order) =="
20
24
  return items
21
25
  end
22
26
  is_legacy = _is_legacy(fulfilled_at)
23
27
  is_legacy_str = is_legacy ? " (LEGACY)" : ""
24
28
 
25
- logger.debug "== Bundling Items: #{items.map(&:to_s)}. Fulfilled at: #{fulfilled_at || '(no fulfillment date)'}#{is_legacy_str}"
29
+ logger.debug "bundling - Bundling Items: #{items.map(&:to_s)}. Fulfilled at: #{fulfilled_at || '(no fulfillment date)'}#{is_legacy_str}"
26
30
 
27
31
  results = []
28
32
 
@@ -35,13 +39,38 @@ module Seshbot
35
39
  phases.each do |phase|
36
40
  phase_recipes = recipes.select { |name, recipe| (recipe['phase'] || 0) == phase }.to_h
37
41
 
38
- logger.debug "=== Bundling phase #{phase}"
42
+ logger.debug "bundling - PHASE #{phase}"
39
43
 
40
44
  results = _bundle_items_single_phase(phase_recipes, results)
41
45
  end
42
46
  end
43
47
 
44
- logger.debug "Bundled result:"
48
+ logger.debug "bundling - Bundled result:"
49
+ logger.debug " - IN: #{items.map(&:to_s)}"
50
+ logger.debug " - OUT: #{results.map(&:to_s)}"
51
+
52
+ results
53
+ end
54
+
55
+ def unbundle_items(recipes, items, fulfilled_at: nil)
56
+ logger.debug "bundling - Unbundling Items: #{items.map(&:to_s)}"
57
+
58
+ results = []
59
+
60
+ phases = recipes.values.map { |r| r['phase'] || 0 }.map(&:to_i).uniq.sort.reverse
61
+
62
+ results = items
63
+ phases.each do |phase|
64
+ phase_recipes = recipes.select { |name, recipe| (recipe['phase'] || 0) == phase }.to_h
65
+
66
+ logger.debug "bundling - PHASE #{phase}"
67
+
68
+ # get a list of items merged together by variant type (e.g., 10xBIGI-C301 + 5xBISS-C301 => 15xBUND-C301))
69
+ merged_items = LineItem.merge_line_items(results)
70
+ results = unpack(recipes, merged_items)
71
+ end
72
+
73
+ logger.debug "bundling - Unbundle result:"
45
74
  logger.debug " - IN: #{items.map(&:to_s)}"
46
75
  logger.debug " - OUT: #{results.map(&:to_s)}"
47
76
 
@@ -58,7 +87,7 @@ module Seshbot
58
87
 
59
88
  prev_result = new_result
60
89
  end
61
- error_message = "could not unpack - infinite loop? (latest: #{prev_result.map(&:to_s)})"
90
+ error_message = "bundling - could not unpack - infinite loop? (latest: #{prev_result.map(&:to_s)})"
62
91
  logger.error error_message
63
92
  raise error_message
64
93
  end
@@ -75,7 +104,7 @@ module Seshbot
75
104
 
76
105
  prev_result = new_result
77
106
  end
78
- error_message = "could not pack - infinite loop? (latest: #{prev_result.map(&:to_s)})"
107
+ error_message = "bundling - could not pack - infinite loop? (latest: #{prev_result.map(&:to_s)})"
79
108
  logger.error error_message
80
109
  raise error_message
81
110
  end
@@ -86,7 +115,7 @@ module Seshbot
86
115
 
87
116
  def _is_legacy(fulfilled_at)
88
117
  effective_fulfilled_at = fulfilled_at.nil? ? DateTime.now : fulfilled_at
89
- is_legacy = effective_fulfilled_at < DateTime.parse('2021-04-07T09:00:00+09:00')
118
+ is_legacy = effective_fulfilled_at < DateTime.parse('2021-04-01T09:00:00+09:00')
90
119
  is_legacy
91
120
  end
92
121
 
@@ -100,7 +129,7 @@ module Seshbot
100
129
  new_can_items = pack(recipes, bundle_items_by_type)
101
130
  # separate out all the C324s
102
131
  separated_c324s = _filter_by_sku_fragment_prefix(new_can_items, 'C324')
103
- logger.debug "Cans: #{cans.map(&:to_s)}"
132
+ logger.debug "bundling - Cans: #{cans.map(&:to_s)}"
104
133
  logger.debug " - Removed C324s: #{separated_c324s.map(&:to_s)}"
105
134
 
106
135
  remaining_cans = _filter_by_sku_fragment_prefix(new_can_items, 'C324', inverse: true)
@@ -110,7 +139,7 @@ module Seshbot
110
139
  # merge the remaining with the original leftover
111
140
  non_cans = _filter_by_sku_fragment_prefix(items, 'C', inverse: true)
112
141
  remaining_items = non_cans + remaining_cans
113
- logger.debug "Substituting:"
142
+ logger.debug "bundling - Substituting:"
114
143
  logger.debug " - remaining items: #{remaining_items.map(&:to_s)}"
115
144
 
116
145
  # substitute C's for B's
@@ -160,7 +189,7 @@ module Seshbot
160
189
  before = LineItem::summarise(items)
161
190
  items = Recipe::apply_recipe(recipe, items)
162
191
  after = LineItem::summarise(items)
163
- logger.debug "applying recipe (#{unpacking ? 'unpacking' : 'packing'}) #{Recipe::summarise(recipe)}: #{before} -> #{after}"
192
+ logger.debug "bundling - applying recipe (#{unpacking ? 'unpacking' : 'packing'}) #{Recipe::summarise(recipe)}: #{before} -> #{after}"
164
193
  items
165
194
  end
166
195
 
@@ -1,5 +1,5 @@
1
1
  module Seshbot
2
2
  module Packing
3
- VERSION = '0.9.2'
3
+ VERSION = '0.9.3'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: seshbot-packing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shaun
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-04-08 00:00:00.000000000 Z
11
+ date: 2021-04-12 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: