Sha256: 350e8341ff9397ad0b4d62b4f99ba666cc26499be6d6723ceabbda82be8edc0e

Contents?: true

Size: 1.32 KB

Versions: 1

Compression:

Stored size: 1.32 KB

Contents

require 'active_interaction'
require 'net/http'

module MercadolibreApi
  module Sellers
    module Products
      module Queries
        class MostSold < ActiveInteraction::Base
          integer :seller_id
          string :site_code

          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!
          end

          private

          def search_uris
            response = Net::HTTP.get_response(base_uri)
            response_data = JSON.parse(response.body, symbolize_names: true)

            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

          def base_uri(offset: 0)
            if offset.positive?
              URI("https://api.mercadolibre.com/sites/#{site_code}/search?seller_id=#{seller_id}&offset=#{offset}")
            else
              URI("https://api.mercadolibre.com/sites/#{site_code}/search?seller_id=#{seller_id}")
            end
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mercadolibre_api-0.1 lib/mercadolibre_api/sellers/products/queries/most_sold.rb