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 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
@@ -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
 
@@ -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
@@ -41,7 +41,7 @@ module WalmartOpen
41
41
 
42
42
  def verify_response(response)
43
43
  unless response.success?
44
- raise WalmartOpen::AuthenticationError, response.parsed_response.inspect
44
+ raise WalmartOpen::ServerError, response.parsed_response.inspect
45
45
  end
46
46
  end
47
47
 
@@ -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
@@ -1,3 +1,3 @@
1
1
  module WalmartOpen
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -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/order"
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
@@ -59,7 +59,7 @@ describe WalmartOpen::Request do
59
59
  it "raises an error" do
60
60
  expect {
61
61
  request.submit(client)
62
- }.to raise_error(WalmartOpen::AuthenticationError)
62
+ }.to raise_error(WalmartOpen::ServerError)
63
63
  end
64
64
  end
65
65
  end
@@ -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
@@ -83,7 +83,7 @@ describe WalmartOpen::Requests::Lookup do
83
83
  it "raises authentication error" do
84
84
  expect {
85
85
  lookup_req.submit(client)
86
- }.to raise_error(WalmartOpen::AuthenticationError)
86
+ }.to raise_error(WalmartOpen::ServerError)
87
87
  end
88
88
  end
89
89
  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::AuthenticationError)
146
+ }.to raise_error(WalmartOpen::ServerError)
147
147
  end
148
148
  end
149
149
  end
@@ -79,7 +79,7 @@ describe WalmartOpen::Requests::Search do
79
79
  it "raises authentication error" do
80
80
  expect {
81
81
  search_req.submit(client)
82
- }.to raise_error(WalmartOpen::AuthenticationError)
82
+ }.to raise_error(WalmartOpen::ServerError)
83
83
  end
84
84
  end
85
85
  end
@@ -63,7 +63,7 @@ describe WalmartOpen::Requests::Taxonomy do
63
63
  it "raises authentication error" do
64
64
  expect{
65
65
  taxonomy_req.submit(client)
66
- }.to raise_error(WalmartOpen::AuthenticationError)
66
+ }.to raise_error(WalmartOpen::ServerError)
67
67
  end
68
68
  end
69
69
  end
@@ -42,7 +42,7 @@ describe WalmartOpen::Requests::Token do
42
42
  it "get authentication error" do
43
43
  expect{
44
44
  token_req.submit(client)
45
- }.to raise_error(WalmartOpen::AuthenticationError)
45
+ }.to raise_error(WalmartOpen::ServerError)
46
46
  end
47
47
  end
48
48
  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.4
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: 2013-12-17 00:00:00.000000000 Z
13
+ date: 2014-02-15 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: httparty
17
- version_requirements: !ruby/object:Gem::Requirement
18
- none: false
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
- type: :runtime
29
+ none: false
30
30
  prerelease: false
31
31
  - !ruby/object:Gem::Dependency
32
32
  name: builder
33
- version_requirements: !ruby/object:Gem::Requirement
34
- none: false
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
- type: :runtime
45
+ none: false
46
46
  prerelease: false
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bundler
49
- version_requirements: !ruby/object:Gem::Requirement
50
- none: false
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
- type: :development
61
+ none: false
62
62
  prerelease: false
63
63
  - !ruby/object:Gem::Dependency
64
64
  name: rake
65
- version_requirements: !ruby/object:Gem::Requirement
66
- none: false
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
- type: :development
77
+ none: false
78
78
  prerelease: false
79
79
  - !ruby/object:Gem::Dependency
80
80
  name: rspec
81
- version_requirements: !ruby/object:Gem::Requirement
82
- none: false
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
- type: :development
93
+ none: false
94
94
  prerelease: false
95
95
  - !ruby/object:Gem::Dependency
96
96
  name: debugger
97
- version_requirements: !ruby/object:Gem::Requirement
98
- none: false
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
- type: :development
109
+ none: false
110
110
  prerelease: false
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: timecop
113
- version_requirements: !ruby/object:Gem::Requirement
114
- none: false
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
- type: :development
125
+ none: false
126
126
  prerelease: false
127
127
  - !ruby/object:Gem::Dependency
128
128
  name: webmock
129
- version_requirements: !ruby/object:Gem::Requirement
130
- none: false
129
+ type: :development
130
+ requirement: !ruby/object:Gem::Requirement
131
131
  requirements:
132
132
  - - ~>
133
133
  - !ruby/object:Gem::Version
134
- version: 1.16.0
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.16.0
141
- type: :development
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.25
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