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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dd0e863d15f84b3d91b14044a869b7ee8fb9fc5c
4
- data.tar.gz: 3185d9b9049423302549193892651662ecd1d5c7
3
+ metadata.gz: 79decec8840eddfb762b5c6e31a937381c2a6d69
4
+ data.tar.gz: b2c8ad16b37562c59e055a2fffcd37b749125244
5
5
  SHA512:
6
- metadata.gz: a102a33c948d24e81d3cfa726492c935d96e0809ad10cc108483bd23b38f66d8c5db45c5a2a55a5bfc8439638ef8ce636f2c3f76cac0ffcb9be5eba97291dc8c
7
- data.tar.gz: d7161902d22e7dda56f3fce34277ecdcde90f6cb501e797b7f7da40d76a7aa22716c50c284cfc3601020b78e07880f4a01dbff83239e22d17f9f9dee32c55028
6
+ metadata.gz: '06561690e3e153456d544af729e7d0758eb839a06344e0dfbe9c045e840f47babfb2458d0be3c6277ca79484853b570f88ac00b93f1f3c6c0b818d84323a03e6'
7
+ data.tar.gz: cd5f48ca6246bfca7a5f137a775e65fef38ed6f7b1c3dbcb8da4c21d7a570d2202e4b33289bea51efe1eb158adc41af45464894d94d1335de931d3650412e1c8
@@ -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', '>= 4.2'
34
- spec.add_development_dependency "bundler", "~> 1.16"
35
- spec.add_development_dependency "rake", "~> 10.0"
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
@@ -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
@@ -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
- raise(AuthenticationError, "API key is not set for #{self.app_name}.") unless self.key
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(method: method, url: full_url, payload: params.to_json, headers: request_headers)
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, JSON.parse(response_body))
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
- URI.join(base_url, path).to_s
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(body)
66
- body['message']
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, message)
78
+ when 400, 404, 422
79
+ raise(InvalidRequestError.new(message, body: body, code: code ))
74
80
  when 401
75
- raise(AuthenticationError, message)
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, message)
85
+ raise(ApiError.new(message, body: body, code: code ))
78
86
  end
79
87
  end
80
88
 
@@ -1,7 +1,15 @@
1
1
  module EZApi
2
- class EZApiError < StandardError;end
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
@@ -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
- def id=(value)
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
@@ -1,3 +1,3 @@
1
1
  module EZApi
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
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.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: 2018-10-12 00:00:00.000000000 Z
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: '4.2'
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: '4.2'
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: '1.16'
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: '1.16'
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: '10.0'
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: '10.0'
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: []