Sha256: 9d2e595e4996aece7e482a318b9d97720b55f257a1a87bccc90d8e30a910b6eb

Contents?: true

Size: 1.99 KB

Versions: 2

Compression:

Stored size: 1.99 KB

Contents

# frozen_string_literal: true

module Peddler
  # @api private
  # @see https://docs.developer.amazonservices.com/en_US/dev_guide/DG_Endpoints.html
  class Marketplace
    IDS = {
      'CA' => 'A2EUQ1WTGCTBG2',
      'MX' => 'A1AM78C64UM0Y8',
      'US' => 'ATVPDKIKX0DER',
      'BR' => 'A2Q3Y263D00KWC',
      'DE' => 'A1PA6795UKMFR9',
      'ES' => 'A1RKKUPIHCS9HS',
      'FR' => 'A13V1IB3VIYZZH',
      'IT' => 'APJ6JRA9NG5V4',
      'UK' => 'A1F83G8C2ARO7P',
      'IN' => 'A21TJRUUN4KGV',
      'AU' => 'A39IBJ37TRP1C6',
      'JP' => 'A1VC38T7YXB528',
      'CN' => 'AAHKV2X7AFYLW'
    }.freeze

    HOSTS = {
      'CA' => 'mws.amazonservices.com',
      'MX' => 'mws.amazonservices.com',
      'US' => 'mws.amazonservices.com',
      'BR' => 'mws.amazonservices.com',
      'DE' => 'mws-eu.amazonservices.com',
      'ES' => 'mws-eu.amazonservices.com',
      'FR' => 'mws-eu.amazonservices.com',
      'IT' => 'mws-eu.amazonservices.com',
      'UK' => 'mws-eu.amazonservices.com',
      'IN' => 'mws.amazonservices.in',
      'AU' => 'mws.amazonservices.com.au',
      'JP' => 'mws.amazonservices.jp',
      'CN' => 'mws.amazonservices.com.cn'
    }.freeze

    BadId = Class.new(StandardError)

    attr_reader :id

    def initialize(id)
      @id = id || raise(BadId, 'missing MarketplaceId')
    end

    def country_code
      @country_code ||= find_country_code
    end

    def host
      @host ||= find_host
    end

    # Caveat: We use the supersets Windows-31J and CP1252 in place of Shift_JIS
    # and ISO 8859-1 respectively to handle edge cases where latter will not
    # support some characters. The supersets should be safe to use as drop-in
    # replacements.
    def encoding
      case country_code
      when 'JP'
        'Windows-31J'
      when 'CN'
        'UTF-16'
      else
        'CP1252'
      end
    end

    private

    def find_country_code
      IDS.key(id) || raise(BadId, %("#{id}" is not a valid MarketplaceId))
    end

    def find_host
      HOSTS[country_code]
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
peddler-1.6.5 lib/peddler/marketplace.rb
peddler-1.6.4 lib/peddler/marketplace.rb