walmart_open 0.0.1

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