vacuum 1.0.0 → 1.1.0
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.
- checksums.yaml +4 -4
- data/README.md +14 -8
- data/lib/vacuum/request.rb +31 -13
- data/lib/vacuum/version.rb +1 -1
- data/test/test_vacuum.rb +16 -8
- metadata +16 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c4c2d00043baa236106ea42ca2e2938ba88b40ba
|
4
|
+
data.tar.gz: 8e30624c24d2631a4a3bc9dfee01bbe2fcb8b5ea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a6ea78733efb0ab6a5f32c3356d78a9954f16944148de341addf25e05c1fd50fa850a6343b44de75a867d0e0de085654db26af9b82c1807981d77185e0d33538
|
7
|
+
data.tar.gz: 4842c0dbde4ccdab7864441ef770c18655536d089bb7ff48f3b1e9ab7cb5fc0dba6ddb8ed3628cd19b218386fc804db7b9b969432067c0dae89629f46d8c30e8
|
data/README.md
CHANGED
@@ -2,8 +2,7 @@
|
|
2
2
|
|
3
3
|
[![Build Status][1]][2]
|
4
4
|
|
5
|
-
Vacuum is a light-weight Ruby wrapper to the
|
6
|
-
[Amazon Product Advertising API][4].
|
5
|
+
Vacuum is a fast, light-weight Ruby wrapper to the [Amazon Product Advertising API][4].
|
7
6
|
|
8
7
|
![vacuum][3]
|
9
8
|
|
@@ -36,7 +35,7 @@ req.configure(
|
|
36
35
|
|
37
36
|
Alternatively, set the key and secret as environment variables globally:
|
38
37
|
|
39
|
-
```
|
38
|
+
```sh
|
40
39
|
export AWS_ACCESS_KEY_ID=key
|
41
40
|
export AWS_SECRET_ACCESS_KEY=secret
|
42
41
|
```
|
@@ -56,27 +55,33 @@ params = {
|
|
56
55
|
'SearchIndex' => 'Books',
|
57
56
|
'Keywords' => 'Architecture'
|
58
57
|
}
|
59
|
-
res = req.item_search(params)
|
58
|
+
res = req.item_search(query: params)
|
60
59
|
```
|
61
60
|
The above executes an item search operation. The names of available methods
|
62
61
|
derive from the operations listed in the API docs and include
|
63
62
|
`browse_node_lookup`, `cart_add`, `cart_clear`, `cart_create`, `cart_get`,
|
64
63
|
`cart_modify`, `item_lookup`, `item_search`, and `similarity_lookup`.
|
65
64
|
|
66
|
-
Vacuum
|
65
|
+
Vacuum uses [Excon][5] as HTTP client. Check the Excon API for ways to tweak
|
66
|
+
your request:
|
67
|
+
|
68
|
+
```ruby
|
69
|
+
res = req.item_search(query: params, persistent: true)
|
70
|
+
```
|
67
71
|
|
68
72
|
### Response
|
69
73
|
|
70
|
-
The
|
74
|
+
The quickest way to consume a response is to parse it into a Ruby hash:
|
71
75
|
|
72
76
|
```ruby
|
73
77
|
res.to_h
|
74
78
|
```
|
75
79
|
|
76
80
|
Vacuum uses [MultiXml][6], which will work with a number of popular XML
|
77
|
-
libraries.
|
81
|
+
libraries. If working in MRI, you may want to use [Ox][7].
|
78
82
|
|
79
|
-
You can also pass the response body into
|
83
|
+
You can also pass the response body into your own parser for some custom XML
|
84
|
+
heavy-lifting:
|
80
85
|
|
81
86
|
```ruby
|
82
87
|
MyParser.new(res.body)
|
@@ -88,3 +93,4 @@ MyParser.new(res.body)
|
|
88
93
|
[4]: https://affiliate-program.amazon.com/gp/advertising/api/detail/main.html
|
89
94
|
[5]: https://github.com/geemus/excon
|
90
95
|
[6]: https://github.com/sferik/multi_xml
|
96
|
+
[7]: https://github.com/ohler55/ox
|
data/lib/vacuum/request.rb
CHANGED
@@ -9,15 +9,16 @@ module Vacuum
|
|
9
9
|
BadLocale = Class.new(ArgumentError)
|
10
10
|
|
11
11
|
HOSTS = {
|
12
|
+
'BR' => 'webservices.amazon.com.br',
|
12
13
|
'CA' => 'webservices.amazon.ca',
|
13
14
|
'CN' => 'webservices.amazon.cn',
|
14
15
|
'DE' => 'webservices.amazon.de',
|
15
16
|
'ES' => 'webservices.amazon.es',
|
16
17
|
'FR' => 'webservices.amazon.fr',
|
18
|
+
'GB' => 'webservices.amazon.co.uk',
|
17
19
|
'IN' => 'webservices.amazon.in',
|
18
20
|
'IT' => 'webservices.amazon.it',
|
19
21
|
'JP' => 'webservices.amazon.co.jp',
|
20
|
-
'GB' => 'webservices.amazon.co.uk',
|
21
22
|
'US' => 'webservices.amazon.com'
|
22
23
|
}.freeze
|
23
24
|
|
@@ -65,22 +66,39 @@ module Vacuum
|
|
65
66
|
self
|
66
67
|
end
|
67
68
|
|
69
|
+
# Execute an API operation. See `OPERATIONS` constant for available
|
70
|
+
# operation names.
|
71
|
+
#
|
72
|
+
# params - The Hash request parameters.
|
73
|
+
# opts - Options passed to Excon (default: {}).
|
74
|
+
#
|
75
|
+
# Alternatively, pass Excon options as first argument and include request
|
76
|
+
# parameters as query key.
|
77
|
+
#
|
78
|
+
# Examples
|
79
|
+
#
|
80
|
+
# req.item_search(
|
81
|
+
# 'SearchIndex' => 'All',
|
82
|
+
# 'Keywords' => 'Architecture'
|
83
|
+
# )
|
84
|
+
#
|
85
|
+
# req.item_search(
|
86
|
+
# query: {
|
87
|
+
# 'SearchIndex' => 'All',
|
88
|
+
# 'Keywords' => 'Architecture'
|
89
|
+
# },
|
90
|
+
# persistent: true
|
91
|
+
# )
|
92
|
+
#
|
93
|
+
# Returns a Vacuum Response.
|
68
94
|
OPERATIONS.each do |operation|
|
69
95
|
method_name = operation.gsub(/(.)([A-Z])/,'\1_\2').downcase
|
70
96
|
define_method(method_name) do |params, opts = {}|
|
71
|
-
|
72
|
-
|
73
|
-
end
|
74
|
-
end
|
97
|
+
params.has_key?(:query) ? opts = params : opts.update(query: params)
|
98
|
+
opts[:query].update('Operation' => operation)
|
75
99
|
|
76
|
-
|
77
|
-
|
78
|
-
# params - A Hash of Amazon Product Advertising request parameters.
|
79
|
-
#
|
80
|
-
# Returns the built URL String.
|
81
|
-
def url(params)
|
82
|
-
opts = { method: :get, query: params }
|
83
|
-
[aws_endpoint, build_options(opts).fetch(:query)].join('?')
|
100
|
+
Response.new(get(opts))
|
101
|
+
end
|
84
102
|
end
|
85
103
|
end
|
86
104
|
end
|
data/lib/vacuum/version.rb
CHANGED
data/test/test_vacuum.rb
CHANGED
@@ -5,26 +5,34 @@ require_relative '../lib/vacuum'
|
|
5
5
|
class TestVacuum < Minitest::Test
|
6
6
|
include Vacuum
|
7
7
|
|
8
|
+
def setup
|
9
|
+
@req = Request.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def teardown
|
13
|
+
Excon.stubs.clear
|
14
|
+
end
|
15
|
+
|
8
16
|
def test_requires_valid_locale
|
9
17
|
assert_raises(Request::BadLocale) { Request.new('foo') }
|
10
18
|
end
|
11
19
|
|
12
20
|
def test_defaults_to_us_endpoint
|
13
|
-
assert_equal 'http://webservices.amazon.com/onca/xml',
|
21
|
+
assert_equal 'http://webservices.amazon.com/onca/xml', @req.aws_endpoint
|
14
22
|
end
|
15
23
|
|
16
|
-
def
|
17
|
-
|
18
|
-
req.configure(aws_access_key_id: 'key', aws_secret_access_key: 'secret', associate_tag: 'tag')
|
19
|
-
|
24
|
+
def test_fetches_parsable_response
|
25
|
+
Excon.stub({}, { body: '<foo>bar</foo>' })
|
26
|
+
@req.configure(aws_access_key_id: 'key', aws_secret_access_key: 'secret', associate_tag: 'tag')
|
27
|
+
res = @req.item_lookup({}, mock: true)
|
28
|
+
refute_empty res.to_h
|
20
29
|
end
|
21
30
|
|
22
|
-
def
|
31
|
+
def test_alternative_query_syntax
|
23
32
|
Excon.stub({}, { body: '<foo>bar</foo>' })
|
24
33
|
req = Request.new
|
25
34
|
req.configure(aws_access_key_id: 'key', aws_secret_access_key: 'secret', associate_tag: 'tag')
|
26
|
-
res = req.item_lookup({}, mock: true)
|
35
|
+
res = req.item_lookup(query: {}, mock: true)
|
27
36
|
refute_empty res.to_h
|
28
|
-
Excon.stubs.clear
|
29
37
|
end
|
30
38
|
end
|
metadata
CHANGED
@@ -1,69 +1,69 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vacuum
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hakan Ensari
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-03-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jeff
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: multi_xml
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 0.5.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 0.5.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: minitest
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '5.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '5.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
description: A wrapper to the Amazon Product Advertising API
|
@@ -73,12 +73,12 @@ executables: []
|
|
73
73
|
extensions: []
|
74
74
|
extra_rdoc_files: []
|
75
75
|
files:
|
76
|
+
- LICENSE
|
77
|
+
- README.md
|
78
|
+
- lib/vacuum.rb
|
76
79
|
- lib/vacuum/request.rb
|
77
80
|
- lib/vacuum/response.rb
|
78
81
|
- lib/vacuum/version.rb
|
79
|
-
- lib/vacuum.rb
|
80
|
-
- LICENSE
|
81
|
-
- README.md
|
82
82
|
- test/test_vacuum.rb
|
83
83
|
homepage: https://github.com/hakanensari/vacuum
|
84
84
|
licenses:
|
@@ -90,17 +90,17 @@ require_paths:
|
|
90
90
|
- lib
|
91
91
|
required_ruby_version: !ruby/object:Gem::Requirement
|
92
92
|
requirements:
|
93
|
-
- -
|
93
|
+
- - ">="
|
94
94
|
- !ruby/object:Gem::Version
|
95
95
|
version: '1.9'
|
96
96
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
97
|
requirements:
|
98
|
-
- -
|
98
|
+
- - ">="
|
99
99
|
- !ruby/object:Gem::Version
|
100
100
|
version: '0'
|
101
101
|
requirements: []
|
102
102
|
rubyforge_project:
|
103
|
-
rubygems_version: 2.
|
103
|
+
rubygems_version: 2.2.2
|
104
104
|
signing_key:
|
105
105
|
specification_version: 4
|
106
106
|
summary: Amazon Product Advertising in Ruby
|