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