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
         |