walmart_open 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +15 -0
  2. data/LICENSE.txt +22 -0
  3. data/README.md +171 -0
  4. data/Rakefile +1 -0
  5. data/lib/walmart_open.rb +6 -0
  6. data/lib/walmart_open/auth_token.rb +25 -0
  7. data/lib/walmart_open/client.rb +48 -0
  8. data/lib/walmart_open/commerce_request.rb +23 -0
  9. data/lib/walmart_open/config.rb +41 -0
  10. data/lib/walmart_open/connection_manager.rb +47 -0
  11. data/lib/walmart_open/errors.rb +13 -0
  12. data/lib/walmart_open/item.rb +41 -0
  13. data/lib/walmart_open/order.rb +53 -0
  14. data/lib/walmart_open/order_item.rb +17 -0
  15. data/lib/walmart_open/order_results.rb +40 -0
  16. data/lib/walmart_open/order_xml_builder.rb +62 -0
  17. data/lib/walmart_open/ordered_item.rb +31 -0
  18. data/lib/walmart_open/product_request.rb +28 -0
  19. data/lib/walmart_open/request.rb +64 -0
  20. data/lib/walmart_open/requests/lookup.rb +27 -0
  21. data/lib/walmart_open/requests/place_order.rb +58 -0
  22. data/lib/walmart_open/requests/search.rb +19 -0
  23. data/lib/walmart_open/requests/taxonomy.rb +17 -0
  24. data/lib/walmart_open/requests/token.rb +30 -0
  25. data/lib/walmart_open/search_results.rb +25 -0
  26. data/lib/walmart_open/shipping_address.rb +36 -0
  27. data/lib/walmart_open/version.rb +3 -0
  28. data/spec/spec_helper.rb +16 -0
  29. data/spec/walmart_open/auth_token_spec.rb +53 -0
  30. data/spec/walmart_open/client_spec.rb +92 -0
  31. data/spec/walmart_open/config_spec.rb +35 -0
  32. data/spec/walmart_open/connection_manager_spec.rb +58 -0
  33. data/spec/walmart_open/item_spec.rb +52 -0
  34. data/spec/walmart_open/order_item_spec.rb +18 -0
  35. data/spec/walmart_open/order_results_spec.rb +83 -0
  36. data/spec/walmart_open/order_spec.rb +124 -0
  37. data/spec/walmart_open/request_spec.rb +79 -0
  38. data/spec/walmart_open/requests/lookup_spec.rb +91 -0
  39. data/spec/walmart_open/requests/place_order_spec.rb +149 -0
  40. data/spec/walmart_open/requests/search_spec.rb +86 -0
  41. data/spec/walmart_open/requests/taxonomy_spec.rb +69 -0
  42. data/spec/walmart_open/requests/token_spec.rb +49 -0
  43. data/spec/walmart_open/search_results_spec.rb +60 -0
  44. data/spec/walmart_open/shipping_address_spec.rb +63 -0
  45. metadata +204 -0
@@ -0,0 +1,69 @@
1
+ require "spec_helper"
2
+ require "walmart_open/requests/taxonomy"
3
+ require "walmart_open/client"
4
+ require "walmart_open/errors"
5
+
6
+ describe WalmartOpen::Requests::Taxonomy do
7
+ context "#submit" do
8
+ let(:client) {WalmartOpen::Client.new}
9
+ let(:taxonomy_req) { WalmartOpen::Requests::Taxonomy.new }
10
+ let(:success_response) { double(success?: true) }
11
+ let(:fail_response) { double(success?: false) }
12
+ let(:category_attrs) do
13
+ {
14
+ "categories" => [{
15
+ "id" => "5438",
16
+ "name" => "Apparel",
17
+ "path" => "Apparel",
18
+ "children" => [{
19
+ "id" => "5438_426265",
20
+ "name" => "Accessories",
21
+ "path" => "Apparel/Accessories",
22
+ "children" => [
23
+ {
24
+ "id" => "5438_426265_1043621",
25
+ "name" => "Bandanas",
26
+ "path" => "Apparel/Accessories/Bandanas"
27
+ },
28
+ {
29
+ "id" => "2636_1104695_1105670",
30
+ "name" => "Xbox One Games",
31
+ "path" => "Video Games/Xbox One/Xbox One Games"
32
+ }
33
+ ]
34
+ }]
35
+ }]
36
+ }
37
+ end
38
+
39
+ context "when response is success" do
40
+ before do
41
+ allow(success_response).to receive(:parsed_response).and_return(category_attrs)
42
+ allow(HTTParty).to receive(:get).and_return(success_response)
43
+ end
44
+
45
+ it "succeeds" do
46
+ taxonomy = taxonomy_req.submit(client)
47
+
48
+ expect(taxonomy).to eq(category_attrs["categories"])
49
+ end
50
+ end
51
+
52
+ context "when response is not success" do
53
+ before do
54
+ allow(fail_response).to receive(:parsed_response).and_return({
55
+ "errors"=>[{
56
+ "code"=>403,
57
+ "message"=>"Account Inactive"
58
+ }]
59
+ })
60
+ end
61
+
62
+ it "raises authentication error" do
63
+ expect{
64
+ taxonomy_req.submit(client)
65
+ }.to raise_error(WalmartOpen::AuthenticationError)
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,49 @@
1
+ require "spec_helper"
2
+ require "walmart_open/requests/token"
3
+ require "walmart_open/client"
4
+ require "walmart_open/errors"
5
+
6
+ describe WalmartOpen::Requests::Token do
7
+ context "#submit" do
8
+ let(:client) {WalmartOpen::Client.new}
9
+ let(:token_req) { WalmartOpen::Requests::Token.new }
10
+ let(:success_response) { double(success?: true) }
11
+ let(:fail_response) { double(success?: false) }
12
+
13
+ context "when response is success" do
14
+ before do
15
+ allow(HTTParty).to receive(:post).and_return(success_response)
16
+ attrs = {
17
+ "token_type" => "bearer",
18
+ "mapi" => "8tbvkxd6gu6zjzp6qbyeewb6",
19
+ "access_token" => "k5pzg6jqtetygmrkm5y6qqnr",
20
+ "expires_in" => 600
21
+ }
22
+ allow(success_response).to receive(:parsed_response).and_return(attrs)
23
+ header_attrs = {"date"=> "Sun, 01 Dec 2013 07:25:35 GMT"}
24
+ allow(success_response).to receive(:headers).and_return(header_attrs)
25
+ end
26
+
27
+ it "get response" do
28
+ token = token_req.submit(client)
29
+
30
+ expect(token.token_type).to eq("bearer")
31
+ expect(token.access_token).to eq("k5pzg6jqtetygmrkm5y6qqnr")
32
+ expect(token.time).to eq(Time.parse("Sun, 01 Dec 2013 07:25:35 GMT"))
33
+ end
34
+ end
35
+
36
+ context "when response is not success" do
37
+ before do
38
+ allow(HTTParty).to receive(:get).and_return(fail_response)
39
+ allow(fail_response).to receive(:parsed_response).and_return({"errors"=>[{"code"=>403, "message"=>"Account Inactive"}]})
40
+ end
41
+
42
+ it "get authentication error" do
43
+ expect{
44
+ token_req.submit(client)
45
+ }.to raise_error(WalmartOpen::AuthenticationError)
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,60 @@
1
+ require "spec_helper"
2
+ require "walmart_open/search_results"
3
+
4
+ describe WalmartOpen::SearchResults do
5
+ context ".new" do
6
+ let(:search_result) do
7
+ {
8
+ "query" => "ipod",
9
+ "sort" => "relevance",
10
+ "format" => "json",
11
+ "responseGroup" => "base",
12
+ "totalResults" => 38666,
13
+ "start" => 1,
14
+ "numItems" => 10,
15
+ "items"=>[
16
+ {
17
+ "itemId" => 21967115,
18
+ "parentItemId" => 21967115,
19
+ "name" => "Apple iPod Touch 5th Generation (Choose Your Color in 32GB or 64GB) with Bonus Accessory Kit",
20
+ "salePrice" => 279.0,
21
+ "categoryPath" => "Electronics/iPods & MP3 Players/Apple iPods",
22
+ "shortDescription" => "With an ultrathin design, a 4-inch Retina display.",
23
+ "longDescription" => "iPod touch features a 6-millimetre ultrathin design and a brilliant 4-inch Retina display.",
24
+ "thumbnailImage" => "http://i.walmartimages.com/i/p/11/13/01/55/15/1113015515798_100X100.jpg", "productTrackingUrl"=>"http://linksynergy.walmart.com/fs-bin/click?id=|LSNID|&offerid=223073.7200&type=14&catid=8&subid=0&hid=7200&tmpid=1081&RD_PARM1=http%253A%252F%252Fwww.walmart.com%252Fip%252FApple-iPod-Touch-5th-Generation-Choose-Your-Color-in-32GB-or-64GB-with-Bonus-Accessory-Kit%252F21967115%253Faffilsrc%253Dapi",
25
+ "standardShipRate" => 0.0,
26
+ "marketplace" => false,
27
+ "productUrl" => "http://www.walmart.com/ip/Apple-iPod-Touch-5th-Generation-Choose-Your-Color-in-32GB-or-64GB-with-Bonus-Accessory-Kit/21967115",
28
+ "categoryNode" => "3944_96469_1057284",
29
+ "bundle" => true,
30
+ "availableOnline" => true
31
+ },
32
+ {
33
+ "itemId" => 21967113,
34
+ "parentItemId" => 21967113,
35
+ "name" => "Apple iPod Nano 16GB (Choose Your Color) with Bonus Accessory Kit",
36
+ "salePrice" => 139.0,
37
+ "categoryPath" => "Electronics/iPods & MP3 Players/Apple iPods",
38
+ "shortDescription" =>"The redesigned, ultraportable iPod nano now has a larger, 2.5&quot.",
39
+ "longDescription" => "<br><b>Key Features:<",
40
+ "customerRating" => "4.789",
41
+ "numReviews" => 375,
42
+ "customerRatingImage" => "http://i2.walmartimages.com/i/CustRating/4_8.gif",
43
+ "categoryNode" => "3944_96469_1057284",
44
+ "bundle" => false,
45
+ "availableOnline" => true
46
+ }
47
+ ]
48
+ }
49
+ end
50
+
51
+ it "sets value correctly" do
52
+ search_results = WalmartOpen::SearchResults.new(search_result)
53
+
54
+ expect(search_results.query).to eq(search_result["query"])
55
+ expect(search_results.total).to eq(search_result["totalResults"])
56
+ expect(search_results.start).to eq(search_result["start"])
57
+ expect(search_results.items.count).to be(search_result["items"].count)
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,63 @@
1
+ require "spec_helper"
2
+ require "walmart_open/shipping_address"
3
+
4
+ describe WalmartOpen::ShippingAddress do
5
+ let(:valid_attrs) do
6
+ {
7
+ street1: "Foo Bar, Maple St.",
8
+ street2: "Apt #100",
9
+ city: "Mountain View",
10
+ state: "CA",
11
+ zipcode: "94043",
12
+ country: "USA"
13
+ }
14
+ end
15
+
16
+ let(:required_attrs) do
17
+ [
18
+ :street1,
19
+ :city,
20
+ :state,
21
+ :zipcode,
22
+ :country
23
+ ]
24
+ end
25
+
26
+ context ".new" do
27
+ it "sets attributes" do
28
+ shipping_address = WalmartOpen::ShippingAddress.new(valid_attrs)
29
+
30
+ WalmartOpen::ShippingAddress::API_ATTRIBUTES_MAPPING.each do |key, value|
31
+ expect(shipping_address.public_send(value)).to eq(valid_attrs[key])
32
+ end
33
+
34
+ expect(shipping_address.raw_attributes).to eq(valid_attrs)
35
+ end
36
+ end
37
+
38
+ context "#valid?" do
39
+ context "when valid" do
40
+ it "returns true" do
41
+ shipping_address = WalmartOpen::ShippingAddress.new(valid_attrs)
42
+
43
+ expect(shipping_address).to be_valid
44
+ end
45
+
46
+ it "returns true for no street2" do
47
+ valid_attrs.delete(:street2)
48
+ shipping_address = WalmartOpen::ShippingAddress.new(valid_attrs)
49
+
50
+ expect(shipping_address).to be_valid
51
+ end
52
+ end
53
+
54
+ context "when not valid" do
55
+ it "returns false for missing required attributes" do
56
+ required_attrs.each do |required_attr|
57
+ attrs = valid_attrs.reject { |k, _| k == required_attr }
58
+ expect(WalmartOpen::ShippingAddress.new(attrs)).to_not be_valid
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
metadata ADDED
@@ -0,0 +1,204 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: walmart_open
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Ngan Pham
8
+ - Xiaoming Lu
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-12-05 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ type: :runtime
16
+ prerelease: false
17
+ name: httparty
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: '0.10'
23
+ requirement: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ version: '0.10'
28
+ - !ruby/object:Gem::Dependency
29
+ type: :runtime
30
+ prerelease: false
31
+ name: builder
32
+ version_requirements: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ! '>='
35
+ - !ruby/object:Gem::Version
36
+ version: 3.0.0
37
+ requirement: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: 3.0.0
42
+ - !ruby/object:Gem::Dependency
43
+ type: :development
44
+ prerelease: false
45
+ name: bundler
46
+ version_requirements: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ~>
49
+ - !ruby/object:Gem::Version
50
+ version: '1.3'
51
+ requirement: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: '1.3'
56
+ - !ruby/object:Gem::Dependency
57
+ type: :development
58
+ prerelease: false
59
+ name: rake
60
+ version_requirements: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ! '>='
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ requirement: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ type: :development
72
+ prerelease: false
73
+ name: rspec
74
+ version_requirements: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ~>
77
+ - !ruby/object:Gem::Version
78
+ version: 3.0.0.beta1
79
+ requirement: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ~>
82
+ - !ruby/object:Gem::Version
83
+ version: 3.0.0.beta1
84
+ - !ruby/object:Gem::Dependency
85
+ type: :development
86
+ prerelease: false
87
+ name: debugger
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ~>
91
+ - !ruby/object:Gem::Version
92
+ version: '1.6'
93
+ requirement: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ~>
96
+ - !ruby/object:Gem::Version
97
+ version: '1.6'
98
+ - !ruby/object:Gem::Dependency
99
+ type: :development
100
+ prerelease: false
101
+ name: timecop
102
+ version_requirements: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ~>
105
+ - !ruby/object:Gem::Version
106
+ version: '0.7'
107
+ requirement: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ~>
110
+ - !ruby/object:Gem::Version
111
+ version: '0.7'
112
+ description: Ruby implementation for Walmart Open API.
113
+ email:
114
+ - ngan@listia.com
115
+ - xlu@listia.com
116
+ executables: []
117
+ extensions: []
118
+ extra_rdoc_files: []
119
+ files:
120
+ - lib/walmart_open/auth_token.rb
121
+ - lib/walmart_open/client.rb
122
+ - lib/walmart_open/commerce_request.rb
123
+ - lib/walmart_open/config.rb
124
+ - lib/walmart_open/connection_manager.rb
125
+ - lib/walmart_open/errors.rb
126
+ - lib/walmart_open/item.rb
127
+ - lib/walmart_open/order.rb
128
+ - lib/walmart_open/order_item.rb
129
+ - lib/walmart_open/order_results.rb
130
+ - lib/walmart_open/order_xml_builder.rb
131
+ - lib/walmart_open/ordered_item.rb
132
+ - lib/walmart_open/product_request.rb
133
+ - lib/walmart_open/request.rb
134
+ - lib/walmart_open/requests/lookup.rb
135
+ - lib/walmart_open/requests/place_order.rb
136
+ - lib/walmart_open/requests/search.rb
137
+ - lib/walmart_open/requests/taxonomy.rb
138
+ - lib/walmart_open/requests/token.rb
139
+ - lib/walmart_open/search_results.rb
140
+ - lib/walmart_open/shipping_address.rb
141
+ - lib/walmart_open/version.rb
142
+ - lib/walmart_open.rb
143
+ - spec/spec_helper.rb
144
+ - spec/walmart_open/auth_token_spec.rb
145
+ - spec/walmart_open/client_spec.rb
146
+ - spec/walmart_open/config_spec.rb
147
+ - spec/walmart_open/connection_manager_spec.rb
148
+ - spec/walmart_open/item_spec.rb
149
+ - spec/walmart_open/order_item_spec.rb
150
+ - spec/walmart_open/order_results_spec.rb
151
+ - spec/walmart_open/order_spec.rb
152
+ - spec/walmart_open/request_spec.rb
153
+ - spec/walmart_open/requests/lookup_spec.rb
154
+ - spec/walmart_open/requests/place_order_spec.rb
155
+ - spec/walmart_open/requests/search_spec.rb
156
+ - spec/walmart_open/requests/taxonomy_spec.rb
157
+ - spec/walmart_open/requests/token_spec.rb
158
+ - spec/walmart_open/search_results_spec.rb
159
+ - spec/walmart_open/shipping_address_spec.rb
160
+ - LICENSE.txt
161
+ - Rakefile
162
+ - README.md
163
+ homepage: https://github.com/listia/walmart_open
164
+ licenses:
165
+ - MIT
166
+ metadata: {}
167
+ post_install_message:
168
+ rdoc_options: []
169
+ require_paths:
170
+ - lib
171
+ required_ruby_version: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ! '>='
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ required_rubygems_version: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ! '>='
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ requirements: []
182
+ rubyforge_project:
183
+ rubygems_version: 2.1.9
184
+ signing_key:
185
+ specification_version: 4
186
+ summary: Ruby implementation for Walmart Open API
187
+ test_files:
188
+ - spec/spec_helper.rb
189
+ - spec/walmart_open/auth_token_spec.rb
190
+ - spec/walmart_open/client_spec.rb
191
+ - spec/walmart_open/config_spec.rb
192
+ - spec/walmart_open/connection_manager_spec.rb
193
+ - spec/walmart_open/item_spec.rb
194
+ - spec/walmart_open/order_item_spec.rb
195
+ - spec/walmart_open/order_results_spec.rb
196
+ - spec/walmart_open/order_spec.rb
197
+ - spec/walmart_open/request_spec.rb
198
+ - spec/walmart_open/requests/lookup_spec.rb
199
+ - spec/walmart_open/requests/place_order_spec.rb
200
+ - spec/walmart_open/requests/search_spec.rb
201
+ - spec/walmart_open/requests/taxonomy_spec.rb
202
+ - spec/walmart_open/requests/token_spec.rb
203
+ - spec/walmart_open/search_results_spec.rb
204
+ - spec/walmart_open/shipping_address_spec.rb