vonage 7.28.0 → 8.0.0.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +89 -476
  3. data/lib/vonage/applications.rb +4 -12
  4. data/lib/vonage/basic.rb +1 -1
  5. data/lib/vonage/bearer_token.rb +1 -1
  6. data/lib/vonage/client.rb +0 -65
  7. data/lib/vonage/client_error.rb +1 -1
  8. data/lib/vonage/config.rb +1 -9
  9. data/lib/vonage/conversations/events.rb +0 -12
  10. data/lib/vonage/conversations/legs.rb +0 -6
  11. data/lib/vonage/conversations/members.rb +0 -15
  12. data/lib/vonage/conversations/users.rb +0 -15
  13. data/lib/vonage/conversations.rb +0 -30
  14. data/lib/vonage/errors.rb +20 -37
  15. data/lib/vonage/gsm7.rb +1 -1
  16. data/lib/vonage/http.rb +3 -3
  17. data/lib/vonage/jwt.rb +0 -17
  18. data/lib/vonage/key_secret_params.rb +2 -3
  19. data/lib/vonage/keys.rb +1 -11
  20. data/lib/vonage/logger.rb +3 -5
  21. data/lib/vonage/messaging/channels/viber.rb +1 -8
  22. data/lib/vonage/messaging/channels/whats_app.rb +1 -3
  23. data/lib/vonage/messaging/message.rb +0 -1
  24. data/lib/vonage/messaging.rb +4 -34
  25. data/lib/vonage/namespace.rb +68 -137
  26. data/lib/vonage/numbers.rb +17 -40
  27. data/lib/vonage/server_error.rb +1 -1
  28. data/lib/vonage/signature.rb +5 -5
  29. data/lib/vonage/sms.rb +20 -20
  30. data/lib/vonage/version.rb +1 -1
  31. data/lib/vonage/video/archives.rb +53 -18
  32. data/lib/vonage/video/list_response.rb +11 -0
  33. data/lib/vonage/video/moderation.rb +22 -7
  34. data/lib/vonage/video/signals.rb +9 -4
  35. data/lib/vonage/video/streams.rb +12 -6
  36. data/lib/vonage/video.rb +13 -50
  37. data/lib/vonage/voice/actions/connect.rb +5 -34
  38. data/lib/vonage/voice/actions/conversation.rb +4 -10
  39. data/lib/vonage/voice/actions/input.rb +3 -19
  40. data/lib/vonage/voice/actions/notify.rb +3 -8
  41. data/lib/vonage/voice/actions/pay.rb +107 -0
  42. data/lib/vonage/voice/actions/record.rb +4 -52
  43. data/lib/vonage/voice/actions/stream.rb +4 -48
  44. data/lib/vonage/voice/actions/talk.rb +4 -54
  45. data/lib/vonage/voice/talk.rb +1 -11
  46. data/lib/vonage/voice.rb +0 -24
  47. data/lib/vonage.rb +0 -4
  48. data/vonage.gemspec +1 -3
  49. metadata +9 -108
  50. data/lib/vonage/api_error.rb +0 -33
  51. data/lib/vonage/conversation/event/list_response.rb +0 -11
  52. data/lib/vonage/conversation/event.rb +0 -108
  53. data/lib/vonage/conversation/list_response.rb +0 -11
  54. data/lib/vonage/conversation/member/list_response.rb +0 -11
  55. data/lib/vonage/conversation/member.rb +0 -134
  56. data/lib/vonage/conversation/user/conversations_list_response.rb +0 -11
  57. data/lib/vonage/conversation/user/sessions_list_response.rb +0 -11
  58. data/lib/vonage/conversation/user.rb +0 -67
  59. data/lib/vonage/conversation.rb +0 -164
  60. data/lib/vonage/meetings/applications.rb +0 -28
  61. data/lib/vonage/meetings/dial_in_numbers/list_response.rb +0 -11
  62. data/lib/vonage/meetings/dial_in_numbers.rb +0 -26
  63. data/lib/vonage/meetings/recordings.rb +0 -42
  64. data/lib/vonage/meetings/rooms/list_response.rb +0 -11
  65. data/lib/vonage/meetings/rooms.rb +0 -167
  66. data/lib/vonage/meetings/sessions/list_response.rb +0 -11
  67. data/lib/vonage/meetings/sessions.rb +0 -31
  68. data/lib/vonage/meetings/themes/list_response.rb +0 -11
  69. data/lib/vonage/meetings/themes.rb +0 -239
  70. data/lib/vonage/meetings.rb +0 -50
  71. data/lib/vonage/messaging/channels/rcs.rb +0 -42
  72. data/lib/vonage/network_authentication/client_authentication.rb +0 -39
  73. data/lib/vonage/network_authentication/server_authentication.rb +0 -47
  74. data/lib/vonage/network_authentication.rb +0 -22
  75. data/lib/vonage/network_number_verification.rb +0 -92
  76. data/lib/vonage/network_sim_swap.rb +0 -84
  77. data/lib/vonage/number_insight_2.rb +0 -36
  78. data/lib/vonage/proactive_connect/events/list_response.rb +0 -11
  79. data/lib/vonage/proactive_connect/events.rb +0 -71
  80. data/lib/vonage/proactive_connect/item.rb +0 -116
  81. data/lib/vonage/proactive_connect/items/file_response.rb +0 -32
  82. data/lib/vonage/proactive_connect/items/list_response.rb +0 -11
  83. data/lib/vonage/proactive_connect/items.rb +0 -116
  84. data/lib/vonage/proactive_connect/list.rb +0 -186
  85. data/lib/vonage/proactive_connect/lists/list_response.rb +0 -11
  86. data/lib/vonage/proactive_connect/lists.rb +0 -38
  87. data/lib/vonage/proactive_connect.rb +0 -43
  88. data/lib/vonage/subaccounts/balance_transfers/list_response.rb +0 -11
  89. data/lib/vonage/subaccounts/credit_transfers/list_response.rb +0 -11
  90. data/lib/vonage/subaccounts/list_response.rb +0 -15
  91. data/lib/vonage/subaccounts.rb +0 -203
  92. data/lib/vonage/users/list_response.rb +0 -11
  93. data/lib/vonage/users.rb +0 -156
  94. data/lib/vonage/verify2/channels/email.rb +0 -36
  95. data/lib/vonage/verify2/channels/silent_auth.rb +0 -45
  96. data/lib/vonage/verify2/channels/sms.rb +0 -63
  97. data/lib/vonage/verify2/channels/voice.rb +0 -32
  98. data/lib/vonage/verify2/channels/whats_app.rb +0 -39
  99. data/lib/vonage/verify2/channels/whats_app_interactive.rb +0 -32
  100. data/lib/vonage/verify2/start_verification_options.rb +0 -63
  101. data/lib/vonage/verify2/template_fragments/list_response.rb +0 -11
  102. data/lib/vonage/verify2/template_fragments.rb +0 -125
  103. data/lib/vonage/verify2/templates/list_response.rb +0 -11
  104. data/lib/vonage/verify2/templates.rb +0 -86
  105. data/lib/vonage/verify2/workflow.rb +0 -39
  106. data/lib/vonage/verify2/workflow_builder.rb +0 -25
  107. data/lib/vonage/verify2.rb +0 -112
  108. data/lib/vonage/video/archives/list_response.rb +0 -11
  109. data/lib/vonage/video/broadcasts/list_response.rb +0 -11
  110. data/lib/vonage/video/broadcasts.rb +0 -75
  111. data/lib/vonage/video/captions.rb +0 -67
  112. data/lib/vonage/video/renders/list_response.rb +0 -11
  113. data/lib/vonage/video/renders.rb +0 -107
  114. data/lib/vonage/video/sip.rb +0 -48
  115. data/lib/vonage/video/streams/list_response.rb +0 -11
  116. data/lib/vonage/video/web_socket.rb +0 -61
data/lib/vonage/errors.rb CHANGED
@@ -1,25 +1,14 @@
1
1
  # typed: strict
2
2
  # frozen_string_literal: true
3
- require "json"
3
+ require 'json'
4
4
 
5
5
  module Vonage
6
6
  module Errors
7
7
  extend T::Sig
8
8
 
9
- sig do
10
- params(
11
- response:
12
- T.any(
13
- Net::HTTPUnauthorized,
14
- Net::HTTPClientError,
15
- Net::HTTPServerError,
16
- T.untyped
17
- )
18
- ).returns(Vonage::Error)
19
- end
9
+ sig {params(response: T.any(Net::HTTPUnauthorized, Net::HTTPClientError, Net::HTTPServerError, T.untyped)).returns(Vonage::Error)}
20
10
  def self.parse(response)
21
- exception_class =
22
- case response
11
+ exception_class = case response
23
12
  when Net::HTTPUnauthorized
24
13
  AuthenticationError
25
14
  when Net::HTTPClientError
@@ -27,40 +16,34 @@ module Vonage
27
16
  when Net::HTTPServerError
28
17
  ServerError
29
18
  else
30
- APIError
19
+ Error
31
20
  end
32
21
 
33
- message = response.content_type.to_s.include?("json") ? set_message(response) : ""
34
-
35
- exception_class.new(message, http_response: response)
36
- end
37
-
38
- def self.set_message(response)
39
- hash = ::JSON.parse(response.body)
40
-
41
- if hash.key?("error_title")
42
- hash["error_title"]
43
- elsif hash.key?("error-code-label")
44
- hash["error-code-label"]
45
- elsif hash.key?("description")
46
- hash["description"]
47
- elsif hash.key?("message")
48
- hash["message"]
49
- elsif problem_details?(hash)
50
- problem_details_message(hash)
51
- else
52
- ""
22
+ message = if response.content_type == 'application/json'
23
+ hash = ::JSON.parse(response.body)
24
+
25
+ if hash.key?('error_title')
26
+ hash['error_title']
27
+ elsif hash.key?('error-code-label')
28
+ hash['error-code-label']
29
+ elsif hash.key?('description')
30
+ hash['description']
31
+ elsif problem_details?(hash)
32
+ problem_details_message(hash)
33
+ end
53
34
  end
35
+
36
+ exception_class.new(message)
54
37
  end
55
38
 
56
39
  sig { params(hash: T::Hash[String, T.untyped]).returns(T::Boolean) }
57
40
  def self.problem_details?(hash)
58
- hash.key?("title") && hash.key?("detail") && hash.key?("type")
41
+ hash.key?('title') && hash.key?('detail') && hash.key?('type')
59
42
  end
60
43
 
61
44
  sig { params(hash: T::Hash[String, T.untyped]).returns(String) }
62
45
  def self.problem_details_message(hash)
63
- "#{hash["title"]}. #{hash["detail"]} See #{hash["type"]} for more info, or email support@vonage.com if you have any questions."
46
+ "#{hash['title']}. #{hash['detail']} See #{hash['type']} for more info, or email support@nexmo.com if you have any questions."
64
47
  end
65
48
  end
66
49
 
data/lib/vonage/gsm7.rb CHANGED
@@ -4,7 +4,7 @@ module Vonage
4
4
  module GSM7
5
5
  extend T::Sig
6
6
 
7
- CHARACTERS = "\n\f\r !\"\#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_abcdefghijklmnopqrstuvwxyz{|}~ ¡£¤¥§¿ÄÅÆÇÉÑÖØÜßàäåæèéìñòöøùüΓΔΘΛΞΠΣΦΨΩ€"
7
+ CHARACTERS = "\n\f\r !\"\#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_abcdefghijklmnopqrstuvwxyz{|}~ ¡£¤¥§¿ÄÅÆÉÑÖØÜßàäåæçèéìñòöøùüΓΔΘΛΞΠΣΦΨΩ€"
8
8
 
9
9
  REGEXP = /\A[#{Regexp.escape(CHARACTERS)}]*\z/
10
10
 
data/lib/vonage/http.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # typed: strict
2
2
  # frozen_string_literal: true
3
- require 'net/http/persistent'
3
+ require 'net/http'
4
4
 
5
5
  module Vonage
6
6
  module HTTP
@@ -21,7 +21,7 @@ module Vonage
21
21
  end
22
22
  end
23
23
 
24
- sig { params(http: Net::HTTP::Persistent).returns(T::Hash[Symbol, T.untyped]) }
24
+ sig { params(http: Net::HTTP).returns(T::Hash[Symbol, T.untyped]) }
25
25
  def set(http)
26
26
  @hash.each do |name, value|
27
27
  http.public_send(defined_options.fetch(name), value)
@@ -34,7 +34,7 @@ module Vonage
34
34
  def defined_options
35
35
  @defined_options = T.let(@defined_options, T.nilable(T::Hash[Symbol, T.untyped]))
36
36
 
37
- @defined_options ||= Net::HTTP::Persistent.instance_methods.grep(/\w=\z/).each_with_object({}) do |name, hash|
37
+ @defined_options ||= Net::HTTP.instance_methods.grep(/\w=\z/).each_with_object({}) do |name, hash|
38
38
  hash[name.to_s.chomp('=').to_sym] = name
39
39
  end
40
40
  end
data/lib/vonage/jwt.rb CHANGED
@@ -39,22 +39,5 @@ module Vonage
39
39
  payload[:private_key] = private_key if private_key && !payload[:private_key]
40
40
  @token = Vonage::JWTBuilder.new(payload).jwt.generate
41
41
  end
42
-
43
- # Validate a JSON Web Token from a Vonage Webhook.
44
- #
45
- # Certain Vonage APIs include a JWT signed with a user's account signature secret in
46
- # the Authorization header of Webhook requests. This method can be used to verify that those requests originate
47
- # from the Vonage API.
48
- #
49
- # @param [String, required] :token The JWT from the Webhook's Authorization header
50
- # @param [String, required] :signature_secret The account signature secret
51
- #
52
- # @return [Boolean] true, if the JWT is verified, false otherwise
53
- #
54
- # @see https://developer.vonage.com/en/getting-started/concepts/webhooks#decoding-signed-webhooks
55
- #
56
- def self.verify_hs256_signature(token:, signature_secret:)
57
- verify_signature(token, signature_secret, 'HS256')
58
- end
59
42
  end
60
43
  end
@@ -5,10 +5,9 @@ module Vonage
5
5
  extend T::Sig
6
6
 
7
7
  sig { params(
8
- object: T.any(T::Hash[T.untyped, T.untyped], URI::HTTPS, Net::HTTP::Post, Net::HTTP::Get),
9
- data: T.nilable(Hash)
8
+ object: T.any(T::Hash[T.untyped, T.untyped], URI::HTTPS, Net::HTTP::Post, Net::HTTP::Get)
10
9
  ).void }
11
- def update(object, data)
10
+ def update(object)
12
11
  return unless object.is_a?(Hash)
13
12
 
14
13
  @config = T.let(@config, T.nilable(Vonage::Config))
data/lib/vonage/keys.rb CHANGED
@@ -27,17 +27,7 @@ module Vonage
27
27
  'has_video',
28
28
  'remove_stream',
29
29
  'screenshare_type',
30
- 'session_id',
31
- 'stream_mode',
32
- 'archive_mode',
33
- 'language_code',
34
- 'max_duration',
35
- 'partial_captions',
36
- 'status_callback_url',
37
- 'audio_rate',
38
- 'phone_number',
39
- 'hashed_phone_number',
40
- 'max_age'
30
+ 'archive_mode'
41
31
  ]
42
32
  hash.transform_keys do |k|
43
33
  if exceptions.include?(k.to_s)
data/lib/vonage/logger.rb CHANGED
@@ -7,11 +7,7 @@ module Vonage
7
7
  class Logger
8
8
  extend T::Sig
9
9
 
10
- sig { params(logger: T.nilable(
11
- defined?(ActiveSupport::BroadcastLogger) ?
12
- T.any(::Logger, Vonage::Logger, ActiveSupport::BroadcastLogger)
13
- : T.any(::Logger, Vonage::Logger)
14
- )).void }
10
+ sig { params(logger: T.nilable(T.any(::Logger, Vonage::Logger))).void }
15
11
  def initialize(logger)
16
12
  @logger = logger || ::Logger.new(nil)
17
13
  end
@@ -24,6 +20,8 @@ module Vonage
24
20
 
25
21
  sig { params(request: T.any(Net::HTTP::Post, Net::HTTP::Get, Net::HTTP::Delete, Net::HTTP::Put, Net::HTTP::Patch)).void }
26
22
  def log_request_info(request)
23
+ @logger = T.let(@logger, T.nilable(T.any(::Logger, Vonage::Logger)))
24
+
27
25
  T.must(@logger).info do
28
26
  format('Vonage API request', {
29
27
  method: request.method,
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Vonage
4
4
  class Messaging::Channels::Viber < Messaging::Message
5
- MESSAGE_TYPES = ['text', 'image', 'video', 'file']
5
+ MESSAGE_TYPES = ['text', 'image']
6
6
 
7
7
  attr_reader :data
8
8
 
@@ -33,13 +33,6 @@ module Vonage
33
33
  when 'image'
34
34
  raise Vonage::ClientError.new(":message must be a Hash") unless message.is_a? Hash
35
35
  raise Vonage::ClientError.new(":url is required in :message") unless message[:url]
36
- when 'video'
37
- raise Vonage::ClientError.new(":message must be a Hash") unless message.is_a? Hash
38
- raise Vonage::ClientError.new(":url is required in :message") unless message[:url]
39
- raise Vonage::ClientError.new(":thumb_url is required in :message") unless message[:thumb_url]
40
- when 'file'
41
- raise Vonage::ClientError.new(":message must be a Hash") unless message.is_a? Hash
42
- raise Vonage::ClientError.new(":url is required in :message") unless message[:url]
43
36
  end
44
37
  end
45
38
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Vonage
4
4
  class Messaging::Channels::WhatsApp < Messaging::Message
5
- MESSAGE_TYPES = ['text', 'image', 'audio', 'video', 'file', 'template', 'sticker', 'custom']
5
+ MESSAGE_TYPES = ['text', 'image', 'audio', 'video', 'file', 'template', 'custom']
6
6
 
7
7
  attr_reader :data
8
8
 
@@ -35,8 +35,6 @@ module Vonage
35
35
  raise Vonage::ClientError.new(":name is required in :template") unless message[:name]
36
36
  raise Vonage::ClientError.new(":whatsapp is required in :opts") unless opts[:whatsapp]
37
37
  raise Vonage::ClientError.new(":locale is required in :whatsapp") unless opts[:whatsapp][:locale]
38
- when 'sticker'
39
- raise Vonage::ClientError.new(":message must contain either :id or :url") unless message.has_key?(:id) ^ message.has_key?(:url)
40
38
  when 'custom'
41
39
  raise Vonage::ClientError.new(":message must be a Hash") unless message.is_a? Hash
42
40
  else
@@ -5,7 +5,6 @@ module Vonage
5
5
  CHANNELS = {
6
6
  sms: Vonage::Messaging::Channels::SMS,
7
7
  mms: Vonage::Messaging::Channels::MMS,
8
- rcs: Vonage::Messaging::Channels::RCS,
9
8
  whatsapp: Vonage::Messaging::Channels::WhatsApp,
10
9
  messenger: Vonage::Messaging::Channels::Messenger,
11
10
  viber: Vonage::Messaging::Channels::Viber
@@ -1,21 +1,16 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
- require 'forwardable'
4
3
 
5
4
  module Vonage
6
5
  class Messaging < Namespace
7
- extend Forwardable
8
-
9
6
  self.authentication = BearerToken
10
7
 
11
8
  self.request_body = JSON
12
9
 
13
- def_delegators Message, *Message::CHANNELS.keys
14
-
15
10
  # Send a Message.
16
11
  #
17
12
  # @example
18
- # message = client.messaging.sms(message: "Hello world!")
13
+ # message = Vonage::Messaging::Message.sms(message: "Hello world!")
19
14
  # response = client.messaging.send(to: "447700900000", from: "447700900001", **message)
20
15
  #
21
16
  # @option params [required, String] :to
@@ -25,35 +20,10 @@ module Vonage
25
20
  # @option params [required, Hash] **message
26
21
  # The Vonage Message object to use for this message.
27
22
  #
28
- # @see https://developer.vonage.com/api/messages#SendMessage
29
- #
30
- def send(to:, from:, **message)
31
- request('/v1/messages', params: {to: to, from: from, **message}, type: Post)
32
- end
33
-
34
- # Update a Message Object.
35
- #
36
- # @example
37
- # message = client.messaging.update(message_uuid: "aaaaaaaa-bbbb-4ccc-8ddd-0123456789ab", status: "read")
38
- #
39
- # @option params [required, String] :message_uuid. the UUID of the message to update.
40
- #
41
- # `:message_uuid` is always required. Other parameters will depend on the message channel and the specific action being performed.
42
- # @see https://developer.vonage.com/api/messages#UpdateMessage
43
- #
44
- def update(message_uuid:, **params)
45
- request("/v1/messages/#{message_uuid}", params: params, type: Patch)
46
- end
47
-
48
- # Validate a JSON Web Token from a Messages API Webhook.
49
- #
50
- # @param [String, required] :token The JWT from the Webhook's Authorization header
51
- # @param [String, optional] :signature_secret The account signature secret. Required, unless `signature_secret`
52
- # is set in `Config`
23
+ # @see https://developer.vonage.com/api/messages-olympus#SendMessage
53
24
  #
54
- # @return [Boolean] true, if the JWT is verified, false otherwise
55
- def verify_webhook_token(token:, signature_secret: @config.signature_secret)
56
- JWT.verify_hs256_signature(token: token, signature_secret: signature_secret)
25
+ def send(params)
26
+ request('/v1/messages', params: params, type: Post)
57
27
  end
58
28
  end
59
29
  end
@@ -1,9 +1,6 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
-
4
3
  require 'net/http'
5
- require 'net/http/persistent'
6
- require 'net/http/post/multipart'
7
4
  require 'json'
8
5
 
9
6
  module Vonage
@@ -13,7 +10,8 @@ module Vonage
13
10
 
14
11
  @host = set_host
15
12
 
16
- @http = Net::HTTP::Persistent.new
13
+ @http = Net::HTTP.new(@host, Net::HTTP.https_default_port, p_addr = nil)
14
+ @http.use_ssl = true
17
15
 
18
16
  @config.http.set(@http) unless @config.http.nil?
19
17
  end
@@ -23,7 +21,8 @@ module Vonage
23
21
  end
24
22
 
25
23
  def self.host=(host)
26
- raise ArgumentError unless %i[rest_host video_host vonage_host].include?(host)
24
+ raise ArgumentError unless host == :rest_host || host == :video_host
25
+
27
26
  @host = host
28
27
  end
29
28
 
@@ -48,7 +47,6 @@ module Vonage
48
47
  end
49
48
 
50
49
  protected
51
-
52
50
  # :nocov:
53
51
 
54
52
  Get = Net::HTTP::Get
@@ -57,33 +55,33 @@ module Vonage
57
55
  Post = Net::HTTP::Post
58
56
  Delete = Net::HTTP::Delete
59
57
 
60
- def build_request(path:, type: Get, params: {}, auth_data: nil)
58
+ def build_request(path:, type: Get, params: {})
61
59
  authentication = self.class.authentication.new(@config)
62
- authentication.update(params, auth_data)
60
+ authentication.update(params)
63
61
 
64
- uri = URI("https://" + @host + path)
62
+ uri = URI('https://' + @host + path)
65
63
  unless type.const_get(:REQUEST_HAS_BODY) || params.empty?
66
64
  uri.query = Params.encode(params)
67
65
  end
68
66
 
67
+ # Set BasicAuth if neeeded
68
+ authentication.update(uri)
69
+
69
70
  # instantiate request
70
71
  request = type.new(uri)
71
72
 
72
73
  # set headers
73
- request["User-Agent"] = UserAgent.string(
74
- @config.app_name,
75
- @config.app_version
76
- )
77
- request["Accept"] = "application/json"
78
- self.class.request_headers.each { |key, value| request[key] = value }
74
+ request['User-Agent'] = UserAgent.string(@config.app_name, @config.app_version)
75
+ request['Accept'] = 'application/json'
76
+ self.class.request_headers.each do |key, value|
77
+ request[key] = value
78
+ end
79
79
 
80
- # Set Authorization header if needed
81
- authentication.update(request, auth_data)
80
+ # Set BearerToken if needed
81
+ authentication.update(request)
82
82
 
83
83
  # set body
84
- if type.const_get(:REQUEST_HAS_BODY)
85
- self.class.request_body.update(request, params)
86
- end
84
+ self.class.request_body.update(request, params) if type.const_get(:REQUEST_HAS_BODY)
87
85
 
88
86
  request
89
87
  end
@@ -91,8 +89,7 @@ module Vonage
91
89
  def make_request!(request, &block)
92
90
  logger.log_request_info(request)
93
91
 
94
- uri = URI("https://" + @host + request.path)
95
- response = @http.request(uri, request, &block)
92
+ response = @http.request(request, &block)
96
93
 
97
94
  logger.log_response_info(response, @host)
98
95
 
@@ -103,32 +100,17 @@ module Vonage
103
100
  response
104
101
  end
105
102
 
106
- def request(path, params: nil, type: Get, response_class: Response, auth_data: nil, &block)
107
- auto_advance =
108
- (
109
- if !params.nil? && params.key?(:auto_advance)
110
- params[:auto_advance]
111
- else
112
- false
113
- end
114
- )
103
+ def request(path, params: nil, type: Get, response_class: Response, &block)
104
+ auto_advance = !params.nil? && params.key?(:auto_advance) ? params[:auto_advance] : false
115
105
 
116
- params =
117
- params.tap { |params| params.delete(:auto_advance) } if !params.nil? &&
118
- params.key?(:auto_advance)
106
+ params = params.tap { |params| params.delete(:auto_advance) } if !params.nil? && params.key?(:auto_advance)
119
107
 
120
- request = build_request(path: path, params: params || {}, type: type, auth_data: auth_data)
108
+ request = build_request(path: path, params: params || {}, type: type)
121
109
 
122
110
  response = make_request!(request, &block)
123
111
 
124
112
  if auto_advance
125
- iterable_request(
126
- path,
127
- response: response,
128
- response_class: response_class,
129
- params: params,
130
- &block
131
- )
113
+ iterable_request(path, response: response, response_class: response_class, params: params, &block)
132
114
  else
133
115
  return if block
134
116
 
@@ -136,59 +118,22 @@ module Vonage
136
118
  end
137
119
  end
138
120
 
139
- def multipart_post_request(path, filepath:, file_name:, mime_type:, params: {}, override_uri: nil, no_auth: false, response_class: Response, auth_data: nil, &block)
140
- authentication = self.class.authentication.new(@config) unless no_auth
141
-
142
- uri = override_uri ? URI(override_uri) : URI('https://' + @host + path)
143
-
144
- http = Net::HTTP.new(uri.host, Net::HTTP.https_default_port, p_addr = nil)
145
- http.use_ssl = true
146
- http.set_debug_output($stdout)
147
-
148
- response = File.open(filepath) do |file|
149
- request = Net::HTTP::Post::Multipart.new(
150
- uri,
151
- params.merge(file: Multipart::Post::UploadIO.new(file, mime_type, file_name))
152
- )
153
-
154
- request['User-Agent'] = UserAgent.string(@config.app_name, @config.app_version)
155
-
156
- # Set Authorization header if needed
157
- authentication.update(request, auth_data) unless no_auth
158
-
159
- logger.log_request_info(request)
160
-
161
- http.request(request, &block)
162
- end
163
-
164
- logger.log_response_info(response, @host)
165
-
166
- return if block
167
-
168
- logger.debug(response.body) if response.body
169
-
170
- parse(response, response_class)
171
- end
172
-
173
121
  def iterable_request(path, response: nil, response_class: nil, params: {}, &block)
174
122
  json_response = ::JSON.parse(response.body)
175
123
  response = parse(response, response_class)
176
124
  remainder = remaining_count(json_response)
177
125
 
178
126
  while remainder > 0
179
- params = { page_size: json_response["page_size"] }
180
-
181
- if json_response["record_index"] && json_response["record_index"] == 0
182
- params[:record_index] = json_response["page_size"]
183
- elsif json_response["record_index"] &&
184
- json_response["record_index"] != 0
185
- params[:record_index] = (
186
- json_response["record_index"] + json_response["page_size"]
187
- )
127
+ params = { page_size: json_response['page_size'] }
128
+
129
+ if json_response['record_index'] && json_response['record_index'] == 0
130
+ params[:record_index] = json_response['page_size']
131
+ elsif json_response['record_index'] && json_response['record_index'] != 0
132
+ params[:record_index] = (json_response['record_index'] + json_response['page_size'])
188
133
  end
189
134
 
190
- if json_response["total_pages"]
191
- params[:page] = json_response["page"] + 1
135
+ if json_response['total_pages']
136
+ params[:page] = json_response['page'] + 1
192
137
  end
193
138
 
194
139
  request = build_request(path: path, type: Get, params: params)
@@ -199,15 +144,11 @@ module Vonage
199
144
  json_response = ::JSON.parse(paginated_response.body)
200
145
  remainder = remaining_count(json_response)
201
146
 
202
- if response.respond_to?("_embedded")
203
- collection_name = collection_name(response["_embedded"])
204
- response["_embedded"][collection_name].push(
205
- *next_response["_embedded"][collection_name]
206
- )
147
+ if response.respond_to?('_embedded')
148
+ collection_name = collection_name(response['_embedded'])
149
+ response['_embedded'][collection_name].push(*next_response['_embedded'][collection_name])
207
150
  else
208
- response[collection_name(response)].push(
209
- *next_response[collection_name(next_response)]
210
- )
151
+ response[collection_name(response)].push(*next_response[collection_name(next_response)])
211
152
  end
212
153
  end
213
154
 
@@ -215,51 +156,43 @@ module Vonage
215
156
  end
216
157
 
217
158
  def remaining_count(params)
218
- if params.key?("total_pages")
219
- params["total_pages"] - params["page"]
220
- elsif params.key?("count")
221
- params["count"] -
222
- (
223
- if params["record_index"] == 0
224
- params["page_size"]
225
- else
226
- (params["record_index"] + params["page_size"])
227
- end
228
- )
159
+ if params.key?('total_pages')
160
+ params['total_pages'] - params['page']
161
+ elsif params.key?('count')
162
+ params['count'] - (params['record_index'] == 0 ? params['page_size'] : (params['record_index'] + params['page_size']))
229
163
  else
230
164
  0
231
165
  end
232
166
  end
233
167
 
234
168
  def collection_name(params)
235
- @collection_name ||=
236
- case
237
- when params.respond_to?("calls")
238
- "calls"
239
- when params.respond_to?("users")
240
- "users"
241
- when params.respond_to?("legs")
242
- "legs"
243
- when params.respond_to?("data")
244
- "data"
245
- when params.respond_to?("conversations")
246
- "conversations"
247
- when params.respond_to?("applications")
248
- "applications"
249
- when params.respond_to?("records")
250
- "records"
251
- when params.respond_to?("reports")
252
- "reports"
253
- when params.respond_to?("networks")
254
- "networks"
255
- when params.respond_to?("countries")
256
- "countries"
257
- when params.respond_to?("media")
258
- "media"
259
- when params.respond_to?("numbers")
260
- "numbers"
261
- when params.respond_to?("events")
262
- "events"
169
+ @collection_name ||= case
170
+ when params.respond_to?('calls')
171
+ 'calls'
172
+ when params.respond_to?('users')
173
+ 'users'
174
+ when params.respond_to?('legs')
175
+ 'legs'
176
+ when params.respond_to?('data')
177
+ 'data'
178
+ when params.respond_to?('conversations')
179
+ 'conversations'
180
+ when params.respond_to?('applications')
181
+ 'applications'
182
+ when params.respond_to?('records')
183
+ 'records'
184
+ when params.respond_to?('reports')
185
+ 'reports'
186
+ when params.respond_to?('networks')
187
+ 'networks'
188
+ when params.respond_to?('countries')
189
+ 'countries'
190
+ when params.respond_to?('media')
191
+ 'media'
192
+ when params.respond_to?('numbers')
193
+ 'numbers'
194
+ when params.respond_to?('events')
195
+ 'events'
263
196
  else
264
197
  params.entity.attributes.keys[0].to_s
265
198
  end
@@ -270,7 +203,7 @@ module Vonage
270
203
  when Net::HTTPNoContent
271
204
  response_class.new(nil, response)
272
205
  when Net::HTTPSuccess
273
- if response['Content-Type'] && response['Content-Type'].split(';').first == 'application/json' && !response.body.empty?
206
+ if response['Content-Type'].split(';').first == 'application/json'
274
207
  entity = ::JSON.parse(response.body, object_class: Vonage::Entity)
275
208
 
276
209
  response_class.new(entity, response)
@@ -294,8 +227,6 @@ module Vonage
294
227
  @config.rest_host
295
228
  when :video_host
296
229
  @config.video_host
297
- when :vonage_host
298
- @config.vonage_host
299
230
  else
300
231
  @config.api_host
301
232
  end