abebooks 1.0.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 30aeccdbb59fe124f87ef8969414135955fdce82
4
- data.tar.gz: fc26c89f9261b0092ba6205efb0a81ee28bfb6d4
2
+ SHA256:
3
+ metadata.gz: 53f1fe49d38afaf16961210b19dfb7c0891fe97e890258d3c6a1259c786b400b
4
+ data.tar.gz: 36d28b71f9ab4d0ccb3f4a99e1567e572cf6e7424e90f12cdecc8153080d6135
5
5
  SHA512:
6
- metadata.gz: 90e69be60169918e73bfa4ad8f1eb7faf7a2b1e6a3f1bd32558d35cfc7f6547f30ef46e7ffde5e018008fc421fc6768a8ea3b24176ca6226b3297a084788310e
7
- data.tar.gz: fcfd560873815629d74d09ee71956f62bf326e64839898c1cc96eebc0e9007bcda029bf3ff8e4b4ab5ca07a545e10dec4037fc9b56e299f46631d0c989498ee4
6
+ metadata.gz: 7e3f6268509818e1ba69345e6f5547df713668de1526a5e4607438c0bac3172c88724b9529476a252fb9acdebb70704ae29afae4cf08736d772a17c9024d4310
7
+ data.tar.gz: 4bdfe16a76f56a710c14aab0d89a567b64a1df7c26ce2d91d4fadebecdd39f5987c26035c77acfc272893c3e3e061e7660422d14ec5b87f69fdda77a1e22d462
data/README.md CHANGED
@@ -10,23 +10,17 @@ Create a request:
10
10
  req = Abebooks.new(client_key)
11
11
  ```
12
12
 
13
- Run a query:
13
+ Run a query and parse response into a Ruby Hash:
14
14
 
15
15
  ```ruby
16
- params = { author: 'Foucault' }
17
- res = req.get(query: params)
16
+ response = request.get(author: 'Tolkien')
17
+ response.to_h
18
18
  ```
19
19
 
20
- Parse the response into a Ruby Hash:
20
+ Or pass the response into a custom parser:
21
21
 
22
22
  ```ruby
23
- res.to_h
23
+ MyParser.new(res.to_s)
24
24
  ```
25
25
 
26
- Or pass its body into a custom parser:
27
-
28
- ```ruby
29
- MyParser.new(res.body)
30
- ```
31
-
32
- [1]: http://www.abebooks.com/docs/AffiliateProgram/WebServices/end-user-guide.pdf
26
+ [1]: https://www.abebooks.com/docs/AffiliateProgram/WebServices/end-user-guide.pdf
data/lib/abebooks.rb CHANGED
@@ -1,7 +1,8 @@
1
- require 'forwardable'
2
- require 'abebooks/request'
1
+ # frozen_string_literal: true
2
+
3
+ require "forwardable"
4
+ require "abebooks/request"
3
5
 
4
- # Wrapper to the Abebooks SWS API
5
6
  module Abebooks
6
7
  class << self
7
8
  extend Forwardable
@@ -1,22 +1,22 @@
1
- require 'excon'
2
- require 'abebooks/response'
1
+ # frozen_string_literal: true
2
+
3
+ require "http"
4
+ require "abebooks/response"
3
5
 
4
6
  module Abebooks
5
- # Runs a search query
6
7
  class Request
7
- def initialize(client_key = ENV['ABEBOOKS_CLIENT_KEY'])
8
- @client_key = client_key
9
- end
8
+ URL = "https://search2.abebooks.com/search"
10
9
 
11
- def get(opts)
12
- opts.fetch(:query).update('clientkey' => @client_key)
13
- Response.new(connection.get(opts))
10
+ def initialize(client_key = ENV["ABEBOOKS_CLIENT_KEY"])
11
+ @client_key = client_key
14
12
  end
15
13
 
16
- private
14
+ def get(parameters = {})
15
+ response = HTTP.use(:auto_inflate)
16
+ .headers("Accept-Encoding" => "gzip")
17
+ .get(URL, params: parameters.merge("clientkey" => @client_key))
17
18
 
18
- def connection
19
- Excon.new('http://search2.abebooks.com/search', expects: 200)
19
+ Response.new(response)
20
20
  end
21
21
  end
22
22
  end
@@ -1,11 +1,20 @@
1
- require 'delegate'
2
- require 'multi_xml'
1
+ # frozen_string_literal: true
2
+
3
+ require "delegate"
4
+ require "ox"
3
5
 
4
6
  module Abebooks
5
- # Parses the API response
6
7
  class Response < SimpleDelegator
8
+ class HTTPStatus < StandardError; end
9
+
7
10
  def to_h
8
- MultiXml.parse(body)
11
+ raise HTTPStatus unless ok?
12
+
13
+ Ox.load(to_s, mode: :hash)
14
+ end
15
+
16
+ def ok?
17
+ code == 200
9
18
  end
10
19
  end
11
20
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Abebooks
2
- VERSION = '1.0.0'.freeze
4
+ VERSION = "2.0.0"
3
5
  end
@@ -1,19 +1,24 @@
1
- require 'minitest/autorun'
2
- require_relative '../lib/abebooks'
1
+ # frozen_string_literal: true
2
+
3
+ require "minitest/autorun"
4
+ require_relative "../lib/abebooks"
3
5
 
4
6
  class TestAbebooks < Minitest::Test
5
- def setup
6
- Excon.defaults[:mock] = true
7
- Excon.stub({}, body: '<foo>bar</foo>')
8
- end
7
+ def test_ok
8
+ skip unless ENV.key?("ABEBOOKS_CLIENT_KEY")
9
9
 
10
- def teardown
11
- Excon.stubs.clear
10
+ request = Abebooks.new
11
+ response = request.get(author: "Tolkien")
12
+
13
+ assert response.ok?
14
+ refute_empty response.to_h
12
15
  end
13
16
 
14
- def test_fetches_parsable_response
15
- req = Abebooks::Request.new
16
- res = req.get(query: {})
17
- refute_empty res.to_h
17
+ def test_unauthorized
18
+ request = Abebooks.new("foo")
19
+ response = request.get
20
+
21
+ refute response.ok?
22
+ assert_raises { response.to_h }
18
23
  end
19
24
  end
metadata CHANGED
@@ -1,37 +1,51 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: abebooks
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Diego Marquez
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-23 00:00:00.000000000 Z
11
+ date: 2021-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: multi_xml
14
+ name: http
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.6.0
19
+ version: '5.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '5.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: ox
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.0'
20
34
  type: :runtime
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
38
  - - "~>"
25
39
  - !ruby/object:Gem::Version
26
- version: 0.6.0
40
+ version: '2.0'
27
41
  - !ruby/object:Gem::Dependency
28
- name: excon
42
+ name: minitest
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - ">="
32
46
  - !ruby/object:Gem::Version
33
47
  version: '0'
34
- type: :runtime
48
+ type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
@@ -39,21 +53,21 @@ dependencies:
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
- name: minitest
56
+ name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - "~>"
59
+ - - ">="
46
60
  - !ruby/object:Gem::Version
47
- version: '5.0'
61
+ version: '0'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - "~>"
66
+ - - ">="
53
67
  - !ruby/object:Gem::Version
54
- version: '5.0'
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
- name: rake
70
+ name: standardrb
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - ">="
@@ -66,7 +80,7 @@ dependencies:
66
80
  - - ">="
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
69
- description:
83
+ description:
70
84
  email:
71
85
  - marquez.diego.e@gmail.com
72
86
  executables: []
@@ -84,7 +98,7 @@ homepage: https://github.com/diegomarquez/abebooks
84
98
  licenses:
85
99
  - MIT
86
100
  metadata: {}
87
- post_install_message:
101
+ post_install_message:
88
102
  rdoc_options: []
89
103
  require_paths:
90
104
  - lib
@@ -92,16 +106,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
92
106
  requirements:
93
107
  - - ">="
94
108
  - !ruby/object:Gem::Version
95
- version: '1.9'
109
+ version: '2.6'
96
110
  required_rubygems_version: !ruby/object:Gem::Requirement
97
111
  requirements:
98
112
  - - ">="
99
113
  - !ruby/object:Gem::Version
100
114
  version: '0'
101
115
  requirements: []
102
- rubyforge_project:
103
- rubygems_version: 2.6.8
104
- signing_key:
116
+ rubygems_version: 3.2.15
117
+ signing_key:
105
118
  specification_version: 4
106
119
  summary: A Ruby wrapper to the Abebooks SWS API
107
120
  test_files: