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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a5ef7b2444e036627b80fd4eec2e5378efac4ae0
4
- data.tar.gz: 5c9632e9bdd341222ef09539cc12677dbac65249
3
+ metadata.gz: c7398d4a98adc3c4d26b5e2d16e1599e5314147e
4
+ data.tar.gz: b4f3da7ab182d0112d98990a98b6672d2854cb18
5
5
  SHA512:
6
- metadata.gz: 3a9283f80c30e5274d430888bf67bcd30e7895ef055f74be8939374a259fd635e10e1bc3d742441a64ea0555fa3f9ae5eb6cc442844026dc2e27db3c8939c140
7
- data.tar.gz: a9f97d6989e321607d4f48fd23db70e79535d009d435b1a85160152ced0567b51dd74cc2c032f71a64ddff51324e934c4f8001e7107d732945fbb6ee54a437f7
6
+ metadata.gz: 5632db2a3b336c971b876e59b3f7a043d684e0976f5e08e286ef09d3fb8831959353e34649797fca667b5745fb09296ccaea4c93369beb6528c1d6e9b32b8227
7
+ data.tar.gz: 3975e6d9097e6ca7e374cb789760041358022bc0311445cc10a76d40ab414687249cde1ed4a876fbda107580cde73a5c5f599753f04fa62cc21277e99f34027e
@@ -5,9 +5,10 @@ module MercadoLibre
5
5
  attr_accessor :access_token
6
6
 
7
7
  def initialize(params)
8
- @app_key = params.fetch(:app_key)
9
- @app_secret = params.fetch(:app_secret)
10
- @host = params.fetch(:host) { ENV.fetch('MERCADOLIBRE_API_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
- new_url = url_with_token(url)
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
- url = "#{@host}#{url}"
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
- begin
71
- response = Requests.request(verb, url, data: data)
72
- rescue Requests::Error => e
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
- require 'uri'
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
@@ -1,3 +1,3 @@
1
1
  module MercadoLibre
2
- VERSION = '0.0.4'
2
+ VERSION = '0.0.5'
3
3
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "mercado-libre"
3
- s.version = "0.0.4"
3
+ s.version = "0.0.5"
4
4
  s.summary = "MercadoLibre API"
5
5
  s.description = "mercado-libre"
6
6
  s.authors = ["CarlosIPe"]
@@ -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']
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mercado-libre
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - CarlosIPe