class MercadolibreApi::Sellers::Products::Queries::MostSold

Public Instance Methods

execute() click to toggle source
# File lib/mercadolibre_api/sellers/products/queries/most_sold.rb, line 12
def execute
  results = search_uris.map do |uri|
    response = Net::HTTP.get_response(uri)
    JSON.parse(response.body, symbolize_names: true)[:results]
  end

  results.flatten.map { |r| MercadolibreApi::Products::Entities::Product.represent(r).as_json }
end

Private Instance Methods

base_uri(offset: 0) click to toggle source
# File lib/mercadolibre_api/sellers/products/queries/most_sold.rb, line 36
def base_uri(offset: 0)
  return URI("#{sites_api_url}/#{site_code}/search?seller_id=#{seller_id}") unless offset.positive?

  URI("#{sites_api_url}/#{site_code}/search?seller_id=#{seller_id}&offset=#{offset}")
end
search_uris() click to toggle source
# File lib/mercadolibre_api/sellers/products/queries/most_sold.rb, line 23
def search_uris
  response = Net::HTTP.get_response(base_uri)
  response_data = JSON.parse(response.body, symbolize_names: true)

  return [] unless response.code == '200'

  total_products = response_data.dig(:paging, :total)
  product_limit = response_data.dig(:paging, :limit)
  total_calls = (total_products / product_limit).to_i

  0.upto(total_calls).map { |offset_ratio| base_uri(offset: (product_limit * offset_ratio)) }
end
sites_api_url() click to toggle source
# File lib/mercadolibre_api/sellers/products/queries/most_sold.rb, line 42
def sites_api_url
  'https://api.mercadolibre.com/sites'
end