bandwidth-sdk 14.1.3 → 15.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +10 -10
  3. data/README.md +34 -1
  4. data/bandwidth.yml +640 -58
  5. data/coverage/.last_run.json +1 -1
  6. data/coverage/.resultset.json +210 -6
  7. data/coverage/index.html +14901 -12699
  8. data/docs/CardWidthEnum.md +15 -0
  9. data/docs/CreateMultiChannelMessageResponse.md +22 -0
  10. data/docs/ErrorObject.md +20 -0
  11. data/docs/Link.md +20 -0
  12. data/docs/Message.md +1 -1
  13. data/docs/MessageCallback.md +3 -1
  14. data/docs/MessageRequest.md +1 -1
  15. data/docs/MmsMessageContent.md +20 -0
  16. data/docs/MultiChannelAction.md +89 -0
  17. data/docs/MultiChannelActionCalendarEvent.md +30 -0
  18. data/docs/MultiChannelApi.md +80 -0
  19. data/docs/MultiChannelCallbackData.md +26 -0
  20. data/docs/MultiChannelChannelListObject.md +24 -0
  21. data/docs/MultiChannelChannelListObjectContent.md +55 -0
  22. data/docs/MultiChannelMessageCallbackData.md +32 -0
  23. data/docs/MultiChannelMessageChannelEnum.md +15 -0
  24. data/docs/MultiChannelMessageData.md +34 -0
  25. data/docs/MultiChannelMessageDirectionEnum.md +15 -0
  26. data/docs/MultiChannelMessageRequest.md +26 -0
  27. data/docs/MultiChannelStatusEnum.md +15 -0
  28. data/docs/RbmActionBase.md +22 -0
  29. data/docs/RbmActionDial.md +24 -0
  30. data/docs/RbmActionOpenUrl.md +24 -0
  31. data/docs/RbmActionTypeEnum.md +15 -0
  32. data/docs/RbmActionViewLocation.md +28 -0
  33. data/docs/RbmCardContent.md +24 -0
  34. data/docs/RbmCardContentMedia.md +22 -0
  35. data/docs/RbmMediaHeightEnum.md +15 -0
  36. data/docs/RbmMessageCarouselCard.md +22 -0
  37. data/docs/RbmMessageContentFile.md +20 -0
  38. data/docs/RbmMessageContentRichCard.md +49 -0
  39. data/docs/RbmMessageContentText.md +20 -0
  40. data/docs/RbmMessageMedia.md +20 -0
  41. data/docs/RbmStandaloneCard.md +24 -0
  42. data/docs/SmsMessageContent.md +18 -0
  43. data/docs/StandaloneCardOrientationEnum.md +15 -0
  44. data/docs/TfvStatus.md +5 -1
  45. data/docs/TfvSubmissionInfo.md +8 -2
  46. data/docs/ThumbnailAlignmentEnum.md +15 -0
  47. data/docs/VerificationDenialWebhook.md +5 -1
  48. data/docs/VerificationRequest.md +7 -1
  49. data/docs/VerificationUpdateRequest.md +8 -2
  50. data/lib/bandwidth-sdk/api/multi_channel_api.rb +96 -0
  51. data/lib/bandwidth-sdk/configuration.rb +6 -0
  52. data/lib/bandwidth-sdk/models/bxml/verbs/phone_number.rb +1 -0
  53. data/lib/bandwidth-sdk/models/card_width_enum.rb +40 -0
  54. data/lib/bandwidth-sdk/models/create_multi_channel_message_response.rb +234 -0
  55. data/lib/bandwidth-sdk/models/error_object.rb +221 -0
  56. data/lib/bandwidth-sdk/models/link.rb +221 -0
  57. data/lib/bandwidth-sdk/models/message.rb +1 -1
  58. data/lib/bandwidth-sdk/models/message_callback.rb +16 -5
  59. data/lib/bandwidth-sdk/models/message_request.rb +1 -1
  60. data/lib/bandwidth-sdk/models/mms_message_content.rb +244 -0
  61. data/lib/bandwidth-sdk/models/multi_channel_action.rb +61 -0
  62. data/lib/bandwidth-sdk/models/multi_channel_action_calendar_event.rb +419 -0
  63. data/lib/bandwidth-sdk/models/multi_channel_callback_data.rb +272 -0
  64. data/lib/bandwidth-sdk/models/multi_channel_channel_list_object.rb +291 -0
  65. data/lib/bandwidth-sdk/models/multi_channel_channel_list_object_content.rb +108 -0
  66. data/lib/bandwidth-sdk/models/multi_channel_message_callback_data.rb +302 -0
  67. data/lib/bandwidth-sdk/models/multi_channel_message_channel_enum.rb +41 -0
  68. data/lib/bandwidth-sdk/models/multi_channel_message_data.rb +312 -0
  69. data/lib/bandwidth-sdk/models/multi_channel_message_direction_enum.rb +40 -0
  70. data/lib/bandwidth-sdk/models/multi_channel_message_request.rb +310 -0
  71. data/lib/bandwidth-sdk/models/multi_channel_status_enum.rb +42 -0
  72. data/lib/bandwidth-sdk/models/rbm_action_base.rb +313 -0
  73. data/lib/bandwidth-sdk/models/rbm_action_dial.rb +337 -0
  74. data/lib/bandwidth-sdk/models/rbm_action_open_url.rb +356 -0
  75. data/lib/bandwidth-sdk/models/rbm_action_type_enum.rb +44 -0
  76. data/lib/bandwidth-sdk/models/rbm_action_view_location.rb +383 -0
  77. data/lib/bandwidth-sdk/models/rbm_card_content.rb +301 -0
  78. data/lib/bandwidth-sdk/models/rbm_card_content_media.rb +313 -0
  79. data/lib/bandwidth-sdk/models/rbm_media_height_enum.rb +41 -0
  80. data/lib/bandwidth-sdk/models/rbm_message_carousel_card.rb +309 -0
  81. data/lib/bandwidth-sdk/models/rbm_message_content_file.rb +268 -0
  82. data/lib/bandwidth-sdk/models/rbm_message_content_rich_card.rb +104 -0
  83. data/lib/bandwidth-sdk/models/rbm_message_content_text.rb +270 -0
  84. data/lib/bandwidth-sdk/models/rbm_message_media.rb +250 -0
  85. data/lib/bandwidth-sdk/models/rbm_standalone_card.rb +304 -0
  86. data/lib/bandwidth-sdk/models/sms_message_content.rb +239 -0
  87. data/lib/bandwidth-sdk/models/standalone_card_orientation_enum.rb +40 -0
  88. data/lib/bandwidth-sdk/models/tfv_status.rb +24 -4
  89. data/lib/bandwidth-sdk/models/tfv_status_enum.rb +1 -3
  90. data/lib/bandwidth-sdk/models/tfv_submission_info.rb +35 -5
  91. data/lib/bandwidth-sdk/models/thumbnail_alignment_enum.rb +40 -0
  92. data/lib/bandwidth-sdk/models/verification_denial_webhook.rb +24 -4
  93. data/lib/bandwidth-sdk/models/verification_request.rb +35 -5
  94. data/lib/bandwidth-sdk/models/verification_update_request.rb +35 -5
  95. data/lib/bandwidth-sdk/version.rb +1 -1
  96. data/lib/bandwidth-sdk.rb +34 -1
  97. data/spec/smoke/conferences_api_spec.rb +4 -4
  98. data/spec/smoke/multi_channel_api_spec.rb +40 -0
  99. data/spec/smoke/transcriptions_api_spec.rb +1 -1
  100. data/spec/unit/api/multi_channel_api_spec.rb +59 -0
  101. data/spec/unit/models/bxml/verbs/phone_number_spec.rb +6 -4
  102. metadata +117 -45
@@ -0,0 +1,383 @@
1
+ =begin
2
+ #Bandwidth
3
+
4
+ #Bandwidth's Communication APIs
5
+
6
+ The version of the OpenAPI document: 1.0.0
7
+ Contact: letstalk@bandwidth.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.8.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module Bandwidth
17
+ class RbmActionViewLocation
18
+ attr_accessor :type
19
+
20
+ # Displayed text for user to click
21
+ attr_accessor :text
22
+
23
+ # Base64 payload the customer receives when the reply is clicked.
24
+ attr_accessor :post_back_data
25
+
26
+ # The latitude of the location.
27
+ attr_accessor :latitude
28
+
29
+ # The longitude of the location.
30
+ attr_accessor :longitude
31
+
32
+ # The label of the location.
33
+ attr_accessor :label
34
+
35
+ class EnumAttributeValidator
36
+ attr_reader :datatype
37
+ attr_reader :allowable_values
38
+
39
+ def initialize(datatype, allowable_values)
40
+ @allowable_values = allowable_values.map do |value|
41
+ case datatype.to_s
42
+ when /Integer/i
43
+ value.to_i
44
+ when /Float/i
45
+ value.to_f
46
+ else
47
+ value
48
+ end
49
+ end
50
+ end
51
+
52
+ def valid?(value)
53
+ !value || allowable_values.include?(value)
54
+ end
55
+ end
56
+
57
+ # Attribute mapping from ruby-style variable name to JSON key.
58
+ def self.attribute_map
59
+ {
60
+ :'type' => :'type',
61
+ :'text' => :'text',
62
+ :'post_back_data' => :'postBackData',
63
+ :'latitude' => :'latitude',
64
+ :'longitude' => :'longitude',
65
+ :'label' => :'label'
66
+ }
67
+ end
68
+
69
+ # Returns all the JSON keys this model knows about
70
+ def self.acceptable_attributes
71
+ attribute_map.values
72
+ end
73
+
74
+ # Attribute type mapping.
75
+ def self.openapi_types
76
+ {
77
+ :'type' => :'RbmActionTypeEnum',
78
+ :'text' => :'String',
79
+ :'post_back_data' => :'String',
80
+ :'latitude' => :'Float',
81
+ :'longitude' => :'Float',
82
+ :'label' => :'String'
83
+ }
84
+ end
85
+
86
+ # List of attributes with nullable: true
87
+ def self.openapi_nullable
88
+ Set.new([
89
+ ])
90
+ end
91
+
92
+ # List of class defined in allOf (OpenAPI v3)
93
+ def self.openapi_all_of
94
+ [
95
+ :'RbmActionBase'
96
+ ]
97
+ end
98
+
99
+ # Initializes the object
100
+ # @param [Hash] attributes Model attributes in the form of hash
101
+ def initialize(attributes = {})
102
+ if (!attributes.is_a?(Hash))
103
+ fail ArgumentError, 'The input argument (attributes) must be a hash in `Bandwidth::RbmActionViewLocation` initialize method'
104
+ end
105
+
106
+ # check to see if the attribute exists and convert string to symbol for hash key
107
+ attributes = attributes.each_with_object({}) { |(k, v), h|
108
+ if (!self.class.attribute_map.key?(k.to_sym))
109
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Bandwidth::RbmActionViewLocation`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
110
+ end
111
+ h[k.to_sym] = v
112
+ }
113
+
114
+ if attributes.key?(:'type')
115
+ self.type = attributes[:'type']
116
+ else
117
+ self.type = nil
118
+ end
119
+
120
+ if attributes.key?(:'text')
121
+ self.text = attributes[:'text']
122
+ else
123
+ self.text = nil
124
+ end
125
+
126
+ if attributes.key?(:'post_back_data')
127
+ self.post_back_data = attributes[:'post_back_data']
128
+ else
129
+ self.post_back_data = nil
130
+ end
131
+
132
+ if attributes.key?(:'latitude')
133
+ self.latitude = attributes[:'latitude']
134
+ else
135
+ self.latitude = nil
136
+ end
137
+
138
+ if attributes.key?(:'longitude')
139
+ self.longitude = attributes[:'longitude']
140
+ else
141
+ self.longitude = nil
142
+ end
143
+
144
+ if attributes.key?(:'label')
145
+ self.label = attributes[:'label']
146
+ end
147
+ end
148
+
149
+ # Show invalid properties with the reasons. Usually used together with valid?
150
+ # @return Array for valid properties with the reasons
151
+ def list_invalid_properties
152
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
153
+ invalid_properties = Array.new
154
+ if @type.nil?
155
+ invalid_properties.push('invalid value for "type", type cannot be nil.')
156
+ end
157
+
158
+ if @text.nil?
159
+ invalid_properties.push('invalid value for "text", text cannot be nil.')
160
+ end
161
+
162
+ if @text.to_s.length > 25
163
+ invalid_properties.push('invalid value for "text", the character length must be smaller than or equal to 25.')
164
+ end
165
+
166
+ if @post_back_data.nil?
167
+ invalid_properties.push('invalid value for "post_back_data", post_back_data cannot be nil.')
168
+ end
169
+
170
+ if @post_back_data.to_s.length > 2048
171
+ invalid_properties.push('invalid value for "post_back_data", the character length must be smaller than or equal to 2048.')
172
+ end
173
+
174
+ if @latitude.nil?
175
+ invalid_properties.push('invalid value for "latitude", latitude cannot be nil.')
176
+ end
177
+
178
+ if @longitude.nil?
179
+ invalid_properties.push('invalid value for "longitude", longitude cannot be nil.')
180
+ end
181
+
182
+ if !@label.nil? && @label.to_s.length > 100
183
+ invalid_properties.push('invalid value for "label", the character length must be smaller than or equal to 100.')
184
+ end
185
+
186
+ invalid_properties
187
+ end
188
+
189
+ # Check to see if the all the properties in the model are valid
190
+ # @return true if the model is valid
191
+ def valid?
192
+ warn '[DEPRECATED] the `valid?` method is obsolete'
193
+ return false if @type.nil?
194
+ return false if @text.nil?
195
+ return false if @text.to_s.length > 25
196
+ return false if @post_back_data.nil?
197
+ return false if @post_back_data.to_s.length > 2048
198
+ return false if @latitude.nil?
199
+ return false if @longitude.nil?
200
+ return false if !@label.nil? && @label.to_s.length > 100
201
+ true
202
+ end
203
+
204
+ # Custom attribute writer method with validation
205
+ # @param [Object] text Value to be assigned
206
+ def text=(text)
207
+ if text.nil?
208
+ fail ArgumentError, 'text cannot be nil'
209
+ end
210
+
211
+ if text.to_s.length > 25
212
+ fail ArgumentError, 'invalid value for "text", the character length must be smaller than or equal to 25.'
213
+ end
214
+
215
+ @text = text
216
+ end
217
+
218
+ # Custom attribute writer method with validation
219
+ # @param [Object] post_back_data Value to be assigned
220
+ def post_back_data=(post_back_data)
221
+ if post_back_data.nil?
222
+ fail ArgumentError, 'post_back_data cannot be nil'
223
+ end
224
+
225
+ if post_back_data.to_s.length > 2048
226
+ fail ArgumentError, 'invalid value for "post_back_data", the character length must be smaller than or equal to 2048.'
227
+ end
228
+
229
+ @post_back_data = post_back_data
230
+ end
231
+
232
+ # Custom attribute writer method with validation
233
+ # @param [Object] label Value to be assigned
234
+ def label=(label)
235
+ if label.nil?
236
+ fail ArgumentError, 'label cannot be nil'
237
+ end
238
+
239
+ if label.to_s.length > 100
240
+ fail ArgumentError, 'invalid value for "label", the character length must be smaller than or equal to 100.'
241
+ end
242
+
243
+ @label = label
244
+ end
245
+
246
+ # Checks equality by comparing each attribute.
247
+ # @param [Object] Object to be compared
248
+ def ==(o)
249
+ return true if self.equal?(o)
250
+ self.class == o.class &&
251
+ type == o.type &&
252
+ text == o.text &&
253
+ post_back_data == o.post_back_data &&
254
+ latitude == o.latitude &&
255
+ longitude == o.longitude &&
256
+ label == o.label
257
+ end
258
+
259
+ # @see the `==` method
260
+ # @param [Object] Object to be compared
261
+ def eql?(o)
262
+ self == o
263
+ end
264
+
265
+ # Calculates hash code according to all attributes.
266
+ # @return [Integer] Hash code
267
+ def hash
268
+ [type, text, post_back_data, latitude, longitude, label].hash
269
+ end
270
+
271
+ # Builds the object from hash
272
+ # @param [Hash] attributes Model attributes in the form of hash
273
+ # @return [Object] Returns the model itself
274
+ def self.build_from_hash(attributes)
275
+ return nil unless attributes.is_a?(Hash)
276
+ attributes = attributes.transform_keys(&:to_sym)
277
+ transformed_hash = {}
278
+ openapi_types.each_pair do |key, type|
279
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
280
+ transformed_hash["#{key}"] = nil
281
+ elsif type =~ /\AArray<(.*)>/i
282
+ # check to ensure the input is an array given that the attribute
283
+ # is documented as an array but the input is not
284
+ if attributes[attribute_map[key]].is_a?(Array)
285
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
286
+ end
287
+ elsif !attributes[attribute_map[key]].nil?
288
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
289
+ end
290
+ end
291
+ new(transformed_hash)
292
+ end
293
+
294
+ # Deserializes the data based on type
295
+ # @param string type Data type
296
+ # @param string value Value to be deserialized
297
+ # @return [Object] Deserialized data
298
+ def self._deserialize(type, value)
299
+ case type.to_sym
300
+ when :Time
301
+ Time.parse(value)
302
+ when :Date
303
+ Date.parse(value)
304
+ when :String
305
+ value.to_s
306
+ when :Integer
307
+ value.to_i
308
+ when :Float
309
+ value.to_f
310
+ when :Boolean
311
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
312
+ true
313
+ else
314
+ false
315
+ end
316
+ when :Object
317
+ # generic object (usually a Hash), return directly
318
+ value
319
+ when /\AArray<(?<inner_type>.+)>\z/
320
+ inner_type = Regexp.last_match[:inner_type]
321
+ value.map { |v| _deserialize(inner_type, v) }
322
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
323
+ k_type = Regexp.last_match[:k_type]
324
+ v_type = Regexp.last_match[:v_type]
325
+ {}.tap do |hash|
326
+ value.each do |k, v|
327
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
328
+ end
329
+ end
330
+ else # model
331
+ # models (e.g. Pet) or oneOf
332
+ klass = Bandwidth.const_get(type)
333
+ klass.respond_to?(:openapi_any_of) || klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
334
+ end
335
+ end
336
+
337
+ # Returns the string representation of the object
338
+ # @return [String] String presentation of the object
339
+ def to_s
340
+ to_hash.to_s
341
+ end
342
+
343
+ # to_body is an alias to to_hash (backward compatibility)
344
+ # @return [Hash] Returns the object in the form of hash
345
+ def to_body
346
+ to_hash
347
+ end
348
+
349
+ # Returns the object in the form of hash
350
+ # @return [Hash] Returns the object in the form of hash
351
+ def to_hash
352
+ hash = {}
353
+ self.class.attribute_map.each_pair do |attr, param|
354
+ value = self.send(attr)
355
+ if value.nil?
356
+ is_nullable = self.class.openapi_nullable.include?(attr)
357
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
358
+ end
359
+
360
+ hash[param] = _to_hash(value)
361
+ end
362
+ hash
363
+ end
364
+
365
+ # Outputs non-array value in the form of hash
366
+ # For object, use to_hash. Otherwise, just return the value
367
+ # @param [Object] value Any valid value
368
+ # @return [Hash] Returns the value in the form of hash
369
+ def _to_hash(value)
370
+ if value.is_a?(Array)
371
+ value.compact.map { |v| _to_hash(v) }
372
+ elsif value.is_a?(Hash)
373
+ {}.tap do |hash|
374
+ value.each { |k, v| hash[k] = _to_hash(v) }
375
+ end
376
+ elsif value.respond_to? :to_hash
377
+ value.to_hash
378
+ else
379
+ value
380
+ end
381
+ end
382
+ end
383
+ end
@@ -0,0 +1,301 @@
1
+ =begin
2
+ #Bandwidth
3
+
4
+ #Bandwidth's Communication APIs
5
+
6
+ The version of the OpenAPI document: 1.0.0
7
+ Contact: letstalk@bandwidth.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.8.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module Bandwidth
17
+ class RbmCardContent
18
+ # The title of the card. Must be 200 characters or less.
19
+ attr_accessor :title
20
+
21
+ # The description of the card. Must be 2000 characters or less.
22
+ attr_accessor :description
23
+
24
+ attr_accessor :media
25
+
26
+ # An array of suggested actions for the recipient that will be displayed on the rich card.
27
+ attr_accessor :suggestions
28
+
29
+ # Attribute mapping from ruby-style variable name to JSON key.
30
+ def self.attribute_map
31
+ {
32
+ :'title' => :'title',
33
+ :'description' => :'description',
34
+ :'media' => :'media',
35
+ :'suggestions' => :'suggestions'
36
+ }
37
+ end
38
+
39
+ # Returns all the JSON keys this model knows about
40
+ def self.acceptable_attributes
41
+ attribute_map.values
42
+ end
43
+
44
+ # Attribute type mapping.
45
+ def self.openapi_types
46
+ {
47
+ :'title' => :'String',
48
+ :'description' => :'String',
49
+ :'media' => :'RbmCardContentMedia',
50
+ :'suggestions' => :'Array<MultiChannelAction>'
51
+ }
52
+ end
53
+
54
+ # List of attributes with nullable: true
55
+ def self.openapi_nullable
56
+ Set.new([
57
+ ])
58
+ end
59
+
60
+ # Initializes the object
61
+ # @param [Hash] attributes Model attributes in the form of hash
62
+ def initialize(attributes = {})
63
+ if (!attributes.is_a?(Hash))
64
+ fail ArgumentError, 'The input argument (attributes) must be a hash in `Bandwidth::RbmCardContent` initialize method'
65
+ end
66
+
67
+ # check to see if the attribute exists and convert string to symbol for hash key
68
+ attributes = attributes.each_with_object({}) { |(k, v), h|
69
+ if (!self.class.attribute_map.key?(k.to_sym))
70
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Bandwidth::RbmCardContent`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
71
+ end
72
+ h[k.to_sym] = v
73
+ }
74
+
75
+ if attributes.key?(:'title')
76
+ self.title = attributes[:'title']
77
+ end
78
+
79
+ if attributes.key?(:'description')
80
+ self.description = attributes[:'description']
81
+ end
82
+
83
+ if attributes.key?(:'media')
84
+ self.media = attributes[:'media']
85
+ end
86
+
87
+ if attributes.key?(:'suggestions')
88
+ if (value = attributes[:'suggestions']).is_a?(Array)
89
+ self.suggestions = value
90
+ end
91
+ end
92
+ end
93
+
94
+ # Show invalid properties with the reasons. Usually used together with valid?
95
+ # @return Array for valid properties with the reasons
96
+ def list_invalid_properties
97
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
98
+ invalid_properties = Array.new
99
+ if !@title.nil? && @title.to_s.length > 200
100
+ invalid_properties.push('invalid value for "title", the character length must be smaller than or equal to 200.')
101
+ end
102
+
103
+ if !@description.nil? && @description.to_s.length > 2000
104
+ invalid_properties.push('invalid value for "description", the character length must be smaller than or equal to 2000.')
105
+ end
106
+
107
+ if !@suggestions.nil? && @suggestions.length > 4
108
+ invalid_properties.push('invalid value for "suggestions", number of items must be less than or equal to 4.')
109
+ end
110
+
111
+ invalid_properties
112
+ end
113
+
114
+ # Check to see if the all the properties in the model are valid
115
+ # @return true if the model is valid
116
+ def valid?
117
+ warn '[DEPRECATED] the `valid?` method is obsolete'
118
+ return false if !@title.nil? && @title.to_s.length > 200
119
+ return false if !@description.nil? && @description.to_s.length > 2000
120
+ return false if !@suggestions.nil? && @suggestions.length > 4
121
+ true
122
+ end
123
+
124
+ # Custom attribute writer method with validation
125
+ # @param [Object] title Value to be assigned
126
+ def title=(title)
127
+ if title.nil?
128
+ fail ArgumentError, 'title cannot be nil'
129
+ end
130
+
131
+ if title.to_s.length > 200
132
+ fail ArgumentError, 'invalid value for "title", the character length must be smaller than or equal to 200.'
133
+ end
134
+
135
+ @title = title
136
+ end
137
+
138
+ # Custom attribute writer method with validation
139
+ # @param [Object] description Value to be assigned
140
+ def description=(description)
141
+ if description.nil?
142
+ fail ArgumentError, 'description cannot be nil'
143
+ end
144
+
145
+ if description.to_s.length > 2000
146
+ fail ArgumentError, 'invalid value for "description", the character length must be smaller than or equal to 2000.'
147
+ end
148
+
149
+ @description = description
150
+ end
151
+
152
+ # Custom attribute writer method with validation
153
+ # @param [Object] suggestions Value to be assigned
154
+ def suggestions=(suggestions)
155
+ if suggestions.nil?
156
+ fail ArgumentError, 'suggestions cannot be nil'
157
+ end
158
+
159
+ if suggestions.length > 4
160
+ fail ArgumentError, 'invalid value for "suggestions", number of items must be less than or equal to 4.'
161
+ end
162
+
163
+ @suggestions = suggestions
164
+ end
165
+
166
+ # Checks equality by comparing each attribute.
167
+ # @param [Object] Object to be compared
168
+ def ==(o)
169
+ return true if self.equal?(o)
170
+ self.class == o.class &&
171
+ title == o.title &&
172
+ description == o.description &&
173
+ media == o.media &&
174
+ suggestions == o.suggestions
175
+ end
176
+
177
+ # @see the `==` method
178
+ # @param [Object] Object to be compared
179
+ def eql?(o)
180
+ self == o
181
+ end
182
+
183
+ # Calculates hash code according to all attributes.
184
+ # @return [Integer] Hash code
185
+ def hash
186
+ [title, description, media, suggestions].hash
187
+ end
188
+
189
+ # Builds the object from hash
190
+ # @param [Hash] attributes Model attributes in the form of hash
191
+ # @return [Object] Returns the model itself
192
+ def self.build_from_hash(attributes)
193
+ return nil unless attributes.is_a?(Hash)
194
+ attributes = attributes.transform_keys(&:to_sym)
195
+ transformed_hash = {}
196
+ openapi_types.each_pair do |key, type|
197
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
198
+ transformed_hash["#{key}"] = nil
199
+ elsif type =~ /\AArray<(.*)>/i
200
+ # check to ensure the input is an array given that the attribute
201
+ # is documented as an array but the input is not
202
+ if attributes[attribute_map[key]].is_a?(Array)
203
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
204
+ end
205
+ elsif !attributes[attribute_map[key]].nil?
206
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
207
+ end
208
+ end
209
+ new(transformed_hash)
210
+ end
211
+
212
+ # Deserializes the data based on type
213
+ # @param string type Data type
214
+ # @param string value Value to be deserialized
215
+ # @return [Object] Deserialized data
216
+ def self._deserialize(type, value)
217
+ case type.to_sym
218
+ when :Time
219
+ Time.parse(value)
220
+ when :Date
221
+ Date.parse(value)
222
+ when :String
223
+ value.to_s
224
+ when :Integer
225
+ value.to_i
226
+ when :Float
227
+ value.to_f
228
+ when :Boolean
229
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
230
+ true
231
+ else
232
+ false
233
+ end
234
+ when :Object
235
+ # generic object (usually a Hash), return directly
236
+ value
237
+ when /\AArray<(?<inner_type>.+)>\z/
238
+ inner_type = Regexp.last_match[:inner_type]
239
+ value.map { |v| _deserialize(inner_type, v) }
240
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
241
+ k_type = Regexp.last_match[:k_type]
242
+ v_type = Regexp.last_match[:v_type]
243
+ {}.tap do |hash|
244
+ value.each do |k, v|
245
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
246
+ end
247
+ end
248
+ else # model
249
+ # models (e.g. Pet) or oneOf
250
+ klass = Bandwidth.const_get(type)
251
+ klass.respond_to?(:openapi_any_of) || klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
252
+ end
253
+ end
254
+
255
+ # Returns the string representation of the object
256
+ # @return [String] String presentation of the object
257
+ def to_s
258
+ to_hash.to_s
259
+ end
260
+
261
+ # to_body is an alias to to_hash (backward compatibility)
262
+ # @return [Hash] Returns the object in the form of hash
263
+ def to_body
264
+ to_hash
265
+ end
266
+
267
+ # Returns the object in the form of hash
268
+ # @return [Hash] Returns the object in the form of hash
269
+ def to_hash
270
+ hash = {}
271
+ self.class.attribute_map.each_pair do |attr, param|
272
+ value = self.send(attr)
273
+ if value.nil?
274
+ is_nullable = self.class.openapi_nullable.include?(attr)
275
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
276
+ end
277
+
278
+ hash[param] = _to_hash(value)
279
+ end
280
+ hash
281
+ end
282
+
283
+ # Outputs non-array value in the form of hash
284
+ # For object, use to_hash. Otherwise, just return the value
285
+ # @param [Object] value Any valid value
286
+ # @return [Hash] Returns the value in the form of hash
287
+ def _to_hash(value)
288
+ if value.is_a?(Array)
289
+ value.compact.map { |v| _to_hash(v) }
290
+ elsif value.is_a?(Hash)
291
+ {}.tap do |hash|
292
+ value.each { |k, v| hash[k] = _to_hash(v) }
293
+ end
294
+ elsif value.respond_to? :to_hash
295
+ value.to_hash
296
+ else
297
+ value
298
+ end
299
+ end
300
+ end
301
+ end