walmart_open 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +8 -0
- data/lib/walmart_open/client.rb +7 -0
- data/lib/walmart_open/errors.rb +4 -1
- data/lib/walmart_open/request.rb +1 -1
- data/lib/walmart_open/requests/feed.rb +35 -0
- data/lib/walmart_open/version.rb +1 -1
- data/spec/walmart_open/client_spec.rb +19 -1
- data/spec/walmart_open/request_spec.rb +1 -1
- data/spec/walmart_open/requests/feed_spec.rb +125 -0
- data/spec/walmart_open/requests/lookup_spec.rb +1 -1
- data/spec/walmart_open/requests/place_order_spec.rb +1 -1
- data/spec/walmart_open/requests/search_spec.rb +1 -1
- data/spec/walmart_open/requests/taxonomy_spec.rb +1 -1
- data/spec/walmart_open/requests/token_spec.rb +1 -1
- metadata +48 -39
data/README.md
CHANGED
@@ -104,6 +104,14 @@ taxonomies = client.taxonomy
|
|
104
104
|
# taxonomies.categories = {"id"=>"5438", "name"=>"Apparel", "path"=>"Apparel", "children"=>[{"id"=>"5438_426265",
|
105
105
|
"name"=>"Accessories", "path"=>"Apparel/Accessories", "children"=>[{"id"=>"5438_426265_1043621",
|
106
106
|
"name"=>"Bandanas", "path"=>"Apparel/Accessories/Bandanas"}, ...]]}
|
107
|
+
|
108
|
+
# Search special feeds (by feed type, category id)
|
109
|
+
# Feed type can be :preorder, :bestsellers, :rollback, :clearance, :specialbuy
|
110
|
+
# For :preorder case, you do not need to pass param category_id
|
111
|
+
items = client.feed(:bestsellers, category_id)
|
112
|
+
#=> Array
|
113
|
+
# when success: example of items
|
114
|
+
# items = [{"itemId"=>22257971 ...}, ... ]
|
107
115
|
```
|
108
116
|
|
109
117
|
### Making Commerce API Calls
|
data/lib/walmart_open/client.rb
CHANGED
@@ -5,6 +5,7 @@ require "walmart_open/requests/lookup"
|
|
5
5
|
require "walmart_open/requests/taxonomy"
|
6
6
|
require "walmart_open/requests/token"
|
7
7
|
require "walmart_open/requests/place_order"
|
8
|
+
require "walmart_open/requests/feed"
|
8
9
|
|
9
10
|
module WalmartOpen
|
10
11
|
class Client
|
@@ -31,6 +32,12 @@ module WalmartOpen
|
|
31
32
|
connection.request(Requests::Taxonomy.new)
|
32
33
|
end
|
33
34
|
|
35
|
+
def feed(type, category_id = nil)
|
36
|
+
params = {}
|
37
|
+
params[:category_id] = category_id if category_id
|
38
|
+
connection.request(Requests::Feed.new(type, params))
|
39
|
+
end
|
40
|
+
|
34
41
|
def order(order_info)
|
35
42
|
authenticate!
|
36
43
|
|
data/lib/walmart_open/errors.rb
CHANGED
@@ -2,6 +2,9 @@ module WalmartOpen
|
|
2
2
|
class WalmartOpenError < ::StandardError
|
3
3
|
end
|
4
4
|
|
5
|
+
class ServerError < WalmartOpenError
|
6
|
+
end
|
7
|
+
|
5
8
|
class AuthenticationError < WalmartOpenError
|
6
9
|
end
|
7
10
|
|
@@ -10,4 +13,4 @@ module WalmartOpen
|
|
10
13
|
|
11
14
|
class OrderError < WalmartOpenError
|
12
15
|
end
|
13
|
-
end
|
16
|
+
end
|
data/lib/walmart_open/request.rb
CHANGED
@@ -0,0 +1,35 @@
|
|
1
|
+
require "walmart_open/product_request"
|
2
|
+
|
3
|
+
module WalmartOpen
|
4
|
+
module Requests
|
5
|
+
class Feed < ProductRequest
|
6
|
+
TYPES = [
|
7
|
+
:preorder,
|
8
|
+
:bestsellers,
|
9
|
+
:rollback,
|
10
|
+
:clearance,
|
11
|
+
:specialbuy
|
12
|
+
]
|
13
|
+
CATEGORY_REQUIRED_TYPES = TYPES - [:preorder]
|
14
|
+
|
15
|
+
def initialize(type, params = {})
|
16
|
+
unless TYPES.include?(type)
|
17
|
+
raise ArgumentError, "Invalid feed type #{type}"
|
18
|
+
end
|
19
|
+
|
20
|
+
if !params[:category_id] && CATEGORY_REQUIRED_TYPES.include?(type)
|
21
|
+
raise ArgumentError, "Category id param is required for the #{type} feed"
|
22
|
+
end
|
23
|
+
|
24
|
+
self.path = "feeds/#{type.to_s}"
|
25
|
+
self.params = params
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def parse_response(response)
|
31
|
+
response.parsed_response["items"]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/walmart_open/version.rb
CHANGED
@@ -2,7 +2,11 @@ require "spec_helper"
|
|
2
2
|
require "walmart_open/client"
|
3
3
|
require "walmart_open/config"
|
4
4
|
require "walmart_open/requests/search"
|
5
|
-
require "walmart_open/
|
5
|
+
require "walmart_open/requests/lookup"
|
6
|
+
require "walmart_open/requests/taxonomy"
|
7
|
+
require "walmart_open/requests/token"
|
8
|
+
require "walmart_open/requests/place_order"
|
9
|
+
require "walmart_open/requests/feed"
|
6
10
|
|
7
11
|
describe WalmartOpen::Client do
|
8
12
|
context ".new" do
|
@@ -74,6 +78,20 @@ describe WalmartOpen::Client do
|
|
74
78
|
end
|
75
79
|
end
|
76
80
|
|
81
|
+
context "#feed" do
|
82
|
+
it "delegates the request and returns the response" do
|
83
|
+
client = WalmartOpen::Client.new
|
84
|
+
request = double
|
85
|
+
type = double
|
86
|
+
category_id = double
|
87
|
+
|
88
|
+
expect(WalmartOpen::Requests::Feed).to receive(:new).with(type, { category_id: category_id }).and_return(request)
|
89
|
+
expect(client.connection).to receive(:request).with(request)
|
90
|
+
|
91
|
+
client.feed(type, category_id)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
77
95
|
context "#order" do
|
78
96
|
it "delegates the request and returns the response" do
|
79
97
|
client = WalmartOpen::Client.new
|
@@ -0,0 +1,125 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "walmart_open/requests/feed"
|
3
|
+
require "walmart_open/client"
|
4
|
+
require "walmart_open/errors"
|
5
|
+
|
6
|
+
describe WalmartOpen::Requests::Feed do
|
7
|
+
let(:client) { WalmartOpen::Client.new }
|
8
|
+
let(:success_response) { double(success?: true) }
|
9
|
+
let(:fail_response) { double(success?: false) }
|
10
|
+
let(:feed_attrs) do
|
11
|
+
{
|
12
|
+
"items" => [{
|
13
|
+
"id" => "5438",
|
14
|
+
"name" => "Apparel",
|
15
|
+
"path" => "Apparel",
|
16
|
+
}]
|
17
|
+
}
|
18
|
+
end
|
19
|
+
let(:feed_type) { double(:type) }
|
20
|
+
|
21
|
+
context ".new" do
|
22
|
+
|
23
|
+
context "when feed type is valid" do
|
24
|
+
before do
|
25
|
+
allow(WalmartOpen::Requests::Feed::TYPES).to receive(:include?).with(feed_type).and_return(true)
|
26
|
+
end
|
27
|
+
|
28
|
+
context "when feed type requires category_id" do
|
29
|
+
before do
|
30
|
+
allow(WalmartOpen::Requests::Feed::CATEGORY_REQUIRED_TYPES).to receive(:include?).with(feed_type).and_return(true)
|
31
|
+
end
|
32
|
+
|
33
|
+
context "when category_id is provided" do
|
34
|
+
it "does not raise error" do
|
35
|
+
expect {
|
36
|
+
WalmartOpen::Requests::Feed.new(feed_type, { category_id: 1 })
|
37
|
+
}.not_to raise_error
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context "when category_id is not provided" do
|
42
|
+
it "does not raise error" do
|
43
|
+
expect {
|
44
|
+
WalmartOpen::Requests::Feed.new(feed_type)
|
45
|
+
}.to raise_error(ArgumentError)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context "when feed type does not require category_id" do
|
51
|
+
before do
|
52
|
+
allow(WalmartOpen::Requests::Feed::CATEGORY_REQUIRED_TYPES).to receive(:include?).with(feed_type).and_return(false)
|
53
|
+
end
|
54
|
+
|
55
|
+
context "when category_id is provided" do
|
56
|
+
it "does not raise error" do
|
57
|
+
expect {
|
58
|
+
WalmartOpen::Requests::Feed.new(feed_type, { category_id: 1 })
|
59
|
+
}.not_to raise_error
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context "when category_id is not provided" do
|
64
|
+
it "does not raise error" do
|
65
|
+
expect {
|
66
|
+
WalmartOpen::Requests::Feed.new(feed_type)
|
67
|
+
}.not_to raise_error
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context "when feed type is not valid" do
|
74
|
+
before do
|
75
|
+
allow(WalmartOpen::Requests::Feed::TYPES).to receive(:include?).with(feed_type).and_return(false)
|
76
|
+
end
|
77
|
+
|
78
|
+
it "raises error" do
|
79
|
+
expect {
|
80
|
+
WalmartOpen::Requests::Feed.new(feed_type, { category_id: 1 })
|
81
|
+
}.to raise_error(ArgumentError)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
context "#submit" do
|
87
|
+
let(:feed_request) { WalmartOpen::Requests::Feed.new(feed_type, { category_id: 1 }) }
|
88
|
+
|
89
|
+
before do
|
90
|
+
allow(WalmartOpen::Requests::Feed::TYPES).to receive(:include?).with(feed_type).and_return(true)
|
91
|
+
allow(WalmartOpen::Requests::Feed::CATEGORY_REQUIRED_TYPES).to receive(:include?).with(feed_type).and_return(true)
|
92
|
+
end
|
93
|
+
|
94
|
+
context "when response is success" do
|
95
|
+
before do
|
96
|
+
allow(success_response).to receive(:parsed_response).and_return(feed_attrs)
|
97
|
+
allow(HTTParty).to receive(:get).and_return(success_response)
|
98
|
+
end
|
99
|
+
|
100
|
+
it "succeeds" do
|
101
|
+
results = feed_request.submit(client)
|
102
|
+
|
103
|
+
expect(results).to eq(feed_attrs["items"])
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
context "when response is not success" do
|
108
|
+
before do
|
109
|
+
allow(HTTParty).to receive(:get).and_return(fail_response)
|
110
|
+
allow(fail_response).to receive(:parsed_response).and_return({
|
111
|
+
"errors" => [{
|
112
|
+
"code" => 403,
|
113
|
+
"message" => "Account Inactive"
|
114
|
+
}]
|
115
|
+
})
|
116
|
+
end
|
117
|
+
|
118
|
+
it "raises authentication error" do
|
119
|
+
expect {
|
120
|
+
feed_request.submit(client)
|
121
|
+
}.to raise_error(WalmartOpen::ServerError)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
@@ -143,7 +143,7 @@ describe WalmartOpen::Requests::PlaceOrder do
|
|
143
143
|
it "raises authentication error" do
|
144
144
|
expect {
|
145
145
|
order_req.submit(client)
|
146
|
-
}.to raise_error(WalmartOpen::
|
146
|
+
}.to raise_error(WalmartOpen::ServerError)
|
147
147
|
end
|
148
148
|
end
|
149
149
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: walmart_open
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Ngan Pham
|
@@ -10,135 +10,135 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2014-02-15 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: httparty
|
17
|
-
|
18
|
-
|
17
|
+
type: :runtime
|
18
|
+
requirement: !ruby/object:Gem::Requirement
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: '0.10'
|
23
|
-
requirement: !ruby/object:Gem::Requirement
|
24
23
|
none: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
26
|
- - ~>
|
27
27
|
- !ruby/object:Gem::Version
|
28
28
|
version: '0.10'
|
29
|
-
|
29
|
+
none: false
|
30
30
|
prerelease: false
|
31
31
|
- !ruby/object:Gem::Dependency
|
32
32
|
name: builder
|
33
|
-
|
34
|
-
|
33
|
+
type: :runtime
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
35
35
|
requirements:
|
36
36
|
- - ! '>='
|
37
37
|
- !ruby/object:Gem::Version
|
38
38
|
version: 3.0.0
|
39
|
-
requirement: !ruby/object:Gem::Requirement
|
40
39
|
none: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
43
43
|
- !ruby/object:Gem::Version
|
44
44
|
version: 3.0.0
|
45
|
-
|
45
|
+
none: false
|
46
46
|
prerelease: false
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: bundler
|
49
|
-
|
50
|
-
|
49
|
+
type: :development
|
50
|
+
requirement: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.3'
|
55
|
-
requirement: !ruby/object:Gem::Requirement
|
56
55
|
none: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
58
|
- - ~>
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: '1.3'
|
61
|
-
|
61
|
+
none: false
|
62
62
|
prerelease: false
|
63
63
|
- !ruby/object:Gem::Dependency
|
64
64
|
name: rake
|
65
|
-
|
66
|
-
|
65
|
+
type: :development
|
66
|
+
requirement: !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
68
|
- - ! '>='
|
69
69
|
- !ruby/object:Gem::Version
|
70
70
|
version: '0'
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
71
|
none: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: '0'
|
77
|
-
|
77
|
+
none: false
|
78
78
|
prerelease: false
|
79
79
|
- !ruby/object:Gem::Dependency
|
80
80
|
name: rspec
|
81
|
-
|
82
|
-
|
81
|
+
type: :development
|
82
|
+
requirement: !ruby/object:Gem::Requirement
|
83
83
|
requirements:
|
84
84
|
- - ~>
|
85
85
|
- !ruby/object:Gem::Version
|
86
86
|
version: 3.0.0.beta1
|
87
|
-
requirement: !ruby/object:Gem::Requirement
|
88
87
|
none: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
89
|
requirements:
|
90
90
|
- - ~>
|
91
91
|
- !ruby/object:Gem::Version
|
92
92
|
version: 3.0.0.beta1
|
93
|
-
|
93
|
+
none: false
|
94
94
|
prerelease: false
|
95
95
|
- !ruby/object:Gem::Dependency
|
96
96
|
name: debugger
|
97
|
-
|
98
|
-
|
97
|
+
type: :development
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
99
99
|
requirements:
|
100
100
|
- - ~>
|
101
101
|
- !ruby/object:Gem::Version
|
102
102
|
version: '1.6'
|
103
|
-
requirement: !ruby/object:Gem::Requirement
|
104
103
|
none: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
105
|
requirements:
|
106
106
|
- - ~>
|
107
107
|
- !ruby/object:Gem::Version
|
108
108
|
version: '1.6'
|
109
|
-
|
109
|
+
none: false
|
110
110
|
prerelease: false
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: timecop
|
113
|
-
|
114
|
-
|
113
|
+
type: :development
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
116
|
- - ~>
|
117
117
|
- !ruby/object:Gem::Version
|
118
118
|
version: '0.7'
|
119
|
-
requirement: !ruby/object:Gem::Requirement
|
120
119
|
none: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - ~>
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0.7'
|
125
|
-
|
125
|
+
none: false
|
126
126
|
prerelease: false
|
127
127
|
- !ruby/object:Gem::Dependency
|
128
128
|
name: webmock
|
129
|
-
|
130
|
-
|
129
|
+
type: :development
|
130
|
+
requirement: !ruby/object:Gem::Requirement
|
131
131
|
requirements:
|
132
132
|
- - ~>
|
133
133
|
- !ruby/object:Gem::Version
|
134
|
-
version: 1.
|
135
|
-
requirement: !ruby/object:Gem::Requirement
|
134
|
+
version: 1.17.0
|
136
135
|
none: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
137
|
requirements:
|
138
138
|
- - ~>
|
139
139
|
- !ruby/object:Gem::Version
|
140
|
-
version: 1.
|
141
|
-
|
140
|
+
version: 1.17.0
|
141
|
+
none: false
|
142
142
|
prerelease: false
|
143
143
|
description: Ruby implementation for Walmart Open API.
|
144
144
|
email:
|
@@ -162,6 +162,7 @@ files:
|
|
162
162
|
- lib/walmart_open/ordered_item.rb
|
163
163
|
- lib/walmart_open/product_request.rb
|
164
164
|
- lib/walmart_open/request.rb
|
165
|
+
- lib/walmart_open/requests/feed.rb
|
165
166
|
- lib/walmart_open/requests/lookup.rb
|
166
167
|
- lib/walmart_open/requests/place_order.rb
|
167
168
|
- lib/walmart_open/requests/search.rb
|
@@ -181,6 +182,7 @@ files:
|
|
181
182
|
- spec/walmart_open/order_results_spec.rb
|
182
183
|
- spec/walmart_open/order_spec.rb
|
183
184
|
- spec/walmart_open/request_spec.rb
|
185
|
+
- spec/walmart_open/requests/feed_spec.rb
|
184
186
|
- spec/walmart_open/requests/lookup_spec.rb
|
185
187
|
- spec/walmart_open/requests/place_order_spec.rb
|
186
188
|
- spec/walmart_open/requests/search_spec.rb
|
@@ -199,20 +201,26 @@ rdoc_options: []
|
|
199
201
|
require_paths:
|
200
202
|
- lib
|
201
203
|
required_ruby_version: !ruby/object:Gem::Requirement
|
202
|
-
none: false
|
203
204
|
requirements:
|
204
205
|
- - ! '>='
|
205
206
|
- !ruby/object:Gem::Version
|
207
|
+
segments:
|
208
|
+
- 0
|
209
|
+
hash: -1902360168796527980
|
206
210
|
version: '0'
|
207
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
208
211
|
none: false
|
212
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
209
213
|
requirements:
|
210
214
|
- - ! '>='
|
211
215
|
- !ruby/object:Gem::Version
|
216
|
+
segments:
|
217
|
+
- 0
|
218
|
+
hash: -1902360168796527980
|
212
219
|
version: '0'
|
220
|
+
none: false
|
213
221
|
requirements: []
|
214
222
|
rubyforge_project:
|
215
|
-
rubygems_version: 1.8.
|
223
|
+
rubygems_version: 1.8.23
|
216
224
|
signing_key:
|
217
225
|
specification_version: 3
|
218
226
|
summary: Ruby implementation for Walmart Open API
|
@@ -227,6 +235,7 @@ test_files:
|
|
227
235
|
- spec/walmart_open/order_results_spec.rb
|
228
236
|
- spec/walmart_open/order_spec.rb
|
229
237
|
- spec/walmart_open/request_spec.rb
|
238
|
+
- spec/walmart_open/requests/feed_spec.rb
|
230
239
|
- spec/walmart_open/requests/lookup_spec.rb
|
231
240
|
- spec/walmart_open/requests/place_order_spec.rb
|
232
241
|
- spec/walmart_open/requests/search_spec.rb
|