mercado-libre 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- 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']
|