bandwidth-sdk 7.0.0 → 9.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +10 -0
  3. data/lib/bandwidth/api_helper.rb +19 -17
  4. data/lib/bandwidth/configuration.rb +7 -19
  5. data/lib/bandwidth/http/faraday_client.rb +1 -1
  6. data/lib/bandwidth/messaging_lib/messaging/controllers/api_controller.rb +53 -42
  7. data/lib/bandwidth/messaging_lib/messaging/controllers/base_controller.rb +3 -5
  8. data/lib/bandwidth/messaging_lib/messaging/exceptions/messaging_exception.rb +5 -2
  9. data/lib/bandwidth/messaging_lib/messaging/models/bandwidth_callback_message.rb +31 -11
  10. data/lib/bandwidth/messaging_lib/messaging/models/bandwidth_message.rb +54 -25
  11. data/lib/bandwidth/messaging_lib/messaging/models/bandwidth_message_item.rb +65 -32
  12. data/lib/bandwidth/messaging_lib/messaging/models/bandwidth_messages_list.rb +23 -4
  13. data/lib/bandwidth/messaging_lib/messaging/models/deferred_result.rb +20 -4
  14. data/lib/bandwidth/messaging_lib/messaging/models/media.rb +23 -6
  15. data/lib/bandwidth/messaging_lib/messaging/models/message_request.rb +32 -14
  16. data/lib/bandwidth/messaging_lib/messaging/models/page_info.rb +28 -8
  17. data/lib/bandwidth/messaging_lib/messaging/models/tag.rb +20 -4
  18. data/lib/bandwidth/models/base_model.rb +11 -0
  19. data/lib/bandwidth/multi_factor_auth_lib/multi_factor_auth/controllers/base_controller.rb +3 -5
  20. data/lib/bandwidth/multi_factor_auth_lib/multi_factor_auth/controllers/mfa_controller.rb +21 -16
  21. data/lib/bandwidth/multi_factor_auth_lib/multi_factor_auth/exceptions/error_with_request_exception.rb +5 -2
  22. data/lib/bandwidth/multi_factor_auth_lib/multi_factor_auth/exceptions/forbidden_request_exception.rb +4 -1
  23. data/lib/bandwidth/multi_factor_auth_lib/multi_factor_auth/exceptions/unauthorized_request_exception.rb +4 -1
  24. data/lib/bandwidth/multi_factor_auth_lib/multi_factor_auth/models/two_factor_code_request_schema.rb +27 -12
  25. data/lib/bandwidth/multi_factor_auth_lib/multi_factor_auth/models/two_factor_messaging_response.rb +17 -2
  26. data/lib/bandwidth/multi_factor_auth_lib/multi_factor_auth/models/two_factor_verify_code_response.rb +17 -2
  27. data/lib/bandwidth/multi_factor_auth_lib/multi_factor_auth/models/two_factor_verify_request_schema.rb +29 -10
  28. data/lib/bandwidth/multi_factor_auth_lib/multi_factor_auth/models/two_factor_voice_response.rb +17 -2
  29. data/lib/bandwidth/phone_number_lookup_lib/phone_number_lookup/controllers/api_controller.rb +212 -210
  30. data/lib/bandwidth/phone_number_lookup_lib/phone_number_lookup/controllers/base_controller.rb +3 -5
  31. data/lib/bandwidth/phone_number_lookup_lib/phone_number_lookup/exceptions/accounts_tnlookup400_error_exception.rb +4 -1
  32. data/lib/bandwidth/phone_number_lookup_lib/phone_number_lookup/models/order_request.rb +17 -2
  33. data/lib/bandwidth/phone_number_lookup_lib/phone_number_lookup/models/order_response.rb +20 -4
  34. data/lib/bandwidth/phone_number_lookup_lib/phone_number_lookup/models/order_status.rb +28 -7
  35. data/lib/bandwidth/phone_number_lookup_lib/phone_number_lookup/models/result.rb +43 -18
  36. data/lib/bandwidth/utilities/date_time_helper.rb +2 -2
  37. data/lib/bandwidth/utilities/file_wrapper.rb +1 -2
  38. data/lib/bandwidth/voice_lib/bxml/verbs/ring.rb +2 -1
  39. data/lib/bandwidth/voice_lib/voice/controllers/api_controller.rb +171 -150
  40. data/lib/bandwidth/voice_lib/voice/controllers/base_controller.rb +3 -5
  41. data/lib/bandwidth/voice_lib/voice/exceptions/api_error_exception.rb +6 -3
  42. data/lib/bandwidth/voice_lib/voice/models/call_callback.rb +343 -0
  43. data/lib/bandwidth/voice_lib/voice/models/call_recording_metadata.rb +78 -37
  44. data/lib/bandwidth/voice_lib/voice/models/call_state.rb +94 -42
  45. data/lib/bandwidth/voice_lib/voice/models/conference_callback.rb +211 -0
  46. data/lib/bandwidth/voice_lib/voice/models/conference_member_state.rb +35 -12
  47. data/lib/bandwidth/voice_lib/voice/models/conference_recording_metadata.rb +55 -24
  48. data/lib/bandwidth/voice_lib/voice/models/conference_state.rb +54 -17
  49. data/lib/bandwidth/voice_lib/voice/models/create_call_request.rb +173 -96
  50. data/lib/bandwidth/voice_lib/voice/models/create_call_response.rb +85 -41
  51. data/lib/bandwidth/voice_lib/voice/models/diversion.rb +80 -0
  52. data/lib/bandwidth/voice_lib/voice/models/fallback_method_enum.rb +17 -0
  53. data/lib/bandwidth/voice_lib/voice/models/machine_detection_configuration.rb +218 -0
  54. data/lib/bandwidth/voice_lib/voice/models/mode_enum.rb +20 -0
  55. data/lib/bandwidth/voice_lib/voice/models/modify_call_recording_request.rb +15 -2
  56. data/lib/bandwidth/voice_lib/voice/models/modify_call_request.rb +59 -19
  57. data/lib/bandwidth/voice_lib/voice/models/modify_conference_request.rb +55 -18
  58. data/lib/bandwidth/voice_lib/voice/models/transcribe_recording_request.rb +40 -12
  59. data/lib/bandwidth/voice_lib/voice/models/transcript.rb +20 -4
  60. data/lib/bandwidth/voice_lib/voice/models/transcription.rb +80 -0
  61. data/lib/bandwidth/voice_lib/voice/models/transcription_metadata.rb +26 -8
  62. data/lib/bandwidth/voice_lib/voice/models/transcription_response.rb +18 -1
  63. data/lib/bandwidth/voice_lib/voice.rb +7 -1
  64. data/lib/bandwidth/web_rtc_lib/utils/web_rtc_transfer.rb +7 -2
  65. data/lib/bandwidth/web_rtc_lib/web_rtc/controllers/api_controller.rb +61 -50
  66. data/lib/bandwidth/web_rtc_lib/web_rtc/controllers/base_controller.rb +3 -5
  67. data/lib/bandwidth/web_rtc_lib/web_rtc/exceptions/error_exception.rb +5 -2
  68. data/lib/bandwidth/web_rtc_lib/web_rtc/models/accounts_participants_response.rb +20 -5
  69. data/lib/bandwidth/web_rtc_lib/web_rtc/models/participant.rb +37 -14
  70. data/lib/bandwidth/web_rtc_lib/web_rtc/models/participant_subscription.rb +15 -2
  71. data/lib/bandwidth/web_rtc_lib/web_rtc/models/session.rb +20 -4
  72. data/lib/bandwidth/web_rtc_lib/web_rtc/models/subscriptions.rb +20 -3
  73. data/lib/bandwidth.rb +19 -18
  74. data/test/integration/test_integration.rb +95 -58
  75. metadata +10 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b67b83b111ec3185ce0614d96b9f46ea31270db7e0b44a069cc8d87e16bf2bd5
4
- data.tar.gz: b4c1575cda3afab5b3a17ccf70883ddd68815ec9e3e55c162d778cc7667dd8ad
3
+ metadata.gz: 72d08e72e19066da912c18946e2bcb7e38c3da78f58005388dd2a6d1b8bc98da
4
+ data.tar.gz: 26a7f5cd86a6a3ea974062f66de43b7edee59bf1e7f74fb2ec6e5272a22cdbea
5
5
  SHA512:
6
- metadata.gz: 7de5c586dc71cc06134c42008931b6508e5fca4a7baecd02dd94b5d9c5d1e26f10c6266c020ef6c91429a0e50e10678a32803e07c2af30e74833fe0a55ea7f65
7
- data.tar.gz: 61b41ff9f216fee03ff287270a13666575006b870ecdc38c9edf8b4de93e7db0a4d45d37becf2b11bd52cfba399058739b3e9bea48d086d71d01983ef2da28f7
6
+ metadata.gz: cfa230d51fe36a6c513821b05975e1d28a0a14f70e326cd802c20788cbc966f20405f9d3c82e478e2c0095b7ffedda699050d981986e50eecad4716c4c525453
7
+ data.tar.gz: e99889889de6d0893da79e616aa9cce33dcc76395c692258c0dfb98f0cde7e38d7901579dd9542acd1e0594ebf0dde25407a5c06be09307fea30ea07197ba04e
data/README.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Bandwidth Ruby SDK
2
2
 
3
+ [![Test](https://github.com/Bandwidth/ruby-sdk/actions/workflows/test.yml/badge.svg)](https://github.com/Bandwidth/ruby-sdk/actions/workflows/test.yml)
4
+
5
+
6
+ | **OS** | **Ruby** |
7
+ |:---:|:---:|
8
+ | Windows 2016 | 2.6, 2.7, 3.0 |
9
+ | Windows 2019 | 2.6, 2.7, 3.0 |
10
+ | Ubuntu 18.04 | 2.6, 2.7, 3.0 |
11
+ | Ubuntu 20.04 | 2.6, 2.7, 3.0 |
12
+
3
13
  ## Getting Started
4
14
 
5
15
  ### Installation
@@ -13,13 +13,14 @@ module Bandwidth
13
13
  def self.serialize_array(key, array, formatting: 'indexed')
14
14
  tuples = []
15
15
 
16
- if formatting == 'unindexed'
16
+ case formatting
17
+ when 'unindexed'
17
18
  tuples += array.map { |element| ["#{key}[]", element] }
18
- elsif formatting == 'indexed'
19
+ when 'indexed'
19
20
  tuples += array.map.with_index do |element, index|
20
21
  ["#{key}[#{index}]", element]
21
22
  end
22
- elsif formatting == 'plain'
23
+ when 'plain'
23
24
  tuples += array.map { |element| [key, element] }
24
25
  else
25
26
  raise ArgumentError, 'Invalid format provided.'
@@ -60,7 +61,7 @@ module Bandwidth
60
61
  end
61
62
 
62
63
  # Find the template parameter and replace it with its value.
63
- query_builder = query_builder.gsub('{' + key.to_s + '}', replace_value)
64
+ query_builder = query_builder.gsub("{#{key}}", replace_value)
64
65
  end
65
66
  query_builder
66
67
  end
@@ -85,15 +86,16 @@ module Bandwidth
85
86
  unless value.nil?
86
87
  if value.instance_of? Array
87
88
  value.compact!
88
- query_builder += if array_serialization == 'csv'
89
+ query_builder += case array_serialization
90
+ when 'csv'
89
91
  "#{seperator}#{key}=#{value.map do |element|
90
92
  CGI.escape(element.to_s)
91
93
  end.join(',')}"
92
- elsif array_serialization == 'psv'
94
+ when 'psv'
93
95
  "#{seperator}#{key}=#{value.map do |element|
94
96
  CGI.escape(element.to_s)
95
97
  end.join('|')}"
96
- elsif array_serialization == 'tsv'
98
+ when 'tsv'
97
99
  "#{seperator}#{key}=#{value.map do |element|
98
100
  CGI.escape(element.to_s)
99
101
  end.join("\t")}"
@@ -119,7 +121,7 @@ module Bandwidth
119
121
  raise ArgumentError, 'Invalid Url.' unless url.instance_of? String
120
122
 
121
123
  # Ensure that the urls are absolute.
122
- matches = url.match(%r{^(https?:\/\/[^\/]+)})
124
+ matches = url.match(%r{^(https?://[^/]+)})
123
125
  raise ArgumentError, 'Invalid Url format.' if matches.nil?
124
126
 
125
127
  # Get the http protocol match.
@@ -130,7 +132,7 @@ module Bandwidth
130
132
 
131
133
  # Remove redundant forward slashes.
132
134
  query = url[protocol.length...(!index.nil? ? index : url.length)]
133
- query.gsub!(%r{\/\/+}, '/')
135
+ query.gsub!(%r{//+}, '/')
134
136
 
135
137
  # Get the parameters.
136
138
  parameters = !index.nil? ? url[url.index('?')...url.length] : ''
@@ -142,7 +144,7 @@ module Bandwidth
142
144
  # Parses JSON string.
143
145
  # @param [String] A JSON string.
144
146
  def self.json_deserialize(json)
145
- return JSON.parse(json)
147
+ JSON.parse(json)
146
148
  rescue StandardError
147
149
  raise TypeError, 'Server responded with invalid JSON.'
148
150
  end
@@ -171,6 +173,7 @@ module Bandwidth
171
173
  a.each do |key, value_a|
172
174
  b.each do |k, value_b|
173
175
  next unless key == k
176
+
174
177
  x[k] = []
175
178
  if value_a.instance_of? Array
176
179
  value_a.each do |v|
@@ -215,13 +218,12 @@ module Bandwidth
215
218
  elsif obj.instance_of? Array
216
219
  if formatting == 'indexed'
217
220
  obj.each_with_index do |value, index|
218
- retval.merge!(APIHelper.form_encode(value, instance_name + '[' +
219
- index.to_s + ']'))
221
+ retval.merge!(APIHelper.form_encode(value, "#{instance_name}[#{index}]"))
220
222
  end
221
223
  elsif serializable_types.map { |x| obj[0].is_a? x }.any?
222
224
  obj.each do |value|
223
225
  abc = if formatting == 'unindexed'
224
- APIHelper.form_encode(value, instance_name + '[]',
226
+ APIHelper.form_encode(value, "#{instance_name}[]",
225
227
  formatting: formatting)
226
228
  else
227
229
  APIHelper.form_encode(value, instance_name,
@@ -231,14 +233,14 @@ module Bandwidth
231
233
  end
232
234
  else
233
235
  obj.each_with_index do |value, index|
234
- retval.merge!(APIHelper.form_encode(value, instance_name + '[' +
235
- index.to_s + ']', formatting: formatting))
236
+ retval.merge!(APIHelper.form_encode(value, "#{instance_name}[#{index}]",
237
+ formatting: formatting))
236
238
  end
237
239
  end
238
240
  elsif obj.instance_of? Hash
239
241
  obj.each do |key, value|
240
- retval.merge!(APIHelper.form_encode(value, instance_name + '[' +
241
- key.to_s + ']', formatting: formatting))
242
+ retval.merge!(APIHelper.form_encode(value, "#{instance_name}[#{key}]",
243
+ formatting: formatting))
242
244
  end
243
245
  elsif obj.instance_of? File
244
246
  retval[instance_name] = UploadIO.new(
@@ -28,25 +28,13 @@ module Bandwidth
28
28
  # are configured in this class.
29
29
  class Configuration
30
30
  # The attribute readers for properties.
31
- attr_reader :http_client
32
- attr_reader :timeout
33
- attr_reader :max_retries
34
- attr_reader :retry_interval
35
- attr_reader :backoff_factor
36
- attr_reader :retry_statuses
37
- attr_reader :retry_methods
38
- attr_reader :environment
39
- attr_reader :base_url
40
- attr_reader :messaging_basic_auth_user_name
41
- attr_reader :messaging_basic_auth_password
42
- attr_reader :multi_factor_auth_basic_auth_user_name
43
- attr_reader :multi_factor_auth_basic_auth_password
44
- attr_reader :phone_number_lookup_basic_auth_user_name
45
- attr_reader :phone_number_lookup_basic_auth_password
46
- attr_reader :voice_basic_auth_user_name
47
- attr_reader :voice_basic_auth_password
48
- attr_reader :web_rtc_basic_auth_user_name
49
- attr_reader :web_rtc_basic_auth_password
31
+ attr_reader :http_client, :timeout, :max_retries, :retry_interval, :backoff_factor,
32
+ :retry_statuses, :retry_methods, :environment, :base_url,
33
+ :messaging_basic_auth_user_name, :messaging_basic_auth_password,
34
+ :multi_factor_auth_basic_auth_user_name, :multi_factor_auth_basic_auth_password,
35
+ :phone_number_lookup_basic_auth_user_name, :phone_number_lookup_basic_auth_password,
36
+ :voice_basic_auth_user_name, :voice_basic_auth_password,
37
+ :web_rtc_basic_auth_user_name, :web_rtc_basic_auth_password
50
38
 
51
39
  class << self
52
40
  attr_reader :environments
@@ -27,7 +27,7 @@ module Bandwidth
27
27
  methods: retry_methods
28
28
  faraday.adapter Faraday.default_adapter
29
29
  faraday.options[:params_encoder] = Faraday::FlatParamsEncoder
30
- faraday.options[:timeout] = timeout if timeout > 0
30
+ faraday.options[:timeout] = timeout if timeout.positive?
31
31
  end
32
32
  end
33
33
 
@@ -11,7 +11,7 @@ module Messaging
11
11
  super(config, http_call_back: http_call_back)
12
12
  end
13
13
 
14
- # listMedia
14
+ # Gets a list of your media files. No query parameters are supported.
15
15
  # @param [String] account_id Required parameter: User's account ID
16
16
  # @param [String] continuation_token Optional parameter: Continuation token
17
17
  # used to retrieve subsequent media.
@@ -42,32 +42,33 @@ module Messaging
42
42
  _response = execute_request(_request)
43
43
 
44
44
  # Validate response against endpoint and global error codes.
45
- if _response.status_code == 400
45
+ case _response.status_code
46
+ when 400
46
47
  raise MessagingException.new(
47
48
  '400 Request is malformed or invalid',
48
49
  _response
49
50
  )
50
- elsif _response.status_code == 401
51
+ when 401
51
52
  raise MessagingException.new(
52
53
  '401 The specified user does not have access to the account',
53
54
  _response
54
55
  )
55
- elsif _response.status_code == 403
56
+ when 403
56
57
  raise MessagingException.new(
57
58
  '403 The user does not have access to this API',
58
59
  _response
59
60
  )
60
- elsif _response.status_code == 404
61
+ when 404
61
62
  raise MessagingException.new(
62
63
  '404 Path not found',
63
64
  _response
64
65
  )
65
- elsif _response.status_code == 415
66
+ when 415
66
67
  raise MessagingException.new(
67
68
  '415 The content-type of the request is incorrect',
68
69
  _response
69
70
  )
70
- elsif _response.status_code == 429
71
+ when 429
71
72
  raise MessagingException.new(
72
73
  '429 The rate limit has been reached',
73
74
  _response
@@ -83,7 +84,7 @@ module Messaging
83
84
  )
84
85
  end
85
86
 
86
- # getMedia
87
+ # Downloads a media file you previously uploaded.
87
88
  # @param [String] account_id Required parameter: User's account ID
88
89
  # @param [String] media_id Required parameter: Media ID to retrieve
89
90
  # @return [Binary] response from the API call
@@ -107,32 +108,33 @@ module Messaging
107
108
  _response = execute_request(_request, binary: true)
108
109
 
109
110
  # Validate response against endpoint and global error codes.
110
- if _response.status_code == 400
111
+ case _response.status_code
112
+ when 400
111
113
  raise MessagingException.new(
112
114
  '400 Request is malformed or invalid',
113
115
  _response
114
116
  )
115
- elsif _response.status_code == 401
117
+ when 401
116
118
  raise MessagingException.new(
117
119
  '401 The specified user does not have access to the account',
118
120
  _response
119
121
  )
120
- elsif _response.status_code == 403
122
+ when 403
121
123
  raise MessagingException.new(
122
124
  '403 The user does not have access to this API',
123
125
  _response
124
126
  )
125
- elsif _response.status_code == 404
127
+ when 404
126
128
  raise MessagingException.new(
127
129
  '404 Path not found',
128
130
  _response
129
131
  )
130
- elsif _response.status_code == 415
132
+ when 415
131
133
  raise MessagingException.new(
132
134
  '415 The content-type of the request is incorrect',
133
135
  _response
134
136
  )
135
- elsif _response.status_code == 429
137
+ when 429
136
138
  raise MessagingException.new(
137
139
  '429 The rate limit has been reached',
138
140
  _response
@@ -146,7 +148,8 @@ module Messaging
146
148
  )
147
149
  end
148
150
 
149
- # uploadMedia
151
+ # Uploads a file the normal HTTP way. You may add headers to the request in
152
+ # order to provide some control to your media-file.
150
153
  # @param [String] account_id Required parameter: User's account ID
151
154
  # @param [String] media_id Required parameter: The user supplied custom
152
155
  # media ID
@@ -197,32 +200,33 @@ module Messaging
197
200
  _response = execute_request(_request)
198
201
 
199
202
  # Validate response against endpoint and global error codes.
200
- if _response.status_code == 400
203
+ case _response.status_code
204
+ when 400
201
205
  raise MessagingException.new(
202
206
  '400 Request is malformed or invalid',
203
207
  _response
204
208
  )
205
- elsif _response.status_code == 401
209
+ when 401
206
210
  raise MessagingException.new(
207
211
  '401 The specified user does not have access to the account',
208
212
  _response
209
213
  )
210
- elsif _response.status_code == 403
214
+ when 403
211
215
  raise MessagingException.new(
212
216
  '403 The user does not have access to this API',
213
217
  _response
214
218
  )
215
- elsif _response.status_code == 404
219
+ when 404
216
220
  raise MessagingException.new(
217
221
  '404 Path not found',
218
222
  _response
219
223
  )
220
- elsif _response.status_code == 415
224
+ when 415
221
225
  raise MessagingException.new(
222
226
  '415 The content-type of the request is incorrect',
223
227
  _response
224
228
  )
225
- elsif _response.status_code == 429
229
+ when 429
226
230
  raise MessagingException.new(
227
231
  '429 The rate limit has been reached',
228
232
  _response
@@ -234,7 +238,10 @@ module Messaging
234
238
  ApiResponse.new(_response)
235
239
  end
236
240
 
237
- # deleteMedia
241
+ # Deletes a media file from Bandwidth API server. Make sure you don't have
242
+ # any application scripts still using the media before you delete. If you
243
+ # accidentally delete a media file, you can immediately upload a new file
244
+ # with the same name.
238
245
  # @param [String] account_id Required parameter: User's account ID
239
246
  # @param [String] media_id Required parameter: The media ID to delete
240
247
  # @return [void] response from the API call
@@ -258,32 +265,33 @@ module Messaging
258
265
  _response = execute_request(_request)
259
266
 
260
267
  # Validate response against endpoint and global error codes.
261
- if _response.status_code == 400
268
+ case _response.status_code
269
+ when 400
262
270
  raise MessagingException.new(
263
271
  '400 Request is malformed or invalid',
264
272
  _response
265
273
  )
266
- elsif _response.status_code == 401
274
+ when 401
267
275
  raise MessagingException.new(
268
276
  '401 The specified user does not have access to the account',
269
277
  _response
270
278
  )
271
- elsif _response.status_code == 403
279
+ when 403
272
280
  raise MessagingException.new(
273
281
  '403 The user does not have access to this API',
274
282
  _response
275
283
  )
276
- elsif _response.status_code == 404
284
+ when 404
277
285
  raise MessagingException.new(
278
286
  '404 Path not found',
279
287
  _response
280
288
  )
281
- elsif _response.status_code == 415
289
+ when 415
282
290
  raise MessagingException.new(
283
291
  '415 The content-type of the request is incorrect',
284
292
  _response
285
293
  )
286
- elsif _response.status_code == 429
294
+ when 429
287
295
  raise MessagingException.new(
288
296
  '429 The rate limit has been reached',
289
297
  _response
@@ -295,7 +303,7 @@ module Messaging
295
303
  ApiResponse.new(_response)
296
304
  end
297
305
 
298
- # getMessages
306
+ # Gets a list of messages based on query parameters.
299
307
  # @param [String] account_id Required parameter: User's account ID
300
308
  # @param [String] message_id Optional parameter: The ID of the message to
301
309
  # search for. Special characters need to be encoded using URL encoding
@@ -365,32 +373,33 @@ module Messaging
365
373
  _response = execute_request(_request)
366
374
 
367
375
  # Validate response against endpoint and global error codes.
368
- if _response.status_code == 400
376
+ case _response.status_code
377
+ when 400
369
378
  raise MessagingException.new(
370
379
  '400 Request is malformed or invalid',
371
380
  _response
372
381
  )
373
- elsif _response.status_code == 401
382
+ when 401
374
383
  raise MessagingException.new(
375
384
  '401 The specified user does not have access to the account',
376
385
  _response
377
386
  )
378
- elsif _response.status_code == 403
387
+ when 403
379
388
  raise MessagingException.new(
380
389
  '403 The user does not have access to this API',
381
390
  _response
382
391
  )
383
- elsif _response.status_code == 404
392
+ when 404
384
393
  raise MessagingException.new(
385
394
  '404 Path not found',
386
395
  _response
387
396
  )
388
- elsif _response.status_code == 415
397
+ when 415
389
398
  raise MessagingException.new(
390
399
  '415 The content-type of the request is incorrect',
391
400
  _response
392
401
  )
393
- elsif _response.status_code == 429
402
+ when 429
394
403
  raise MessagingException.new(
395
404
  '429 The rate limit has been reached',
396
405
  _response
@@ -405,7 +414,8 @@ module Messaging
405
414
  )
406
415
  end
407
416
 
408
- # createMessage
417
+ # Endpoint for sending text messages and picture messages using V2
418
+ # messaging.
409
419
  # @param [String] account_id Required parameter: User's account ID
410
420
  # @param [MessageRequest] body Required parameter: Example:
411
421
  # @return [BandwidthMessage] response from the API call
@@ -436,32 +446,33 @@ module Messaging
436
446
  _response = execute_request(_request)
437
447
 
438
448
  # Validate response against endpoint and global error codes.
439
- if _response.status_code == 400
449
+ case _response.status_code
450
+ when 400
440
451
  raise MessagingException.new(
441
452
  '400 Request is malformed or invalid',
442
453
  _response
443
454
  )
444
- elsif _response.status_code == 401
455
+ when 401
445
456
  raise MessagingException.new(
446
457
  '401 The specified user does not have access to the account',
447
458
  _response
448
459
  )
449
- elsif _response.status_code == 403
460
+ when 403
450
461
  raise MessagingException.new(
451
462
  '403 The user does not have access to this API',
452
463
  _response
453
464
  )
454
- elsif _response.status_code == 404
465
+ when 404
455
466
  raise MessagingException.new(
456
467
  '404 Path not found',
457
468
  _response
458
469
  )
459
- elsif _response.status_code == 415
470
+ when 415
460
471
  raise MessagingException.new(
461
472
  '415 The content-type of the request is incorrect',
462
473
  _response
463
474
  )
464
- elsif _response.status_code == 429
475
+ when 429
465
476
  raise MessagingException.new(
466
477
  '429 The rate limit has been reached',
467
478
  _response
@@ -19,14 +19,12 @@ module Bandwidth
19
19
 
20
20
  def validate_parameters(args)
21
21
  args.each do |_name, value|
22
- if value.nil?
23
- raise ArgumentError, "Required parameter #{_name} cannot be nil."
24
- end
22
+ raise ArgumentError, "Required parameter #{_name} cannot be nil." if value.nil?
25
23
  end
26
24
  end
27
25
 
28
26
  def execute_request(request, binary: false)
29
- @http_call_back.on_before_request(request) if @http_call_back
27
+ @http_call_back&.on_before_request(request)
30
28
 
31
29
  APIHelper.clean_hash(request.headers)
32
30
  request.headers.merge!(@global_headers)
@@ -36,7 +34,7 @@ module Bandwidth
36
34
  else
37
35
  config.http_client.execute_as_string(request)
38
36
  end
39
- @http_call_back.on_after_response(response) if @http_call_back
37
+ @http_call_back&.on_after_response(response)
40
38
 
41
39
  response
42
40
  end
@@ -6,6 +6,9 @@
6
6
  module Bandwidth
7
7
  # MessagingException class.
8
8
  class MessagingException < APIException
9
+ SKIP = Object.new
10
+ private_constant :SKIP
11
+
9
12
  # TODO: Write general description for this method
10
13
  # @return [String]
11
14
  attr_accessor :type
@@ -27,8 +30,8 @@ module Bandwidth
27
30
  # @param [Hash] The deserialized response sent by the server in the
28
31
  # response body.
29
32
  def unbox(hash)
30
- @type = hash['type']
31
- @description = hash['description']
33
+ @type = hash.key?('type') ? hash['type'] : SKIP
34
+ @description = hash.key?('description') ? hash['description'] : SKIP
32
35
  end
33
36
  end
34
37
  end
@@ -6,6 +6,9 @@
6
6
  module Bandwidth
7
7
  # BandwidthCallbackMessage Model.
8
8
  class BandwidthCallbackMessage < BaseModel
9
+ SKIP = Object.new
10
+ private_constant :SKIP
11
+
9
12
  # TODO: Write general description for this method
10
13
  # @return [String]
11
14
  attr_accessor :time
@@ -42,18 +45,35 @@ module Bandwidth
42
45
  @_hash
43
46
  end
44
47
 
48
+ # An array for optional fields
49
+ def optionals
50
+ %w[
51
+ time
52
+ type
53
+ to
54
+ error_code
55
+ description
56
+ message
57
+ ]
58
+ end
59
+
60
+ # An array for nullable fields
61
+ def nullables
62
+ []
63
+ end
64
+
45
65
  def initialize(time = nil,
46
66
  type = nil,
47
67
  to = nil,
48
68
  error_code = nil,
49
69
  description = nil,
50
70
  message = nil)
51
- @time = time
52
- @type = type
53
- @to = to
54
- @error_code = error_code
55
- @description = description
56
- @message = message
71
+ @time = time unless time == SKIP
72
+ @type = type unless type == SKIP
73
+ @to = to unless to == SKIP
74
+ @error_code = error_code unless error_code == SKIP
75
+ @description = description unless description == SKIP
76
+ @message = message unless message == SKIP
57
77
  end
58
78
 
59
79
  # Creates an instance of the object from a hash.
@@ -61,11 +81,11 @@ module Bandwidth
61
81
  return nil unless hash
62
82
 
63
83
  # Extract variables from the hash.
64
- time = hash['time']
65
- type = hash['type']
66
- to = hash['to']
67
- error_code = hash['errorCode']
68
- description = hash['description']
84
+ time = hash.key?('time') ? hash['time'] : SKIP
85
+ type = hash.key?('type') ? hash['type'] : SKIP
86
+ to = hash.key?('to') ? hash['to'] : SKIP
87
+ error_code = hash.key?('errorCode') ? hash['errorCode'] : SKIP
88
+ description = hash.key?('description') ? hash['description'] : SKIP
69
89
  message = BandwidthMessage.from_hash(hash['message']) if hash['message']
70
90
 
71
91
  # Create object from extracted values.