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 +4 -4
- data/lib/item_builder/modes/price/base.rb +26 -0
- data/lib/item_builder/modes/price/blibli_service.rb +26 -0
- data/lib/item_builder/modes/price/bukalapak_service.rb +60 -0
- data/lib/item_builder/modes/price/jd_service.rb +30 -0
- data/lib/item_builder/modes/price/sale_price_policy.rb +40 -0
- data/lib/item_builder/modes/price/shopify_service.rb +26 -0
- data/lib/item_builder/modes/price/zalora_service.rb +26 -0
- data/lib/item_builder/modes/price_service.rb +37 -6
- data/lib/item_builder/version.rb +1 -1
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c64fdf8fcf5b5a10d2d347e642cbc388acb98d5c7f4a9e2ec485a15291b06c43
|
4
|
+
data.tar.gz: 6abbe3d99475537e7a9cd347b23db0ad14298bd9608b3d17997e0dfc8fbc4ac3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
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
|
data/lib/item_builder/version.rb
CHANGED
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.
|
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-
|
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
|