nylas 6.0.0.beta.1 → 6.0.0.beta.2

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: 8695c7d105dd1621576a1cc5dfa3bd2d7ff482d171763bf9273a3797cc320675
4
- data.tar.gz: 88bda22c310af6c54061db72b6c19a5c4f8abed1e8e6a8518f4a4585d1ea6c38
3
+ metadata.gz: 6fa40920f9d190cc73e988935bdd235ad3a4bb342c8762be925fdb81f8c1c45f
4
+ data.tar.gz: 6bf0722aae4e7b9699abeda1e25436ac62256aa7c14a1f9d330eff2d8908c9c6
5
5
  SHA512:
6
- metadata.gz: cc213a177a26c78864c48e678f6ff2d01cf9a3f29305cb2169b192018a531f3b5d106dab1fdfd350b323e1bbb69c4069ed13ec8ff5319742805c559077d52ac5
7
- data.tar.gz: 2d51f8063938e335b00d9331f1beb9fb7c317c0af0954544c8ed40e3e4e14341452cdcf9be98a61ac4f9aae24d98eb0661434aea622a495fbd7f531d1293ec5c
6
+ metadata.gz: 3fb796e62d9c6545d5632c0112ac328ee69ce0fbda26e82a31ce4adf790bea75096a172a7252a4b75da850cf6268a864ea6365137e40f8ff6e7682767bc7f3da
7
+ data.tar.gz: 13b91300931cc49f195f1a3ab01d5c72fe7100bf0c83dcfac5acdd965c0da4b2a7c547bc0611482916c3de8a6f7255604f9ca47f3894f94aba09a483da1f8c73
data/lib/nylas/client.rb CHANGED
@@ -1,10 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "resources/calendars"
4
+ require_relative "resources/connectors"
5
+ require_relative "resources/messages"
4
6
  require_relative "resources/events"
5
7
  require_relative "resources/auth"
6
8
  require_relative "resources/webhooks"
7
9
  require_relative "resources/applications"
10
+ require_relative "resources/folders"
8
11
 
9
12
  module Nylas
10
13
  # Methods to retrieve data from the Nylas API as Ruby objects.
@@ -13,15 +16,15 @@ module Nylas
13
16
 
14
17
  # Initializes a client session.
15
18
  #
16
- # @param api_key [Hash, nil] API key to use for the client session.
17
- # @param api_uri [Hash] Client session's host.
18
- # @param timeout [Hash, nil] Timeout value to use for the client session.
19
- def initialize(api_key: nil,
19
+ # @param api_key [String, nil] API key to use for the client session.
20
+ # @param api_uri [String] Client session's host.
21
+ # @param timeout [String, nil] Timeout value to use for the client session.
22
+ def initialize(api_key:,
20
23
  api_uri: Config::DEFAULT_REGION_URL,
21
24
  timeout: nil)
22
25
  @api_key = api_key
23
26
  @api_uri = api_uri
24
- @timeout = timeout
27
+ @timeout = timeout || 30
25
28
  end
26
29
 
27
30
  # The application resources for your Nylas application.
@@ -31,6 +34,20 @@ module Nylas
31
34
  Applications.new(self)
32
35
  end
33
36
 
37
+ # The attachments resources for your Nylas application.
38
+ #
39
+ # @return [Nylas::Attachments] Attachment resources for your Nylas application.
40
+ def attachments
41
+ Attachments.new(self)
42
+ end
43
+
44
+ # The auth resources for your Nylas application.
45
+ #
46
+ # @return [Nylas::Auth] Auth resources for your Nylas application.
47
+ def auth
48
+ Auth.new(self)
49
+ end
50
+
34
51
  # The calendar resources for your Nylas application.
35
52
  #
36
53
  # @return [Nylas::Calendars] Calendar resources for your Nylas application.
@@ -38,6 +55,20 @@ module Nylas
38
55
  Calendars.new(self)
39
56
  end
40
57
 
58
+ # The connector resources for your Nylas application.
59
+ #
60
+ # @return [Nylas::Connectors] Connector resources for your Nylas application.
61
+ def connectors
62
+ Connectors.new(self)
63
+ end
64
+
65
+ # The draft resources for your Nylas application.
66
+ #
67
+ # @return [Nylas::Drafts] Draft resources for your Nylas application.
68
+ def drafts
69
+ Drafts.new(self)
70
+ end
71
+
41
72
  # The event resources for your Nylas application.
42
73
  #
43
74
  # @return [Nylas::Events] Event resources for your Nylas application
@@ -45,11 +76,25 @@ module Nylas
45
76
  Events.new(self)
46
77
  end
47
78
 
48
- # The auth resources for your Nylas application.
79
+ # The folder resources for your Nylas application.
49
80
  #
50
- # @return [Nylas::Auth] Auth resources for your Nylas application.
51
- def auth
52
- Auth.new(self)
81
+ # @return [Nylas::Folder] Folder resources for your Nylas application
82
+ def folders
83
+ Folders.new(self)
84
+ end
85
+
86
+ # The message resources for your Nylas application.
87
+ #
88
+ # @return [Nylas::Messages] Message resources for your Nylas application
89
+ def messages
90
+ Messages.new(self)
91
+ end
92
+
93
+ # The thread resources for your Nylas application.
94
+ #
95
+ # @return [Nylas::Threads] Thread resources for your Nylas application.
96
+ def threads
97
+ Threads.new(self)
53
98
  end
54
99
 
55
100
  # The webhook resources for your Nylas application.
data/lib/nylas/errors.rb CHANGED
@@ -3,17 +3,24 @@
3
3
  module Nylas
4
4
  Error = Class.new(::StandardError)
5
5
 
6
- class JsonParseError < Error; end
6
+ # Base error class for API-related errors.
7
+ class AbstractNylasApiError < Error; end
7
8
 
8
- # Base class to inflate the standard errors returned from the Nylas API.
9
- class NylasApiError < Error
9
+ # Base error class for SDK-related errors.
10
+ class AbstractNylasSdkError < Error; end
11
+
12
+ # Error class representing a failed parse of a JSON response from the Nylas API.
13
+ class JsonParseError < AbstractNylasSdkError; end
14
+
15
+ # Error class representing a failed response from the Nylas API.
16
+ class NylasApiError < AbstractNylasApiError
10
17
  attr_accessor :type, :request_id, :provider_error, :status_code
11
18
 
12
19
  # Initializes an error and assigns the given attributes to it.
13
20
  #
14
21
  # @param type [Hash] Error type.
15
22
  # @param message [String] Error message.
16
- # @param status_code [Hash] Error status code.
23
+ # @param status_code [Integer] Error status code.
17
24
  # @param provider_error [String, nil] Provider error.
18
25
  # @param request_id [Hash, nil] The ID of the request.
19
26
  def initialize(type, message, status_code, provider_error = nil, request_id = nil)
@@ -27,7 +34,7 @@ module Nylas
27
34
  # Parses the error response.
28
35
  #
29
36
  # @param response [Hash] Response from the Nylas API.
30
- # @param status_code [String] Error status code.
37
+ # @param status_code [Integer] Error status code.
31
38
  def self.parse_error_response(response, status_code)
32
39
  new(
33
40
  response["type"],
@@ -38,17 +45,17 @@ module Nylas
38
45
  end
39
46
  end
40
47
 
41
- # Base class to inflate the standard errors returned from the Nylas OAuth integration.
42
- class NylasOAuthError < Error
48
+ # Error class representing a failed response from the Nylas OAuth integration.
49
+ class NylasOAuthError < AbstractNylasApiError
43
50
  attr_accessor :error, :error_description, :error_uri, :error_code, :status_code
44
51
 
45
52
  # Initializes an error and assigns the given attributes to it.
46
53
  #
47
- # @param error [Hash] Error type.
54
+ # @param error [String] Error type.
48
55
  # @param error_description [String] Description of the error.
49
- # @param error_uri [Hash] Error URI.
50
- # @param error_code [Hash] Error code.
51
- # @param status_code [Hash] Error status code.
56
+ # @param error_uri [String] Error URI.
57
+ # @param error_code [String] Error code.
58
+ # @param status_code [String] Error status code.
52
59
  def initialize(error, error_description, error_uri, error_code, status_code)
53
60
  super(error_description)
54
61
  self.error = error
@@ -59,5 +66,20 @@ module Nylas
59
66
  end
60
67
  end
61
68
 
69
+ # Error class representing a timeout from the Nylas SDK.
70
+ class NylasSdkTimeoutError < AbstractNylasSdkError
71
+ attr_accessor :url, :timeout
72
+
73
+ # Initializes an error and assigns the given attributes to it.
74
+ # @param url [String] URL that timed out.
75
+ # @param timeout [Integer] Timeout in seconds.
76
+ # @return [NylasSdkTimeoutError] The error object.
77
+ def initialize(url, timeout)
78
+ super("Nylas SDK timed out before receiving a response from the server.")
79
+ self.url = url
80
+ self.timeout = timeout
81
+ end
82
+ end
83
+
62
84
  HTTP_SUCCESS_CODES = [200, 201, 202, 302].freeze
63
85
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative "http_client"
4
+
3
5
  module Nylas
4
6
  # Allows resources to perform API operations on the Nylas API endpoints without exposing the HTTP
5
7
  # client to the end user.
@@ -13,7 +15,7 @@ module Nylas
13
15
  #
14
16
  # @param path [String] Destination path for the call.
15
17
  # @param query_params [Hash, {}] Query params to pass to the call.
16
- # @return [Array(Hash, String)] List of Nylas objects and API Request ID.
18
+ # @return Nylas data object and API Request ID.
17
19
  def get(path:, query_params: {})
18
20
  response = execute(
19
21
  method: :get,
@@ -39,7 +41,7 @@ module Nylas
39
41
  # @param query_params [Hash, {}] Query params to pass to the call.
40
42
  # @param request_body [String, Hash, nil] Request body to pass to the call.
41
43
  # @param headers [Hash, {}] Additional HTTP headers to include in the payload.
42
- # @return [Array(Hash, String)] List of Nylas objects and API Request ID.
44
+ # @return Nylas data object and API Request ID.
43
45
  def post(path:, query_params: {}, request_body: nil, headers: {})
44
46
  response = execute(
45
47
  method: :post,
@@ -66,7 +68,7 @@ module Nylas
66
68
  # @param query_params [Hash, {}] Query params to pass to the call.
67
69
  # @param request_body [String, Hash, nil] Request body to pass to the call.
68
70
  # @param headers [Hash, {}] Additional HTTP headers to include in the payload.
69
- # @return [Array(Hash, String)] List of Nylas objects and API Request ID.
71
+ # @return Nylas data object and API Request ID.
70
72
  def put(path:, query_params: {}, request_body: nil, headers: {})
71
73
  response = execute(
72
74
  method: :put,
@@ -93,7 +95,7 @@ module Nylas
93
95
  # @param query_params [Hash, {}] Query params to pass to the call.
94
96
  # @param request_body [String, Hash, nil] Request body to pass to the call.
95
97
  # @param headers [Hash, {}] Additional HTTP headers to include in the payload.
96
- # @return [Array(Hash, String)] List of Nylas objects and API Request ID.
98
+ # @return Nylas data object and API Request ID.
97
99
  def patch(path:, query_params: {}, request_body: nil, headers: {})
98
100
  response = execute(
99
101
  method: :patch,
@@ -119,7 +121,7 @@ module Nylas
119
121
  # @param path [String] Destination path for the call.
120
122
  # @param query_params [Hash, {}] Query params to pass to the call.
121
123
  # @param headers [Hash, {}] Additional HTTP headers to include in the payload.
122
- # @return [Array(Hash, String)] List of Nylas objects and API Request ID.
124
+ # @return Nylas data object and API Request ID.
123
125
  def delete(path:, query_params: {}, headers: {})
124
126
  response = execute(
125
127
  method: :delete,
@@ -5,6 +5,7 @@ require "rest-client"
5
5
  require_relative "../errors"
6
6
  require_relative "../version"
7
7
 
8
+ # Module for working with HTTP Client
8
9
  module Nylas
9
10
  require "yajl"
10
11
  require "base64"
@@ -22,32 +23,57 @@ module Nylas
22
23
  # @param method [Symbol] HTTP method for the API call. Either :get, :post, :delete, or :patch.
23
24
  # @param path [String, nil] Relative path from the API Base. This is the preferred way to execute
24
25
  # arbitrary or-not-yet-SDK-ified API commands.
26
+ # @param timeout [Integer, nil] Timeout value to send with the request.
25
27
  # @param headers [Hash, {}] Additional HTTP headers to include in the payload.
26
28
  # @param query [Hash, {}] Hash of names and values to include in the query section of the URI
27
29
  # fragment.
28
- # @param payload [String, Hash, nil] Body to send with the request.
30
+ # @param payload [Hash, nil] Body to send with the request.
29
31
  # @param api_key [Hash, nil] API key to send with the request.
30
- # @param timeout [Hash, nil] Timeout value to send with the request.
31
32
  # @return [Object] Parsed JSON response from the API.
32
- def execute(method:, path: nil, headers: {}, query: {}, payload: nil, api_key: nil, timeout: nil)
33
+ def execute(method:, path:, timeout:, headers: {}, query: {}, payload: nil, api_key: nil)
33
34
  request = build_request(method: method, path: path, headers: headers,
34
35
  query: query, payload: payload, api_key: api_key, timeout: timeout)
35
- rest_client_execute(**request) do |response, _request, result|
36
- content_type = nil
37
-
38
- if response.headers && response.headers[:content_type]
39
- content_type = response.headers[:content_type].downcase
36
+ begin
37
+ rest_client_execute(**request) do |response, _request, result|
38
+ content_type = nil
39
+ if response.headers && response.headers[:content_type]
40
+ content_type = response.headers[:content_type].downcase
41
+ end
42
+
43
+ parse_json_evaluate_error(result.code.to_i, response, path, content_type)
40
44
  end
45
+ rescue Timeout::Error => _e
46
+ raise Nylas::NylasSdkTimeoutError.new(request.path, timeout)
47
+ end
48
+ end
41
49
 
42
- begin
43
- response = parse_response(response) if content_type == "application/json"
44
- rescue Nylas::JsonParseError
45
- handle_failed_response(result, response, path)
46
- raise
50
+ # Sends a request to the Nylas API, specifically for downloading data.
51
+ # This method supports streaming the response by passing a block, which will be executed
52
+ # with each chunk of the response body as it is read. If no block is provided, the entire
53
+ # response body is returned.
54
+ #
55
+ # @param path [String] Relative path from the API Base. This is the preferred way to execute
56
+ # arbitrary or-not-yet-SDK-ified API commands.
57
+ # @param timeout [Integer] Timeout value to send with the request.
58
+ # @param headers [Hash, {}] Additional HTTP headers to include in the payload.
59
+ # @param query [Hash, {}] Hash of names and values to include in the query section of the URI
60
+ # fragment.
61
+ # @param api_key [Hash, nil] API key to send with the request.
62
+ # @yieldparam chunk [String] A chunk of the response body.
63
+ # @return [nil, String] Returns nil when a block is given (streaming mode).
64
+ # When no block is provided, the return is the entire raw response body.
65
+ def download_request(path:, timeout:, headers: {}, query: {}, api_key: nil, &block)
66
+ request, uri, http = setup_http(path, timeout, headers, query, api_key)
67
+
68
+ begin
69
+ http.start do |setup_http|
70
+ get_request = Net::HTTP::Get.new(uri)
71
+ request[:headers].each { |key, value| get_request[key] = value }
72
+
73
+ handle_response(setup_http, get_request, path, &block)
47
74
  end
48
-
49
- handle_failed_response(result, response, path)
50
- return response
75
+ rescue Net::OpenTimeout, Net::ReadTimeout
76
+ raise Nylas::NylasSdkTimeoutError.new(request[:url], timeout)
51
77
  end
52
78
  end
53
79
 
@@ -58,8 +84,8 @@ module Nylas
58
84
  # @param headers [Hash, {}] Additional HTTP headers to include in the payload.
59
85
  # @param query [Hash, {}] Hash of names and values to include in the query section of the URI
60
86
  # fragment.
61
- # @param payload [String, Hash, nil] Body to send with the request.
62
- # @param timeout [Hash, nil] Timeout value to send with the request.
87
+ # @param payload [Hash, nil] Body to send with the request.
88
+ # @param timeout [Integer, nil] Timeout value to send with the request.
63
89
  # @param api_key [Hash, nil] API key to send with the request.
64
90
  # @return [Object] The request information after processing. This includes an updated payload
65
91
  # and headers.
@@ -69,17 +95,21 @@ module Nylas
69
95
  url = path
70
96
  url = add_query_params_to_url(url, query)
71
97
  resulting_headers = default_headers.merge(headers).merge(auth_header(api_key))
72
- serialized_payload = payload&.to_json
98
+ if !payload.nil? && !payload["multipart"]
99
+ payload = payload&.to_json
100
+ resulting_headers["Content-type"] = "application/json"
101
+ elsif !payload.nil? && payload["multipart"]
102
+ payload.delete("multipart")
103
+ end
73
104
 
74
- { method: method, url: url, payload: serialized_payload, headers: resulting_headers, timeout: timeout }
105
+ { method: method, url: url, payload: payload, headers: resulting_headers, timeout: timeout }
75
106
  end
76
107
 
77
108
  # Sets the default headers for API requests.
78
109
  def default_headers
79
110
  @default_headers ||= {
80
111
  "X-Nylas-API-Wrapper" => "ruby",
81
- "User-Agent" => "Nylas Ruby SDK #{Nylas::VERSION} - #{RUBY_VERSION}",
82
- "Content-type" => "application/json"
112
+ "User-Agent" => "Nylas Ruby SDK #{Nylas::VERSION} - #{RUBY_VERSION}"
83
113
  }
84
114
  end
85
115
 
@@ -106,15 +136,45 @@ module Nylas
106
136
  headers: headers, timeout: timeout, &block)
107
137
  end
108
138
 
109
- # Handles failed responses from the Nylas API.
110
- def handle_failed_response(result, response, path)
111
- http_code = result.code.to_i
139
+ def setup_http(path, timeout, headers, query, api_key)
140
+ request = build_request(method: :get, path: path, headers: headers,
141
+ query: query, api_key: api_key, timeout: timeout)
142
+ uri = URI(request[:url])
143
+ http = Net::HTTP.new(uri.host, uri.port)
144
+ http.use_ssl = true
145
+ http.read_timeout = timeout
146
+ http.open_timeout = timeout
147
+ [request, uri, http]
148
+ end
112
149
 
113
- handle_anticipated_failure_mode(http_code, response, path)
150
+ def handle_response(http, get_request, path, &block)
151
+ http.request(get_request) do |response|
152
+ if response.is_a?(Net::HTTPSuccess)
153
+ return response.body unless block_given?
154
+
155
+ response.read_body(&block)
156
+ else
157
+ parse_json_evaluate_error(response.code.to_i, response.body, path, response["Content-Type"])
158
+ break
159
+ end
160
+ end
161
+ end
162
+
163
+ # Parses the response from the Nylas API and evaluates for errors.
164
+ def parse_json_evaluate_error(http_code, response, path, content_type = nil)
165
+ begin
166
+ response = parse_response(response) if content_type == "application/json"
167
+ rescue Nylas::JsonParseError
168
+ handle_failed_response(http_code, response, path)
169
+ raise
170
+ end
171
+
172
+ handle_failed_response(http_code, response, path)
173
+ response
114
174
  end
115
175
 
116
- # Handles anticipated failure states in the Nylas API.
117
- def handle_anticipated_failure_mode(http_code, response, path)
176
+ # Handles failed responses from the Nylas API.
177
+ def handle_failed_response(http_code, response, path)
118
178
  return if HTTP_SUCCESS_CODES.include?(http_code)
119
179
 
120
180
  case response
@@ -133,19 +193,23 @@ module Nylas
133
193
  NylasOAuthError.new(response[:error], response[:error_description], response[:error_uri],
134
194
  response[:error_code], status_code)
135
195
  else
136
- error_obj = response[:error]
137
- provider_error = error_obj.fetch(:provider_error, nil)
138
-
139
- NylasApiError.new(error_obj[:type], error_obj[:message], status_code, provider_error,
140
- response[:request_id])
196
+ throw_error(response, status_code)
141
197
  end
142
198
  end
143
199
 
200
+ def throw_error(response, status_code)
201
+ error_obj = response[:error]
202
+ provider_error = error_obj.fetch(:provider_error, nil)
203
+
204
+ NylasApiError.new(error_obj[:type], error_obj[:message], status_code, provider_error,
205
+ response[:request_id])
206
+ end
207
+
144
208
  # Adds query parameters to a URL.
145
209
  #
146
210
  # @return [String] Processed URL, including query params.
147
211
  def add_query_params_to_url(url, query)
148
- unless query.empty?
212
+ unless query.nil? || query.empty?
149
213
  uri = URI.parse(url)
150
214
  query = custom_params(query)
151
215
  params = URI.decode_www_form(uri.query || "") + query.to_a
@@ -13,7 +13,7 @@ module Nylas
13
13
 
14
14
  # Initializes the application.
15
15
  def initialize(sdk_instance)
16
- super("applications", sdk_instance)
16
+ super(sdk_instance)
17
17
  @redirect_uris = RedirectUris.new(sdk_instance)
18
18
  end
19
19
 
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "resource"
4
+ require_relative "../handler/api_operations"
5
+
6
+ module Nylas
7
+ # Nylas Attachment API
8
+ class Attachments < Resource
9
+ include ApiOperations::Get
10
+
11
+ # Return metadata of an attachment.
12
+ #
13
+ # @param identifier [String] Grant ID or email account to query.
14
+ # @param attachment_id [String] The id of the attachment to retrieve.
15
+ # @param query_params [Hash] The query parameters to include in the request.
16
+ # @return [Array(Hash, String)] The attachment and API request ID.
17
+ def find(identifier:, attachment_id:, query_params:)
18
+ get(
19
+ path: "#{api_uri}/v3/grants/#{identifier}/attachments/#{attachment_id}",
20
+ query_params: query_params
21
+ )
22
+ end
23
+
24
+ # Download the attachment data.
25
+ #
26
+ # This method supports streaming the download by passing a block, which will
27
+ # be called with each chunk of the response body as it is read. If no block
28
+ # is given, the entire response will be read into memory and returned (not recommended
29
+ # for large files).
30
+ #
31
+ # @param identifier [String] Grant ID or email account to query.
32
+ # @param attachment_id [String] The ID of the attachment to be downloaded.
33
+ # @param query_params [Hash] The query parameters to include in the request.
34
+ # @yieldparam chunk [String] A chunk of the response body.
35
+ # @return [nil, String] Returns nil when a block is given (streaming mode).
36
+ # When no block is provided, the return is the entire raw response body.
37
+ def download(identifier:, attachment_id:, query_params:, &block)
38
+ download_request(
39
+ path: "#{api_uri}/v3/grants/#{identifier}/attachments/#{attachment_id}/download",
40
+ query: query_params,
41
+ api_key: api_key,
42
+ timeout: timeout,
43
+ &block
44
+ )
45
+ end
46
+
47
+ # Download the attachment as a byte array.
48
+ #
49
+ # @param identifier [String] Grant ID or email account to query.
50
+ # @param attachment_id [String] The ID of the attachment to be downloaded.
51
+ # @param query_params [Hash] The query parameters to include in the request.
52
+ # @return [nil, Array(Integer)] Returns nil when a block is given (streaming mode).
53
+ # When no block is provided, the return is the entire raw response body.
54
+ def download_bytes(identifier:, attachment_id:, query_params:)
55
+ data = download_request(
56
+ path: "#{api_uri}/v3/grants/#{identifier}/attachments/#{attachment_id}/download",
57
+ query: query_params,
58
+ api_key: api_key,
59
+ timeout: timeout
60
+ )
61
+
62
+ data&.bytes
63
+ end
64
+ end
65
+ end
@@ -18,7 +18,7 @@ module Nylas
18
18
 
19
19
  # Initializes Auth.
20
20
  def initialize(sdk_instance)
21
- super("auth", sdk_instance)
21
+ super(sdk_instance)
22
22
 
23
23
  @grants = Grants.new(sdk_instance)
24
24
  end
@@ -156,18 +156,32 @@ module Nylas
156
156
  "access_type" => config[:access_type] || "online",
157
157
  "response_type" => "code"
158
158
  }
159
+ set_params(config)
159
160
 
161
+ URI.encode_www_form(params)
162
+ end
163
+
164
+ # Set the parameters for the query
165
+ def set_params(config)
160
166
  params["provider"] = config[:provider] if config[:provider]
167
+ set_config_params(config)
168
+ set_more_config(config)
169
+ end
170
+
171
+ # Set login related configurations
172
+ def set_config_params(config)
161
173
  if config[:login_hint]
162
174
  params["login_hint"] = config[:login_hint]
163
175
  params["include_grant_scopes"] = config[:include_grant_scopes].to_s if config[:include_grant_scopes]
164
176
  end
165
177
  params["scope"] = config[:scope].join(" ") if config[:scope]
178
+ end
179
+
180
+ # More config
181
+ def set_more_config(config)
166
182
  params["prompt"] = config[:prompt] if config[:prompt]
167
183
  params["metadata"] = config[:metadata] if config[:metadata]
168
184
  params["state"] = config[:state] if config[:state]
169
-
170
- URI.encode_www_form(params)
171
185
  end
172
186
 
173
187
  # Hashes the secret for PKCE authentication.