ezapi 0.3.0 → 0.4.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
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: []