item_builder 0.1.7 → 0.1.8

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: ebceb3427d68a53fb3facea200a85e32fb477039b62a0b079b10a464a1850522
4
- data.tar.gz: ed3a430d03d4cd89a8c305e57b120dd8ad674e578e3d521785e5e766f76dbedf
3
+ metadata.gz: c64fdf8fcf5b5a10d2d347e642cbc388acb98d5c7f4a9e2ec485a15291b06c43
4
+ data.tar.gz: 6abbe3d99475537e7a9cd347b23db0ad14298bd9608b3d17997e0dfc8fbc4ac3
5
5
  SHA512:
6
- metadata.gz: 0cd24fa0b83b7174c6c6000d53cfee09268637a629a6a2270d5f2342db1f2a8eddaf9e08a8936a3ab02a95d36ca158f5dd02d27d13e1fc0adcbd47e06ea04628
7
- data.tar.gz: 67749d7588053e7e69f2d62c1061eac4047a0459e15c198c7dc331a52703a17fef5a5159b1e36d5b5b886c604e2965e8fda76e6560cf1c9d2d2b2c27d1b9a7cd
6
+ metadata.gz: 913765098ea5e4f64d71010eb0587ee164899683fcc05e0c30129c1d939dfbda73d11a8d53563fd0a4f2ce98bbdd4344b7f1c44ab87e65bfafc96dc963a86223
7
+ data.tar.gz: 1cef844215ba56c6297494bb441109b969322dcae52edb983295c9d9b01d6e7e75b6dfc2f80cf448989412ee555ee4bc097763a101d6408c1fff76c4e180b6cd
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+ require 'item_builder/modes.rb'
5
+ require 'item_builder/modes/price_service'
6
+ require 'item_builder/modes/price/sale_price_policy'
7
+ module ItemBuilder
8
+ module Modes
9
+ module Price
10
+ class Base
11
+ attr_reader :listing
12
+
13
+ def initialize(listing)
14
+ raise 'listing is not set' if listing.nil?
15
+
16
+ @listing = listing
17
+ end
18
+
19
+ def sale_price_policy
20
+ @sale_price_policy ||=
21
+ ItemBuilder::Modes::Price::SalePricePolicy.new(listing: listing)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+ require 'item_builder/modes/price/base'
5
+ module ItemBuilder
6
+ module Modes
7
+ module Price
8
+ class BlibliService < Base
9
+ def perform
10
+ {
11
+ price: listing.price,
12
+ sale_price: sale_price,
13
+ sale_start_at: listing.sale_start_at,
14
+ sale_end_at: listing.sale_end_at
15
+ }
16
+ end
17
+
18
+ private
19
+
20
+ def sale_price
21
+ sale_price_policy.on_sale? ? listing.sale_price : listing.price
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+ require 'item_builder/modes/price/base'
5
+ module ItemBuilder
6
+ module Modes
7
+ module Price
8
+ class BukalapakService < Base
9
+ def perform
10
+ if listing.sale_price.nil?
11
+ bukalapak_price
12
+ else
13
+ deal
14
+ end
15
+ end
16
+
17
+ def bukalapak_price
18
+ {
19
+ price: listing.price,
20
+ sale_price: listing.sale_price,
21
+ sale_start_at: listing.sale_start_at,
22
+ sale_end_at: listing.sale_end_at
23
+ }
24
+ end
25
+
26
+ def deal
27
+ {
28
+ percentage: deal_percentage,
29
+ sale_start_at: sale_start_at,
30
+ sale_end_at: sale_end_at,
31
+ price: listing.price,
32
+ sale_price: listing.sale_price
33
+ }
34
+ end
35
+
36
+ def deal_percentage
37
+ price = listing.price.to_f
38
+ sale_price = listing.sale_price.to_f
39
+ 100 - (sale_price / price * 100)
40
+ end
41
+
42
+ def sale_start_at
43
+ return DateTime.now if listing.sale_start_at.nil?
44
+ return DateTime.now if listing.sale_start_at < DateTime.now
45
+
46
+ listing.sale_start_at
47
+ end
48
+
49
+ def sale_end_at
50
+ month_later = DateTime.now + 1.month
51
+ return month_later if listing.sale_end_at.nil?
52
+ return month_later if listing.sale_end_at > month_later
53
+ return month_later if listing.sale_end_at < DateTime.now
54
+
55
+ listing.sale_end_at
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+ require 'item_builder/modes/price/base'
5
+ module ItemBuilder
6
+ module Modes
7
+ module Price
8
+ class JdService < Base
9
+ def perform
10
+ {
11
+ price: listing.price,
12
+ sale_price: jd_price,
13
+ sale_start_at: listing.sale_start_at,
14
+ sale_end_at: listing.sale_end_at
15
+ }
16
+ end
17
+
18
+ def jd_price
19
+ increment_price =
20
+ if (listing.price % 1000).positive?
21
+ 1000
22
+ else
23
+ 0
24
+ end
25
+ (listing.price.to_i / 1000) * 1000 + increment_price
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+ require 'item_builder/modes.rb'
5
+ require 'item_builder/modes/price_service'
6
+ module ItemBuilder
7
+ module Modes
8
+ module Price
9
+ class SalePricePolicy
10
+ include Modes
11
+ def sale_price
12
+ # has sale price but no sale date defined
13
+ # then push sale price immediately
14
+ # assuming it starts today and no end date specified
15
+ return listing.sale_price if sale_price? && !sale_date?
16
+
17
+ # has sale price and today is on sale then push sale price immediately
18
+ listing.sale_price if sale_price? && on_sale?
19
+ # don't push / don't return anything if 2 rules above unfulfilled
20
+ end
21
+
22
+ def sale_price?
23
+ listing.sale_price
24
+ end
25
+
26
+ def sale_date?
27
+ listing.sale_start_at && listing.sale_end_at
28
+ end
29
+
30
+ def on_sale?
31
+ return false unless sale_price?
32
+
33
+ sale_start_at = listing.sale_start_at || DateTime.now
34
+ sale_end_at = listing.sale_end_at || DateTime.now + 1_000_000.years
35
+ sale_start_at <= DateTime.now && sale_end_at >= DateTime.now
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+ require 'item_builder/modes/price/base'
5
+ module ItemBuilder
6
+ module Modes
7
+ module Price
8
+ class ShopifyService < Base
9
+ def perform
10
+ {
11
+ price: listing.price,
12
+ sale_price: sale_price,
13
+ sale_start_at: listing.sale_start_at,
14
+ sale_end_at: listing.sale_end_at
15
+ }
16
+ end
17
+
18
+ private
19
+
20
+ def sale_price
21
+ sale_price_policy.on_sale? ? listing.sale_price : listing.price
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+ require 'item_builder/modes/price/base'
5
+ module ItemBuilder
6
+ module Modes
7
+ module Price
8
+ class ZaloraService < Base
9
+ def perform
10
+ {
11
+ price: listing.price,
12
+ sale_price: sale_price,
13
+ sale_start_at: listing.sale_start_at,
14
+ sale_end_at: listing.sale_end_at
15
+ }
16
+ end
17
+
18
+ private
19
+
20
+ def sale_price
21
+ sale_price_policy.on_sale? ? listing.sale_price : listing.price
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,22 +1,53 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'item_builder/modes.rb'
4
+ require 'item_builder/modes/price/blibli_service'
5
+ require 'item_builder/modes/price/bukalapak_service'
6
+ require 'item_builder/modes/price/zalora_service'
7
+ require 'item_builder/modes/price/shopify_service'
8
+ require 'item_builder/modes/price/jd_service'
4
9
  module ItemBuilder
5
10
  module Modes
6
11
  class PriceService
7
12
  include Modes
8
13
 
14
+ PRICE_CHANNEL = {}.tap do |hash|
15
+ hash[2] = :Shopify
16
+ hash[9] = :Blibli
17
+ hash[11] = :Bukalapak
18
+ hash[13] = :Zalora
19
+ hash[16] = :Jd
20
+ end.freeze
21
+
9
22
  def perform
10
23
  to_h.merge(base)
11
24
  end
12
25
 
13
26
  def to_h
14
- {
15
- price: listing.price,
16
- sale_price: listing.sale_price,
17
- sale_start_at: listing.sale_start_at,
18
- sale_end_at: listing.sale_end_at
19
- }
27
+ price
28
+ end
29
+
30
+ def price
31
+ if channel_name.empty?
32
+ {
33
+ price: listing.price,
34
+ sale_price: listing.sale_price,
35
+ sale_start_at: listing.sale_start_at,
36
+ sale_end_at: listing.sale_end_at
37
+ }
38
+ else
39
+ price_channel
40
+ end
41
+ end
42
+
43
+ def price_channel
44
+ class_name = "ItemBuilder::Modes::Price::#{channel_name}Service"
45
+ price_channel_service = class_name.constantize
46
+ price_channel_service.new(listing).perform
47
+ end
48
+
49
+ def channel_name
50
+ PRICE_CHANNEL[listing.channel_id].to_s
20
51
  end
21
52
  end
22
53
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ItemBuilder
4
- VERSION = '0.1.7'
4
+ VERSION = '0.1.8'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: item_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - okaaryanata
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-07-08 00:00:00.000000000 Z
11
+ date: 2020-07-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -120,6 +120,13 @@ files:
120
120
  - lib/item_builder/modes.rb
121
121
  - lib/item_builder/modes/active_service.rb
122
122
  - lib/item_builder/modes/base_service.rb
123
+ - lib/item_builder/modes/price/base.rb
124
+ - lib/item_builder/modes/price/blibli_service.rb
125
+ - lib/item_builder/modes/price/bukalapak_service.rb
126
+ - lib/item_builder/modes/price/jd_service.rb
127
+ - lib/item_builder/modes/price/sale_price_policy.rb
128
+ - lib/item_builder/modes/price/shopify_service.rb
129
+ - lib/item_builder/modes/price/zalora_service.rb
123
130
  - lib/item_builder/modes/price_service.rb
124
131
  - lib/item_builder/modes/quantity/base.rb
125
132
  - lib/item_builder/modes/quantity/blibli_service.rb