vonage 7.29.1 → 8.0.0.beta

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.
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 -14
  20. data/lib/vonage/logger.rb +3 -5
  21. data/lib/vonage/messaging/channels/viber.rb +2 -9
  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 +58 -25
  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 +12 -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,20 +27,7 @@ module Vonage
27
27
  'has_video',
28
28
  'remove_stream',
29
29
  'screenshare_type',
30
- 'session_id',
31
- 'output_mode',
32
- 'stream_mode',
33
- 'archive_mode',
34
- 'multi_archive_tag',
35
- 'language_code',
36
- 'max_duration',
37
- 'partial_captions',
38
- 'status_callback_url',
39
- 'audio_rate',
40
- 'phone_number',
41
- 'hashed_phone_number',
42
- 'max_age',
43
- 'max_bitrate'
30
+ 'archive_mode'
44
31
  ]
45
32
  hash.transform_keys do |k|
46
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
 
@@ -18,7 +18,7 @@ module Vonage
18
18
  private
19
19
 
20
20
  def build
21
- data[:channel] = 'viber_service'
21
+ data[:channel] = ' viber_service'
22
22
  super
23
23
  end
24
24
 
@@ -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