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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dd0e863d15f84b3d91b14044a869b7ee8fb9fc5c
4
- data.tar.gz: 3185d9b9049423302549193892651662ecd1d5c7
3
+ metadata.gz: f0962a3e1cd704e7372c2012eb7aac9cd3ad7347
4
+ data.tar.gz: 4d7c95b461c471028caaed8cc72244a1a731453b
5
5
  SHA512:
6
- metadata.gz: a102a33c948d24e81d3cfa726492c935d96e0809ad10cc108483bd23b38f66d8c5db45c5a2a55a5bfc8439638ef8ce636f2c3f76cac0ffcb9be5eba97291dc8c
7
- data.tar.gz: d7161902d22e7dda56f3fce34277ecdcde90f6cb501e797b7f7da40d76a7aa22716c50c284cfc3601020b78e07880f4a01dbff83239e22d17f9f9dee32c55028
6
+ metadata.gz: 550de5432b19cd0c3e130b45b07b5a45d45bf04e7bb9f4a2360700edd3d8d95057eaba43badfe808e584653831bc606b3d69d2add8c460347d93b3ec3454c62d
7
+ data.tar.gz: 65983059d16a94236aeeef36533e39447fcd941eea57a259d65e16d438ae80ddd596f9ca1e5d1f6cd3f9d7ca0828f9075318a07054e93d4162b757189d0c4123
@@ -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 "bundler", "~> 1.16"
35
- spec.add_development_dependency "rake", "~> 10.0"
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
@@ -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 = "1.0.3"
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: 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: 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
@@ -44,28 +44,34 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.16'
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: '1.16'
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: '10.0'
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: '10.0'
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: []