tiny_builder 0.0.1 → 0.0.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: e052508ea63349c2f46abe6399a5c8bc1300601f832f03dc1494b515935e5449
4
- data.tar.gz: 1e2393239ba81d30bd1051db3da032579f4aec616b6fa4df50020f368ddafbed
3
+ metadata.gz: 04cc1bf5a220c6c03096ccaa6f6bf06be337f77966484778fcb21f408f6eb7a2
4
+ data.tar.gz: 45eecc8cb9a7215fec04a83d62e2d77a0e18f28c567c3d9bc8c109a1b24cfe45
5
5
  SHA512:
6
- metadata.gz: 5894b6bc636d5e63db1233e5035bd10154ca97ec5b9b933a480c7e50a8d77b7a1fd9a5c2a6c53d809aca3f0ffdfb6608c97b3617bf5ec131cd85fee6cd1c4448
7
- data.tar.gz: 83e9a103b7e32e27e0987444df03407fc766cb7aa200abc9c3c1232bc846db48c7fd55e84b265b327aed5bcb6f6fafa3f8e629d5c0b967f920bc39635fcad134
6
+ metadata.gz: b579532ff0cced210fd2e29391e3eb7115cd1c885de8ba2dfa04319721a0c2ef974bdc06934c548775b51d4c07a8c76aba433030d83c86c2f4cce9c98be5a55b
7
+ data.tar.gz: 2213bf14478db6fef448d26b2a8b2a5a766c519e960ccc196425d288227ba0f1b0f5a0aa586661c5f6477c1a3e741427370a806f8f974cb6a0247c27fc879678
@@ -4,7 +4,7 @@ class MongoVariantListing
4
4
  include Mongoid::Document
5
5
  include Mongoid::Attributes::Dynamic
6
6
 
7
- store_in collection: 'listings'
7
+ store_in collection: 'variant_listings'
8
8
 
9
9
  def local_item_id
10
10
  item_listing.local_id
@@ -7,13 +7,13 @@ class TinyBuilder
7
7
  def to_h(listing)
8
8
  {
9
9
  active: listing.active,
10
- active_variant: active_variant
11
- }
10
+ active_variant: active_variant(listing)
11
+ }.merge(quantity_hash(listing))
12
12
  end
13
13
 
14
14
  private
15
15
 
16
- def active_variant
16
+ def active_variant(listing)
17
17
  listing.item_listing.variants.map do |v_id|
18
18
  MongoVariantListing.find(v_id)
19
19
  end.select { |mvl| mvl.active }.size
@@ -1,11 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'tiny_builder/data_loader'
4
+ require 'tiny_builder/quantity_helper'
5
+ require 'tiny_builder/quantity_counter'
4
6
 
5
7
  class TinyBuilder
6
8
  class BaseBuilder
7
- DataLoader
8
-
9
+ include DataLoader
10
+ include QuantityHelper
11
+
9
12
  attr_reader :listings
10
13
  attr_reader :mwh
11
14
 
@@ -36,7 +36,7 @@ class TinyBuilder
36
36
  end
37
37
 
38
38
  def mapped_wh_mappings
39
- @mapped_wh_mappings ||= warehouse_mappings.select(:warehouse_id, :channel_warehouse_id).to_h
39
+ @mapped_wh_mappings ||= warehouse_mappings.pluck(:warehouse_id, :channel_warehouse_id).to_h
40
40
  end
41
41
 
42
42
  def associated_listings
@@ -53,7 +53,7 @@ class TinyBuilder
53
53
 
54
54
  def stock_allocations
55
55
  @stock_allocations ||= VariantListingStockAllocation.where(
56
- variant_association_id: listing_ids
56
+ variant_association_id: listings.map(&:icava_id)
57
57
  ).where('end_at >= NOW()')
58
58
  end
59
59
 
@@ -90,7 +90,7 @@ class TinyBuilder
90
90
  end
91
91
 
92
92
  def associated_stock_allocs(listing)
93
- ids = associated_listings.select{ |l| l.master_variant_id == listing.maaster_variant_id }.map(&:icava_id)
93
+ ids = associated_listings.select{ |l| l.master_variant_id == listing.master_variant_id }.map(&:icava_id)
94
94
  associated_stock_allocations.map do |asa|
95
95
  if ids.include?(asa)
96
96
  asa
@@ -2,22 +2,19 @@
2
2
 
3
3
  class TinyBuilder
4
4
  module ModeExecutor
5
- def build_quantity
6
- TinyBuilder::QuantityBuilder.new(
5
+ def perform_builder
6
+ builder_classes[mode].new(
7
7
  listings: listings,
8
8
  mwh: mwh
9
9
  ).perform
10
10
  end
11
11
 
12
- def build_price
13
- []
14
- end
15
-
16
- def build_active
17
- []
18
- end
19
-
20
- def quantity_params(listing)
12
+ def builder_classes
13
+ {
14
+ quantity: TinyBuilder::QuantityBuilder,
15
+ price: TinyBuilder::PriceBuilder,
16
+ active: TinyBuilder::ActiveBuilder
17
+ }
21
18
  end
22
19
 
23
20
  def listings
@@ -5,12 +5,46 @@ require 'tiny_builder/base_builder'
5
5
  class TinyBuilder
6
6
  class PriceBuilder < BaseBuilder
7
7
  def to_h(listing)
8
+ if mwh
9
+ { warehouse: warehouse_prices(listing) }
10
+ else
11
+ price_hash(listing)
12
+ end
13
+ end
14
+
15
+ def price_hash(listing)
8
16
  {
9
17
  price: listing.price,
10
- sale_price: listing.sale_price,
11
- sale_start_at: listing.sale_start_at,
12
- sale_end_at: listing.sale_end_at
18
+ sale_price: sale_price(listing),
19
+ sale_start_at: sale_start_at(listing),
20
+ sale_end_at: sale_end_at(listing)
13
21
  }
14
22
  end
23
+
24
+ def warehouse_prices(listing)
25
+ [
26
+ {
27
+ warehouse_id: 'no-wh-for-price'
28
+ }.merge(price_hash(listing))
29
+ ]
30
+ end
31
+
32
+ def sale_price(listing)
33
+ listing.sale_price
34
+ rescue
35
+ nil
36
+ end
37
+
38
+ def sale_start_at(listing)
39
+ listing.sale_start_at
40
+ rescue
41
+ nil
42
+ end
43
+
44
+ def sale_end_at(listing)
45
+ listing.sale_end_at
46
+ rescue
47
+ nil
48
+ end
15
49
  end
16
50
  end
@@ -1,52 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'tiny_builder/base_builder'
4
- require 'tiny_builder/quantity_counter'
5
4
 
6
5
  class TinyBuilder
7
6
  class QuantityBuilder < BaseBuilder
8
7
  def to_h(listing)
9
- if mwh
10
- { warehouse: warehouse_quantities(listing) }
11
- else
12
- { quantity: quantity(listing) }
13
- end
14
- end
15
-
16
- def warehouse_quantities(listing)
17
- results = multi_warehouse_spaces(listing).map do |wh_space|
18
- {
19
- id: wh_space&.warehouse_id,
20
- quantity: quantity(listing, wh_space),
21
- warehouse_id: mapped_wh_mappings[wh_space.warehouse_id]
22
- }
23
- end
24
- end
25
-
26
- def quantity(listing, wh_space = nil)
27
- QuantityCounter.new(
28
- counter_params(listing, wh_space)
29
- ).perform
30
- end
31
-
32
- def counter_params(listing, wh_space = nil)
33
- params = mapped_data[listing.icava_id].slice(:variant, :stock_alloc, :associated_stock_allocs)
34
- wh_space ||= single_warehouse_space(mapped_data[listing.icava_id][:warehouse_spaces])
35
- params.merge(warehouse_space: wh_space)
36
- end
37
-
38
- def single_warehouse_space
39
- if warehouse_id
40
- warehuse_spaces.find{ |wh_space| wh_space.warehouse_id == wh_id }
41
- else
42
- warehuse_spaces.last
43
- end
44
- end
45
-
46
- def multi_warehouse_spaces(listing)
47
- mapped_data[listing.icava_id][:warehouse_spaces].select do |wh_space|
48
- warehouse_mappings.map(&:warehouse_id).include?(wh_space.warehouse_id)
49
- end
8
+ quantity_hash(listing)
50
9
  end
51
10
  end
52
11
  end
@@ -50,12 +50,12 @@ class TinyBuilder
50
50
  end
51
51
 
52
52
  def qty_bundle
53
- if bundle_product
53
+ if bundle_variants.present?
54
54
  qty_list = []
55
55
  bundle_variants.each do |bv|
56
56
  wh_space = WarehouseSpace.find_by(
57
57
  item_variant_id: bv[:master_variant_id],
58
- warehouse_id: wh_space.warehouse_id
58
+ warehouse_id: warehouse_space&.warehouse_id
59
59
  )
60
60
  qty = wh_space.quantity if wh_space.present?
61
61
  qty ||= 0
@@ -69,6 +69,10 @@ class TinyBuilder
69
69
  end
70
70
 
71
71
  def bundle_variants
72
+ @bundle_variants ||= search_bundle_variants
73
+ end
74
+
75
+ def search_bundle_variants
72
76
  bundle = MasterProduct.where("bundle_variants.master_variant_id": variant.id).last
73
77
  bundle.bundle_variants.select { |bv| !bv[:main] }
74
78
  end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TinyBuilder
4
+ module QuantityHelper
5
+ def quantity_hash(listing)
6
+ if mwh
7
+ { warehouse: warehouse_quantities(listing) }
8
+ else
9
+ { quantity: quantity(listing) }
10
+ end
11
+ end
12
+
13
+ def warehouse_quantities(listing)
14
+ multi_warehouse_spaces(listing).map do |wh_space|
15
+ {
16
+ id: wh_space&.warehouse_id,
17
+ quantity: quantity(listing, wh_space),
18
+ warehouse_id: mapped_wh_mappings[wh_space.warehouse_id]
19
+ }
20
+ end
21
+ end
22
+
23
+ def quantity(listing, wh_space = nil)
24
+ QuantityCounter.new(
25
+ counter_params(listing, wh_space)
26
+ ).perform
27
+ end
28
+
29
+ def counter_params(listing, wh_space = nil)
30
+ params = mapped_data[listing.icava_id].slice(:variant, :stock_alloc, :associated_stock_allocs)
31
+ wh_space ||= single_warehouse_space(listing)
32
+ params.merge(warehouse_space: wh_space)
33
+ end
34
+
35
+ def single_warehouse_space(listing)
36
+ variant_wh_spaces = wh_spaces(listing)
37
+ if warehouse_mapping
38
+ variant_wh_spaces.find{ |wh_space| wh_space.warehouse_id == warehouse_mapping.warehouse_id }
39
+ else
40
+ variant_wh_spaces.last
41
+ end
42
+ end
43
+
44
+ def multi_warehouse_spaces(listing)
45
+ wh_spaces(listing).select do |wh_space|
46
+ warehouse_mappings.map(&:warehouse_id).include?(wh_space.warehouse_id)
47
+ end
48
+ end
49
+
50
+ def bundle_warehouse_spaces(variant)
51
+ bundle = MasterProduct.find_by("bundle_variants.master_variant_id": variant.id)
52
+ variant_id = bundle.bundle_variants.find { |bv| !bv[:main] }[:master_variant_id]
53
+ WarehouseSpace.where(
54
+ item_variant_id: variant_id
55
+ ).where.not(
56
+ warehouse_id: nil
57
+ )
58
+ end
59
+
60
+ def wh_spaces(listing)
61
+ variant = mapped_data[listing.icava_id][:variant]
62
+ wh_spaces = if variant.config == 'default'
63
+ mapped_data[listing.icava_id][:warehouse_spaces]
64
+ else
65
+ bundle_warehouse_spaces(variant)
66
+ end
67
+ end
68
+ end
69
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class TinyBuilder
4
- VERSION = '0.0.1'
4
+ VERSION = '0.0.3'
5
5
  end
data/lib/tiny_builder.rb CHANGED
@@ -1,26 +1,31 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'tiny_builder/version'
4
- require 'tiny_builder/mode_executor'
3
+ require 'mongoid'
4
+ require 'models/master_product'
5
5
  require 'models/mongo_item_listing'
6
6
  require 'models/mongo_variant_listing'
7
+ require 'tiny_builder/version'
8
+ require 'tiny_builder/mode_executor'
9
+ require 'tiny_builder/active_builder'
10
+ require 'tiny_builder/price_builder'
11
+ require 'tiny_builder/quantity_builder'
7
12
 
8
13
  class TinyBuilder
9
14
  include ModeExecutor
10
-
11
- attr_reader :listing_ids, :mode, :multiwarehouse
12
15
 
13
- def self.build(listing_ids, mode, multiwarehouse)
16
+ attr_reader :listing_ids, :mode, :mwh
17
+
18
+ def self.build(listing_ids, mode, mwh)
14
19
  new(listing_ids, mode, mwh).perform
15
20
  end
16
21
 
17
22
  def initialize(listing_ids, mode, mwh)
18
23
  @listing_ids = listing_ids
19
24
  @mode = mode
20
- @multiwarehouse = multiwarehouse
25
+ @mwh = mwh
21
26
  end
22
27
 
23
28
  def perform
24
- send("build_#{mode}")
29
+ perform_builder
25
30
  end
26
31
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tiny_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - hayakaza
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-09-25 00:00:00.000000000 Z
11
+ date: 2023-10-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -141,6 +141,7 @@ files:
141
141
  - lib/tiny_builder/price_builder.rb
142
142
  - lib/tiny_builder/quantity_builder.rb
143
143
  - lib/tiny_builder/quantity_counter.rb
144
+ - lib/tiny_builder/quantity_helper.rb
144
145
  - lib/tiny_builder/version.rb
145
146
  homepage:
146
147
  licenses: []