ultracart_api 4.1.175 → 4.1.177

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.
@@ -466,18 +466,18 @@ module UltracartClient
466
466
  end
467
467
 
468
468
  # Attempts to connect to Anrok and returns back the response
469
- # Attempts to connect to Anrok and returns back the response.
469
+ # Attempts to connect to Anrok and returns back the response, including the products configured on the merchant's Anrok account.
470
470
  # @param [Hash] opts the optional parameters
471
- # @return [TaxProviderTestResult]
471
+ # @return [TaxProviderAnrokTestResult]
472
472
  def get_tax_provider_anrok_test(opts = {})
473
473
  data, _status_code, _headers = get_tax_provider_anrok_test_with_http_info(opts)
474
474
  data
475
475
  end
476
476
 
477
477
  # Attempts to connect to Anrok and returns back the response
478
- # Attempts to connect to Anrok and returns back the response.
478
+ # Attempts to connect to Anrok and returns back the response, including the products configured on the merchant's Anrok account.
479
479
  # @param [Hash] opts the optional parameters
480
- # @return [Array<(TaxProviderTestResult, Integer, Hash)>] TaxProviderTestResult data, response status code and response headers
480
+ # @return [Array<(TaxProviderAnrokTestResult, Integer, Hash)>] TaxProviderAnrokTestResult data, response status code and response headers
481
481
  def get_tax_provider_anrok_test_with_http_info(opts = {})
482
482
  if @api_client.config.debugging
483
483
  @api_client.config.logger.debug 'Calling API: TaxApi.get_tax_provider_anrok_test ...'
@@ -501,7 +501,7 @@ module UltracartClient
501
501
  post_body = opts[:debug_body]
502
502
 
503
503
  # return_type
504
- return_type = opts[:debug_return_type] || 'TaxProviderTestResult'
504
+ return_type = opts[:debug_return_type] || 'TaxProviderAnrokTestResult'
505
505
 
506
506
  # auth_names
507
507
  auth_names = opts[:debug_auth_names] || ['ultraCartOauth', 'ultraCartSimpleApiKey']
@@ -1004,6 +1004,122 @@ module UltracartClient
1004
1004
  return data, status_code, headers
1005
1005
  end
1006
1006
 
1007
+ # Retrieve the TaxCloud tax provider
1008
+ # Retrieves the TaxCloud tax provider.
1009
+ # @param [Hash] opts the optional parameters
1010
+ # @return [TaxProviderTaxCloud]
1011
+ def get_tax_provider_tax_cloud(opts = {})
1012
+ data, _status_code, _headers = get_tax_provider_tax_cloud_with_http_info(opts)
1013
+ data
1014
+ end
1015
+
1016
+ # Retrieve the TaxCloud tax provider
1017
+ # Retrieves the TaxCloud tax provider.
1018
+ # @param [Hash] opts the optional parameters
1019
+ # @return [Array<(TaxProviderTaxCloud, Integer, Hash)>] TaxProviderTaxCloud data, response status code and response headers
1020
+ def get_tax_provider_tax_cloud_with_http_info(opts = {})
1021
+ if @api_client.config.debugging
1022
+ @api_client.config.logger.debug 'Calling API: TaxApi.get_tax_provider_tax_cloud ...'
1023
+ end
1024
+ # resource path
1025
+ local_var_path = '/tax/providers/taxcloud'
1026
+
1027
+ # query parameters
1028
+ query_params = opts[:query_params] || {}
1029
+
1030
+ # header parameters
1031
+ header_params = opts[:header_params] || {}
1032
+ header_params['X-UltraCart-Api-Version'] = @api_client.select_header_api_version()
1033
+ # HTTP header 'Accept' (if needed)
1034
+ header_params['Accept'] = @api_client.select_header_accept(['application/json'])
1035
+
1036
+ # form parameters
1037
+ form_params = opts[:form_params] || {}
1038
+
1039
+ # http body (model)
1040
+ post_body = opts[:debug_body]
1041
+
1042
+ # return_type
1043
+ return_type = opts[:debug_return_type] || 'TaxProviderTaxCloud'
1044
+
1045
+ # auth_names
1046
+ auth_names = opts[:debug_auth_names] || ['ultraCartOauth', 'ultraCartSimpleApiKey']
1047
+
1048
+ new_options = opts.merge(
1049
+ :operation => :"TaxApi.get_tax_provider_tax_cloud",
1050
+ :header_params => header_params,
1051
+ :query_params => query_params,
1052
+ :form_params => form_params,
1053
+ :body => post_body,
1054
+ :auth_names => auth_names,
1055
+ :return_type => return_type
1056
+ )
1057
+
1058
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
1059
+ if @api_client.config.debugging
1060
+ @api_client.config.logger.debug "API called: TaxApi#get_tax_provider_tax_cloud\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
1061
+ end
1062
+ return data, status_code, headers
1063
+ end
1064
+
1065
+ # Attempts to connect to TaxCloud and returns back the response
1066
+ # Attempts to connect to TaxCloud with the saved API key and Connection ID and returns back the response.
1067
+ # @param [Hash] opts the optional parameters
1068
+ # @return [TaxProviderTestResult]
1069
+ def get_tax_provider_tax_cloud_test(opts = {})
1070
+ data, _status_code, _headers = get_tax_provider_tax_cloud_test_with_http_info(opts)
1071
+ data
1072
+ end
1073
+
1074
+ # Attempts to connect to TaxCloud and returns back the response
1075
+ # Attempts to connect to TaxCloud with the saved API key and Connection ID and returns back the response.
1076
+ # @param [Hash] opts the optional parameters
1077
+ # @return [Array<(TaxProviderTestResult, Integer, Hash)>] TaxProviderTestResult data, response status code and response headers
1078
+ def get_tax_provider_tax_cloud_test_with_http_info(opts = {})
1079
+ if @api_client.config.debugging
1080
+ @api_client.config.logger.debug 'Calling API: TaxApi.get_tax_provider_tax_cloud_test ...'
1081
+ end
1082
+ # resource path
1083
+ local_var_path = '/tax/providers/taxcloud/test'
1084
+
1085
+ # query parameters
1086
+ query_params = opts[:query_params] || {}
1087
+
1088
+ # header parameters
1089
+ header_params = opts[:header_params] || {}
1090
+ header_params['X-UltraCart-Api-Version'] = @api_client.select_header_api_version()
1091
+ # HTTP header 'Accept' (if needed)
1092
+ header_params['Accept'] = @api_client.select_header_accept(['application/json'])
1093
+
1094
+ # form parameters
1095
+ form_params = opts[:form_params] || {}
1096
+
1097
+ # http body (model)
1098
+ post_body = opts[:debug_body]
1099
+
1100
+ # return_type
1101
+ return_type = opts[:debug_return_type] || 'TaxProviderTestResult'
1102
+
1103
+ # auth_names
1104
+ auth_names = opts[:debug_auth_names] || ['ultraCartOauth', 'ultraCartSimpleApiKey']
1105
+
1106
+ new_options = opts.merge(
1107
+ :operation => :"TaxApi.get_tax_provider_tax_cloud_test",
1108
+ :header_params => header_params,
1109
+ :query_params => query_params,
1110
+ :form_params => form_params,
1111
+ :body => post_body,
1112
+ :auth_names => auth_names,
1113
+ :return_type => return_type
1114
+ )
1115
+
1116
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
1117
+ if @api_client.config.debugging
1118
+ @api_client.config.logger.debug "API called: TaxApi#get_tax_provider_tax_cloud_test\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
1119
+ end
1120
+ return data, status_code, headers
1121
+ end
1122
+
1007
1123
  # Retrieve the TaxJar tax provider
1008
1124
  # Retrieves the TaxJar tax provider.
1009
1125
  # @param [Hash] opts the optional parameters
@@ -1960,6 +2076,75 @@ module UltracartClient
1960
2076
  return data, status_code, headers
1961
2077
  end
1962
2078
 
2079
+ # Update the TaxCloud tax provider
2080
+ # Update the TaxCloud tax provider.
2081
+ # @param tax_provider_taxcloud [TaxProviderTaxCloud] TaxProviderTaxCloud object
2082
+ # @param [Hash] opts the optional parameters
2083
+ # @return [TaxProviderTaxCloud]
2084
+ def update_tax_provider_tax_cloud(tax_provider_taxcloud, opts = {})
2085
+ data, _status_code, _headers = update_tax_provider_tax_cloud_with_http_info(tax_provider_taxcloud, opts)
2086
+ data
2087
+ end
2088
+
2089
+ # Update the TaxCloud tax provider
2090
+ # Update the TaxCloud tax provider.
2091
+ # @param tax_provider_taxcloud [TaxProviderTaxCloud] TaxProviderTaxCloud object
2092
+ # @param [Hash] opts the optional parameters
2093
+ # @return [Array<(TaxProviderTaxCloud, Integer, Hash)>] TaxProviderTaxCloud data, response status code and response headers
2094
+ def update_tax_provider_tax_cloud_with_http_info(tax_provider_taxcloud, opts = {})
2095
+ if @api_client.config.debugging
2096
+ @api_client.config.logger.debug 'Calling API: TaxApi.update_tax_provider_tax_cloud ...'
2097
+ end
2098
+ # verify the required parameter 'tax_provider_taxcloud' is set
2099
+ if @api_client.config.client_side_validation && tax_provider_taxcloud.nil?
2100
+ fail ArgumentError, "Missing the required parameter 'tax_provider_taxcloud' when calling TaxApi.update_tax_provider_tax_cloud"
2101
+ end
2102
+ # resource path
2103
+ local_var_path = '/tax/providers/taxcloud'
2104
+
2105
+ # query parameters
2106
+ query_params = opts[:query_params] || {}
2107
+
2108
+ # header parameters
2109
+ header_params = opts[:header_params] || {}
2110
+ header_params['X-UltraCart-Api-Version'] = @api_client.select_header_api_version()
2111
+ # HTTP header 'Accept' (if needed)
2112
+ header_params['Accept'] = @api_client.select_header_accept(['application/json'])
2113
+ # HTTP header 'Content-Type'
2114
+ content_type = @api_client.select_header_content_type(['application/json'])
2115
+ if !content_type.nil?
2116
+ header_params['Content-Type'] = content_type
2117
+ end
2118
+
2119
+ # form parameters
2120
+ form_params = opts[:form_params] || {}
2121
+
2122
+ # http body (model)
2123
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(tax_provider_taxcloud)
2124
+
2125
+ # return_type
2126
+ return_type = opts[:debug_return_type] || 'TaxProviderTaxCloud'
2127
+
2128
+ # auth_names
2129
+ auth_names = opts[:debug_auth_names] || ['ultraCartOauth', 'ultraCartSimpleApiKey']
2130
+
2131
+ new_options = opts.merge(
2132
+ :operation => :"TaxApi.update_tax_provider_tax_cloud",
2133
+ :header_params => header_params,
2134
+ :query_params => query_params,
2135
+ :form_params => form_params,
2136
+ :body => post_body,
2137
+ :auth_names => auth_names,
2138
+ :return_type => return_type
2139
+ )
2140
+
2141
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
2142
+ if @api_client.config.debugging
2143
+ @api_client.config.logger.debug "API called: TaxApi#update_tax_provider_tax_cloud\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
2144
+ end
2145
+ return data, status_code, headers
2146
+ end
2147
+
1963
2148
  # Update the TaxJar tax provider
1964
2149
  # Update the TaxJar tax provider.
1965
2150
  # @param tax_provider_tax_jar [TaxProviderTaxJar] TaxProviderTaxJar object
@@ -0,0 +1,364 @@
1
+ =begin
2
+ #UltraCart Rest API V2
3
+
4
+ #UltraCart REST API Version 2
5
+
6
+ The version of the OpenAPI document: 2.0.0
7
+ Contact: support@ultracart.com
8
+ Generated by: https://openapi-generator.tech
9
+ OpenAPI Generator version: 6.0.1-SNAPSHOT
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module UltracartClient
17
+ class SfvbBlogPostDetail
18
+ # Whether shoppers may comment.
19
+ attr_accessor :allow_comments
20
+
21
+ # The post author.
22
+ attr_accessor :author
23
+
24
+ # The blog post's oid. This is what a page's blog post assignment names.
25
+ attr_accessor :blog_post_oid
26
+
27
+ # The post body as HTML, exactly as stored.
28
+ attr_accessor :body
29
+
30
+ # When the post was created (ISO 8601, UTC).
31
+ attr_accessor :created_dts
32
+
33
+ # The post excerpt as HTML, exactly as stored.
34
+ attr_accessor :excerpt
35
+
36
+ # The post's images, the default image first.
37
+ attr_accessor :images
38
+
39
+ # When the post was last changed (ISO 8601, UTC), or null if it never was.
40
+ attr_accessor :last_modified_dts
41
+
42
+ # When the post is published (ISO 8601, UTC), or null for a draft.
43
+ attr_accessor :publication_dts
44
+
45
+ # The post's tags.
46
+ attr_accessor :tags
47
+
48
+ # The post title.
49
+ attr_accessor :title
50
+
51
+ # True when no page shows this post yet.
52
+ attr_accessor :unassigned
53
+
54
+ # The post's name in its URL.
55
+ attr_accessor :url_part
56
+
57
+ # The post's address on the storefront, or null until a page shows it.
58
+ attr_accessor :view_url
59
+
60
+ # P public, L logged in customers only, D draft.
61
+ attr_accessor :visibility
62
+
63
+ # Attribute mapping from ruby-style variable name to JSON key.
64
+ def self.attribute_map
65
+ {
66
+ :'allow_comments' => :'allow_comments',
67
+ :'author' => :'author',
68
+ :'blog_post_oid' => :'blog_post_oid',
69
+ :'body' => :'body',
70
+ :'created_dts' => :'created_dts',
71
+ :'excerpt' => :'excerpt',
72
+ :'images' => :'images',
73
+ :'last_modified_dts' => :'last_modified_dts',
74
+ :'publication_dts' => :'publication_dts',
75
+ :'tags' => :'tags',
76
+ :'title' => :'title',
77
+ :'unassigned' => :'unassigned',
78
+ :'url_part' => :'url_part',
79
+ :'view_url' => :'view_url',
80
+ :'visibility' => :'visibility'
81
+ }
82
+ end
83
+
84
+ # Returns all the JSON keys this model knows about
85
+ def self.acceptable_attributes
86
+ attribute_map.values
87
+ end
88
+
89
+ # Attribute type mapping.
90
+ def self.openapi_types
91
+ {
92
+ :'allow_comments' => :'Boolean',
93
+ :'author' => :'String',
94
+ :'blog_post_oid' => :'Integer',
95
+ :'body' => :'String',
96
+ :'created_dts' => :'String',
97
+ :'excerpt' => :'String',
98
+ :'images' => :'Array<SfvbBlogPostImage>',
99
+ :'last_modified_dts' => :'String',
100
+ :'publication_dts' => :'String',
101
+ :'tags' => :'Array<String>',
102
+ :'title' => :'String',
103
+ :'unassigned' => :'Boolean',
104
+ :'url_part' => :'String',
105
+ :'view_url' => :'String',
106
+ :'visibility' => :'String'
107
+ }
108
+ end
109
+
110
+ # List of attributes with nullable: true
111
+ def self.openapi_nullable
112
+ Set.new([
113
+ ])
114
+ end
115
+
116
+ # Initializes the object
117
+ # @param [Hash] attributes Model attributes in the form of hash
118
+ def initialize(attributes = {})
119
+ if (!attributes.is_a?(Hash))
120
+ fail ArgumentError, "The input argument (attributes) must be a hash in `UltracartClient::SfvbBlogPostDetail` initialize method"
121
+ end
122
+
123
+ # check to see if the attribute exists and convert string to symbol for hash key
124
+ attributes = attributes.each_with_object({}) { |(k, v), h|
125
+ if (!self.class.attribute_map.key?(k.to_sym))
126
+ fail ArgumentError, "`#{k}` is not a valid attribute in `UltracartClient::SfvbBlogPostDetail`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
127
+ end
128
+ h[k.to_sym] = v
129
+ }
130
+
131
+ if attributes.key?(:'allow_comments')
132
+ self.allow_comments = attributes[:'allow_comments']
133
+ end
134
+
135
+ if attributes.key?(:'author')
136
+ self.author = attributes[:'author']
137
+ end
138
+
139
+ if attributes.key?(:'blog_post_oid')
140
+ self.blog_post_oid = attributes[:'blog_post_oid']
141
+ end
142
+
143
+ if attributes.key?(:'body')
144
+ self.body = attributes[:'body']
145
+ end
146
+
147
+ if attributes.key?(:'created_dts')
148
+ self.created_dts = attributes[:'created_dts']
149
+ end
150
+
151
+ if attributes.key?(:'excerpt')
152
+ self.excerpt = attributes[:'excerpt']
153
+ end
154
+
155
+ if attributes.key?(:'images')
156
+ if (value = attributes[:'images']).is_a?(Array)
157
+ self.images = value
158
+ end
159
+ end
160
+
161
+ if attributes.key?(:'last_modified_dts')
162
+ self.last_modified_dts = attributes[:'last_modified_dts']
163
+ end
164
+
165
+ if attributes.key?(:'publication_dts')
166
+ self.publication_dts = attributes[:'publication_dts']
167
+ end
168
+
169
+ if attributes.key?(:'tags')
170
+ if (value = attributes[:'tags']).is_a?(Array)
171
+ self.tags = value
172
+ end
173
+ end
174
+
175
+ if attributes.key?(:'title')
176
+ self.title = attributes[:'title']
177
+ end
178
+
179
+ if attributes.key?(:'unassigned')
180
+ self.unassigned = attributes[:'unassigned']
181
+ end
182
+
183
+ if attributes.key?(:'url_part')
184
+ self.url_part = attributes[:'url_part']
185
+ end
186
+
187
+ if attributes.key?(:'view_url')
188
+ self.view_url = attributes[:'view_url']
189
+ end
190
+
191
+ if attributes.key?(:'visibility')
192
+ self.visibility = attributes[:'visibility']
193
+ end
194
+ end
195
+
196
+ # Show invalid properties with the reasons. Usually used together with valid?
197
+ # @return Array for valid properties with the reasons
198
+ def list_invalid_properties
199
+ invalid_properties = Array.new
200
+ invalid_properties
201
+ end
202
+
203
+ # Check to see if the all the properties in the model are valid
204
+ # @return true if the model is valid
205
+ def valid?
206
+ true
207
+ end
208
+
209
+ # Checks equality by comparing each attribute.
210
+ # @param [Object] Object to be compared
211
+ def ==(o)
212
+ return true if self.equal?(o)
213
+ self.class == o.class &&
214
+ allow_comments == o.allow_comments &&
215
+ author == o.author &&
216
+ blog_post_oid == o.blog_post_oid &&
217
+ body == o.body &&
218
+ created_dts == o.created_dts &&
219
+ excerpt == o.excerpt &&
220
+ images == o.images &&
221
+ last_modified_dts == o.last_modified_dts &&
222
+ publication_dts == o.publication_dts &&
223
+ tags == o.tags &&
224
+ title == o.title &&
225
+ unassigned == o.unassigned &&
226
+ url_part == o.url_part &&
227
+ view_url == o.view_url &&
228
+ visibility == o.visibility
229
+ end
230
+
231
+ # @see the `==` method
232
+ # @param [Object] Object to be compared
233
+ def eql?(o)
234
+ self == o
235
+ end
236
+
237
+ # Calculates hash code according to all attributes.
238
+ # @return [Integer] Hash code
239
+ def hash
240
+ [allow_comments, author, blog_post_oid, body, created_dts, excerpt, images, last_modified_dts, publication_dts, tags, title, unassigned, url_part, view_url, visibility].hash
241
+ end
242
+
243
+ # Builds the object from hash
244
+ # @param [Hash] attributes Model attributes in the form of hash
245
+ # @return [Object] Returns the model itself
246
+ def self.build_from_hash(attributes)
247
+ new.build_from_hash(attributes)
248
+ end
249
+
250
+ # Builds the object from hash
251
+ # @param [Hash] attributes Model attributes in the form of hash
252
+ # @return [Object] Returns the model itself
253
+ def build_from_hash(attributes)
254
+ return nil unless attributes.is_a?(Hash)
255
+ attributes = attributes.transform_keys(&:to_sym)
256
+ self.class.openapi_types.each_pair do |key, type|
257
+ if attributes[self.class.attribute_map[key]].nil? && self.class.openapi_nullable.include?(key)
258
+ self.send("#{key}=", nil)
259
+ elsif type =~ /\AArray<(.*)>/i
260
+ # check to ensure the input is an array given that the attribute
261
+ # is documented as an array but the input is not
262
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
263
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
264
+ end
265
+ elsif !attributes[self.class.attribute_map[key]].nil?
266
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
267
+ end
268
+ end
269
+
270
+ self
271
+ end
272
+
273
+ # Deserializes the data based on type
274
+ # @param string type Data type
275
+ # @param string value Value to be deserialized
276
+ # @return [Object] Deserialized data
277
+ def _deserialize(type, value)
278
+ case type.to_sym
279
+ when :Time
280
+ Time.parse(value)
281
+ when :Date
282
+ Date.parse(value)
283
+ when :String
284
+ value.to_s
285
+ when :Integer
286
+ value.to_i
287
+ when :Float
288
+ value.to_f
289
+ when :Boolean
290
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
291
+ true
292
+ else
293
+ false
294
+ end
295
+ when :Object
296
+ # generic object (usually a Hash), return directly
297
+ value
298
+ when /\AArray<(?<inner_type>.+)>\z/
299
+ inner_type = Regexp.last_match[:inner_type]
300
+ value.map { |v| _deserialize(inner_type, v) }
301
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
302
+ k_type = Regexp.last_match[:k_type]
303
+ v_type = Regexp.last_match[:v_type]
304
+ {}.tap do |hash|
305
+ value.each do |k, v|
306
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
307
+ end
308
+ end
309
+ else # model
310
+ # models (e.g. Pet) or oneOf
311
+ klass = UltracartClient.const_get(type)
312
+ klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
313
+ end
314
+ end
315
+
316
+ # Returns the string representation of the object
317
+ # @return [String] String presentation of the object
318
+ def to_s
319
+ to_hash.to_s
320
+ end
321
+
322
+ # to_body is an alias to to_hash (backward compatibility)
323
+ # @return [Hash] Returns the object in the form of hash
324
+ def to_body
325
+ to_hash
326
+ end
327
+
328
+ # Returns the object in the form of hash
329
+ # @return [Hash] Returns the object in the form of hash
330
+ def to_hash
331
+ hash = {}
332
+ self.class.attribute_map.each_pair do |attr, param|
333
+ value = self.send(attr)
334
+ if value.nil?
335
+ is_nullable = self.class.openapi_nullable.include?(attr)
336
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
337
+ end
338
+
339
+ hash[param] = _to_hash(value)
340
+ end
341
+ hash
342
+ end
343
+
344
+ # Outputs non-array value in the form of hash
345
+ # For object, use to_hash. Otherwise, just return the value
346
+ # @param [Object] value Any valid value
347
+ # @return [Hash] Returns the value in the form of hash
348
+ def _to_hash(value)
349
+ if value.is_a?(Array)
350
+ value.compact.map { |v| _to_hash(v) }
351
+ elsif value.is_a?(Hash)
352
+ {}.tap do |hash|
353
+ value.each { |k, v| hash[k] = _to_hash(v) }
354
+ end
355
+ elsif value.respond_to? :to_hash
356
+ value.to_hash
357
+ else
358
+ value
359
+ end
360
+ end
361
+
362
+ end
363
+
364
+ end