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