ezapi 0.3.0 → 0.4.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/ezapi.gemspec +3 -3
- data/lib/ezapi.rb +2 -0
- data/lib/ezapi/client.rb +23 -15
- data/lib/ezapi/errors.rb +9 -1
- data/lib/ezapi/object_base.rb +4 -2
- data/lib/ezapi/version.rb +1 -1
- metadata +31 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 79decec8840eddfb762b5c6e31a937381c2a6d69
|
4
|
+
data.tar.gz: b2c8ad16b37562c59e055a2fffcd37b749125244
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '06561690e3e153456d544af729e7d0758eb839a06344e0dfbe9c045e840f47babfb2458d0be3c6277ca79484853b570f88ac00b93f1f3c6c0b818d84323a03e6'
|
7
|
+
data.tar.gz: cd5f48ca6246bfca7a5f137a775e65fef38ed6f7b1c3dbcb8da4c21d7a570d2202e4b33289bea51efe1eb158adc41af45464894d94d1335de931d3650412e1c8
|
data/ezapi.gemspec
CHANGED
@@ -30,9 +30,9 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.require_paths = ["lib"]
|
31
31
|
|
32
32
|
spec.add_dependency 'rest-client', '~> 2.0'
|
33
|
-
spec.add_dependency 'activesupport', '>=
|
34
|
-
spec.add_development_dependency "bundler",
|
35
|
-
spec.add_development_dependency
|
33
|
+
spec.add_dependency 'activesupport', '~> 5.2', '>= 5.2.4'
|
34
|
+
spec.add_development_dependency "bundler", '~> 2.0', '>= 2.0.1'
|
35
|
+
spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.1'
|
36
36
|
spec.add_development_dependency "rspec", "~> 3.0"
|
37
37
|
spec.add_development_dependency "pry", "~> 0.10.4"
|
38
38
|
end
|
data/lib/ezapi.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
require 'active_support/core_ext/string/inflections'
|
3
3
|
require 'active_support/json'
|
4
4
|
require 'active_support/core_ext/object/json'
|
5
|
+
require 'active_support/core_ext/hash'
|
5
6
|
|
6
7
|
# Main
|
7
8
|
require "ezapi/version"
|
@@ -19,4 +20,5 @@ require "ezapi/actions/update"
|
|
19
20
|
require "ezapi/actions/index"
|
20
21
|
|
21
22
|
module EZApi
|
23
|
+
# Your code ges here...
|
22
24
|
end
|
data/lib/ezapi/client.rb
CHANGED
@@ -6,12 +6,11 @@ require 'uri'
|
|
6
6
|
module EZApi
|
7
7
|
module Client
|
8
8
|
attr_accessor :key, :base_url
|
9
|
-
|
10
9
|
def self.extended(base)
|
11
10
|
[:get, :post, :put, :patch, :delete].each do |method|
|
12
|
-
define_method(method) do |path, params = {}|
|
11
|
+
define_method(method) do |path, params={}, headers=request_headers, request_arguments={}|
|
13
12
|
full_path = full_api_path(path)
|
14
|
-
request(full_path, method, params)
|
13
|
+
request(full_path, method, params, headers, request_arguments)
|
15
14
|
end
|
16
15
|
end
|
17
16
|
end
|
@@ -24,19 +23,21 @@ module EZApi
|
|
24
23
|
self.key = key
|
25
24
|
end
|
26
25
|
|
27
|
-
def request(full_url, method, params={})
|
28
|
-
|
26
|
+
def request(full_url, method, params={}, headers=self.request_headers, request_arguments={})
|
27
|
+
default_request = {method: method, url: full_url, payload: params.to_json, headers: headers}
|
29
28
|
|
30
29
|
begin
|
31
|
-
response = RestClient::Request.execute(
|
30
|
+
response = RestClient::Request.execute(default_request.merge(request_arguments))
|
32
31
|
JSON.parse(response) unless response.empty?
|
32
|
+
rescue JSON::ParserError => e
|
33
|
+
nil
|
33
34
|
rescue RestClient::ExceptionWithResponse => e
|
34
35
|
if response_code = e.http_code and response_body = e.http_body
|
35
|
-
handle_api_error(response_code,
|
36
|
+
handle_api_error(response_code, response_body)
|
36
37
|
else
|
37
38
|
handle_restclient_error(e)
|
38
39
|
end
|
39
|
-
rescue RestClient::Exception, Errno::ECONNREFUSED => e
|
40
|
+
rescue RestClient::Exception, Errno::ECONNREFUSED, SocketError => e
|
40
41
|
handle_restclient_error(e)
|
41
42
|
end
|
42
43
|
end
|
@@ -47,7 +48,7 @@ module EZApi
|
|
47
48
|
end
|
48
49
|
|
49
50
|
def full_api_path(path)
|
50
|
-
|
51
|
+
File.join(base_url, path).to_s
|
51
52
|
end
|
52
53
|
|
53
54
|
def request_headers
|
@@ -59,22 +60,29 @@ module EZApi
|
|
59
60
|
end
|
60
61
|
|
61
62
|
def encoded_api_key
|
63
|
+
raise(AuthenticationError, "API key is not set for #{self.app_name}.") unless self.key
|
64
|
+
|
62
65
|
Base64.urlsafe_encode64(self.key)
|
63
66
|
end
|
64
67
|
|
65
|
-
def parse_error_message(
|
66
|
-
body
|
68
|
+
def parse_error_message(raw_body)
|
69
|
+
body = JSON.parse(raw_body)
|
70
|
+
(body && body['error']) ? body['error']['message'] : 'An unknown error occured.'
|
71
|
+
rescue
|
72
|
+
'An unknown error occured.'
|
67
73
|
end
|
68
74
|
|
69
75
|
def handle_api_error(code, body)
|
70
76
|
message = parse_error_message(body)
|
71
77
|
case code
|
72
|
-
when 400, 404
|
73
|
-
raise(InvalidRequestError,
|
78
|
+
when 400, 404, 422
|
79
|
+
raise(InvalidRequestError.new(message, body: body, code: code ))
|
74
80
|
when 401
|
75
|
-
raise(AuthenticationError,
|
81
|
+
raise(AuthenticationError.new(message, body: body, code: code ))
|
82
|
+
when 429
|
83
|
+
raise(TooManyRequestsError.new(message, body: body, code: code ))
|
76
84
|
else
|
77
|
-
raise(ApiError,
|
85
|
+
raise(ApiError.new(message, body: body, code: code ))
|
78
86
|
end
|
79
87
|
end
|
80
88
|
|
data/lib/ezapi/errors.rb
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
module EZApi
|
2
|
-
class EZApiError < StandardError
|
2
|
+
class EZApiError < StandardError
|
3
|
+
attr_reader :body, :code
|
4
|
+
def initialize(message = nil, body: nil, code: nil )
|
5
|
+
@body = body
|
6
|
+
@code = code
|
7
|
+
super(message)
|
8
|
+
end
|
9
|
+
end
|
3
10
|
class AuthenticationError < EZApiError; end
|
4
11
|
class InvalidRequestError < EZApiError; end
|
12
|
+
class TooManyRequestsError < EZApiError; end
|
5
13
|
class ConnectionError < EZApiError; end
|
6
14
|
class ApiError < EZApiError; end
|
7
15
|
end
|
data/lib/ezapi/object_base.rb
CHANGED
@@ -6,13 +6,14 @@ module EZApi
|
|
6
6
|
|
7
7
|
def initialize(params={})
|
8
8
|
assign_attributes(params)
|
9
|
+
@params = params.with_indifferent_access
|
9
10
|
end
|
10
11
|
|
11
12
|
def id
|
12
13
|
attributes['id']
|
13
14
|
end
|
14
15
|
|
15
|
-
|
16
|
+
def id=(value)
|
16
17
|
attributes['id'] = value
|
17
18
|
end
|
18
19
|
|
@@ -22,10 +23,11 @@ module EZApi
|
|
22
23
|
|
23
24
|
private
|
24
25
|
def assign_attributes(params)
|
26
|
+
return unless params.present?
|
27
|
+
|
25
28
|
params.each do |key, value|
|
26
29
|
key = key.to_s.underscore
|
27
30
|
define_attribute_accessors(key) unless respond_to?(key)
|
28
|
-
|
29
31
|
# TODO: Support creating real api objects based on associations
|
30
32
|
case value
|
31
33
|
when Array
|
data/lib/ezapi/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ezapi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nicholas
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-08-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -28,44 +28,62 @@ dependencies:
|
|
28
28
|
name: activesupport
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '5.2'
|
31
34
|
- - ">="
|
32
35
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
36
|
+
version: 5.2.4
|
34
37
|
type: :runtime
|
35
38
|
prerelease: false
|
36
39
|
version_requirements: !ruby/object:Gem::Requirement
|
37
40
|
requirements:
|
41
|
+
- - "~>"
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '5.2'
|
38
44
|
- - ">="
|
39
45
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
46
|
+
version: 5.2.4
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
48
|
name: bundler
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
44
50
|
requirements:
|
45
51
|
- - "~>"
|
46
52
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
53
|
+
version: '2.0'
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 2.0.1
|
48
57
|
type: :development
|
49
58
|
prerelease: false
|
50
59
|
version_requirements: !ruby/object:Gem::Requirement
|
51
60
|
requirements:
|
52
61
|
- - "~>"
|
53
62
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
63
|
+
version: '2.0'
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 2.0.1
|
55
67
|
- !ruby/object:Gem::Dependency
|
56
68
|
name: rake
|
57
69
|
requirement: !ruby/object:Gem::Requirement
|
58
70
|
requirements:
|
59
71
|
- - "~>"
|
60
72
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
73
|
+
version: '13.0'
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 13.0.1
|
62
77
|
type: :development
|
63
78
|
prerelease: false
|
64
79
|
version_requirements: !ruby/object:Gem::Requirement
|
65
80
|
requirements:
|
66
81
|
- - "~>"
|
67
82
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
83
|
+
version: '13.0'
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: 13.0.1
|
69
87
|
- !ruby/object:Gem::Dependency
|
70
88
|
name: rspec
|
71
89
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,7 +113,7 @@ dependencies:
|
|
95
113
|
- !ruby/object:Gem::Version
|
96
114
|
version: 0.10.4
|
97
115
|
description: Wrapper around interacting with APIs
|
98
|
-
email:
|
116
|
+
email:
|
99
117
|
executables: []
|
100
118
|
extensions: []
|
101
119
|
extra_rdoc_files: []
|
@@ -124,7 +142,7 @@ files:
|
|
124
142
|
homepage: https://github.com/nbwar/ezapi
|
125
143
|
licenses: []
|
126
144
|
metadata: {}
|
127
|
-
post_install_message:
|
145
|
+
post_install_message:
|
128
146
|
rdoc_options: []
|
129
147
|
require_paths:
|
130
148
|
- lib
|
@@ -139,9 +157,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
139
157
|
- !ruby/object:Gem::Version
|
140
158
|
version: '0'
|
141
159
|
requirements: []
|
142
|
-
rubyforge_project:
|
160
|
+
rubyforge_project:
|
143
161
|
rubygems_version: 2.6.14
|
144
|
-
signing_key:
|
162
|
+
signing_key:
|
145
163
|
specification_version: 4
|
146
164
|
summary: Easily Communicate with APIs
|
147
165
|
test_files: []
|