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 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