purecloudplatformclientv2 47.0.0 → 48.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 (99) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -3
  3. data/docs/AnalyticsApi.md +66 -0
  4. data/docs/AnalyticsSession.md +1 -1
  5. data/docs/AuthorizationApi.md +9 -5
  6. data/docs/Condition.md +4 -4
  7. data/docs/ContactColumnToDataActionFieldMapping.md +12 -0
  8. data/docs/ConversationProperties.md +21 -0
  9. data/docs/DataActionConditionPredicate.md +12 -0
  10. data/docs/GroupsApi.md +1 -1
  11. data/docs/OrgUser.md +1 -0
  12. data/docs/OutboundApi.md +2 -2
  13. data/docs/QualityApi.md +376 -0
  14. data/docs/RoutingApi.md +85 -12
  15. data/docs/ScorableSurvey.md +18 -0
  16. data/docs/SearchApi.md +2 -42
  17. data/docs/SuggestApi.md +2 -2
  18. data/docs/Survey.md +22 -0
  19. data/docs/SurveyFormAndScoringSet.md +14 -0
  20. data/docs/SurveyQuestionGroupScore.md +17 -0
  21. data/docs/SurveyQuestionScore.md +19 -0
  22. data/docs/SurveyScoringSet.md +15 -0
  23. data/docs/Token.md +13 -0
  24. data/docs/TrustUser.md +1 -0
  25. data/docs/User.md +1 -0
  26. data/docs/UserMe.md +1 -0
  27. data/docs/UsersApi.md +8 -8
  28. data/docs/UtilitiesApi.md +59 -0
  29. data/docs/ViewFilter.md +13 -0
  30. data/lib/purecloudplatformclientv2.rb +10 -0
  31. data/lib/purecloudplatformclientv2/api/alerting_api.rb +11 -11
  32. data/lib/purecloudplatformclientv2/api/analytics_api.rb +91 -26
  33. data/lib/purecloudplatformclientv2/api/architect_api.rb +81 -81
  34. data/lib/purecloudplatformclientv2/api/attributes_api.rb +6 -6
  35. data/lib/purecloudplatformclientv2/api/authorization_api.rb +45 -36
  36. data/lib/purecloudplatformclientv2/api/billing_api.rb +2 -2
  37. data/lib/purecloudplatformclientv2/api/content_management_api.rb +38 -38
  38. data/lib/purecloudplatformclientv2/api/conversations_api.rb +100 -100
  39. data/lib/purecloudplatformclientv2/api/external_contacts_api.rb +30 -30
  40. data/lib/purecloudplatformclientv2/api/fax_api.rb +6 -6
  41. data/lib/purecloudplatformclientv2/api/flows_api.rb +1 -1
  42. data/lib/purecloudplatformclientv2/api/general_data_protection_regulation_api.rb +4 -4
  43. data/lib/purecloudplatformclientv2/api/geolocation_api.rb +4 -4
  44. data/lib/purecloudplatformclientv2/api/greetings_api.rb +16 -16
  45. data/lib/purecloudplatformclientv2/api/groups_api.rb +14 -14
  46. data/lib/purecloudplatformclientv2/api/identity_provider_api.rb +28 -28
  47. data/lib/purecloudplatformclientv2/api/integrations_api.rb +41 -41
  48. data/lib/purecloudplatformclientv2/api/languages_api.rb +10 -10
  49. data/lib/purecloudplatformclientv2/api/license_api.rb +8 -8
  50. data/lib/purecloudplatformclientv2/api/locations_api.rb +4 -4
  51. data/lib/purecloudplatformclientv2/api/messaging_api.rb +14 -14
  52. data/lib/purecloudplatformclientv2/api/mobile_devices_api.rb +5 -5
  53. data/lib/purecloudplatformclientv2/api/notifications_api.rb +7 -7
  54. data/lib/purecloudplatformclientv2/api/o_auth_api.rb +6 -6
  55. data/lib/purecloudplatformclientv2/api/objects_api.rb +8 -8
  56. data/lib/purecloudplatformclientv2/api/organization_api.rb +4 -4
  57. data/lib/purecloudplatformclientv2/api/organization_authorization_api.rb +23 -23
  58. data/lib/purecloudplatformclientv2/api/outbound_api.rb +98 -98
  59. data/lib/purecloudplatformclientv2/api/presence_api.rb +9 -9
  60. data/lib/purecloudplatformclientv2/api/quality_api.rb +450 -52
  61. data/lib/purecloudplatformclientv2/api/recording_api.rb +37 -37
  62. data/lib/purecloudplatformclientv2/api/response_management_api.rb +11 -11
  63. data/lib/purecloudplatformclientv2/api/routing_api.rb +173 -70
  64. data/lib/purecloudplatformclientv2/api/scripts_api.rb +11 -11
  65. data/lib/purecloudplatformclientv2/api/search_api.rb +16 -16
  66. data/lib/purecloudplatformclientv2/api/stations_api.rb +5 -5
  67. data/lib/purecloudplatformclientv2/api/suggest_api.rb +4 -4
  68. data/lib/purecloudplatformclientv2/api/telephony_providers_edge_api.rb +125 -125
  69. data/lib/purecloudplatformclientv2/api/tokens_api.rb +2 -2
  70. data/lib/purecloudplatformclientv2/api/user_recordings_api.rb +6 -6
  71. data/lib/purecloudplatformclientv2/api/users_api.rb +61 -61
  72. data/lib/purecloudplatformclientv2/api/utilities_api.rb +58 -3
  73. data/lib/purecloudplatformclientv2/api/voicemail_api.rb +24 -24
  74. data/lib/purecloudplatformclientv2/api/web_chat_api.rb +8 -8
  75. data/lib/purecloudplatformclientv2/api/workforce_management_api.rb +64 -64
  76. data/lib/purecloudplatformclientv2/api_client.rb +1 -1
  77. data/lib/purecloudplatformclientv2/configuration.rb +9 -2
  78. data/lib/purecloudplatformclientv2/models/aggregate_metric_data.rb +2 -2
  79. data/lib/purecloudplatformclientv2/models/analytics_query_predicate.rb +2 -2
  80. data/lib/purecloudplatformclientv2/models/analytics_session.rb +1 -1
  81. data/lib/purecloudplatformclientv2/models/condition.rb +6 -6
  82. data/lib/purecloudplatformclientv2/models/contact_column_to_data_action_field_mapping.rb +176 -0
  83. data/lib/purecloudplatformclientv2/models/conversation_properties.rb +410 -0
  84. data/lib/purecloudplatformclientv2/models/data_action_condition_predicate.rb +176 -0
  85. data/lib/purecloudplatformclientv2/models/observation_metric_data.rb +2 -2
  86. data/lib/purecloudplatformclientv2/models/org_user.rb +27 -1
  87. data/lib/purecloudplatformclientv2/models/scorable_survey.rb +343 -0
  88. data/lib/purecloudplatformclientv2/models/survey.rb +444 -0
  89. data/lib/purecloudplatformclientv2/models/survey_form_and_scoring_set.rb +226 -0
  90. data/lib/purecloudplatformclientv2/models/survey_question_group_score.rb +303 -0
  91. data/lib/purecloudplatformclientv2/models/survey_question_score.rb +351 -0
  92. data/lib/purecloudplatformclientv2/models/survey_scoring_set.rb +253 -0
  93. data/lib/purecloudplatformclientv2/models/token.rb +207 -0
  94. data/lib/purecloudplatformclientv2/models/trust_user.rb +27 -1
  95. data/lib/purecloudplatformclientv2/models/user.rb +27 -1
  96. data/lib/purecloudplatformclientv2/models/user_me.rb +27 -1
  97. data/lib/purecloudplatformclientv2/models/view_filter.rb +354 -4
  98. data/lib/purecloudplatformclientv2/version.rb +1 -1
  99. metadata +22 -2
@@ -0,0 +1,303 @@
1
+ =begin
2
+ PureCloud Platform API
3
+
4
+ With the PureCloud Platform API, you can control all aspects of your PureCloud environment. With the APIs you can access the system configuration, manage conversations and more.
5
+
6
+ OpenAPI spec version: v2
7
+ Contact: DeveloperEvangelists@genesys.com
8
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
9
+
10
+ License: ININ
11
+ http://www.inin.com
12
+
13
+ Terms of Service: https://developer.mypurecloud.com/tos
14
+
15
+ =end
16
+
17
+ require 'date'
18
+
19
+ module PureCloud
20
+ class SurveyQuestionGroupScore
21
+ attr_accessor :question_group_id
22
+
23
+ attr_accessor :total_score
24
+
25
+ attr_accessor :max_total_score
26
+
27
+ attr_accessor :marked_na
28
+
29
+ attr_accessor :question_scores
30
+
31
+ # Attribute mapping from ruby-style variable name to JSON key.
32
+ def self.attribute_map
33
+ {
34
+
35
+ :'question_group_id' => :'questionGroupId',
36
+
37
+ :'total_score' => :'totalScore',
38
+
39
+ :'max_total_score' => :'maxTotalScore',
40
+
41
+ :'marked_na' => :'markedNA',
42
+
43
+ :'question_scores' => :'questionScores'
44
+
45
+ }
46
+ end
47
+
48
+ # Attribute type mapping.
49
+ def self.swagger_types
50
+ {
51
+
52
+ :'question_group_id' => :'String',
53
+
54
+ :'total_score' => :'Float',
55
+
56
+ :'max_total_score' => :'Float',
57
+
58
+ :'marked_na' => :'BOOLEAN',
59
+
60
+ :'question_scores' => :'Array<SurveyQuestionScore>'
61
+
62
+ }
63
+ end
64
+
65
+ # Initializes the object
66
+ # @param [Hash] attributes Model attributes in the form of hash
67
+ def initialize(attributes = {})
68
+ return unless attributes.is_a?(Hash)
69
+
70
+ # convert string to symbol for hash key
71
+ attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
72
+
73
+
74
+ if attributes.has_key?(:'questionGroupId')
75
+
76
+
77
+ self.question_group_id = attributes[:'questionGroupId']
78
+
79
+
80
+ end
81
+
82
+
83
+ if attributes.has_key?(:'totalScore')
84
+
85
+
86
+ self.total_score = attributes[:'totalScore']
87
+
88
+
89
+ end
90
+
91
+
92
+ if attributes.has_key?(:'maxTotalScore')
93
+
94
+
95
+ self.max_total_score = attributes[:'maxTotalScore']
96
+
97
+
98
+ end
99
+
100
+
101
+ if attributes.has_key?(:'markedNA')
102
+
103
+
104
+ self.marked_na = attributes[:'markedNA']
105
+
106
+
107
+ end
108
+
109
+
110
+ if attributes.has_key?(:'questionScores')
111
+
112
+ if (value = attributes[:'questionScores']).is_a?(Array)
113
+ self.question_scores = value
114
+ end
115
+
116
+
117
+
118
+ end
119
+
120
+
121
+ end
122
+
123
+ # Show invalid properties with the reasons. Usually used together with valid?
124
+ # @return Array for valid properies with the reasons
125
+ def list_invalid_properties
126
+ invalid_properties = Array.new
127
+
128
+
129
+ return invalid_properties
130
+ end
131
+
132
+ # Check to see if the all the properties in the model are valid
133
+ # @return true if the model is valid
134
+ def valid?
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+
143
+
144
+
145
+
146
+
147
+
148
+
149
+
150
+
151
+
152
+
153
+
154
+
155
+
156
+ end
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
+
173
+
174
+
175
+
176
+
177
+
178
+
179
+
180
+
181
+
182
+
183
+
184
+ # Checks equality by comparing each attribute.
185
+ # @param [Object] Object to be compared
186
+ def ==(o)
187
+ return true if self.equal?(o)
188
+ self.class == o.class &&
189
+ question_group_id == o.question_group_id &&
190
+ total_score == o.total_score &&
191
+ max_total_score == o.max_total_score &&
192
+ marked_na == o.marked_na &&
193
+ question_scores == o.question_scores
194
+ end
195
+
196
+ # @see the `==` method
197
+ # @param [Object] Object to be compared
198
+ def eql?(o)
199
+ self == o
200
+ end
201
+
202
+ # Calculates hash code according to all attributes.
203
+ # @return [Fixnum] Hash code
204
+ def hash
205
+ [question_group_id, total_score, max_total_score, marked_na, question_scores].hash
206
+ end
207
+
208
+ # build the object from hash
209
+ def build_from_hash(attributes)
210
+ return nil unless attributes.is_a?(Hash)
211
+ self.class.swagger_types.each_pair do |key, type|
212
+ if type =~ /^Array<(.*)>/i
213
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
214
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
215
+ else
216
+ #TODO show warning in debug mode
217
+ end
218
+ elsif !attributes[self.class.attribute_map[key]].nil?
219
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
220
+ else
221
+ # data not found in attributes(hash), not an issue as the data can be optional
222
+ end
223
+ end
224
+
225
+ self
226
+ end
227
+
228
+ def _deserialize(type, value)
229
+ case type.to_sym
230
+ when :DateTime
231
+ DateTime.parse(value)
232
+ when :Date
233
+ Date.parse(value)
234
+ when :String
235
+ value.to_s
236
+ when :Integer
237
+ value.to_i
238
+ when :Float
239
+ value.to_f
240
+ when :BOOLEAN
241
+ if value.to_s =~ /^(true|t|yes|y|1)$/i
242
+ true
243
+ else
244
+ false
245
+ end
246
+ when :Object
247
+ # generic object (usually a Hash), return directly
248
+ value
249
+ when /\AArray<(?<inner_type>.+)>\z/
250
+ inner_type = Regexp.last_match[:inner_type]
251
+ value.map { |v| _deserialize(inner_type, v) }
252
+ when /\AHash<(?<k_type>.+), (?<v_type>.+)>\z/
253
+ k_type = Regexp.last_match[:k_type]
254
+ v_type = Regexp.last_match[:v_type]
255
+ {}.tap do |hash|
256
+ value.each do |k, v|
257
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
258
+ end
259
+ end
260
+ else # model
261
+ _model = Object.const_get("PureCloud").const_get(type).new
262
+ _model.build_from_hash(value)
263
+ end
264
+ end
265
+
266
+ def to_s
267
+ to_hash.to_s
268
+ end
269
+
270
+ # to_body is an alias to to_body (backward compatibility))
271
+ def to_body
272
+ to_hash
273
+ end
274
+
275
+ # return the object in the form of hash
276
+ def to_hash
277
+ hash = {}
278
+ self.class.attribute_map.each_pair do |attr, param|
279
+ value = self.send(attr)
280
+ next if value.nil?
281
+ hash[param] = _to_hash(value)
282
+ end
283
+ hash
284
+ end
285
+
286
+ # Method to output non-array value in the form of hash
287
+ # For object, use to_hash. Otherwise, just return the value
288
+ def _to_hash(value)
289
+ if value.is_a?(Array)
290
+ value.compact.map{ |v| _to_hash(v) }
291
+ elsif value.is_a?(Hash)
292
+ {}.tap do |hash|
293
+ value.each { |k, v| hash[k] = _to_hash(v) }
294
+ end
295
+ elsif value.respond_to? :to_hash
296
+ value.to_hash
297
+ else
298
+ value
299
+ end
300
+ end
301
+
302
+ end
303
+ end
@@ -0,0 +1,351 @@
1
+ =begin
2
+ PureCloud Platform API
3
+
4
+ With the PureCloud Platform API, you can control all aspects of your PureCloud environment. With the APIs you can access the system configuration, manage conversations and more.
5
+
6
+ OpenAPI spec version: v2
7
+ Contact: DeveloperEvangelists@genesys.com
8
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
9
+
10
+ License: ININ
11
+ http://www.inin.com
12
+
13
+ Terms of Service: https://developer.mypurecloud.com/tos
14
+
15
+ =end
16
+
17
+ require 'date'
18
+
19
+ module PureCloud
20
+ class SurveyQuestionScore
21
+ attr_accessor :question_id
22
+
23
+ attr_accessor :answer_id
24
+
25
+ attr_accessor :score
26
+
27
+ attr_accessor :marked_na
28
+
29
+ attr_accessor :nps_score
30
+
31
+ attr_accessor :nps_text_answer
32
+
33
+ attr_accessor :free_text_answer
34
+
35
+ # Attribute mapping from ruby-style variable name to JSON key.
36
+ def self.attribute_map
37
+ {
38
+
39
+ :'question_id' => :'questionId',
40
+
41
+ :'answer_id' => :'answerId',
42
+
43
+ :'score' => :'score',
44
+
45
+ :'marked_na' => :'markedNA',
46
+
47
+ :'nps_score' => :'npsScore',
48
+
49
+ :'nps_text_answer' => :'npsTextAnswer',
50
+
51
+ :'free_text_answer' => :'freeTextAnswer'
52
+
53
+ }
54
+ end
55
+
56
+ # Attribute type mapping.
57
+ def self.swagger_types
58
+ {
59
+
60
+ :'question_id' => :'String',
61
+
62
+ :'answer_id' => :'String',
63
+
64
+ :'score' => :'Integer',
65
+
66
+ :'marked_na' => :'BOOLEAN',
67
+
68
+ :'nps_score' => :'Integer',
69
+
70
+ :'nps_text_answer' => :'String',
71
+
72
+ :'free_text_answer' => :'String'
73
+
74
+ }
75
+ end
76
+
77
+ # Initializes the object
78
+ # @param [Hash] attributes Model attributes in the form of hash
79
+ def initialize(attributes = {})
80
+ return unless attributes.is_a?(Hash)
81
+
82
+ # convert string to symbol for hash key
83
+ attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
84
+
85
+
86
+ if attributes.has_key?(:'questionId')
87
+
88
+
89
+ self.question_id = attributes[:'questionId']
90
+
91
+
92
+ end
93
+
94
+
95
+ if attributes.has_key?(:'answerId')
96
+
97
+
98
+ self.answer_id = attributes[:'answerId']
99
+
100
+
101
+ end
102
+
103
+
104
+ if attributes.has_key?(:'score')
105
+
106
+
107
+ self.score = attributes[:'score']
108
+
109
+
110
+ end
111
+
112
+
113
+ if attributes.has_key?(:'markedNA')
114
+
115
+
116
+ self.marked_na = attributes[:'markedNA']
117
+
118
+
119
+ end
120
+
121
+
122
+ if attributes.has_key?(:'npsScore')
123
+
124
+
125
+ self.nps_score = attributes[:'npsScore']
126
+
127
+
128
+ end
129
+
130
+
131
+ if attributes.has_key?(:'npsTextAnswer')
132
+
133
+
134
+ self.nps_text_answer = attributes[:'npsTextAnswer']
135
+
136
+
137
+ end
138
+
139
+
140
+ if attributes.has_key?(:'freeTextAnswer')
141
+
142
+
143
+ self.free_text_answer = attributes[:'freeTextAnswer']
144
+
145
+
146
+ end
147
+
148
+
149
+ end
150
+
151
+ # Show invalid properties with the reasons. Usually used together with valid?
152
+ # @return Array for valid properies with the reasons
153
+ def list_invalid_properties
154
+ invalid_properties = Array.new
155
+
156
+
157
+ return invalid_properties
158
+ end
159
+
160
+ # Check to see if the all the properties in the model are valid
161
+ # @return true if the model is valid
162
+ def valid?
163
+
164
+
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
+
173
+
174
+
175
+
176
+
177
+
178
+
179
+
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+
190
+
191
+
192
+ end
193
+
194
+
195
+
196
+
197
+
198
+
199
+
200
+
201
+
202
+
203
+
204
+
205
+
206
+
207
+
208
+
209
+
210
+
211
+
212
+
213
+
214
+
215
+
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+
224
+
225
+
226
+
227
+
228
+
229
+
230
+ # Checks equality by comparing each attribute.
231
+ # @param [Object] Object to be compared
232
+ def ==(o)
233
+ return true if self.equal?(o)
234
+ self.class == o.class &&
235
+ question_id == o.question_id &&
236
+ answer_id == o.answer_id &&
237
+ score == o.score &&
238
+ marked_na == o.marked_na &&
239
+ nps_score == o.nps_score &&
240
+ nps_text_answer == o.nps_text_answer &&
241
+ free_text_answer == o.free_text_answer
242
+ end
243
+
244
+ # @see the `==` method
245
+ # @param [Object] Object to be compared
246
+ def eql?(o)
247
+ self == o
248
+ end
249
+
250
+ # Calculates hash code according to all attributes.
251
+ # @return [Fixnum] Hash code
252
+ def hash
253
+ [question_id, answer_id, score, marked_na, nps_score, nps_text_answer, free_text_answer].hash
254
+ end
255
+
256
+ # build the object from hash
257
+ def build_from_hash(attributes)
258
+ return nil unless attributes.is_a?(Hash)
259
+ self.class.swagger_types.each_pair do |key, type|
260
+ if type =~ /^Array<(.*)>/i
261
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
262
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
263
+ else
264
+ #TODO show warning in debug mode
265
+ end
266
+ elsif !attributes[self.class.attribute_map[key]].nil?
267
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
268
+ else
269
+ # data not found in attributes(hash), not an issue as the data can be optional
270
+ end
271
+ end
272
+
273
+ self
274
+ end
275
+
276
+ def _deserialize(type, value)
277
+ case type.to_sym
278
+ when :DateTime
279
+ DateTime.parse(value)
280
+ when :Date
281
+ Date.parse(value)
282
+ when :String
283
+ value.to_s
284
+ when :Integer
285
+ value.to_i
286
+ when :Float
287
+ value.to_f
288
+ when :BOOLEAN
289
+ if value.to_s =~ /^(true|t|yes|y|1)$/i
290
+ true
291
+ else
292
+ false
293
+ end
294
+ when :Object
295
+ # generic object (usually a Hash), return directly
296
+ value
297
+ when /\AArray<(?<inner_type>.+)>\z/
298
+ inner_type = Regexp.last_match[:inner_type]
299
+ value.map { |v| _deserialize(inner_type, v) }
300
+ when /\AHash<(?<k_type>.+), (?<v_type>.+)>\z/
301
+ k_type = Regexp.last_match[:k_type]
302
+ v_type = Regexp.last_match[:v_type]
303
+ {}.tap do |hash|
304
+ value.each do |k, v|
305
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
306
+ end
307
+ end
308
+ else # model
309
+ _model = Object.const_get("PureCloud").const_get(type).new
310
+ _model.build_from_hash(value)
311
+ end
312
+ end
313
+
314
+ def to_s
315
+ to_hash.to_s
316
+ end
317
+
318
+ # to_body is an alias to to_body (backward compatibility))
319
+ def to_body
320
+ to_hash
321
+ end
322
+
323
+ # return the object in the form of hash
324
+ def to_hash
325
+ hash = {}
326
+ self.class.attribute_map.each_pair do |attr, param|
327
+ value = self.send(attr)
328
+ next if value.nil?
329
+ hash[param] = _to_hash(value)
330
+ end
331
+ hash
332
+ end
333
+
334
+ # Method to output non-array value in the form of hash
335
+ # For object, use to_hash. Otherwise, just return the value
336
+ def _to_hash(value)
337
+ if value.is_a?(Array)
338
+ value.compact.map{ |v| _to_hash(v) }
339
+ elsif value.is_a?(Hash)
340
+ {}.tap do |hash|
341
+ value.each { |k, v| hash[k] = _to_hash(v) }
342
+ end
343
+ elsif value.respond_to? :to_hash
344
+ value.to_hash
345
+ else
346
+ value
347
+ end
348
+ end
349
+
350
+ end
351
+ end