class MercadoLibre::API

Attributes

access_token[RW]

Public Class Methods

new(params) click to toggle source
# File lib/mercado_libre/api.rb, line 7
def initialize(params)
  @app_key      = params.fetch(:app_key)
  @app_secret   = params.fetch(:app_secret)
  @host         = params.fetch(:host) { ENV.fetch('MERCADOLIBRE_API_HOST') }
  @retries_num  = Integer( params.fetch(:retries) { ENV.fetch('MERCADOLIBRE_HTTP_RETRIES') { 10 } } )
end

Public Instance Methods

authenticated_request(verb, url, data = {}) click to toggle source
# File lib/mercado_libre/api.rb, line 67
def authenticated_request(verb, url, data = {})
  request(verb, url, data, authenticated: true)
end
close_item(item_id) click to toggle source
# File lib/mercado_libre/api.rb, line 38
def close_item(item_id)
  url = "/items/#{item_id}"
  authenticated_request(:put, url, {status: :closed}.to_json)
end
delete_item(item_id) click to toggle source
# File lib/mercado_libre/api.rb, line 43
def delete_item(item_id)
  url = "/items/#{item_id}"
  authenticated_request(:put, url, {deleted: true}.to_json)
end
get_item(item_id) click to toggle source
# File lib/mercado_libre/api.rb, line 60
def get_item(item_id)
  url = "/items/#{item_id}"
  response = authenticated_request(:get, url)

  Item.new(response)
end
pause_item(item_id) click to toggle source
# File lib/mercado_libre/api.rb, line 28
def pause_item(item_id)
  url = "/items/#{item_id}"
  authenticated_request(:put, url, {status: :paused}.to_json)
end
publish_item(item) click to toggle source
# File lib/mercado_libre/api.rb, line 14
def publish_item(item)
  url = "/items"
  response = authenticated_request(:post, url, item.publishable_hash.to_json)
  
  Item.new(response)
end
relist_item(item_id, params) click to toggle source
# File lib/mercado_libre/api.rb, line 48
def relist_item(item_id, params)
  url = "/items/#{item_id}/relist"
  payload = {
    price: params.fetch(:price),
    quantity: params.fetch(:quantity),
    listing_type_id: params.fetch(:listing_type_id)
  }
  response = authenticated_request(:post, url, payload.to_json)

  Item.new response
end
request(verb, url, data, authenticated: false) click to toggle source
# File lib/mercado_libre/api.rb, line 71
def request(verb, url, data, authenticated: false)
  full_url = "#{@host}#{url}"
  full_url = url_with_token(full_url) if authenticated
  verb = verb.to_s.upcase
  tries ||= @retries_num
  response = Requests.request(verb, full_url, data: data)

  JSON.parse(response.body)

rescue *HTTPErrors
  retry unless (tries -=1).zero?
  raise
rescue Requests::Error
  @access_token = nil if $!.message.strip == 'Forbidden' # Release access token
  retry unless (tries -=1).zero?
  raise $!, [$!.message.strip,$!.response.body].join("\n"), $!.backtrace #Verbose errors
end
request_access_token() click to toggle source
# File lib/mercado_libre/api.rb, line 93
def request_access_token
  url = "/oauth/token"
  data = {
    client_id:      @app_key,
    client_secret:  @app_secret,
    grant_type:     'client_credentials'
  }

  request(:post, url, data).fetch('access_token')
end
unpause_item(item_id) click to toggle source
# File lib/mercado_libre/api.rb, line 33
def unpause_item(item_id)
  url = "/items/#{item_id}"
  authenticated_request(:put, url, {status: :active}.to_json)
end
update_item(item_id, params) click to toggle source
# File lib/mercado_libre/api.rb, line 21
def update_item(item_id, params)
  url = "/items/#{item_id}"
  response = authenticated_request(:put, url, params.to_json)

  Item.new(response)
end
url_with_token(url) click to toggle source
# File lib/mercado_libre/api.rb, line 104
def url_with_token(url)
  "#{url}#{url.include?('?') ? '&' : '?'}access_token=#{access_token}"
end