ezapi 0.3.0 → 1.0.3
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 +2 -2
- 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 +19 -13
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f0962a3e1cd704e7372c2012eb7aac9cd3ad7347
|
|
4
|
+
data.tar.gz: 4d7c95b461c471028caaed8cc72244a1a731453b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 550de5432b19cd0c3e130b45b07b5a45d45bf04e7bb9f4a2360700edd3d8d95057eaba43badfe808e584653831bc606b3d69d2add8c460347d93b3ec3454c62d
|
|
7
|
+
data.tar.gz: 65983059d16a94236aeeef36533e39447fcd941eea57a259d65e16d438ae80ddd596f9ca1e5d1f6cd3f9d7ca0828f9075318a07054e93d4162b757189d0c4123
|
data/ezapi.gemspec
CHANGED
|
@@ -31,8 +31,8 @@ Gem::Specification.new do |spec|
|
|
|
31
31
|
|
|
32
32
|
spec.add_dependency 'rest-client', '~> 2.0'
|
|
33
33
|
spec.add_dependency 'activesupport', '>= 4.2'
|
|
34
|
-
spec.add_development_dependency
|
|
35
|
-
spec.add_development_dependency "rake", "
|
|
34
|
+
spec.add_development_dependency 'bundler', '~> 2.0', '>= 2.0.1'
|
|
35
|
+
spec.add_development_dependency "rake", ">= 12.3.3"
|
|
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.3
|
|
4
|
+
version: 1.0.3
|
|
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
|
|
@@ -44,28 +44,34 @@ dependencies:
|
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
47
|
+
version: '2.0'
|
|
48
|
+
- - ">="
|
|
49
|
+
- !ruby/object:Gem::Version
|
|
50
|
+
version: 2.0.1
|
|
48
51
|
type: :development
|
|
49
52
|
prerelease: false
|
|
50
53
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
54
|
requirements:
|
|
52
55
|
- - "~>"
|
|
53
56
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '
|
|
57
|
+
version: '2.0'
|
|
58
|
+
- - ">="
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: 2.0.1
|
|
55
61
|
- !ruby/object:Gem::Dependency
|
|
56
62
|
name: rake
|
|
57
63
|
requirement: !ruby/object:Gem::Requirement
|
|
58
64
|
requirements:
|
|
59
|
-
- - "
|
|
65
|
+
- - ">="
|
|
60
66
|
- !ruby/object:Gem::Version
|
|
61
|
-
version:
|
|
67
|
+
version: 12.3.3
|
|
62
68
|
type: :development
|
|
63
69
|
prerelease: false
|
|
64
70
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
71
|
requirements:
|
|
66
|
-
- - "
|
|
72
|
+
- - ">="
|
|
67
73
|
- !ruby/object:Gem::Version
|
|
68
|
-
version:
|
|
74
|
+
version: 12.3.3
|
|
69
75
|
- !ruby/object:Gem::Dependency
|
|
70
76
|
name: rspec
|
|
71
77
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -95,7 +101,7 @@ dependencies:
|
|
|
95
101
|
- !ruby/object:Gem::Version
|
|
96
102
|
version: 0.10.4
|
|
97
103
|
description: Wrapper around interacting with APIs
|
|
98
|
-
email:
|
|
104
|
+
email:
|
|
99
105
|
executables: []
|
|
100
106
|
extensions: []
|
|
101
107
|
extra_rdoc_files: []
|
|
@@ -124,7 +130,7 @@ files:
|
|
|
124
130
|
homepage: https://github.com/nbwar/ezapi
|
|
125
131
|
licenses: []
|
|
126
132
|
metadata: {}
|
|
127
|
-
post_install_message:
|
|
133
|
+
post_install_message:
|
|
128
134
|
rdoc_options: []
|
|
129
135
|
require_paths:
|
|
130
136
|
- lib
|
|
@@ -139,9 +145,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
139
145
|
- !ruby/object:Gem::Version
|
|
140
146
|
version: '0'
|
|
141
147
|
requirements: []
|
|
142
|
-
rubyforge_project:
|
|
148
|
+
rubyforge_project:
|
|
143
149
|
rubygems_version: 2.6.14
|
|
144
|
-
signing_key:
|
|
150
|
+
signing_key:
|
|
145
151
|
specification_version: 4
|
|
146
152
|
summary: Easily Communicate with APIs
|
|
147
153
|
test_files: []
|