mercado-libre 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/mercado_libre/api.rb +42 -32
- data/lib/mercado_libre/version.rb +1 -1
- data/mercado-libre.gemspec +1 -1
- data/test/mercadolibre.rb +15 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7398d4a98adc3c4d26b5e2d16e1599e5314147e
|
4
|
+
data.tar.gz: b4f3da7ab182d0112d98990a98b6672d2854cb18
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5632db2a3b336c971b876e59b3f7a043d684e0976f5e08e286ef09d3fb8831959353e34649797fca667b5745fb09296ccaea4c93369beb6528c1d6e9b32b8227
|
7
|
+
data.tar.gz: 3975e6d9097e6ca7e374cb789760041358022bc0311445cc10a76d40ab414687249cde1ed4a876fbda107580cde73a5c5f599753f04fa62cc21277e99f34027e
|
data/lib/mercado_libre/api.rb
CHANGED
@@ -5,9 +5,10 @@ module MercadoLibre
|
|
5
5
|
attr_accessor :access_token
|
6
6
|
|
7
7
|
def initialize(params)
|
8
|
-
@app_key
|
9
|
-
@app_secret
|
10
|
-
@host
|
8
|
+
@app_key = params.fetch(:app_key)
|
9
|
+
@app_secret = params.fetch(:app_secret)
|
10
|
+
@host = params.fetch(:host) { ENV.fetch('MERCADOLIBRE_API_HOST') }
|
11
|
+
@retries_num = Integer( params.fetch(:retries) { ENV.fetch('MERCADOLIBRE_HTTP_RETRIES') { 10 } } )
|
11
12
|
end
|
12
13
|
|
13
14
|
def publish_item(item)
|
@@ -24,11 +25,26 @@ module MercadoLibre
|
|
24
25
|
Item.new(response)
|
25
26
|
end
|
26
27
|
|
28
|
+
def pause_item(item_id)
|
29
|
+
url = "/items/#{item_id}"
|
30
|
+
authenticated_request(:put, url, {status: :paused}.to_json)
|
31
|
+
end
|
32
|
+
|
33
|
+
def unpause_item(item_id)
|
34
|
+
url = "/items/#{item_id}"
|
35
|
+
authenticated_request(:put, url, {status: :active}.to_json)
|
36
|
+
end
|
37
|
+
|
27
38
|
def close_item(item_id)
|
28
39
|
url = "/items/#{item_id}"
|
29
40
|
authenticated_request(:put, url, {status: :closed}.to_json)
|
30
41
|
end
|
31
|
-
|
42
|
+
|
43
|
+
def delete_item(item_id)
|
44
|
+
url = "/items/#{item_id}"
|
45
|
+
authenticated_request(:put, url, {deleted: true}.to_json)
|
46
|
+
end
|
47
|
+
|
32
48
|
def relist_item(item_id, params)
|
33
49
|
url = "/items/#{item_id}/relist"
|
34
50
|
payload = {
|
@@ -49,31 +65,25 @@ module MercadoLibre
|
|
49
65
|
end
|
50
66
|
|
51
67
|
def authenticated_request(verb, url, data = {})
|
52
|
-
|
53
|
-
begin
|
54
|
-
request(verb, new_url, data)
|
55
|
-
rescue Requests::Error
|
56
|
-
@retries ||=0
|
57
|
-
@retries +=1
|
58
|
-
if $!.message.strip == 'Forbidden'
|
59
|
-
@access_token = nil
|
60
|
-
authenticated_request(verb, url, data) if @retries < 10
|
61
|
-
else
|
62
|
-
raise $!
|
63
|
-
end
|
64
|
-
end
|
68
|
+
request(verb, url, data, authenticated: true)
|
65
69
|
end
|
66
70
|
|
67
|
-
def request(verb, url, data)
|
68
|
-
|
71
|
+
def request(verb, url, data, authenticated: false)
|
72
|
+
full_url = "#{@host}#{url}"
|
73
|
+
full_url = url_with_token(full_url) if authenticated
|
69
74
|
verb = verb.to_s.upcase
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
new_message = [e.message.strip,e.response.body].join("\n")
|
74
|
-
raise $!, new_message, $!.backtrace
|
75
|
-
end
|
75
|
+
tries ||= @retries_num
|
76
|
+
response = Requests.request(verb, full_url, data: data)
|
77
|
+
|
76
78
|
JSON.parse(response.body)
|
79
|
+
|
80
|
+
rescue *HTTPErrors
|
81
|
+
retry unless (tries -=1).zero?
|
82
|
+
raise
|
83
|
+
rescue Requests::Error
|
84
|
+
@access_token = nil if $!.message.strip == 'Forbidden' # Release access token
|
85
|
+
retry unless (tries -=1).zero?
|
86
|
+
raise $!, [$!.message.strip,$!.response.body].join("\n"), $!.backtrace #Verbose errors
|
77
87
|
end
|
78
88
|
|
79
89
|
def access_token
|
@@ -92,13 +102,13 @@ module MercadoLibre
|
|
92
102
|
end
|
93
103
|
|
94
104
|
def url_with_token(url)
|
95
|
-
|
96
|
-
uri = URI(url)
|
97
|
-
params = URI.decode_www_form(uri.query || '')
|
98
|
-
params << ['access_token', access_token]
|
99
|
-
uri.query = URI.encode_www_form(params).to_s
|
100
|
-
|
101
|
-
uri.to_s
|
105
|
+
"#{url}#{url.include?('?') ? '&' : '?'}access_token=#{access_token}"
|
102
106
|
end
|
103
107
|
end
|
108
|
+
end
|
109
|
+
|
110
|
+
module MercadoLibre
|
111
|
+
HTTPErrors = [Timeout::Error, Errno::ETIMEDOUT, Errno::EINVAL, Errno::ECONNRESET,
|
112
|
+
Errno::ECONNREFUSED, EOFError, Net::HTTPBadResponse,
|
113
|
+
Net::HTTPHeaderSyntaxError, Net::ProtocolError]
|
104
114
|
end
|
data/mercado-libre.gemspec
CHANGED
data/test/mercadolibre.rb
CHANGED
@@ -68,6 +68,21 @@ test "publish item returns item with permalink" do
|
|
68
68
|
assert(published_item.permalink =~ /http/)
|
69
69
|
end
|
70
70
|
|
71
|
+
test "pauses item and status is paused" do
|
72
|
+
published_item = api.publish_item(item)
|
73
|
+
sleep(10) if ENV['TESTING_AGAINST_ML_SERVER']
|
74
|
+
api.pause_item(published_item.id)
|
75
|
+
assert_equal(api.get_item(published_item.id).status, 'paused')
|
76
|
+
end
|
77
|
+
|
78
|
+
test "unpauses item and status is active" do
|
79
|
+
published_item = api.publish_item(item)
|
80
|
+
sleep(10) if ENV['TESTING_AGAINST_ML_SERVER']
|
81
|
+
api.pause_item(published_item.id)
|
82
|
+
api.unpause_item(published_item.id)
|
83
|
+
assert_equal(api.get_item(published_item.id).status, 'active')
|
84
|
+
end
|
85
|
+
|
71
86
|
test "closes item and status is closed" do
|
72
87
|
published_item = api.publish_item(item)
|
73
88
|
sleep(10) if ENV['TESTING_AGAINST_ML_SERVER']
|