powells 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +22 -0
- data/README.md +5 -0
- data/lib/powells/request.rb +86 -0
- data/lib/powells/response.rb +10 -0
- data/lib/powells/version.rb +3 -0
- data/lib/powells.rb +10 -0
- data/test/helper.rb +11 -0
- data/test/test_powells.rb +83 -0
- data/test/vcr_cassettes/powells.yml +2047 -0
- metadata +127 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c9bc301f76a4e6930e5aeb6590a038b0add6f881
|
4
|
+
data.tar.gz: 771df08d8a3f6cb816a56ad0cf23e3def01aa591
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: dad222fd1f928c9e5abc68117fbaa7cdd1abae9ac08b394a26f08f9ca1abd04ed7e33197663f27d18a07c85331f90dd48cffe96cdf900c3ab0f97fc36adec95d
|
7
|
+
data.tar.gz: 28f3e58e4fb11c8a7185d56cc0924a6c7d89ffddd2cd841e74d0d924b763f54edd5074b03f727bf357e5c90ef51a5daccf6f4f0472191ba0c28f4b5f988f09fa
|
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
(The MIT License)
|
2
|
+
|
3
|
+
Copyright (c) 2014 Hakan Ensari
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
19
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
20
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
21
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
22
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'excon'
|
2
|
+
require 'powells/response'
|
3
|
+
|
4
|
+
module Powells
|
5
|
+
class Request
|
6
|
+
# Create a new request
|
7
|
+
def initialize(api_key: ENV['POWELLS_API_KEY'], api_version: 'v0c')
|
8
|
+
@api_key = api_key
|
9
|
+
@api_version = api_version
|
10
|
+
end
|
11
|
+
|
12
|
+
# Retrieve inventory data for a particular ISBN or SKU
|
13
|
+
def inventory(isbn_or_sku)
|
14
|
+
get('inventory', isbn_or_sku)
|
15
|
+
end
|
16
|
+
|
17
|
+
# Retrieve product data for a particular ISBN or SKU
|
18
|
+
def product(isbn_or_sku)
|
19
|
+
get('product', isbn_or_sku)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Retrieve content about an ISBN or SKU
|
23
|
+
#
|
24
|
+
# This can include items like reviews and publisher descriptions.
|
25
|
+
def content(isbn_or_sku)
|
26
|
+
get('content', isbn_or_sku)
|
27
|
+
end
|
28
|
+
|
29
|
+
# Retrieve information about retail locations
|
30
|
+
def locations(slug = nil)
|
31
|
+
get('locations', slug)
|
32
|
+
end
|
33
|
+
|
34
|
+
# Retrieve product information by way of keywords
|
35
|
+
def search(keywords, options = {})
|
36
|
+
get('search', URI.encode(keywords), options: options)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Retrieve product information for related products
|
40
|
+
def recommendation(isbn, options = {})
|
41
|
+
get('recommendation', isbn, options: options)
|
42
|
+
end
|
43
|
+
|
44
|
+
# A list of up to 50 of the bestselling titles from Powells's Portland
|
45
|
+
# locations, sorted most popular first
|
46
|
+
def pdxbestsellers(options = {})
|
47
|
+
get('pdxbestsellers', options: options)
|
48
|
+
end
|
49
|
+
|
50
|
+
# This feed is what Powell's will use to communicate any known issues with
|
51
|
+
# particular API calls or the API in general
|
52
|
+
def apistatus
|
53
|
+
get('apistatus')
|
54
|
+
end
|
55
|
+
|
56
|
+
# Switch to development environment
|
57
|
+
def sandbox
|
58
|
+
@api_key = 'testing'
|
59
|
+
self
|
60
|
+
end
|
61
|
+
|
62
|
+
# Debug requests
|
63
|
+
def debug
|
64
|
+
@debug = true
|
65
|
+
self
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def get(*query, options: {})
|
71
|
+
path = build_path(query)
|
72
|
+
options.update(debug: 1) if @debug
|
73
|
+
res = http.get(path: path, query: options)
|
74
|
+
|
75
|
+
Response.new(res)
|
76
|
+
end
|
77
|
+
|
78
|
+
def http
|
79
|
+
Excon.new('http://api.powells.com', expects: 200)
|
80
|
+
end
|
81
|
+
|
82
|
+
def build_path(ary)
|
83
|
+
[@api_version, @api_key].concat(ary).compact.join('/')
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
data/lib/powells.rb
ADDED
data/test/helper.rb
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
class TestPowells < Minitest::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
VCR.insert_cassette('powells')
|
6
|
+
@powells = Powells.new.sandbox
|
7
|
+
end
|
8
|
+
|
9
|
+
def teardown
|
10
|
+
VCR.eject_cassette
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_inventory_isbn
|
14
|
+
res = @powells.inventory('9780590353427')
|
15
|
+
refute_empty res.to_h
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_inventory_sku
|
19
|
+
res = @powells.inventory('17-9780590353427-80')
|
20
|
+
refute_empty res.to_h
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_product_isbn
|
24
|
+
res = @powells.product('9780590353427')
|
25
|
+
refute_empty res.to_h
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_product_sku
|
29
|
+
res = @powells.product('17-9780590353427-80')
|
30
|
+
refute_empty res.to_h
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_content_isbn
|
34
|
+
res = @powells.content('9780590353427')
|
35
|
+
refute_empty res.to_h
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_content_sku
|
39
|
+
res = @powells.content('17-9780590353427-80')
|
40
|
+
refute_empty res.to_h
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_locations
|
44
|
+
res = @powells.locations
|
45
|
+
refute_empty res.to_h
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_locations_slug
|
49
|
+
res = @powells.locations('powells-city-of-books')
|
50
|
+
refute_empty res.to_h
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_search
|
54
|
+
res = @powells.search('harry potter')
|
55
|
+
refute_empty res.to_h
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_recommendation
|
59
|
+
res = @powells.recommendation('9780590353427')
|
60
|
+
refute_empty res.to_h
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_pdxbestsellers
|
64
|
+
res = @powells.pdxbestsellers
|
65
|
+
refute_empty res.to_h
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_apistatus
|
69
|
+
skip('Powells is not returning JSON')
|
70
|
+
res = @powells.apistatus
|
71
|
+
refute_empty res.to_h
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_accepts_options
|
75
|
+
res = @powells.search('harry potter', per_page: 20)
|
76
|
+
assert_equal 20, res.to_h['results'].count
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_debug
|
80
|
+
res = @powells.debug.search('harry potter')
|
81
|
+
assert_includes res.to_h.keys, 'input'
|
82
|
+
end
|
83
|
+
end
|