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