togglr-sdk 1.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 (87) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +15 -0
  3. data/LICENSE +21 -0
  4. data/README.md +297 -0
  5. data/generated/Gemfile +9 -0
  6. data/generated/README.md +121 -0
  7. data/generated/Rakefile +10 -0
  8. data/generated/docs/DefaultApi.md +282 -0
  9. data/generated/docs/Error.md +18 -0
  10. data/generated/docs/ErrorBadRequest.md +18 -0
  11. data/generated/docs/ErrorError.md +18 -0
  12. data/generated/docs/ErrorInternalServerError.md +18 -0
  13. data/generated/docs/ErrorNotFound.md +18 -0
  14. data/generated/docs/ErrorPermissionDenied.md +18 -0
  15. data/generated/docs/ErrorTooManyRequests.md +18 -0
  16. data/generated/docs/ErrorUnauthorized.md +18 -0
  17. data/generated/docs/EvaluateResponse.md +22 -0
  18. data/generated/docs/FeatureErrorReport.md +22 -0
  19. data/generated/docs/FeatureHealth.md +30 -0
  20. data/generated/docs/HealthResponse.md +20 -0
  21. data/generated/git_push.sh +57 -0
  22. data/generated/lib/togglr-client/api/default_api.rb +284 -0
  23. data/generated/lib/togglr-client/api_client.rb +437 -0
  24. data/generated/lib/togglr-client/api_error.rb +58 -0
  25. data/generated/lib/togglr-client/configuration.rb +392 -0
  26. data/generated/lib/togglr-client/models/error.rb +237 -0
  27. data/generated/lib/togglr-client/models/error_bad_request.rb +244 -0
  28. data/generated/lib/togglr-client/models/error_error.rb +220 -0
  29. data/generated/lib/togglr-client/models/error_internal_server_error.rb +244 -0
  30. data/generated/lib/togglr-client/models/error_not_found.rb +244 -0
  31. data/generated/lib/togglr-client/models/error_permission_denied.rb +244 -0
  32. data/generated/lib/togglr-client/models/error_too_many_requests.rb +244 -0
  33. data/generated/lib/togglr-client/models/error_unauthorized.rb +244 -0
  34. data/generated/lib/togglr-client/models/evaluate_response.rb +289 -0
  35. data/generated/lib/togglr-client/models/feature_error_report.rb +274 -0
  36. data/generated/lib/togglr-client/models/feature_health.rb +342 -0
  37. data/generated/lib/togglr-client/models/health_response.rb +287 -0
  38. data/generated/lib/togglr-client/version.rb +15 -0
  39. data/generated/lib/togglr-client.rb +52 -0
  40. data/generated/spec/api/default_api_spec.rb +81 -0
  41. data/generated/spec/models/error_bad_request_spec.rb +36 -0
  42. data/generated/spec/models/error_error_spec.rb +36 -0
  43. data/generated/spec/models/error_internal_server_error_spec.rb +36 -0
  44. data/generated/spec/models/error_not_found_spec.rb +36 -0
  45. data/generated/spec/models/error_permission_denied_spec.rb +36 -0
  46. data/generated/spec/models/error_spec.rb +36 -0
  47. data/generated/spec/models/error_too_many_requests_spec.rb +36 -0
  48. data/generated/spec/models/error_unauthorized_spec.rb +36 -0
  49. data/generated/spec/models/evaluate_response_spec.rb +48 -0
  50. data/generated/spec/models/feature_error_report_spec.rb +48 -0
  51. data/generated/spec/models/feature_health_spec.rb +72 -0
  52. data/generated/spec/models/health_response_spec.rb +46 -0
  53. data/generated/spec/spec_helper.rb +111 -0
  54. data/generated/togglr-client.gemspec +41 -0
  55. data/lib/togglr/cache.rb +45 -0
  56. data/lib/togglr/client.rb +267 -0
  57. data/lib/togglr/config.rb +37 -0
  58. data/lib/togglr/errors.rb +25 -0
  59. data/lib/togglr/logger.rb +38 -0
  60. data/lib/togglr/metrics.rb +44 -0
  61. data/lib/togglr/models.rb +56 -0
  62. data/lib/togglr/options.rb +57 -0
  63. data/lib/togglr/request_context.rb +147 -0
  64. data/lib/togglr/version.rb +3 -0
  65. data/lib/togglr-client/api/default_api.rb +284 -0
  66. data/lib/togglr-client/api_client.rb +437 -0
  67. data/lib/togglr-client/api_error.rb +58 -0
  68. data/lib/togglr-client/configuration.rb +392 -0
  69. data/lib/togglr-client/models/error.rb +237 -0
  70. data/lib/togglr-client/models/error_bad_request.rb +244 -0
  71. data/lib/togglr-client/models/error_error.rb +220 -0
  72. data/lib/togglr-client/models/error_internal_server_error.rb +244 -0
  73. data/lib/togglr-client/models/error_not_found.rb +244 -0
  74. data/lib/togglr-client/models/error_permission_denied.rb +244 -0
  75. data/lib/togglr-client/models/error_too_many_requests.rb +244 -0
  76. data/lib/togglr-client/models/error_unauthorized.rb +244 -0
  77. data/lib/togglr-client/models/evaluate_response.rb +289 -0
  78. data/lib/togglr-client/models/feature_error_report.rb +274 -0
  79. data/lib/togglr-client/models/feature_health.rb +342 -0
  80. data/lib/togglr-client/models/health_response.rb +287 -0
  81. data/lib/togglr-client/version.rb +15 -0
  82. data/lib/togglr-client.rb +52 -0
  83. data/lib/togglr.rb +14 -0
  84. data/spec/examples.txt +11 -0
  85. data/spec/spec_helper.rb +29 -0
  86. data/spec/togglr_spec.rb +98 -0
  87. metadata +199 -0
@@ -0,0 +1,57 @@
1
+ module Togglr
2
+ # Options module for configuring Togglr client
3
+ module Options
4
+ # Set the base URL for the API
5
+ def self.with_base_url(url)
6
+ ->(config) { config.base_url = url }
7
+ end
8
+
9
+ # Set insecure mode (skip SSL verification)
10
+ def self.with_insecure
11
+ ->(config) { config.insecure = true }
12
+ end
13
+
14
+ # Set request timeout
15
+ def self.with_timeout(timeout)
16
+ ->(config) { config.timeout = timeout }
17
+ end
18
+
19
+ # Set number of retries
20
+ def self.with_retries(retries)
21
+ ->(config) { config.retries = retries }
22
+ end
23
+
24
+ # Set backoff configuration
25
+ def self.with_backoff(base_delay: nil, max_delay: nil, factor: nil)
26
+ ->(config) do
27
+ config.backoff.base_delay = base_delay if base_delay
28
+ config.backoff.max_delay = max_delay if max_delay
29
+ config.backoff.factor = factor if factor
30
+ end
31
+ end
32
+
33
+ # Enable caching
34
+ def self.with_cache(size, ttl)
35
+ ->(config) do
36
+ config.cache_enabled = true
37
+ config.cache_size = size
38
+ config.cache_ttl = ttl
39
+ end
40
+ end
41
+
42
+ # Set logger
43
+ def self.with_logger(logger)
44
+ ->(config) { config.logger = logger }
45
+ end
46
+
47
+ # Set metrics collector
48
+ def self.with_metrics(metrics)
49
+ ->(config) { config.metrics = metrics }
50
+ end
51
+
52
+ # Set maximum connections
53
+ def self.with_max_connections(max_connections)
54
+ ->(config) { config.max_connections = max_connections }
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,147 @@
1
+ module Togglr
2
+ class RequestContext
3
+ # Predefined attribute keys
4
+ ATTR_USER_ID = 'user.id'.freeze
5
+ ATTR_USER_EMAIL = 'user.email'.freeze
6
+ ATTR_USER_ANONYMOUS = 'user.anonymous'.freeze
7
+ ATTR_COUNTRY_CODE = 'country_code'.freeze
8
+ ATTR_REGION = 'region'.freeze
9
+ ATTR_CITY = 'city'.freeze
10
+ ATTR_MANUFACTURER = 'manufacturer'.freeze
11
+ ATTR_DEVICE_TYPE = 'device_type'.freeze
12
+ ATTR_OS = 'os'.freeze
13
+ ATTR_OS_VERSION = 'os_version'.freeze
14
+ ATTR_BROWSER = 'browser'.freeze
15
+ ATTR_BROWSER_VERSION = 'browser_version'.freeze
16
+ ATTR_LANGUAGE = 'language'.freeze
17
+ ATTR_CONNECTION_TYPE = 'connection_type'.freeze
18
+ ATTR_AGE = 'age'.freeze
19
+ ATTR_GENDER = 'gender'.freeze
20
+ ATTR_IP = 'ip'.freeze
21
+ ATTR_APP_VERSION = 'app_version'.freeze
22
+ ATTR_PLATFORM = 'platform'.freeze
23
+
24
+ def initialize
25
+ @attributes = {}
26
+ end
27
+
28
+ def self.new
29
+ instance = allocate
30
+ instance.send(:initialize)
31
+ instance
32
+ end
33
+
34
+ # Chainable helper methods
35
+ def with_user_id(id)
36
+ @attributes[ATTR_USER_ID] = id
37
+ self
38
+ end
39
+
40
+ def with_user_email(email)
41
+ @attributes[ATTR_USER_EMAIL] = email
42
+ self
43
+ end
44
+
45
+ def with_anonymous(flag)
46
+ @attributes[ATTR_USER_ANONYMOUS] = flag
47
+ self
48
+ end
49
+
50
+ def with_country(code)
51
+ @attributes[ATTR_COUNTRY_CODE] = code
52
+ self
53
+ end
54
+
55
+ def with_region(region)
56
+ @attributes[ATTR_REGION] = region
57
+ self
58
+ end
59
+
60
+ def with_city(city)
61
+ @attributes[ATTR_CITY] = city
62
+ self
63
+ end
64
+
65
+ def with_manufacturer(manufacturer)
66
+ @attributes[ATTR_MANUFACTURER] = manufacturer
67
+ self
68
+ end
69
+
70
+ def with_device_type(device_type)
71
+ @attributes[ATTR_DEVICE_TYPE] = device_type
72
+ self
73
+ end
74
+
75
+ def with_os(os)
76
+ @attributes[ATTR_OS] = os
77
+ self
78
+ end
79
+
80
+ def with_os_version(version)
81
+ @attributes[ATTR_OS_VERSION] = version
82
+ self
83
+ end
84
+
85
+ def with_browser(browser)
86
+ @attributes[ATTR_BROWSER] = browser
87
+ self
88
+ end
89
+
90
+ def with_browser_version(version)
91
+ @attributes[ATTR_BROWSER_VERSION] = version
92
+ self
93
+ end
94
+
95
+ def with_language(language)
96
+ @attributes[ATTR_LANGUAGE] = language
97
+ self
98
+ end
99
+
100
+ def with_connection_type(connection_type)
101
+ @attributes[ATTR_CONNECTION_TYPE] = connection_type
102
+ self
103
+ end
104
+
105
+ def with_age(age)
106
+ @attributes[ATTR_AGE] = age
107
+ self
108
+ end
109
+
110
+ def with_gender(gender)
111
+ @attributes[ATTR_GENDER] = gender
112
+ self
113
+ end
114
+
115
+ def with_ip(ip)
116
+ @attributes[ATTR_IP] = ip
117
+ self
118
+ end
119
+
120
+ def with_app_version(version)
121
+ @attributes[ATTR_APP_VERSION] = version
122
+ self
123
+ end
124
+
125
+ def with_platform(platform)
126
+ @attributes[ATTR_PLATFORM] = platform
127
+ self
128
+ end
129
+
130
+ def set(key, value)
131
+ @attributes[key] = value
132
+ self
133
+ end
134
+
135
+ def to_h
136
+ @attributes.dup
137
+ end
138
+
139
+ def [](key)
140
+ @attributes[key]
141
+ end
142
+
143
+ def []=(key, value)
144
+ @attributes[key] = value
145
+ end
146
+ end
147
+ end
@@ -0,0 +1,3 @@
1
+ module Togglr
2
+ VERSION = '1.0.0'.freeze
3
+ end
@@ -0,0 +1,284 @@
1
+ =begin
2
+ #SDK API
3
+
4
+ #No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
5
+
6
+ The version of the OpenAPI document: 1.0.0
7
+
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.15.0
10
+
11
+ =end
12
+
13
+ require 'cgi'
14
+
15
+ module TogglrClient
16
+ class DefaultApi
17
+ attr_accessor :api_client
18
+
19
+ def initialize(api_client = ApiClient.default)
20
+ @api_client = api_client
21
+ end
22
+ # Get health status of feature (including auto-disable state)
23
+ # @param feature_key [String]
24
+ # @param [Hash] opts the optional parameters
25
+ # @return [FeatureHealth]
26
+ def get_feature_health(feature_key, opts = {})
27
+ data, _status_code, _headers = get_feature_health_with_http_info(feature_key, opts)
28
+ data
29
+ end
30
+
31
+ # Get health status of feature (including auto-disable state)
32
+ # @param feature_key [String]
33
+ # @param [Hash] opts the optional parameters
34
+ # @return [Array<(FeatureHealth, Integer, Hash)>] FeatureHealth data, response status code and response headers
35
+ def get_feature_health_with_http_info(feature_key, opts = {})
36
+ if @api_client.config.debugging
37
+ @api_client.config.logger.debug 'Calling API: DefaultApi.get_feature_health ...'
38
+ end
39
+ # verify the required parameter 'feature_key' is set
40
+ if @api_client.config.client_side_validation && feature_key.nil?
41
+ fail ArgumentError, "Missing the required parameter 'feature_key' when calling DefaultApi.get_feature_health"
42
+ end
43
+ # resource path
44
+ local_var_path = '/sdk/v1/features/{feature_key}/health'.sub('{' + 'feature_key' + '}', CGI.escape(feature_key.to_s))
45
+
46
+ # query parameters
47
+ query_params = opts[:query_params] || {}
48
+
49
+ # header parameters
50
+ header_params = opts[:header_params] || {}
51
+ # HTTP header 'Accept' (if needed)
52
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
53
+
54
+ # form parameters
55
+ form_params = opts[:form_params] || {}
56
+
57
+ # http body (model)
58
+ post_body = opts[:debug_body]
59
+
60
+ # return_type
61
+ return_type = opts[:debug_return_type] || 'FeatureHealth'
62
+
63
+ # auth_names
64
+ auth_names = opts[:debug_auth_names] || ['ApiKeyAuth']
65
+
66
+ new_options = opts.merge(
67
+ :operation => :"DefaultApi.get_feature_health",
68
+ :header_params => header_params,
69
+ :query_params => query_params,
70
+ :form_params => form_params,
71
+ :body => post_body,
72
+ :auth_names => auth_names,
73
+ :return_type => return_type
74
+ )
75
+
76
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
77
+ if @api_client.config.debugging
78
+ @api_client.config.logger.debug "API called: DefaultApi#get_feature_health\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
79
+ end
80
+ return data, status_code, headers
81
+ end
82
+
83
+ # Report feature execution error (for auto-disable)
84
+ # @param feature_key [String]
85
+ # @param feature_error_report [FeatureErrorReport]
86
+ # @param [Hash] opts the optional parameters
87
+ # @return [nil]
88
+ def report_feature_error(feature_key, feature_error_report, opts = {})
89
+ report_feature_error_with_http_info(feature_key, feature_error_report, opts)
90
+ nil
91
+ end
92
+
93
+ # Report feature execution error (for auto-disable)
94
+ # @param feature_key [String]
95
+ # @param feature_error_report [FeatureErrorReport]
96
+ # @param [Hash] opts the optional parameters
97
+ # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
98
+ def report_feature_error_with_http_info(feature_key, feature_error_report, opts = {})
99
+ if @api_client.config.debugging
100
+ @api_client.config.logger.debug 'Calling API: DefaultApi.report_feature_error ...'
101
+ end
102
+ # verify the required parameter 'feature_key' is set
103
+ if @api_client.config.client_side_validation && feature_key.nil?
104
+ fail ArgumentError, "Missing the required parameter 'feature_key' when calling DefaultApi.report_feature_error"
105
+ end
106
+ # verify the required parameter 'feature_error_report' is set
107
+ if @api_client.config.client_side_validation && feature_error_report.nil?
108
+ fail ArgumentError, "Missing the required parameter 'feature_error_report' when calling DefaultApi.report_feature_error"
109
+ end
110
+ # resource path
111
+ local_var_path = '/sdk/v1/features/{feature_key}/report-error'.sub('{' + 'feature_key' + '}', CGI.escape(feature_key.to_s))
112
+
113
+ # query parameters
114
+ query_params = opts[:query_params] || {}
115
+
116
+ # header parameters
117
+ header_params = opts[:header_params] || {}
118
+ # HTTP header 'Accept' (if needed)
119
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
120
+ # HTTP header 'Content-Type'
121
+ content_type = @api_client.select_header_content_type(['application/json'])
122
+ if !content_type.nil?
123
+ header_params['Content-Type'] = content_type
124
+ end
125
+
126
+ # form parameters
127
+ form_params = opts[:form_params] || {}
128
+
129
+ # http body (model)
130
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(feature_error_report)
131
+
132
+ # return_type
133
+ return_type = opts[:debug_return_type]
134
+
135
+ # auth_names
136
+ auth_names = opts[:debug_auth_names] || ['ApiKeyAuth']
137
+
138
+ new_options = opts.merge(
139
+ :operation => :"DefaultApi.report_feature_error",
140
+ :header_params => header_params,
141
+ :query_params => query_params,
142
+ :form_params => form_params,
143
+ :body => post_body,
144
+ :auth_names => auth_names,
145
+ :return_type => return_type
146
+ )
147
+
148
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
149
+ if @api_client.config.debugging
150
+ @api_client.config.logger.debug "API called: DefaultApi#report_feature_error\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
151
+ end
152
+ return data, status_code, headers
153
+ end
154
+
155
+ # Evaluate feature for given context
156
+ # Returns feature evaluation result for given project and context. The project is derived from the API key.
157
+ # @param feature_key [String]
158
+ # @param request_body [Hash<String, Object>]
159
+ # @param [Hash] opts the optional parameters
160
+ # @return [EvaluateResponse]
161
+ def sdk_v1_features_feature_key_evaluate_post(feature_key, request_body, opts = {})
162
+ data, _status_code, _headers = sdk_v1_features_feature_key_evaluate_post_with_http_info(feature_key, request_body, opts)
163
+ data
164
+ end
165
+
166
+ # Evaluate feature for given context
167
+ # Returns feature evaluation result for given project and context. The project is derived from the API key.
168
+ # @param feature_key [String]
169
+ # @param request_body [Hash<String, Object>]
170
+ # @param [Hash] opts the optional parameters
171
+ # @return [Array<(EvaluateResponse, Integer, Hash)>] EvaluateResponse data, response status code and response headers
172
+ def sdk_v1_features_feature_key_evaluate_post_with_http_info(feature_key, request_body, opts = {})
173
+ if @api_client.config.debugging
174
+ @api_client.config.logger.debug 'Calling API: DefaultApi.sdk_v1_features_feature_key_evaluate_post ...'
175
+ end
176
+ # verify the required parameter 'feature_key' is set
177
+ if @api_client.config.client_side_validation && feature_key.nil?
178
+ fail ArgumentError, "Missing the required parameter 'feature_key' when calling DefaultApi.sdk_v1_features_feature_key_evaluate_post"
179
+ end
180
+ # verify the required parameter 'request_body' is set
181
+ if @api_client.config.client_side_validation && request_body.nil?
182
+ fail ArgumentError, "Missing the required parameter 'request_body' when calling DefaultApi.sdk_v1_features_feature_key_evaluate_post"
183
+ end
184
+ # resource path
185
+ local_var_path = '/sdk/v1/features/{feature_key}/evaluate'.sub('{' + 'feature_key' + '}', CGI.escape(feature_key.to_s))
186
+
187
+ # query parameters
188
+ query_params = opts[:query_params] || {}
189
+
190
+ # header parameters
191
+ header_params = opts[:header_params] || {}
192
+ # HTTP header 'Accept' (if needed)
193
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
194
+ # HTTP header 'Content-Type'
195
+ content_type = @api_client.select_header_content_type(['application/json'])
196
+ if !content_type.nil?
197
+ header_params['Content-Type'] = content_type
198
+ end
199
+
200
+ # form parameters
201
+ form_params = opts[:form_params] || {}
202
+
203
+ # http body (model)
204
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(request_body)
205
+
206
+ # return_type
207
+ return_type = opts[:debug_return_type] || 'EvaluateResponse'
208
+
209
+ # auth_names
210
+ auth_names = opts[:debug_auth_names] || ['ApiKeyAuth']
211
+
212
+ new_options = opts.merge(
213
+ :operation => :"DefaultApi.sdk_v1_features_feature_key_evaluate_post",
214
+ :header_params => header_params,
215
+ :query_params => query_params,
216
+ :form_params => form_params,
217
+ :body => post_body,
218
+ :auth_names => auth_names,
219
+ :return_type => return_type
220
+ )
221
+
222
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
223
+ if @api_client.config.debugging
224
+ @api_client.config.logger.debug "API called: DefaultApi#sdk_v1_features_feature_key_evaluate_post\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
225
+ end
226
+ return data, status_code, headers
227
+ end
228
+
229
+ # Health check for SDK server
230
+ # @param [Hash] opts the optional parameters
231
+ # @return [HealthResponse]
232
+ def sdk_v1_health_get(opts = {})
233
+ data, _status_code, _headers = sdk_v1_health_get_with_http_info(opts)
234
+ data
235
+ end
236
+
237
+ # Health check for SDK server
238
+ # @param [Hash] opts the optional parameters
239
+ # @return [Array<(HealthResponse, Integer, Hash)>] HealthResponse data, response status code and response headers
240
+ def sdk_v1_health_get_with_http_info(opts = {})
241
+ if @api_client.config.debugging
242
+ @api_client.config.logger.debug 'Calling API: DefaultApi.sdk_v1_health_get ...'
243
+ end
244
+ # resource path
245
+ local_var_path = '/sdk/v1/health'
246
+
247
+ # query parameters
248
+ query_params = opts[:query_params] || {}
249
+
250
+ # header parameters
251
+ header_params = opts[:header_params] || {}
252
+ # HTTP header 'Accept' (if needed)
253
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
254
+
255
+ # form parameters
256
+ form_params = opts[:form_params] || {}
257
+
258
+ # http body (model)
259
+ post_body = opts[:debug_body]
260
+
261
+ # return_type
262
+ return_type = opts[:debug_return_type] || 'HealthResponse'
263
+
264
+ # auth_names
265
+ auth_names = opts[:debug_auth_names] || []
266
+
267
+ new_options = opts.merge(
268
+ :operation => :"DefaultApi.sdk_v1_health_get",
269
+ :header_params => header_params,
270
+ :query_params => query_params,
271
+ :form_params => form_params,
272
+ :body => post_body,
273
+ :auth_names => auth_names,
274
+ :return_type => return_type
275
+ )
276
+
277
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
278
+ if @api_client.config.debugging
279
+ @api_client.config.logger.debug "API called: DefaultApi#sdk_v1_health_get\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
280
+ end
281
+ return data, status_code, headers
282
+ end
283
+ end
284
+ end