omnichannel 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (111) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +8 -0
  3. data/Gemfile.lock +79 -0
  4. data/README.md +120 -0
  5. data/Rakefile +10 -0
  6. data/config.json +12 -0
  7. data/docs/Channel.md +7 -0
  8. data/docs/DeliveryReportApi.md +58 -0
  9. data/docs/DeliveryReportResponse.md +10 -0
  10. data/docs/DeliveryResult.md +13 -0
  11. data/docs/Err.md +7 -0
  12. data/docs/ErrorItem.md +11 -0
  13. data/docs/ErrorResponse.md +8 -0
  14. data/docs/Message.md +9 -0
  15. data/docs/MessageResult.md +10 -0
  16. data/docs/OmniMessageCreateSuccessResponse.md +10 -0
  17. data/docs/Omnimessage.md +11 -0
  18. data/docs/OmnimessageApi.md +107 -0
  19. data/docs/ResponseErrorCode.md +7 -0
  20. data/docs/ResponseErrorTitle.md +7 -0
  21. data/docs/SMS.md +13 -0
  22. data/docs/Status.md +7 -0
  23. data/docs/Viber.md +14 -0
  24. data/docs/WhatsApp.md +14 -0
  25. data/docs/WhatsAppAudio.md +8 -0
  26. data/docs/WhatsAppDocument.md +9 -0
  27. data/docs/WhatsAppImage.md +9 -0
  28. data/docs/WhatsAppText.md +9 -0
  29. data/git_push.sh +55 -0
  30. data/lib/omnichannel.rb +60 -0
  31. data/lib/omnichannel/api/delivery_report_api.rb +74 -0
  32. data/lib/omnichannel/api/omnimessage_api.rb +126 -0
  33. data/lib/omnichannel/api_client.rb +387 -0
  34. data/lib/omnichannel/api_error.rb +38 -0
  35. data/lib/omnichannel/configuration.rb +251 -0
  36. data/lib/omnichannel/models/channel.rb +39 -0
  37. data/lib/omnichannel/models/delivery_report_response.rb +229 -0
  38. data/lib/omnichannel/models/delivery_result.rb +239 -0
  39. data/lib/omnichannel/models/err.rb +48 -0
  40. data/lib/omnichannel/models/error_item.rb +240 -0
  41. data/lib/omnichannel/models/error_response.rb +198 -0
  42. data/lib/omnichannel/models/message.rb +207 -0
  43. data/lib/omnichannel/models/message_result.rb +226 -0
  44. data/lib/omnichannel/models/omni_message_create_success_response.rb +229 -0
  45. data/lib/omnichannel/models/omnimessage.rb +233 -0
  46. data/lib/omnichannel/models/response_error_code.rb +43 -0
  47. data/lib/omnichannel/models/response_error_title.rb +42 -0
  48. data/lib/omnichannel/models/sms.rb +249 -0
  49. data/lib/omnichannel/models/status.rb +47 -0
  50. data/lib/omnichannel/models/viber.rb +254 -0
  51. data/lib/omnichannel/models/whats_app.rb +250 -0
  52. data/lib/omnichannel/models/whats_app_audio.rb +197 -0
  53. data/lib/omnichannel/models/whats_app_document.rb +207 -0
  54. data/lib/omnichannel/models/whats_app_image.rb +207 -0
  55. data/lib/omnichannel/models/whats_app_text.rb +209 -0
  56. data/lib/omnichannel/version.rb +15 -0
  57. data/lib/openapi_client.rb +61 -0
  58. data/lib/openapi_client/api/delivery_report_api.rb +74 -0
  59. data/lib/openapi_client/api/omnimessage_api.rb +126 -0
  60. data/lib/openapi_client/api_client.rb +387 -0
  61. data/lib/openapi_client/api_error.rb +38 -0
  62. data/lib/openapi_client/configuration.rb +251 -0
  63. data/lib/openapi_client/models/channel.rb +39 -0
  64. data/lib/openapi_client/models/delivery_report_response.rb +229 -0
  65. data/lib/openapi_client/models/delivery_result.rb +239 -0
  66. data/lib/openapi_client/models/err.rb +48 -0
  67. data/lib/openapi_client/models/error_item.rb +240 -0
  68. data/lib/openapi_client/models/error_response.rb +198 -0
  69. data/lib/openapi_client/models/message.rb +221 -0
  70. data/lib/openapi_client/models/message_result.rb +226 -0
  71. data/lib/openapi_client/models/omni_message_create_success_response.rb +229 -0
  72. data/lib/openapi_client/models/omnimessage.rb +233 -0
  73. data/lib/openapi_client/models/response_error_code.rb +43 -0
  74. data/lib/openapi_client/models/response_error_title.rb +42 -0
  75. data/lib/openapi_client/models/sms.rb +228 -0
  76. data/lib/openapi_client/models/status.rb +47 -0
  77. data/lib/openapi_client/models/viber.rb +233 -0
  78. data/lib/openapi_client/models/whats_app.rb +229 -0
  79. data/lib/openapi_client/models/whats_app_audio.rb +197 -0
  80. data/lib/openapi_client/models/whats_app_document.rb +207 -0
  81. data/lib/openapi_client/models/whats_app_image.rb +207 -0
  82. data/lib/openapi_client/models/whats_app_text.rb +209 -0
  83. data/lib/openapi_client/version.rb +15 -0
  84. data/omnichannel.gemspec +45 -0
  85. data/spec/api/delivery_report_api_spec.rb +46 -0
  86. data/spec/api/omnimessage_api_spec.rb +57 -0
  87. data/spec/api_client_spec.rb +226 -0
  88. data/spec/configuration_spec.rb +42 -0
  89. data/spec/models/channel_spec.rb +35 -0
  90. data/spec/models/delivery_report_response_spec.rb +53 -0
  91. data/spec/models/delivery_result_spec.rb +71 -0
  92. data/spec/models/err_spec.rb +35 -0
  93. data/spec/models/error_item_spec.rb +59 -0
  94. data/spec/models/error_response_spec.rb +41 -0
  95. data/spec/models/message_result_spec.rb +53 -0
  96. data/spec/models/message_spec.rb +53 -0
  97. data/spec/models/omni_message_create_success_response_spec.rb +53 -0
  98. data/spec/models/omnimessage_spec.rb +59 -0
  99. data/spec/models/response_error_code_spec.rb +35 -0
  100. data/spec/models/response_error_title_spec.rb +35 -0
  101. data/spec/models/sms_spec.rb +71 -0
  102. data/spec/models/status_spec.rb +35 -0
  103. data/spec/models/viber_spec.rb +77 -0
  104. data/spec/models/whats_app_audio_spec.rb +41 -0
  105. data/spec/models/whats_app_document_spec.rb +47 -0
  106. data/spec/models/whats_app_image_spec.rb +47 -0
  107. data/spec/models/whats_app_spec.rb +77 -0
  108. data/spec/models/whats_app_text_spec.rb +47 -0
  109. data/spec/spec_helper.rb +111 -0
  110. data/templates/README.mustache +114 -0
  111. metadata +358 -0
@@ -0,0 +1,43 @@
1
+ =begin
2
+ #Omnichannel API
3
+
4
+ #Messente's API which allows sending messages via various channels with fallback options.
5
+
6
+ OpenAPI spec version: 0.0.2
7
+ Contact: messente@messente.com
8
+ Generated by: https://openapi-generator.tech
9
+ OpenAPI Generator version: 4.0.0-SNAPSHOT
10
+
11
+ =end
12
+
13
+ require 'date'
14
+
15
+ module Omnichannel
16
+ class ResponseErrorCode
17
+
18
+ N101 = '101'.freeze
19
+ N102 = '102'.freeze
20
+ N103 = '103'.freeze
21
+ N104 = '104'.freeze
22
+ N105 = '105'.freeze
23
+ N106 = '106'.freeze
24
+ N107 = '107'.freeze
25
+
26
+ # Builds the enum from string
27
+ # @param [String] The enum value in the form of the string
28
+ # @return [String] The enum value
29
+ def self.build_from_hash(value)
30
+ new.build_from_hash(value)
31
+ end
32
+
33
+ # Builds the enum from string
34
+ # @param [String] The enum value in the form of the string
35
+ # @return [String] The enum value
36
+ def build_from_hash(value)
37
+ constantValues = ResponseErrorCode.constants.select { |c| ResponseErrorCode::const_get(c) == value }
38
+ raise "Invalid ENUM value #{value} for class #ResponseErrorCode" if constantValues.empty?
39
+ value
40
+ end
41
+ end
42
+
43
+ end
@@ -0,0 +1,42 @@
1
+ =begin
2
+ #Omnichannel API
3
+
4
+ #Messente's API which allows sending messages via various channels with fallback options.
5
+
6
+ OpenAPI spec version: 0.0.2
7
+ Contact: messente@messente.com
8
+ Generated by: https://openapi-generator.tech
9
+ OpenAPI Generator version: 4.0.0-SNAPSHOT
10
+
11
+ =end
12
+
13
+ require 'date'
14
+
15
+ module Omnichannel
16
+ class ResponseErrorTitle
17
+
18
+ NOT_FOUND = 'Not found'.freeze
19
+ FORBIDDEN = 'Forbidden'.freeze
20
+ UNAUTHORIZED = 'Unauthorized'.freeze
21
+ INVALID_DATA = 'Invalid data'.freeze
22
+ INTERNAL_SERVER_ERROR = 'Internal Server Error'.freeze
23
+ MISSING_DATA = 'Missing data'.freeze
24
+
25
+ # Builds the enum from string
26
+ # @param [String] The enum value in the form of the string
27
+ # @return [String] The enum value
28
+ def self.build_from_hash(value)
29
+ new.build_from_hash(value)
30
+ end
31
+
32
+ # Builds the enum from string
33
+ # @param [String] The enum value in the form of the string
34
+ # @return [String] The enum value
35
+ def build_from_hash(value)
36
+ constantValues = ResponseErrorTitle.constants.select { |c| ResponseErrorTitle::const_get(c) == value }
37
+ raise "Invalid ENUM value #{value} for class #ResponseErrorTitle" if constantValues.empty?
38
+ value
39
+ end
40
+ end
41
+
42
+ end
@@ -0,0 +1,249 @@
1
+ =begin
2
+ #Omnichannel API
3
+
4
+ #Messente's API which allows sending messages via various channels with fallback options.
5
+
6
+ OpenAPI spec version: 0.0.2
7
+ Contact: messente@messente.com
8
+ Generated by: https://openapi-generator.tech
9
+ OpenAPI Generator version: 4.0.0-SNAPSHOT
10
+
11
+ =end
12
+
13
+ require 'date'
14
+
15
+ module Omnichannel
16
+ # SMS message content
17
+ class SMS
18
+ # Phone number or alphanumeric sender name
19
+ attr_accessor :sender
20
+
21
+ # After how many minutes this channel is considered as failed and the next channel is attempted
22
+ attr_accessor :validity
23
+
24
+ # Text content of the SMS
25
+ attr_accessor :text
26
+
27
+ # Defines how non-GSM characters will be treated: - \"on\" Use replacement settings from the account's [API Auto Replace settings page](https://dashboard.messente.com/api-settings/auto-replace)(default) - \"full\" All non GSM 03.38 characters will be replaced with suitable alternatives - \"off\" Message content is not modified in any way
28
+ attr_accessor :autoconvert
29
+
30
+ # hex-encoded string containing SMS UDH
31
+ attr_accessor :udh
32
+
33
+ attr_accessor :channel
34
+
35
+ # Attribute mapping from ruby-style variable name to JSON key.
36
+ def self.attribute_map
37
+ {
38
+ :'sender' => :'sender',
39
+ :'validity' => :'validity',
40
+ :'text' => :'text',
41
+ :'autoconvert' => :'autoconvert',
42
+ :'udh' => :'udh',
43
+ :'channel' => :'channel'
44
+ }
45
+ end
46
+
47
+ # Attribute type mapping.
48
+ def self.openapi_types
49
+ {
50
+ :'sender' => :'String',
51
+ :'validity' => :'Integer',
52
+ :'text' => :'String',
53
+ :'autoconvert' => :'Float',
54
+ :'udh' => :'String',
55
+ :'channel' => :'String'
56
+ }
57
+ end
58
+
59
+ # Initializes the object
60
+ # @param [Hash] attributes Model attributes in the form of hash
61
+ def initialize(attributes = {})
62
+ return unless attributes.is_a?(Hash)
63
+
64
+ # convert string to symbol for hash key
65
+ attributes = attributes.each_with_object({}) { |(k, v), h| h[k.to_sym] = v }
66
+
67
+ if attributes.has_key?(:'sender')
68
+ self.sender = attributes[:'sender']
69
+ end
70
+
71
+ if attributes.has_key?(:'validity')
72
+ self.validity = attributes[:'validity']
73
+ end
74
+
75
+ if attributes.has_key?(:'text')
76
+ self.text = attributes[:'text']
77
+ end
78
+
79
+ if attributes.has_key?(:'autoconvert')
80
+ self.autoconvert = attributes[:'autoconvert']
81
+ end
82
+
83
+ if attributes.has_key?(:'udh')
84
+ self.udh = attributes[:'udh']
85
+ end
86
+
87
+ if attributes.has_key?(:'channel')
88
+ self.channel = attributes[:'channel']
89
+ else
90
+ self.channel = 'sms'
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
+ invalid_properties = Array.new
98
+ if @text.nil?
99
+ invalid_properties.push('invalid value for "text", text cannot be nil.')
100
+ end
101
+
102
+ invalid_properties
103
+ end
104
+
105
+ # Check to see if the all the properties in the model are valid
106
+ # @return true if the model is valid
107
+ def valid?
108
+ return false if @text.nil?
109
+ true
110
+ end
111
+
112
+ # Checks equality by comparing each attribute.
113
+ # @param [Object] Object to be compared
114
+ def ==(o)
115
+ return true if self.equal?(o)
116
+ self.class == o.class &&
117
+ sender == o.sender &&
118
+ validity == o.validity &&
119
+ text == o.text &&
120
+ autoconvert == o.autoconvert &&
121
+ udh == o.udh &&
122
+ channel == o.channel
123
+ end
124
+
125
+ # @see the `==` method
126
+ # @param [Object] Object to be compared
127
+ def eql?(o)
128
+ self == o
129
+ end
130
+
131
+ # Calculates hash code according to all attributes.
132
+ # @return [Fixnum] Hash code
133
+ def hash
134
+ [sender, validity, text, autoconvert, udh, channel].hash
135
+ end
136
+
137
+ # Builds the object from hash
138
+ # @param [Hash] attributes Model attributes in the form of hash
139
+ # @return [Object] Returns the model itself
140
+ def self.build_from_hash(attributes)
141
+ new.build_from_hash(attributes)
142
+ end
143
+
144
+ # Builds the object from hash
145
+ # @param [Hash] attributes Model attributes in the form of hash
146
+ # @return [Object] Returns the model itself
147
+ def build_from_hash(attributes)
148
+ return nil unless attributes.is_a?(Hash)
149
+ self.class.openapi_types.each_pair do |key, type|
150
+ if type =~ /\AArray<(.*)>/i
151
+ # check to ensure the input is an array given that the attribute
152
+ # is documented as an array but the input is not
153
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
154
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
155
+ end
156
+ elsif !attributes[self.class.attribute_map[key]].nil?
157
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
158
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
159
+ end
160
+
161
+ self
162
+ end
163
+
164
+ # Deserializes the data based on type
165
+ # @param string type Data type
166
+ # @param string value Value to be deserialized
167
+ # @return [Object] Deserialized data
168
+ def _deserialize(type, value)
169
+ case type.to_sym
170
+ when :DateTime
171
+ DateTime.parse(value)
172
+ when :Date
173
+ Date.parse(value)
174
+ when :String
175
+ value.to_s
176
+ when :Integer
177
+ value.to_i
178
+ when :Float
179
+ value.to_f
180
+ when :BOOLEAN
181
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
182
+ true
183
+ else
184
+ false
185
+ end
186
+ when :Object
187
+ # generic object (usually a Hash), return directly
188
+ value
189
+ when /\AArray<(?<inner_type>.+)>\z/
190
+ inner_type = Regexp.last_match[:inner_type]
191
+ value.map { |v| _deserialize(inner_type, v) }
192
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
193
+ k_type = Regexp.last_match[:k_type]
194
+ v_type = Regexp.last_match[:v_type]
195
+ {}.tap do |hash|
196
+ value.each do |k, v|
197
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
198
+ end
199
+ end
200
+ else # model
201
+ Omnichannel.const_get(type).build_from_hash(value)
202
+ end
203
+ end
204
+
205
+ # Returns the string representation of the object
206
+ # @return [String] String presentation of the object
207
+ def to_s
208
+ to_hash.to_s
209
+ end
210
+
211
+ # to_body is an alias to to_hash (backward compatibility)
212
+ # @return [Hash] Returns the object in the form of hash
213
+ def to_body
214
+ to_hash
215
+ end
216
+
217
+ # Returns the object in the form of hash
218
+ # @return [Hash] Returns the object in the form of hash
219
+ def to_hash
220
+ hash = {}
221
+ self.class.attribute_map.each_pair do |attr, param|
222
+ value = self.send(attr)
223
+ next if value.nil?
224
+ hash[param] = _to_hash(value)
225
+ end
226
+ hash
227
+ end
228
+
229
+ # Outputs non-array value in the form of hash
230
+ # For object, use to_hash. Otherwise, just return the value
231
+ # @param [Object] value Any valid value
232
+ # @return [Hash] Returns the value in the form of hash
233
+ def _to_hash(value)
234
+ if value.is_a?(Array)
235
+ value.compact.map { |v| _to_hash(v) }
236
+ elsif value.is_a?(Hash)
237
+ {}.tap do |hash|
238
+ value.each { |k, v| hash[k] = _to_hash(v) }
239
+ end
240
+ elsif value.respond_to? :to_hash
241
+ value.to_hash
242
+ else
243
+ value
244
+ end
245
+ end
246
+
247
+ end
248
+
249
+ end
@@ -0,0 +1,47 @@
1
+ =begin
2
+ #Omnichannel API
3
+
4
+ #Messente's API which allows sending messages via various channels with fallback options.
5
+
6
+ OpenAPI spec version: 0.0.2
7
+ Contact: messente@messente.com
8
+ Generated by: https://openapi-generator.tech
9
+ OpenAPI Generator version: 4.0.0-SNAPSHOT
10
+
11
+ =end
12
+
13
+ require 'date'
14
+
15
+ module Omnichannel
16
+ class Status
17
+
18
+ ACK = 'ACK'.freeze
19
+ DELIVRD = 'DELIVRD'.freeze
20
+ UNDELIV = 'UNDELIV'.freeze
21
+ FAILED = 'FAILED'.freeze
22
+ UNKNOWN = 'UNKNOWN'.freeze
23
+ ACCEPTD = 'ACCEPTD'.freeze
24
+ REJECTD = 'REJECTD'.freeze
25
+ DELETED = 'DELETED'.freeze
26
+ EXPIRED = 'EXPIRED'.freeze
27
+ NACK = 'NACK'.freeze
28
+ SEEN = 'SEEN'.freeze
29
+
30
+ # Builds the enum from string
31
+ # @param [String] The enum value in the form of the string
32
+ # @return [String] The enum value
33
+ def self.build_from_hash(value)
34
+ new.build_from_hash(value)
35
+ end
36
+
37
+ # Builds the enum from string
38
+ # @param [String] The enum value in the form of the string
39
+ # @return [String] The enum value
40
+ def build_from_hash(value)
41
+ constantValues = Status.constants.select { |c| Status::const_get(c) == value }
42
+ raise "Invalid ENUM value #{value} for class #Status" if constantValues.empty?
43
+ value
44
+ end
45
+ end
46
+
47
+ end
@@ -0,0 +1,254 @@
1
+ =begin
2
+ #Omnichannel API
3
+
4
+ #Messente's API which allows sending messages via various channels with fallback options.
5
+
6
+ OpenAPI spec version: 0.0.2
7
+ Contact: messente@messente.com
8
+ Generated by: https://openapi-generator.tech
9
+ OpenAPI Generator version: 4.0.0-SNAPSHOT
10
+
11
+ =end
12
+
13
+ require 'date'
14
+
15
+ module Omnichannel
16
+ # Viber message content
17
+ class Viber
18
+ # Phone number or alphanumeric sender name
19
+ attr_accessor :sender
20
+
21
+ # After how many minutes this channel is considered as failed and the next channel is attempted
22
+ attr_accessor :validity
23
+
24
+ # Plaintext content for Viber
25
+ attr_accessor :text
26
+
27
+ # URL for the embedded image. Valid combinations: 1) 'image_url' 2) 'text', 'image_url', 'button_url', 'button_text'
28
+ attr_accessor :image_url
29
+
30
+ # URL of the button, must be specified along with 'text', 'button_text' and 'image_url' (optional)
31
+ attr_accessor :button_url
32
+
33
+ # Must be specified along with 'text', 'button_url', 'button_text', 'image_url' (optional)
34
+ attr_accessor :button_text
35
+
36
+ attr_accessor :channel
37
+
38
+ # Attribute mapping from ruby-style variable name to JSON key.
39
+ def self.attribute_map
40
+ {
41
+ :'sender' => :'sender',
42
+ :'validity' => :'validity',
43
+ :'text' => :'text',
44
+ :'image_url' => :'image_url',
45
+ :'button_url' => :'button_url',
46
+ :'button_text' => :'button_text',
47
+ :'channel' => :'channel'
48
+ }
49
+ end
50
+
51
+ # Attribute type mapping.
52
+ def self.openapi_types
53
+ {
54
+ :'sender' => :'String',
55
+ :'validity' => :'Integer',
56
+ :'text' => :'String',
57
+ :'image_url' => :'String',
58
+ :'button_url' => :'String',
59
+ :'button_text' => :'String',
60
+ :'channel' => :'String'
61
+ }
62
+ end
63
+
64
+ # Initializes the object
65
+ # @param [Hash] attributes Model attributes in the form of hash
66
+ def initialize(attributes = {})
67
+ return unless attributes.is_a?(Hash)
68
+
69
+ # convert string to symbol for hash key
70
+ attributes = attributes.each_with_object({}) { |(k, v), h| h[k.to_sym] = v }
71
+
72
+ if attributes.has_key?(:'sender')
73
+ self.sender = attributes[:'sender']
74
+ end
75
+
76
+ if attributes.has_key?(:'validity')
77
+ self.validity = attributes[:'validity']
78
+ end
79
+
80
+ if attributes.has_key?(:'text')
81
+ self.text = attributes[:'text']
82
+ end
83
+
84
+ if attributes.has_key?(:'image_url')
85
+ self.image_url = attributes[:'image_url']
86
+ end
87
+
88
+ if attributes.has_key?(:'button_url')
89
+ self.button_url = attributes[:'button_url']
90
+ end
91
+
92
+ if attributes.has_key?(:'button_text')
93
+ self.button_text = attributes[:'button_text']
94
+ end
95
+
96
+ if attributes.has_key?(:'channel')
97
+ self.channel = attributes[:'channel']
98
+ else
99
+ self.channel = 'viber'
100
+ end
101
+ end
102
+
103
+ # Show invalid properties with the reasons. Usually used together with valid?
104
+ # @return Array for valid properties with the reasons
105
+ def list_invalid_properties
106
+ invalid_properties = Array.new
107
+ invalid_properties
108
+ end
109
+
110
+ # Check to see if the all the properties in the model are valid
111
+ # @return true if the model is valid
112
+ def valid?
113
+ true
114
+ end
115
+
116
+ # Checks equality by comparing each attribute.
117
+ # @param [Object] Object to be compared
118
+ def ==(o)
119
+ return true if self.equal?(o)
120
+ self.class == o.class &&
121
+ sender == o.sender &&
122
+ validity == o.validity &&
123
+ text == o.text &&
124
+ image_url == o.image_url &&
125
+ button_url == o.button_url &&
126
+ button_text == o.button_text &&
127
+ channel == o.channel
128
+ end
129
+
130
+ # @see the `==` method
131
+ # @param [Object] Object to be compared
132
+ def eql?(o)
133
+ self == o
134
+ end
135
+
136
+ # Calculates hash code according to all attributes.
137
+ # @return [Fixnum] Hash code
138
+ def hash
139
+ [sender, validity, text, image_url, button_url, button_text, channel].hash
140
+ end
141
+
142
+ # Builds the object from hash
143
+ # @param [Hash] attributes Model attributes in the form of hash
144
+ # @return [Object] Returns the model itself
145
+ def self.build_from_hash(attributes)
146
+ new.build_from_hash(attributes)
147
+ end
148
+
149
+ # Builds the object from hash
150
+ # @param [Hash] attributes Model attributes in the form of hash
151
+ # @return [Object] Returns the model itself
152
+ def build_from_hash(attributes)
153
+ return nil unless attributes.is_a?(Hash)
154
+ self.class.openapi_types.each_pair do |key, type|
155
+ if type =~ /\AArray<(.*)>/i
156
+ # check to ensure the input is an array given that the attribute
157
+ # is documented as an array but the input is not
158
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
159
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
160
+ end
161
+ elsif !attributes[self.class.attribute_map[key]].nil?
162
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
163
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
164
+ end
165
+
166
+ self
167
+ end
168
+
169
+ # Deserializes the data based on type
170
+ # @param string type Data type
171
+ # @param string value Value to be deserialized
172
+ # @return [Object] Deserialized data
173
+ def _deserialize(type, value)
174
+ case type.to_sym
175
+ when :DateTime
176
+ DateTime.parse(value)
177
+ when :Date
178
+ Date.parse(value)
179
+ when :String
180
+ value.to_s
181
+ when :Integer
182
+ value.to_i
183
+ when :Float
184
+ value.to_f
185
+ when :BOOLEAN
186
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
187
+ true
188
+ else
189
+ false
190
+ end
191
+ when :Object
192
+ # generic object (usually a Hash), return directly
193
+ value
194
+ when /\AArray<(?<inner_type>.+)>\z/
195
+ inner_type = Regexp.last_match[:inner_type]
196
+ value.map { |v| _deserialize(inner_type, v) }
197
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
198
+ k_type = Regexp.last_match[:k_type]
199
+ v_type = Regexp.last_match[:v_type]
200
+ {}.tap do |hash|
201
+ value.each do |k, v|
202
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
203
+ end
204
+ end
205
+ else # model
206
+ Omnichannel.const_get(type).build_from_hash(value)
207
+ end
208
+ end
209
+
210
+ # Returns the string representation of the object
211
+ # @return [String] String presentation of the object
212
+ def to_s
213
+ to_hash.to_s
214
+ end
215
+
216
+ # to_body is an alias to to_hash (backward compatibility)
217
+ # @return [Hash] Returns the object in the form of hash
218
+ def to_body
219
+ to_hash
220
+ end
221
+
222
+ # Returns the object in the form of hash
223
+ # @return [Hash] Returns the object in the form of hash
224
+ def to_hash
225
+ hash = {}
226
+ self.class.attribute_map.each_pair do |attr, param|
227
+ value = self.send(attr)
228
+ next if value.nil?
229
+ hash[param] = _to_hash(value)
230
+ end
231
+ hash
232
+ end
233
+
234
+ # Outputs non-array value in the form of hash
235
+ # For object, use to_hash. Otherwise, just return the value
236
+ # @param [Object] value Any valid value
237
+ # @return [Hash] Returns the value in the form of hash
238
+ def _to_hash(value)
239
+ if value.is_a?(Array)
240
+ value.compact.map { |v| _to_hash(v) }
241
+ elsif value.is_a?(Hash)
242
+ {}.tap do |hash|
243
+ value.each { |k, v| hash[k] = _to_hash(v) }
244
+ end
245
+ elsif value.respond_to? :to_hash
246
+ value.to_hash
247
+ else
248
+ value
249
+ end
250
+ end
251
+
252
+ end
253
+
254
+ end