messagemedia_messages_sdk 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +201 -0
  3. data/README.md +608 -0
  4. data/lib/message_media_messages.rb +50 -0
  5. data/lib/message_media_messages/api_helper.rb +209 -0
  6. data/lib/message_media_messages/configuration.rb +29 -0
  7. data/lib/message_media_messages/controllers/base_controller.rb +57 -0
  8. data/lib/message_media_messages/controllers/delivery_reports_controller.rb +208 -0
  9. data/lib/message_media_messages/controllers/messages_controller.rb +336 -0
  10. data/lib/message_media_messages/controllers/replies_controller.rb +208 -0
  11. data/lib/message_media_messages/exceptions/api_exception.rb +18 -0
  12. data/lib/message_media_messages/http/auth/basic_auth.rb +20 -0
  13. data/lib/message_media_messages/http/faraday_client.rb +55 -0
  14. data/lib/message_media_messages/http/http_call_back.rb +22 -0
  15. data/lib/message_media_messages/http/http_client.rb +92 -0
  16. data/lib/message_media_messages/http/http_context.rb +18 -0
  17. data/lib/message_media_messages/http/http_method_enum.rb +11 -0
  18. data/lib/message_media_messages/http/http_request.rb +48 -0
  19. data/lib/message_media_messages/http/http_response.rb +21 -0
  20. data/lib/message_media_messages/message_media_messages_client.rb +39 -0
  21. data/lib/message_media_messages/models/base_model.rb +34 -0
  22. data/lib/message_media_messages/models/cancel_scheduled_message_request.rb +35 -0
  23. data/lib/message_media_messages/models/check_delivery_reports_response.rb +35 -0
  24. data/lib/message_media_messages/models/check_replies_response.rb +35 -0
  25. data/lib/message_media_messages/models/confirm_delivery_reports_as_received_request.rb +35 -0
  26. data/lib/message_media_messages/models/confirm_delivery_reports_as_received_request_11.rb +35 -0
  27. data/lib/message_media_messages/models/confirm_replies_as_received_request.rb +35 -0
  28. data/lib/message_media_messages/models/confirm_replies_as_received_request_8.rb +35 -0
  29. data/lib/message_media_messages/models/send_messages_request.rb +35 -0
  30. data/lib/message_media_messages/models/send_messages_response.rb +35 -0
  31. data/test/controllers/controller_test_base.rb +30 -0
  32. data/test/controllers/test_delivery_reports_controller.rb +131 -0
  33. data/test/controllers/test_messages_controller.rb +105 -0
  34. data/test/controllers/test_replies_controller.rb +132 -0
  35. data/test/http_response_catcher.rb +16 -0
  36. data/test/test_helper.rb +91 -0
  37. metadata +168 -0
@@ -0,0 +1,50 @@
1
+ # This file was automatically generated for MessageMedia by APIMATIC v2.0
2
+ # ( https://apimatic.io ).
3
+ require 'date'
4
+ require 'json'
5
+ require 'faraday'
6
+ require 'certifi'
7
+ require 'logging'
8
+
9
+ require_relative 'message_media_messages/api_helper.rb'
10
+ require_relative 'message_media_messages/message_media_messages_client.rb'
11
+
12
+ # Http
13
+ require_relative 'message_media_messages/http/http_call_back.rb'
14
+ require_relative 'message_media_messages/http/http_client.rb'
15
+ require_relative 'message_media_messages/http/http_method_enum.rb'
16
+ require_relative 'message_media_messages/http/http_request.rb'
17
+ require_relative 'message_media_messages/http/http_response.rb'
18
+ require_relative 'message_media_messages/http/http_context.rb'
19
+ require_relative 'message_media_messages/http/faraday_client.rb'
20
+ require_relative 'message_media_messages/http/auth/basic_auth.rb'
21
+
22
+ # Models
23
+ require_relative 'message_media_messages/models/base_model.rb'
24
+ require_relative 'message_media_messages/models' \
25
+ '/check_delivery_reports_response.rb'
26
+ require_relative 'message_media_messages/models' \
27
+ '/confirm_replies_as_received_request_8.rb'
28
+ require_relative 'message_media_messages/models' \
29
+ '/confirm_replies_as_received_request.rb'
30
+ require_relative 'message_media_messages/models/check_replies_response.rb'
31
+ require_relative 'message_media_messages/models' \
32
+ '/cancel_scheduled_message_request.rb'
33
+ require_relative 'message_media_messages/models/send_messages_response.rb'
34
+ require_relative 'message_media_messages/models/send_messages_request.rb'
35
+ require_relative 'message_media_messages/models' \
36
+ '/confirm_delivery_reports_as_received_request.rb'
37
+ require_relative 'message_media_messages/models' \
38
+ '/confirm_delivery_reports_as_received_request_11.rb'
39
+
40
+ # Exceptions
41
+ require_relative 'message_media_messages/exceptions/api_exception.rb'
42
+
43
+ require_relative 'message_media_messages/configuration.rb'
44
+
45
+ # Controllers
46
+ require_relative 'message_media_messages/controllers/base_controller.rb'
47
+ require_relative 'message_media_messages/controllers/messages_controller.rb'
48
+ require_relative 'message_media_messages/controllers' \
49
+ '/delivery_reports_controller.rb'
50
+ require_relative 'message_media_messages/controllers/replies_controller.rb'
@@ -0,0 +1,209 @@
1
+ # This file was automatically generated for MessageMedia by APIMATIC v2.0
2
+ # ( https://apimatic.io ).
3
+
4
+ module MessageMediaMessages
5
+ # API utility class
6
+ class APIHelper
7
+ # Serializes an array parameter (creates key value pairs).
8
+ # @param [String] The name of the parameter.
9
+ # @param [Array] The value of the parameter.
10
+ # @param [String] The format of the serialization.
11
+ def self.serialize_array(key, array, formatting: 'indexed')
12
+ tuples = []
13
+
14
+ if formatting == 'unindexed'
15
+ tuples += array.map { |element| ["#{key}[]", element] }
16
+ elsif formatting == 'indexed'
17
+ tuples += array.map.with_index do |element, index|
18
+ ["#{key}[#{index}]", element]
19
+ end
20
+ elsif formatting == 'plain'
21
+ tuples += array.map { |element| [key, element] }
22
+ else
23
+ raise ArgumentError, 'Invalid format provided.'
24
+ end
25
+ tuples
26
+ end
27
+
28
+ # Replaces template parameters in the given url.
29
+ # @param [String] The query string builder to replace the template
30
+ # parameters.
31
+ # @param [Hash] The parameters to replace in the url.
32
+ def self.append_url_with_template_parameters(query_builder, parameters)
33
+ # perform parameter validation
34
+ unless query_builder.instance_of? String
35
+ raise ArgumentError, 'Given value for parameter \"query_builder\" is
36
+ invalid.'
37
+ end
38
+
39
+ # Return if there are no parameters to replace.
40
+ return query_builder if parameters.nil?
41
+
42
+ # Iterate and append parameters.
43
+ parameters.each do |key, value|
44
+ replace_value = ''
45
+
46
+ if value.nil?
47
+ replace_value = ''
48
+ elsif value.instance_of? Array
49
+ value.map! { |element| CGI.escape(element.to_s) }
50
+ replace_value = value.join('/')
51
+ else
52
+ replace_value = CGI.escape(value.to_s)
53
+ end
54
+
55
+ # Find the template parameter and replace it with its value.
56
+ query_builder = query_builder.gsub('{' + key.to_s + '}', replace_value)
57
+ end
58
+ query_builder
59
+ end
60
+
61
+ # Appends the given set of parameters to the given query string.
62
+ # @param [String] The query string builder to add the query parameters to.
63
+ # @param [Hash] The parameters to append.
64
+ # @param [String] The format of array parameter serialization.
65
+ def self.append_url_with_query_parameters(query_builder, parameters,
66
+ array_serialization: 'indexed')
67
+ # Perform parameter validation.
68
+ unless query_builder.instance_of? String
69
+ raise ArgumentError, 'Given value for parameter \"query_builder\"
70
+ is invalid.'
71
+ end
72
+
73
+ # Return if there are no parameters to replace.
74
+ return query_builder if parameters.nil?
75
+
76
+ parameters.each do |key, value|
77
+ seperator = query_builder.include?('?') ? '&' : '?'
78
+ unless value.nil?
79
+ if value.instance_of? Array
80
+ value.compact!
81
+ query_builder += if array_serialization == 'csv'
82
+ "#{seperator}#{key}=#{value.map do |element|
83
+ CGI.escape(element.to_s)
84
+ end.join(',')}"
85
+ elsif array_serialization == 'psv'
86
+ "#{seperator}#{key}=#{value.map do |element|
87
+ CGI.escape(element.to_s)
88
+ end.join('|')}"
89
+ elsif array_serialization == 'tsv'
90
+ "#{seperator}#{key}=#{value.map do |element|
91
+ CGI.escape(element.to_s)
92
+ end.join('\t')}"
93
+ else
94
+ "#{seperator}#{APIHelper.serialize_array(
95
+ key, value, formatting: array_serialization
96
+ ).map { |k, v| "#{k}=#{CGI.escape(v.to_s)}" }
97
+ .join('&')}"
98
+ end
99
+ else
100
+ query_builder += "#{seperator}#{key}=#{CGI.escape(value.to_s)}"
101
+ end
102
+ end
103
+ end
104
+ query_builder
105
+ end
106
+
107
+ # Validates and processes the given Url.
108
+ # @param [String] The given Url to process.
109
+ # @return [String] Pre-processed Url as string.
110
+ def self.clean_url(url)
111
+ # Perform parameter validation.
112
+ raise ArgumentError, 'Invalid Url.' unless url.instance_of? String
113
+
114
+ # Ensure that the urls are absolute.
115
+ matches = url.match(%r{^(https?:\/\/[^\/]+)})
116
+ raise ArgumentError, 'Invalid Url format.' if matches.nil?
117
+
118
+ # Get the http protocol match.
119
+ protocol = matches[1]
120
+
121
+ # Check if parameters exist.
122
+ index = url.index('?')
123
+
124
+ # Remove redundant forward slashes.
125
+ query = url[protocol.length...(!index.nil? ? index : url.length)]
126
+ query.gsub!(%r{\/\/+}, '/')
127
+
128
+ # Get the parameters.
129
+ parameters = !index.nil? ? url[url.index('?')...url.length] : ''
130
+
131
+ # Return processed url.
132
+ protocol + query + parameters
133
+ end
134
+
135
+ # Parses JSON string.
136
+ # @param [String] A JSON string.
137
+ def self.json_deserialize(json)
138
+ return JSON.parse(json)
139
+ rescue StandardError
140
+ raise TypeError, 'Server responded with invalid JSON.'
141
+ end
142
+
143
+ # Removes elements with empty values from a hash.
144
+ # @param [Hash] The hash to clean.
145
+ def self.clean_hash(hash)
146
+ hash.delete_if { |_key, value| value.to_s.strip.empty? }
147
+ end
148
+
149
+ # Form encodes a hash of parameters.
150
+ # @param [Hash] The hash of parameters to encode.
151
+ # @return [Hash] A hash with the same parameters form encoded.
152
+ def self.form_encode_parameters(form_parameters)
153
+ encoded = {}
154
+ form_parameters.each do |key, value|
155
+ encoded.merge!(APIHelper.form_encode(value, key))
156
+ end
157
+ encoded
158
+ end
159
+
160
+ # Form encodes an object.
161
+ # @param [Dynamic] An object to form encode.
162
+ # @param [String] The name of the object.
163
+ # @return [Hash] A form encoded representation of the object in the form
164
+ # of a hash.
165
+ def self.form_encode(obj, instance_name)
166
+ retval = {}
167
+
168
+ # If this is a structure, resolve it's field names.
169
+ obj = obj.to_hash if obj.is_a? BaseModel
170
+
171
+ # Create a form encoded hash for this object.
172
+ if obj.nil?
173
+ nil
174
+ elsif obj.instance_of? Array
175
+ obj.each_with_index do |value, index|
176
+ retval.merge!(APIHelper.form_encode(value, instance_name + '[' +
177
+ index.to_s + ']'))
178
+ end
179
+ elsif obj.instance_of? Hash
180
+ obj.each do |key, value|
181
+ retval.merge!(APIHelper.form_encode(value, instance_name + '[' +
182
+ key + ']'))
183
+ end
184
+ else
185
+ retval[instance_name] = obj
186
+ end
187
+ retval
188
+ end
189
+ end
190
+ end
191
+
192
+ # Extend types to support to_bool.
193
+ module ToBoolean
194
+ def to_bool
195
+ return true if self == true || to_s.strip =~ /^(true|yes|y|1)$/i
196
+ false
197
+ end
198
+ end
199
+
200
+ # Extend NilClass type to support to_bool.
201
+ class NilClass; include ToBoolean; end
202
+ # Extend TrueClass type to support to_bool.
203
+ class TrueClass; include ToBoolean; end
204
+ # Extend FalseClass type to support to_bool.
205
+ class FalseClass; include ToBoolean; end
206
+ # Extend Numeric type to support to_bool.
207
+ class Numeric; include ToBoolean; end
208
+ # Extend String type to support to_bool.
209
+ class String; include ToBoolean; end
@@ -0,0 +1,29 @@
1
+ # This file was automatically generated for MessageMedia by APIMATIC v2.0
2
+ # ( https://apimatic.io ).
3
+
4
+ module MessageMediaMessages
5
+
6
+ Logging.logger.root.appenders = Logging.appenders.stdout
7
+ Logging.logger.root.level = :info
8
+
9
+ # All configuration including auth info and base URI for the API access
10
+ # are configured in this class.
11
+ class Configuration
12
+ # The base Uri for API calls
13
+ @base_uri = 'https://api.messagemedia.com'
14
+
15
+ # The username to use with basic authentication
16
+ @basic_auth_user_name = 'TODO: Replace'
17
+
18
+ # The password to use with basic authentication
19
+ @basic_auth_password = 'TODO: Replace'
20
+
21
+ # The attribute accessors for public properties.
22
+ class << self
23
+ attr_accessor :array_serialization
24
+ attr_accessor :base_uri
25
+ attr_accessor :basic_auth_user_name
26
+ attr_accessor :basic_auth_password
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,57 @@
1
+ # This file was automatically generated for MessageMedia by APIMATIC v2.0
2
+ # ( https://apimatic.io ).
3
+
4
+ module MessageMediaMessages
5
+ # Base controller.
6
+ class BaseController
7
+ attr_accessor :http_client, :http_call_back
8
+
9
+ def initialize(http_client: nil, http_call_back: nil)
10
+ @http_client = http_client || FaradayClient.new
11
+ @http_call_back = http_call_back
12
+
13
+ @global_headers = {
14
+ 'user-agent' => 'messagemedia-messages-ruby-sdk-1.0.0'
15
+ }
16
+ @logger = Logging.logger[self]
17
+ @logger.info("Instantiated controller class.")
18
+ end
19
+
20
+ def validate_parameters(args)
21
+ args.each do |_name, value|
22
+ if value.nil?
23
+ raise ArgumentError, "Required parameter #{_name} cannot be nil."
24
+ end
25
+ end
26
+ end
27
+
28
+ def execute_request(request, binary: false, name: nil)
29
+ @logger.info("Calling the on_before_request method of http_call_back for #{name}.") if @http_call_back
30
+ @http_call_back.on_before_request(request) if @http_call_back
31
+
32
+ @logger.info("Merging global headers with endpoint headers for #{name}.")
33
+ APIHelper.clean_hash(request.headers)
34
+ request.headers = @global_headers.clone.merge(request.headers)
35
+
36
+ @logger.debug("Raw request for #{name} is: #{request.inspect}")
37
+ response = if binary
38
+ @http_client.execute_as_binary(request)
39
+ else
40
+ @http_client.execute_as_string(request)
41
+ end
42
+ @logger.debug("Raw response for #{name} is: #{response.inspect}")
43
+ @logger.info("Wrapping request and response in a context object for #{name}.")
44
+ context = HttpContext.new(request, response)
45
+
46
+ @logger.info("Calling on_after_response method of http_call_back for #{name}.") if @http_call_back
47
+ @http_call_back.on_after_response(context) if @http_call_back
48
+
49
+ context
50
+ end
51
+
52
+ def validate_response(context)
53
+ raise APIException.new 'HTTP Response Not OK', context unless
54
+ context.response.status_code.between?(200, 208) # [200,208] = HTTP OK
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,208 @@
1
+ # This file was automatically generated for MessageMedia by APIMATIC v2.0
2
+ # ( https://apimatic.io ).
3
+
4
+ module MessageMediaMessages
5
+ # DeliveryReportsController
6
+ class DeliveryReportsController < BaseController
7
+ @instance = DeliveryReportsController.new
8
+
9
+ class << self
10
+ attr_accessor :instance
11
+ end
12
+
13
+ def instance
14
+ self.class.instance
15
+ end
16
+
17
+ # Check for any delivery reports that have been received.
18
+ # Delivery reports are a notification of the change in status of a message
19
+ # as it is being processed.
20
+ # Each request to the check delivery reports endpoint will return any
21
+ # delivery reports received that
22
+ # have not yet been confirmed using the confirm delivery reports endpoint. A
23
+ # response from the check
24
+ # delivery reports endpoint will have the following structure:
25
+ # ```json
26
+ # {
27
+ # "delivery_reports": [
28
+ # {
29
+ # "callback_url": "https://my.callback.url.com",
30
+ # "delivery_report_id": "01e1fa0a-6e27-4945-9cdb-18644b4de043",
31
+ # "source_number": "+61491570157",
32
+ # "date_received": "2017-05-20T06:30:37.642Z",
33
+ # "status": "enroute",
34
+ # "delay": 0,
35
+ # "submitted_date": "2017-05-20T06:30:37.639Z",
36
+ # "original_text": "My first message!",
37
+ # "message_id": "d781dcab-d9d8-4fb2-9e03-872f07ae94ba",
38
+ # "vendor_account_id": {
39
+ # "vendor_id": "MessageMedia",
40
+ # "account_id": "MyAccount"
41
+ # },
42
+ # "metadata": {
43
+ # "key1": "value1",
44
+ # "key2": "value2"
45
+ # }
46
+ # },
47
+ # {
48
+ # "callback_url": "https://my.callback.url.com",
49
+ # "delivery_report_id": "0edf9022-7ccc-43e6-acab-480e93e98c1b",
50
+ # "source_number": "+61491570158",
51
+ # "date_received": "2017-05-21T01:46:42.579Z",
52
+ # "status": "enroute",
53
+ # "delay": 0,
54
+ # "submitted_date": "2017-05-21T01:46:42.574Z",
55
+ # "original_text": "My second message!",
56
+ # "message_id": "fbb3b3f5-b702-4d8b-ab44-65b2ee39a281",
57
+ # "vendor_account_id": {
58
+ # "vendor_id": "MessageMedia",
59
+ # "account_id": "MyAccount"
60
+ # },
61
+ # "metadata": {
62
+ # "key1": "value1",
63
+ # "key2": "value2"
64
+ # }
65
+ # }
66
+ # ]
67
+ # }
68
+ # ```
69
+ # Each delivery report will contain details about the message, including any
70
+ # metadata specified
71
+ # and the new status of the message (as each delivery report indicates a
72
+ # change in status of a
73
+ # message) and the timestamp at which the status changed. Every delivery
74
+ # report will have a
75
+ # unique delivery report ID for use with the confirm delivery reports
76
+ # endpoint.
77
+ # *Note: The source number and destination number properties in a delivery
78
+ # report are the inverse of
79
+ # those specified in the message that the delivery report relates to. The
80
+ # source number of the
81
+ # delivery report is the destination number of the original message.*
82
+ # Subsequent requests to the check delivery reports endpoint will return the
83
+ # same delivery reports
84
+ # and a maximum of 100 delivery reports will be returned in each request.
85
+ # Applications should use the
86
+ # confirm delivery reports endpoint in the following pattern so that
87
+ # delivery reports that have been
88
+ # processed are no longer returned in subsequent check delivery reports
89
+ # requests.
90
+ # 1. Call check delivery reports endpoint
91
+ # 2. Process each delivery report
92
+ # 3. Confirm all processed delivery reports using the confirm delivery
93
+ # reports endpoint
94
+ # *Note: It is recommended to use the Webhooks feature to receive reply
95
+ # messages rather than
96
+ # polling the check delivery reports endpoint.*
97
+ # @return CheckDeliveryReportsResponse response from the API call
98
+ def get_check_delivery_reports
99
+ begin
100
+ @logger.info("get_check_delivery_reports called.")
101
+ # Prepare query url.
102
+ @logger.info("Preparing query URL for get_check_delivery_reports.")
103
+ _query_builder = Configuration.base_uri.dup
104
+ _query_builder << '/v1/delivery_reports'
105
+ _query_url = APIHelper.clean_url _query_builder
106
+
107
+ # Prepare headers.
108
+ @logger.info("Preparing headers for get_check_delivery_reports.")
109
+ _headers = {
110
+ 'accept' => 'application/json'
111
+ }
112
+
113
+ # Prepare and execute HttpRequest.
114
+ @logger.info('Preparing and executing HttpRequest for get_check_delivery_reports.')
115
+ _request = @http_client.get(
116
+ _query_url,
117
+ headers: _headers
118
+ )
119
+ BasicAuth.apply(_request)
120
+ _context = execute_request(_request, name: 'get_check_delivery_reports')
121
+ validate_response(_context)
122
+
123
+ # Return appropriate response type.
124
+ @logger.info("Returning response for get_check_delivery_reports.")
125
+ decoded = APIHelper.json_deserialize(_context.response.raw_body)
126
+ CheckDeliveryReportsResponse.from_hash(decoded)
127
+
128
+ rescue Exception => e
129
+ @logger.error(e)
130
+ raise e
131
+ end
132
+ end
133
+
134
+ # Mark a delivery report as confirmed so it is no longer return in check
135
+ # delivery reports requests.
136
+ # The confirm delivery reports endpoint is intended to be used in
137
+ # conjunction with the check delivery
138
+ # reports endpoint to allow for robust processing of delivery reports. Once
139
+ # one or more delivery
140
+ # reports have been processed, they can then be confirmed using the confirm
141
+ # delivery reports endpoint so they
142
+ # are no longer returned in subsequent check delivery reports requests.
143
+ # The confirm delivery reports endpoint takes a list of delivery report IDs
144
+ # as follows:
145
+ # ```json
146
+ # {
147
+ # "delivery_report_ids": [
148
+ # "011dcead-6988-4ad6-a1c7-6b6c68ea628d",
149
+ # "3487b3fa-6586-4979-a233-2d1b095c7718",
150
+ # "ba28e94b-c83d-4759-98e7-ff9c7edb87a1"
151
+ # ]
152
+ # }
153
+ # ```
154
+ # Up to 100 delivery reports can be confirmed in a single confirm delivery
155
+ # reports request.
156
+ # @param [ConfirmDeliveryReportsAsReceivedRequest] body Required parameter:
157
+ # Example:
158
+ # @return Mixed response from the API call
159
+ def create_confirm_delivery_reports_as_received(body)
160
+ begin
161
+ @logger.info("create_confirm_delivery_reports_as_received called.")
162
+ # Prepare query url.
163
+ @logger.info("Preparing query URL for create_confirm_delivery_reports_as_received.")
164
+ _query_builder = Configuration.base_uri.dup
165
+ _query_builder << '/v1/delivery_reports/confirmed'
166
+ _query_url = APIHelper.clean_url _query_builder
167
+
168
+ # Prepare headers.
169
+ @logger.info("Preparing headers for create_confirm_delivery_reports_as_received.")
170
+ _headers = {
171
+ 'accept' => 'application/json',
172
+ 'content-type' => 'application/json; charset=utf-8'
173
+ }
174
+
175
+ # Prepare and execute HttpRequest.
176
+ @logger.info('Preparing and executing HttpRequest for create_confirm_delivery_reports_as_received.')
177
+ _request = @http_client.post(
178
+ _query_url,
179
+ headers: _headers,
180
+ parameters: body.to_json
181
+ )
182
+ BasicAuth.apply(_request)
183
+ _context = execute_request(_request, name: 'create_confirm_delivery_reports_as_received')
184
+
185
+ # Validate response against endpoint and global error codes.
186
+ @logger.info("Validating response for create_confirm_delivery_reports_as_received.")
187
+ if _context.response.status_code == 400
188
+ raise APIException.new(
189
+ '',
190
+ _context
191
+ )
192
+ end
193
+ validate_response(_context)
194
+
195
+ # Return appropriate response type.
196
+ @logger.info("Returning response for create_confirm_delivery_reports_as_received.")
197
+ decoded = APIHelper.json_deserialize(_context.response.raw_body) unless
198
+ _context.response.raw_body.nil? ||
199
+ _context.response.raw_body.to_s.strip.empty?
200
+ decoded
201
+
202
+ rescue Exception => e
203
+ @logger.error(e)
204
+ raise e
205
+ end
206
+ end
207
+ end
208
+ end