Class: ItemBuilder::Modes::Quantity::ZilingoService

Inherits:
Base
  • Object
show all
Defined in:
lib/item_builder/modes/quantity/zilingo_service.rb

Instance Attribute Summary

Attributes inherited from Base

#available_quantity, #listing, #reserved_stock

Instance Method Summary collapse

Methods inherited from Base

#initialize

Constructor Details

This class inherits a constructor from ItemBuilder::Modes::Quantity::Base

Instance Method Details

#credentialObject



28
29
30
31
32
33
34
35
# File 'lib/item_builder/modes/quantity/zilingo_service.rb', line 28

def credential
  return @credential if @credential

   = listing.profile_channel_association_id
  host = ENV['CREDENTIAL_URL'] || raise('credential url is not set')
  url = "#{host}/credential?account_id=#{account_id}"
  @credential = rest_client(method: :get, url: url)
end

#data(item_id) ⇒ Object



21
22
23
24
25
26
# File 'lib/item_builder/modes/quantity/zilingo_service.rb', line 21

def data(item_id)
  {
    "credential": JSON.parse(credential)['credential'],
    "data": { "item_id": item_id }
  }.to_json
end

#headersObject



17
18
19
# File 'lib/item_builder/modes/quantity/zilingo_service.rb', line 17

def headers
 { content_type: :json, accept: :json }
end

#local_quantityObject



12
13
14
15
# File 'lib/item_builder/modes/quantity/zilingo_service.rb', line 12

def local_quantity
  quantities = sku_quantities(listing.local_item_id)
  quantities[listing.local_id]
end

#performObject



8
9
10
# File 'lib/item_builder/modes/quantity/zilingo_service.rb', line 8

def perform
  available_quantity - local_quantity.to_i
end

#response_process(resp) ⇒ Object



50
51
52
53
54
55
56
# File 'lib/item_builder/modes/quantity/zilingo_service.rb', line 50

def response_process(resp)
  hash = Hash.new
  resp['zilingoSKUQuantities'].each do |sku|
    hash[sku['zilingoSKUId']] = sku['quantity'] + sku['frozenQuantity']
  end
  hash
end

#rest_client(params, rescued_codes = 200) ⇒ Object



58
59
60
61
62
63
64
65
66
67
# File 'lib/item_builder/modes/quantity/zilingo_service.rb', line 58

def rest_client(params, rescued_codes = 200)
  RestClient::Request.execute(params.merge(timeout: 3)) do |response|
    code = response.code
    unless Array.wrap(rescued_codes).include?(code)
      raise "Response Code is #{code}"
    end

    response
  end
end

#sku_quantities(item_id) ⇒ Object



42
43
44
45
46
47
48
# File 'lib/item_builder/modes/quantity/zilingo_service.rb', line 42

def sku_quantities(item_id)
  args = {
    method: :post, url: url, payload: data(item_id), headers: headers
  }
  resp = JSON.parse(rest_client(args, [200, 500, 406]))
  response_process(resp)
end

#urlObject



37
38
39
40
# File 'lib/item_builder/modes/quantity/zilingo_service.rb', line 37

def url
  url = ENV['API_GATEWAY_URL'] || raise('api gateway is not set')
  url + "/zilingo/item_quantities"
end