mercadolibre 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4bda882833f219b09860591510737da06e9efc35
4
+ data.tar.gz: 88f475983b507c41f431e2d8d347a89d245e632a
5
+ SHA512:
6
+ metadata.gz: cb07e39e79ff3269dbe9f076d7576f68a68d119055e277dc540c82295ebffc9f30a1eb3fad7b29c49c2380866502b276cf8046e54c80b4aa11d6a76960a44aff
7
+ data.tar.gz: 8d9f250629040276e30574ff5667bb04f3b8d7ba6fce8e86abbed3f7430d7a11b97b99cef6f1ca8de2ca5918a520aed4f71c217cca707239b88c233f65218d14
data/CHANGELOG.md ADDED
@@ -0,0 +1,3 @@
1
+ ## v0.0.1
2
+
3
+ * Initial release
data/LICENSE.md ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 unformatt
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # Mercadolibre
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'mercadolibre'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install mercadolibre
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it ( http://github.com/<my-github-username>/mercadolibre/fork )
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
@@ -0,0 +1,26 @@
1
+ require "mercadolibre/version"
2
+
3
+ # entities
4
+ require "mercadolibre/entity/answer"
5
+ require "mercadolibre/entity/auth"
6
+ require "mercadolibre/entity/feedback"
7
+ require "mercadolibre/entity/item"
8
+ require "mercadolibre/entity/item_picture"
9
+ require "mercadolibre/entity/order"
10
+ require "mercadolibre/entity/order_item"
11
+ require "mercadolibre/entity/payment"
12
+ require "mercadolibre/entity/phone"
13
+ require "mercadolibre/entity/question"
14
+ require "mercadolibre/entity/user"
15
+ # core
16
+ require "mercadolibre/core/auth"
17
+ require "mercadolibre/core/items"
18
+ require "mercadolibre/core/orders"
19
+ require "mercadolibre/core/questions"
20
+ require "mercadolibre/core/users"
21
+ require "mercadolibre/api"
22
+
23
+ # dependencies
24
+ require 'rest-client'
25
+ require 'singleton'
26
+ require 'time'
@@ -0,0 +1,79 @@
1
+ module Mercadolibre
2
+ class Api
3
+ attr_accessor :access_token
4
+
5
+ def initialize(args={})
6
+ @app_key = args[:app_key]
7
+ @app_secret = args[:app_secret]
8
+ @callback_url = args[:callback_url]
9
+ @site = args[:site]
10
+ @access_token = args[:access_token]
11
+ @endpoint_url = 'https://api.mercadolibre.com'
12
+ @auth_url = 'https://auth.mercadolibre.com.ar'
13
+ end
14
+
15
+ include Mercadolibre::Core::Auth
16
+ include Mercadolibre::Core::Users
17
+ include Mercadolibre::Core::Items
18
+ include Mercadolibre::Core::Questions
19
+ include Mercadolibre::Core::Orders
20
+
21
+ private
22
+
23
+ def get_request(action, params={}, headers={})
24
+ begin
25
+ parse_response(RestClient.get("#{@endpoint_url}#{action}", {params: params}.merge(headers)))
26
+ rescue => e
27
+ parse_response(e.response)
28
+ end
29
+ end
30
+
31
+ def post_request(action, params={}, headers={})
32
+ begin
33
+ parse_response(RestClient.post("#{@endpoint_url}#{action}", params, headers))
34
+ rescue => e
35
+ parse_response(e.response)
36
+ end
37
+ end
38
+
39
+ def put_request(action, params={}, headers={})
40
+ begin
41
+ parse_response(RestClient.put("#{@endpoint_url}#{action}", params, headers))
42
+ rescue => e
43
+ parse_response(e.response)
44
+ end
45
+ end
46
+
47
+ def patch_request(action, params={}, headers={})
48
+ begin
49
+ parse_response(RestClient.patch("#{@endpoint_url}#{action}", params, headers))
50
+ rescue => e
51
+ parse_response(e.response)
52
+ end
53
+ end
54
+
55
+ def head_request(action, params={})
56
+ begin
57
+ parse_response(RestClient.head("#{@endpoint_url}#{action}", params))
58
+ rescue => e
59
+ parse_response(e.response)
60
+ end
61
+ end
62
+
63
+ def delete_request(action, params={})
64
+ begin
65
+ parse_response(RestClient.delete("#{@endpoint_url}#{action}", params))
66
+ rescue => e
67
+ parse_response(e.response)
68
+ end
69
+ end
70
+
71
+ def parse_response(response)
72
+ {
73
+ headers: response.headers,
74
+ body: (JSON.parse(response.body) rescue response.body),
75
+ status_code: response.code
76
+ }
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,50 @@
1
+ module Mercadolibre
2
+ module Core
3
+ module Auth
4
+ def authenticate_url
5
+ get_attrs = {
6
+ response_type: 'code',
7
+ client_id: @app_key,
8
+ redirect_uri: CGI.escape(@callback_url)
9
+ }.map { |k,v| "#{k}=#{v}" }.join('&')
10
+
11
+ "#{@auth_url}/authorization?#{get_attrs}"
12
+ end
13
+
14
+ def authenticate(auth_code)
15
+ response = post_request('/oauth/token', {
16
+ grant_type: 'authorization_code',
17
+ client_id: @app_key,
18
+ client_secret: @app_secret,
19
+ code: auth_code,
20
+ redirect_uri: @callback_url
21
+ })[:body]
22
+
23
+ @access_token = response['access_token']
24
+
25
+ Mercadolibre::Entity::Auth.new({
26
+ access_token: @access_token,
27
+ refresh_token: response['refresh_token'],
28
+ expired_at: response['expires_in'].to_i.seconds.from_now
29
+ })
30
+ end
31
+
32
+ def update_token(refresh_token)
33
+ response = post_request('/oauth/token', {
34
+ grant_type: 'refresh_token',
35
+ client_id: @app_key,
36
+ client_secret: @app_secret,
37
+ refresh_token: refresh_token
38
+ })[:body]
39
+
40
+ @access_token = response['access_token']
41
+
42
+ Mercadolibre::Entity::Auth.new({
43
+ access_token: @access_token,
44
+ refresh_token: response['refresh_token'],
45
+ expired_at: response['expires_in'].to_i.seconds.from_now
46
+ })
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,126 @@
1
+ module Mercadolibre
2
+ module Core
3
+ module Items
4
+ def get_all_my_item_ids(filters={})
5
+ user_id = get_my_user.id
6
+
7
+ filters.merge!({ access_token: @access_token, limit: 50, offset: 0 })
8
+
9
+ results = []
10
+ has_results = true
11
+
12
+ pages_remaining = filters[:pages_count] || -1
13
+
14
+ while (has_results && (pages_remaining != 0)) do
15
+ partial_results = get_request("/users/#{user_id}/items/search", filters)[:body]['results']
16
+ results += partial_results
17
+ has_results = partial_results.any?
18
+ filters[:offset] += 50
19
+ pages_remaining -= 1
20
+ end
21
+
22
+ results
23
+ end
24
+
25
+ def get_my_item_ids(filters={})
26
+ user_id = get_my_user.id
27
+
28
+ filters.merge!({ access_token: @access_token, limit: 50, offset: 0 })
29
+
30
+ response = get_request("/users/#{user_id}/items/search", filters)[:body]
31
+
32
+ {
33
+ results: response['results'],
34
+ paging: response['paging']
35
+ }
36
+ end
37
+
38
+ def get_all_item_ids(filters={})
39
+ filters.merge!({ limit: 50, offset: 0 })
40
+
41
+ results = []
42
+ has_results = true
43
+
44
+ pages_remaining = filters[:pages_count] || -1
45
+
46
+ while (has_results && (pages_remaining != 0)) do
47
+ partial_results = get_request("/sites/#{@site}/search", filters)[:body]['results']
48
+ results += partial_results.map { |r| r['id'] }
49
+ has_results = partial_results.any?
50
+ filters[:offset] += 50
51
+ pages_remaining -= 1
52
+ end
53
+
54
+ results
55
+ end
56
+
57
+ def get_item_ids(filters={})
58
+ response = get_request("/sites/#{@site}/search", filters)[:body]
59
+
60
+ {
61
+ results: response['results'].map { |r| r['id'] },
62
+ paging: response['paging']
63
+ }
64
+ end
65
+
66
+ def get_item_visits(item_ids)
67
+ if item_ids.is_a? Array
68
+ get_request("/visits/items?ids=#{item_ids.join(',')}")[:body]
69
+ else
70
+ get_request("/visits/items?ids=#{item_ids}")[:body][item_ids]
71
+ end
72
+
73
+ end
74
+
75
+ def create_item(attribs)
76
+ payload = attribs.to_json
77
+
78
+ headers = { content_type: :json }
79
+
80
+ result = post_request("/items?access_token=#{@access_token}", payload, headers)
81
+
82
+ Mercadolibre::Entity::Item.new(result[:body])
83
+ end
84
+
85
+ def relist_item(item_id, price, quantity, listing_type_id)
86
+ payload = { price: price, quantity: quantity, listing_type_id: listing_type_id }.to_json
87
+
88
+ headers = { content_type: :json, accept: :json }
89
+
90
+ result = post_request("/items/#{item_id}/relist?access_token=#{@access_token}", payload, headers)
91
+
92
+ Mercadolibre::Entity::Item.new(result[:body])
93
+ end
94
+
95
+ def get_item(item_id)
96
+ result = get_request("/items/#{item_id}")
97
+
98
+ Mercadolibre::Entity::Item.new(result[:body])
99
+ end
100
+
101
+ def add_item_description(item_id, text)
102
+ payload = { text: text }.to_json
103
+
104
+ headers = { content_type: :json, accept: :json }
105
+
106
+ post_request("/items/#{item_id}/descriptions?access_token=#{@access_token}", payload, headers)[:body]
107
+ end
108
+
109
+ def update_item_fields(item_id, attribs)
110
+ payload = attribs.to_json
111
+
112
+ headers = { content_type: :json, accept: :json }
113
+
114
+ put_request("/items/#{item_id}?access_token=#{@access_token}", payload, headers)[:body]
115
+ end
116
+
117
+ def update_item_listing_type(item_id, new_listing_kind)
118
+ payload = { id: new_listing_kind }.to_json
119
+
120
+ headers = { content_type: :json, accept: :json }
121
+
122
+ post_request("/items/#{item_id}/listing_type?access_token=#{@access_token}", payload, headers)[:body]
123
+ end
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,126 @@
1
+ module Mercadolibre
2
+ module Core
3
+ module Orders
4
+ def get_all_orders(filters={})
5
+ filters.merge!({
6
+ seller: get_my_user.id,
7
+ access_token: @access_token,
8
+ limit: 50
9
+ })
10
+
11
+ results = []
12
+
13
+ kind = filters.delete(:kind)
14
+
15
+ if kind.to_s == 'recent'
16
+ orders_urls = ['/orders/search/recent']
17
+ elsif kind.to_s == 'archived'
18
+ orders_urls = ['/orders/search/archived']
19
+ else
20
+ orders_urls = ['/orders/search/recent', '/orders/search/archived']
21
+ end
22
+
23
+ orders_urls.each do |orders_url|
24
+ has_results = true
25
+ filters[:offset] = 0
26
+ pages_remaining = filters[:pages_count] || -1
27
+
28
+ while (has_results && (pages_remaining != 0)) do
29
+ partial_results = get_request(orders_url, filters)[:body]['results']
30
+
31
+ results += partial_results.map { |r| Mercadolibre::Entity::Order.new(r) }
32
+
33
+ has_results = partial_results.any?
34
+ filters[:offset] += 50
35
+ pages_remaining -= 1
36
+ end
37
+ end
38
+
39
+ results
40
+ end
41
+
42
+ def get_orders(kind, filters={})
43
+ filters.merge!({
44
+ seller: get_my_user.id,
45
+ access_token: @access_token
46
+ })
47
+
48
+ if kind.to_s == 'archived'
49
+ url = '/orders/search/archived'
50
+ else
51
+ url = '/orders/search/recent'
52
+ end
53
+
54
+ response = get_request(url, filters)[:body]
55
+
56
+ {
57
+ results: response['results'].map { |r| Mercadolibre::Entity::Order.new(r) },
58
+ paging: response['paging']
59
+ }
60
+ end
61
+
62
+ def get_order(order_id)
63
+ filters = { access_token: @access_token }
64
+ r = get_request("/orders/#{order_id}", filters)
65
+
66
+ Mercadolibre::Entity::Order.new(r[:body])
67
+ end
68
+
69
+ def get_order_feedbacks(order_id)
70
+ filters = { access_token: @access_token }
71
+
72
+ result = get_request("/orders/#{order_id}/feedback", filters)[:body]
73
+
74
+ if result['sale']
75
+ sale_feedback = Mercadolibre::Entity::Feedback.new(result['sale'])
76
+ else
77
+ sale_feedback = nil
78
+ end
79
+
80
+ if result['purchase']
81
+ purchase_feedback = Mercadolibre::Entity::Feedback.new(result['purchase'])
82
+ else
83
+ purchase_feedback = nil
84
+ end
85
+
86
+ { seller: sale_feedback, buyer: purchase_feedback }
87
+ end
88
+
89
+ def give_feedback_to_order(order_id, feedback_data)
90
+ payload = feedback_data.to_json
91
+
92
+ headers = { content_type: :json }
93
+
94
+ post_request("/orders/#{order_id}/feedback?access_token=#{@access_token}", payload, headers)[:body]
95
+ end
96
+
97
+ def change_feedback_from_order(order_id, kind, feedback_data)
98
+ payload = feedback_data.to_json
99
+
100
+ headers = { content_type: :json }
101
+
102
+ if kind.to_s == 'buyer'
103
+ put_request("/orders/#{order_id}/feedback/purchase?access_token=#{@access_token}", payload, headers)[:body]
104
+ elsif kind.to_s == 'seller'
105
+ put_request("/orders/#{order_id}/feedback/sale?access_token=#{@access_token}", payload, headers)[:body]
106
+ else
107
+ raise 'invalid kind'
108
+ end
109
+ end
110
+
111
+ def reply_feedback(order_id, kind, text)
112
+ payload = { reply: text }.to_json
113
+
114
+ headers = { content_type: :json }
115
+
116
+ if kind.to_s == 'buyer'
117
+ post_request("/orders/#{order_id}/feedback/purchase?access_token=#{@access_token}", payload, headers)[:body]
118
+ elsif kind.to_s == 'seller'
119
+ post_request("/orders/#{order_id}/feedback/sale?access_token=#{@access_token}", payload, headers)[:body]
120
+ else
121
+ raise 'invalid kind'
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,103 @@
1
+ module Mercadolibre
2
+ module Core
3
+ module Questions
4
+ def get_all_questions(filters={})
5
+ filters.merge!({ access_token: @access_token, limit: 50, offset: 0 })
6
+
7
+ if filters[:seller_id]
8
+ action = '/questions/search'
9
+ else
10
+ action = '/my/received_questions/search'
11
+ end
12
+
13
+ results = []
14
+ has_results = true
15
+ pages_remaining = filters[:pages_count] || -1
16
+
17
+ while (has_results && (pages_remaining != 0)) do
18
+ partial_results = get_request(action, filters)['questions'][:body]
19
+
20
+ results += partial_results.map { |q| Mercadolibre::Entity::Question.new(q) }
21
+
22
+ has_results = partial_results.any?
23
+ filters[:offset] += 50
24
+ pages_remaining -= 1
25
+ end
26
+
27
+ results
28
+ end
29
+
30
+ def get_questions(filters={})
31
+ filters.merge!({ access_token: @access_token })
32
+
33
+ if filters[:seller_id]
34
+ url = '/questions/search'
35
+ else
36
+ url = '/my/received_questions/search'
37
+ end
38
+
39
+ response = get_request(url, filters)[:body]
40
+
41
+ {
42
+ results: response['questions'].map { |r| Mercadolibre::Entity::Question.new(r) },
43
+ paging: { total: response['total'], limit: response['limit'] }
44
+ }
45
+ end
46
+
47
+ def get_question(question_id)
48
+ filters = { access_token: @access_token }
49
+
50
+ result = get_request("/questions/#{question_id}", filters)[:body]
51
+
52
+ Mercadolibre::Entity::Question.new(result)
53
+ end
54
+
55
+ def delete_question(question_id)
56
+ result = delete_request("/questions/#{question_id}?access_token=#{@access_token}")
57
+
58
+ result
59
+ end
60
+
61
+ def ask_question(item_id, text)
62
+ payload = { item_id: item_id, text: text }.to_json
63
+
64
+ headers = { content_type: :json }
65
+
66
+ result = post_request("/questions?access_token=#{@access_token}", payload, headers)
67
+
68
+ ::Mercadolibre::Entity::Question.new(result[:body])
69
+ end
70
+
71
+ def answer_question(question_id, text)
72
+ payload = { question_id: question_id, text: text }.to_json
73
+
74
+ headers = { content_type: :json, accept: :json }
75
+
76
+ result = post_request("/answers?access_token=#{@access_token}", payload, headers)
77
+
78
+ Mercadolibre::Entity::Question.new(result[:body])
79
+ end
80
+
81
+ def get_blacklisted_users_ids(seller_id)
82
+ result = get_request("/users/#{seller_id}/questions_blacklist?access_token=#{@access_token}")
83
+ result[:body].map { |r| r['user']['id'] }
84
+ end
85
+
86
+ def add_user_to_blacklist(seller_id, user_id)
87
+ payload = { user_id: user_id }.to_json
88
+
89
+ headers = { content_type: :json }
90
+
91
+ url = "/users/#{seller_id}/questions_blacklist?access_token=#{@access_token}"
92
+
93
+ post_request(url, payload, headers)[:status_code] == 200
94
+ end
95
+
96
+ def remove_user_from_blacklist(seller_id, user_id)
97
+ url = "/users/#{seller_id}/questions_blacklist/#{user_id}?access_token=#{@access_token}"
98
+
99
+ delete_request(url)[:status_code] == 200
100
+ end
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,23 @@
1
+ module Mercadolibre
2
+ module Core
3
+ module Users
4
+ def get_my_user
5
+ result = get_request('/users/me', { access_token: @access_token })
6
+
7
+ Mercadolibre::Entity::User.new(result[:body])
8
+ end
9
+
10
+ def get_user(user_id)
11
+ result = get_request("/users/#{user_id}")
12
+
13
+ Mercadolibre::Entity::User.new(result[:body])
14
+ end
15
+
16
+ def get_users(user_ids)
17
+ results = get_request('/users', { ids: user_ids.join(',') })
18
+
19
+ results[:body].map { |r| Mercadolibre::Entity::User.new(r) }
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,25 @@
1
+ module Mercadolibre
2
+ module Entity
3
+ class Answer
4
+ def self.attr_list
5
+ [:text, :status, :date_created]
6
+ end
7
+
8
+ attr_reader *attr_list
9
+
10
+ def initialize(attributes={})
11
+ attributes.each do |k, v|
12
+ if k.to_s == 'date_created'
13
+ self.date_created = Time.parse(v)
14
+ else
15
+ self.send("#{k}=", v) if self.respond_to?(k)
16
+ end
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ attr_writer *attr_list
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,21 @@
1
+ module Mercadolibre
2
+ module Entity
3
+ class Auth
4
+ def self.attr_list
5
+ [:access_token, :refresh_token, :expired_at]
6
+ end
7
+
8
+ attr_reader *attr_list
9
+
10
+ def initialize(attributes={})
11
+ attributes.each do |attr, val|
12
+ self.send("#{attr}=", val)
13
+ end
14
+ end
15
+
16
+ private
17
+
18
+ attr_writer *attr_list
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,25 @@
1
+ module Mercadolibre
2
+ module Entity
3
+ class Feedback
4
+ def self.attr_list
5
+ [:rating, :date_created, :fulfilled, :reason, :message, :reply]
6
+ end
7
+
8
+ attr_reader *attr_list
9
+
10
+ def initialize(attributes={})
11
+ attributes.each do |k, v|
12
+ if k.to_s == 'date_created'
13
+ self.date_created = Time.parse(v)
14
+ else
15
+ self.send("#{k}=", v) if self.respond_to?(k)
16
+ end
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ attr_writer *attr_list
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,33 @@
1
+ module Mercadolibre
2
+ module Entity
3
+ class Item
4
+ def self.attr_list
5
+ [:id, :site_id, :title, :subtitle, :seller_id, :category_id, :price,
6
+ :base_price, :currency_id, :initial_quantity, :available_quantity, :sold_quantity,
7
+ :buying_mode, :listing_type_id, :start_time, :stop_time, :condition, :permalink,
8
+ :thumbnail, :secure_thumbnail, :pictures, :status, :sub_status, :parent_item_id,
9
+ :automatic_relist, :date_created, :last_updated]
10
+ end
11
+
12
+ attr_reader *attr_list
13
+
14
+ def initialize(attributes={})
15
+ attributes.each do |k, v|
16
+ if k.to_s == 'pictures'
17
+ self.pictures = v.map { |x| ItemPicture.new(x) }
18
+ elsif ['stop_time', 'last_updated', 'start_time', 'date_created'].include?(k.to_s)
19
+ self.send("#{k}=", Time.parse(v)) unless v.nil?
20
+ else
21
+ self.send("#{k}=", v) if self.respond_to?(k)
22
+ end
23
+ end
24
+
25
+ self.last_updated = date_created if last_updated.nil?
26
+ end
27
+
28
+ private
29
+
30
+ attr_writer *attr_list
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,21 @@
1
+ module Mercadolibre
2
+ module Entity
3
+ class ItemPicture
4
+ def self.attr_list
5
+ [:id, :url, :secure_url, :size, :max_size, :quality]
6
+ end
7
+
8
+ attr_reader *attr_list
9
+
10
+ def initialize(attributes={})
11
+ attributes.each do |k, v|
12
+ self.send("#{k}=", v) if self.respond_to?(k)
13
+ end
14
+ end
15
+
16
+ private
17
+
18
+ attr_writer *attr_list
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,42 @@
1
+ module Mercadolibre
2
+ module Entity
3
+ class Order
4
+ def self.attr_list
5
+ [:id, :status, :date_created, :date_closed, :date_last_updated,
6
+ :hidden_for_seller, :currency_id, :order_items, :total_amount, :buyer, :seller,
7
+ :payments, :seller_feedback, :buyer_feedback, :shipping_status, :tags]
8
+ end
9
+
10
+ attr_reader *attr_list
11
+
12
+ def initialize(attributes={})
13
+ attributes.each do |k, v|
14
+ if k.to_s == 'order_items'
15
+ self.order_items = v.map { |x| OrderItem.new(x) }
16
+ elsif k.to_s == 'payments'
17
+ self.payments = v.map { |x| Payment.new(x) }
18
+ elsif k.to_s == 'feedback'
19
+ unless v.nil?
20
+ self.buyer_feedback = Feedback.new(v['purchase']) unless v['purchase'].nil?
21
+ self.seller_feedback = Feedback.new(v['sale']) unless v['sale'].nil?
22
+ end
23
+ elsif k.to_s == 'shipping'
24
+ self.shipping_status = v['status']
25
+ elsif ['buyer', 'seller'].include?(k.to_s)
26
+ self.send("#{k}=", User.new(v)) unless v.nil?
27
+ elsif ['date_created', 'date_closed', 'date_last_updated'].include?(k.to_s)
28
+ self.send("#{k}=", Time.parse(v)) unless v.nil?
29
+ else
30
+ self.send("#{k}=", v) if self.respond_to?(k)
31
+ end
32
+ end
33
+
34
+ self.date_last_updated = date_created if date_last_updated.nil?
35
+ end
36
+
37
+ private
38
+
39
+ attr_writer *attr_list
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,26 @@
1
+ module Mercadolibre
2
+ module Entity
3
+ class OrderItem
4
+ def self.attr_list
5
+ [:currency_id, :item_id, :item_title, :quantity, :unit_price]
6
+ end
7
+
8
+ attr_reader *attr_list
9
+
10
+ def initialize(attributes={})
11
+ attributes.each do |k, v|
12
+ if k.to_s == 'item'
13
+ self.item_id = v['id']
14
+ self.item_title = v['title']
15
+ else
16
+ self.send("#{k}=", v) if self.respond_to?(k)
17
+ end
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ attr_writer *attr_list
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,27 @@
1
+ module Mercadolibre
2
+ module Entity
3
+ class Payment
4
+ def self.attr_list
5
+ [:id, :status, :transaction_amount, :currency_id, :date_created, :date_last_updated]
6
+ end
7
+
8
+ attr_reader *attr_list
9
+
10
+ def initialize(attributes={})
11
+ attributes.each do |k, v|
12
+ if ['date_last_updated', 'date_created'].include?(k.to_s)
13
+ self.send("#{k}=", Time.parse(v)) unless v.nil?
14
+ else
15
+ self.send("#{k}=", v) if self.respond_to?(k)
16
+ end
17
+ end
18
+
19
+ self.date_last_updated = date_created if date_last_updated.nil?
20
+ end
21
+
22
+ private
23
+
24
+ attr_writer *attr_list
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,21 @@
1
+ module Mercadolibre
2
+ module Entity
3
+ class Phone
4
+ def self.attr_list
5
+ [:area_code, :number, :extension]
6
+ end
7
+
8
+ attr_reader *attr_list
9
+
10
+ def initialize(attributes={})
11
+ attributes.each do |k, v|
12
+ self.send("#{k}=", v) if self.respond_to?(k)
13
+ end
14
+ end
15
+
16
+ private
17
+
18
+ attr_writer *attr_list
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,30 @@
1
+ module Mercadolibre
2
+ module Entity
3
+ class Question
4
+ def self.attr_list
5
+ [:date_created, :item_id, :seller_id, :status, :text,
6
+ :id, :deleted_from_listing, :hold, :answer, :user_id]
7
+ end
8
+
9
+ attr_reader *attr_list
10
+
11
+ def initialize(attributes={})
12
+ attributes.each do |k, v|
13
+ if k.to_s == 'answer'
14
+ self.answer = Answer.new(v) unless v.nil?
15
+ elsif k.to_s == 'from'
16
+ self.user_id = v['id'] unless v.nil?
17
+ elsif k.to_s == 'date_created'
18
+ self.date_created = Time.parse(v)
19
+ else
20
+ self.send("#{k}=", v) if self.respond_to?(k)
21
+ end
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ attr_writer *attr_list
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,28 @@
1
+ module Mercadolibre
2
+ module Entity
3
+ class User
4
+ def self.attr_list
5
+ [:id, :nickname, :registration_date, :first_name, :last_name,
6
+ :country_id, :email, :user_type, :points, :site_id, :permalink, :phone]
7
+ end
8
+
9
+ attr_reader *attr_list
10
+
11
+ def initialize(attributes={})
12
+ attributes.each do |k, v|
13
+ if k.to_s == 'registration_date'
14
+ self.registration_date = Time.parse(v)
15
+ elsif k.to_s == 'phone'
16
+ self.phone = Phone.new(v)
17
+ else
18
+ self.send("#{k}=", v) if self.respond_to?(k)
19
+ end
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ attr_writer *attr_list
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,3 @@
1
+ module Mercadolibre
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mercadolibre
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Matias Hick
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-03-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.5'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rest-client
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 1.6.7
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.6.7
55
+ description: Connect to meli api
56
+ email:
57
+ - unformatt@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - CHANGELOG.md
63
+ - LICENSE.md
64
+ - README.md
65
+ - lib/mercadolibre.rb
66
+ - lib/mercadolibre/api.rb
67
+ - lib/mercadolibre/core/auth.rb
68
+ - lib/mercadolibre/core/items.rb
69
+ - lib/mercadolibre/core/orders.rb
70
+ - lib/mercadolibre/core/questions.rb
71
+ - lib/mercadolibre/core/users.rb
72
+ - lib/mercadolibre/entity/answer.rb
73
+ - lib/mercadolibre/entity/auth.rb
74
+ - lib/mercadolibre/entity/feedback.rb
75
+ - lib/mercadolibre/entity/item.rb
76
+ - lib/mercadolibre/entity/item_picture.rb
77
+ - lib/mercadolibre/entity/order.rb
78
+ - lib/mercadolibre/entity/order_item.rb
79
+ - lib/mercadolibre/entity/payment.rb
80
+ - lib/mercadolibre/entity/phone.rb
81
+ - lib/mercadolibre/entity/question.rb
82
+ - lib/mercadolibre/entity/user.rb
83
+ - lib/mercadolibre/version.rb
84
+ homepage: https://github.com/unformattmh/mercadolibre
85
+ licenses:
86
+ - MIT
87
+ metadata: {}
88
+ post_install_message:
89
+ rdoc_options: []
90
+ require_paths:
91
+ - lib
92
+ required_ruby_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ required_rubygems_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ requirements: []
103
+ rubyforge_project:
104
+ rubygems_version: 2.2.0
105
+ signing_key:
106
+ specification_version: 4
107
+ summary: Connect to meli api
108
+ test_files: []