nylas 5.13.0 → 5.14.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
  SHA256:
3
- metadata.gz: 4c270504996973ab93d5c1cac213a194f776fb27302010be6eee1a41570204ff
4
- data.tar.gz: 01a2bcc7473080a9fad5c39bd1851487ed1d20f81fab68277a37c6fd5e31c195
3
+ metadata.gz: c0c54fb8e13535027a5f3a6eda146fcf5d71c91b093877c2729d96ae0b2b1292
4
+ data.tar.gz: 9b9457001de3dc893352b50909269d83e418e96b4d9eb09cac23d992217af532
5
5
  SHA512:
6
- metadata.gz: '0485d5539c28e6626cef26ee3b34a3f61eab8c0436f6abddb017ead7034b644efac6502f32fc40236446d04fa7562d615c1fcfc732afbeeee852118874281492'
7
- data.tar.gz: 63229ee0942e29703d6a4a2fd6feafd3f7ce639f13e5fd7387c01c195cd549e6b6cd6a6d931fa2ccf98871c1929b4c3c7cacfe46e1fa3d22ed454c8978f8810f
6
+ metadata.gz: d9ba9746e31db9afd0de0e11180fd547895ee1454b8483b6234ace01a57477a6c9ba26db27ca2c7785e07cc80176b115a34ee0b1a3dc9040e5d21105f1b01704
7
+ data.tar.gz: d25d687696cbc5f6cc95b5e9aadaaf3ad26af664f2550436616997091a7d55d42c519424657e11f1eb008b6cb79496ab83169abc2978f8d6a9be50adc0ce6642
data/lib/nylas/api.rb CHANGED
@@ -36,18 +36,15 @@ module Nylas
36
36
  end
37
37
 
38
38
  def authentication_url(redirect_uri:, scopes:, response_type: "code", login_hint: nil, state: nil,
39
- provider: nil, redirect_on_error: nil)
40
- params = {
41
- client_id: app_id,
42
- redirect_uri: redirect_uri,
43
- response_type: response_type,
44
- login_hint: login_hint
45
- }
39
+ provider: nil, redirect_on_error: nil, disable_provider_selection: nil)
40
+ params = { client_id: app_id, redirect_uri: redirect_uri, response_type: response_type,
41
+ login_hint: login_hint }
46
42
 
47
43
  params[:state] = state if state
48
44
  params[:scopes] = scopes.join(",") if scopes
49
45
  params[:provider] = provider if provider
50
46
  params[:redirect_on_error] = redirect_on_error if redirect_on_error
47
+ params[:disable_provider_selection] = disable_provider_selection if disable_provider_selection
51
48
 
52
49
  "#{api_server}/oauth/authorize?#{URI.encode_www_form(params)}"
53
50
  end
data/lib/nylas/errors.rb CHANGED
@@ -45,7 +45,54 @@ module Nylas
45
45
  self.message = message
46
46
  self.server_error = server_error
47
47
  end
48
+
49
+ def self.parse_error_response(response)
50
+ new(
51
+ response["type"],
52
+ response["message"],
53
+ response["server_error"]
54
+ )
55
+ end
56
+ end
57
+
58
+ # Error class representing a 429 error response, with details on the rate limit
59
+ class RateLimitError < APIError
60
+ attr_accessor :rate_limit
61
+ attr_accessor :rate_limit_reset
62
+
63
+ RATE_LIMIT_LIMIT_HEADER = "x_ratelimit_limit"
64
+ RATE_LIMIT_RESET_HEADER = "x_ratelimit_reset"
65
+
66
+ def initialize(type, message, server_error = nil, rate_limit = nil, rate_limit_reset = nil)
67
+ super(type, message, server_error)
68
+ self.rate_limit = rate_limit
69
+ self.rate_limit_reset = rate_limit_reset
70
+ end
71
+
72
+ def self.parse_error_response(response)
73
+ rate_limit, rate_limit_rest = extract_rate_limit_details(response)
74
+
75
+ new(
76
+ response["type"],
77
+ response["message"],
78
+ response["server_error"],
79
+ rate_limit,
80
+ rate_limit_rest
81
+ )
82
+ end
83
+
84
+ def self.extract_rate_limit_details(response)
85
+ return nil, nil unless response.respond_to?(:headers)
86
+
87
+ rate_limit = response.headers[RATE_LIMIT_LIMIT_HEADER.to_sym].to_i
88
+ rate_limit_rest = response.headers[RATE_LIMIT_RESET_HEADER.to_sym].to_i
89
+
90
+ [rate_limit, rate_limit_rest]
91
+ end
92
+
93
+ private_class_method :extract_rate_limit_details
48
94
  end
95
+
49
96
  AccessDenied = Class.new(APIError)
50
97
  ResourceNotFound = Class.new(APIError)
51
98
  MethodNotAllowed = Class.new(APIError)
@@ -55,7 +102,7 @@ module Nylas
55
102
  TeapotError = Class.new(APIError)
56
103
  RequestTimedOut = Class.new(APIError)
57
104
  MessageRejected = Class.new(APIError)
58
- SendingQuotaExceeded = Class.new(APIError)
105
+ SendingQuotaExceeded = Class.new(RateLimitError)
59
106
  ServiceUnavailable = Class.new(APIError)
60
107
  BadGateway = Class.new(APIError)
61
108
  InternalError = Class.new(APIError)
@@ -189,8 +189,7 @@ module Nylas
189
189
  def parse_response(response)
190
190
  return response if response.is_a?(Enumerable)
191
191
 
192
- json = StringIO.new(response)
193
- Yajl::Parser.new(symbolize_names: true).parse(json)
192
+ Yajl::Parser.new(symbolize_names: true).parse(response)
194
193
  rescue Yajl::ParseError
195
194
  raise Nylas::JsonParseError
196
195
  end
@@ -222,9 +221,18 @@ module Nylas
222
221
  return if HTTP_SUCCESS_CODES.include?(http_code)
223
222
 
224
223
  exception = HTTP_CODE_TO_EXCEPTIONS.fetch(http_code, APIError)
225
- raise exception.new(http_code, response) unless response.is_a?(Hash)
224
+ case response
225
+ when Hash
226
+ raise error_hash_to_exception(exception, response)
227
+ when RestClient::Response
228
+ raise exception.parse_error_response(response)
229
+ else
230
+ raise exception.new(http_code, response)
231
+ end
232
+ end
226
233
 
227
- raise exception.new(
234
+ def error_hash_to_exception(exception, response)
235
+ exception.new(
228
236
  response[:type],
229
237
  response[:message],
230
238
  response.fetch(:server_error, nil)
data/lib/nylas/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Nylas
4
- VERSION = "5.13.0"
4
+ VERSION = "5.14.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nylas
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.13.0
4
+ version: 5.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nylas, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-21 00:00:00.000000000 Z
11
+ date: 2022-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler