late-sdk 0.0.855 → 0.0.857

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 (75) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +19 -2
  3. data/docs/AdCampaignsApi.md +364 -6
  4. data/docs/{ListAdKeywords200ResponseKeywordsInner.md → AdKeyword.md} +7 -3
  5. data/docs/AdKeywordMetrics.md +30 -0
  6. data/docs/AddAdKeywords201Response.md +18 -0
  7. data/docs/AddAdKeywordsRequest.md +24 -0
  8. data/docs/AddAdKeywordsRequestKeywordsInner.md +20 -0
  9. data/docs/AddAdKeywordsRequestKeywordsInnerAnyOf.md +20 -0
  10. data/docs/ConnectApi.md +2 -2
  11. data/docs/CreatePostRequest.md +6 -6
  12. data/docs/CreateStandaloneAdRequest.md +4 -2
  13. data/docs/CreateTrackingTagRequest.md +3 -1
  14. data/docs/KeywordEntry.md +49 -0
  15. data/docs/ListAdKeywords200Response.md +1 -1
  16. data/docs/ListCampaignNegativeKeywords200Response.md +18 -0
  17. data/docs/ListCampaignNegativeKeywords200ResponseKeywordsInner.md +22 -0
  18. data/docs/PostsApi.md +1 -1
  19. data/docs/RemoveAdKeyword200Response.md +20 -0
  20. data/docs/ReplaceCampaignNegativeKeywords200Response.md +22 -0
  21. data/docs/ReplaceCampaignNegativeKeywordsRequest.md +20 -0
  22. data/docs/TrackingTagsApi.md +1 -1
  23. data/docs/UpdateAdKeyword200Response.md +18 -0
  24. data/docs/{UpdateAdStatusRequest.md → UpdateAdKeywordRequest.md} +2 -2
  25. data/docs/WebhooksApi.md +2 -2
  26. data/lib/zernio-sdk/api/ad_campaigns_api.rb +358 -9
  27. data/lib/zernio-sdk/api/connect_api.rb +2 -2
  28. data/lib/zernio-sdk/api/posts_api.rb +2 -2
  29. data/lib/zernio-sdk/api/tracking_tags_api.rb +2 -2
  30. data/lib/zernio-sdk/api/webhooks_api.rb +4 -4
  31. data/lib/zernio-sdk/models/{list_ad_keywords200_response_keywords_inner.rb → ad_keyword.rb} +28 -8
  32. data/lib/zernio-sdk/models/ad_keyword_metrics.rb +207 -0
  33. data/lib/zernio-sdk/models/add_ad_keywords201_response.rb +149 -0
  34. data/lib/zernio-sdk/models/add_ad_keywords_request.rb +250 -0
  35. data/lib/zernio-sdk/models/add_ad_keywords_request_keywords_inner.rb +103 -0
  36. data/lib/zernio-sdk/models/add_ad_keywords_request_keywords_inner_any_of.rb +225 -0
  37. data/lib/zernio-sdk/models/create_post_request.rb +6 -0
  38. data/lib/zernio-sdk/models/create_standalone_ad_request.rb +55 -5
  39. data/lib/zernio-sdk/models/create_tracking_tag_request.rb +48 -4
  40. data/lib/zernio-sdk/models/keyword_entry.rb +105 -0
  41. data/lib/zernio-sdk/models/list_ad_keywords200_response.rb +1 -1
  42. data/lib/zernio-sdk/models/list_campaign_negative_keywords200_response.rb +149 -0
  43. data/lib/zernio-sdk/models/list_campaign_negative_keywords200_response_keywords_inner.rb +199 -0
  44. data/lib/zernio-sdk/models/remove_ad_keyword200_response.rb +157 -0
  45. data/lib/zernio-sdk/models/replace_campaign_negative_keywords200_response.rb +170 -0
  46. data/lib/zernio-sdk/models/replace_campaign_negative_keywords_request.rb +219 -0
  47. data/lib/zernio-sdk/models/update_ad_keyword200_response.rb +147 -0
  48. data/lib/zernio-sdk/models/{update_ad_status_request.rb → update_ad_keyword_request.rb} +3 -3
  49. data/lib/zernio-sdk/version.rb +1 -1
  50. data/lib/zernio-sdk.rb +14 -2
  51. data/openapi.yaml +299 -32
  52. data/spec/api/ad_campaigns_api_spec.rb +64 -1
  53. data/spec/api/connect_api_spec.rb +1 -1
  54. data/spec/api/posts_api_spec.rb +1 -1
  55. data/spec/api/tracking_tags_api_spec.rb +1 -1
  56. data/spec/api/webhooks_api_spec.rb +2 -2
  57. data/spec/models/ad_keyword_metrics_spec.rb +72 -0
  58. data/spec/models/{list_ad_keywords200_response_keywords_inner_spec.rb → ad_keyword_spec.rb} +18 -6
  59. data/spec/models/add_ad_keywords201_response_spec.rb +36 -0
  60. data/spec/models/add_ad_keywords_request_keywords_inner_any_of_spec.rb +46 -0
  61. data/spec/models/add_ad_keywords_request_keywords_inner_spec.rb +21 -0
  62. data/spec/models/add_ad_keywords_request_spec.rb +54 -0
  63. data/spec/models/create_standalone_ad_request_spec.rb +6 -0
  64. data/spec/models/create_tracking_tag_request_spec.rb +10 -0
  65. data/spec/models/keyword_entry_spec.rb +32 -0
  66. data/spec/models/list_campaign_negative_keywords200_response_keywords_inner_spec.rb +52 -0
  67. data/spec/models/list_campaign_negative_keywords200_response_spec.rb +36 -0
  68. data/spec/models/remove_ad_keyword200_response_spec.rb +42 -0
  69. data/spec/models/replace_campaign_negative_keywords200_response_spec.rb +48 -0
  70. data/spec/models/replace_campaign_negative_keywords_request_spec.rb +46 -0
  71. data/spec/models/update_ad_keyword200_response_spec.rb +36 -0
  72. data/spec/models/{update_ad_status_request_spec.rb → update_ad_keyword_request_spec.rb} +6 -6
  73. data/zernio-sdk-0.0.857.gem +0 -0
  74. metadata +58 -10
  75. data/zernio-sdk-0.0.855.gem +0 -0
@@ -14,7 +14,7 @@ require 'date'
14
14
  require 'time'
15
15
 
16
16
  module Zernio
17
- class ListAdKeywords200ResponseKeywordsInner < ApiModelBase
17
+ class AdKeyword < ApiModelBase
18
18
  attr_accessor :id
19
19
 
20
20
  # Social account ID owning the sync
@@ -48,8 +48,13 @@ module Zernio
48
48
 
49
49
  attr_accessor :negative
50
50
 
51
+ # Google Quality Score, 1-10. Null when unrated.
52
+ attr_accessor :quality_score
53
+
51
54
  attr_accessor :synced_at
52
55
 
56
+ attr_accessor :metrics
57
+
53
58
  class EnumAttributeValidator
54
59
  attr_reader :datatype
55
60
  attr_reader :allowable_values
@@ -90,7 +95,9 @@ module Zernio
90
95
  :'match_type' => :'matchType',
91
96
  :'status' => :'status',
92
97
  :'negative' => :'negative',
93
- :'synced_at' => :'syncedAt'
98
+ :'quality_score' => :'qualityScore',
99
+ :'synced_at' => :'syncedAt',
100
+ :'metrics' => :'metrics'
94
101
  }
95
102
  end
96
103
 
@@ -122,7 +129,9 @@ module Zernio
122
129
  :'match_type' => :'String',
123
130
  :'status' => :'String',
124
131
  :'negative' => :'Boolean',
125
- :'synced_at' => :'Time'
132
+ :'quality_score' => :'Integer',
133
+ :'synced_at' => :'Time',
134
+ :'metrics' => :'AdKeywordMetrics'
126
135
  }
127
136
  end
128
137
 
@@ -133,7 +142,8 @@ module Zernio
133
142
  :'campaign_status',
134
143
  :'ad_set_name',
135
144
  :'ad_set_status',
136
- :'synced_at'
145
+ :'quality_score',
146
+ :'synced_at',
137
147
  ])
138
148
  end
139
149
 
@@ -141,14 +151,14 @@ module Zernio
141
151
  # @param [Hash] attributes Model attributes in the form of hash
142
152
  def initialize(attributes = {})
143
153
  if (!attributes.is_a?(Hash))
144
- fail ArgumentError, "The input argument (attributes) must be a hash in `Zernio::ListAdKeywords200ResponseKeywordsInner` initialize method"
154
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Zernio::AdKeyword` initialize method"
145
155
  end
146
156
 
147
157
  # check to see if the attribute exists and convert string to symbol for hash key
148
158
  acceptable_attribute_map = self.class.acceptable_attribute_map
149
159
  attributes = attributes.each_with_object({}) { |(k, v), h|
150
160
  if (!acceptable_attribute_map.key?(k.to_sym))
151
- fail ArgumentError, "`#{k}` is not a valid attribute in `Zernio::ListAdKeywords200ResponseKeywordsInner`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
161
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Zernio::AdKeyword`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
152
162
  end
153
163
  h[k.to_sym] = v
154
164
  }
@@ -213,9 +223,17 @@ module Zernio
213
223
  self.negative = attributes[:'negative']
214
224
  end
215
225
 
226
+ if attributes.key?(:'quality_score')
227
+ self.quality_score = attributes[:'quality_score']
228
+ end
229
+
216
230
  if attributes.key?(:'synced_at')
217
231
  self.synced_at = attributes[:'synced_at']
218
232
  end
233
+
234
+ if attributes.key?(:'metrics')
235
+ self.metrics = attributes[:'metrics']
236
+ end
219
237
  end
220
238
 
221
239
  # Show invalid properties with the reasons. Usually used together with valid?
@@ -289,7 +307,9 @@ module Zernio
289
307
  match_type == o.match_type &&
290
308
  status == o.status &&
291
309
  negative == o.negative &&
292
- synced_at == o.synced_at
310
+ quality_score == o.quality_score &&
311
+ synced_at == o.synced_at &&
312
+ metrics == o.metrics
293
313
  end
294
314
 
295
315
  # @see the `==` method
@@ -301,7 +321,7 @@ module Zernio
301
321
  # Calculates hash code according to all attributes.
302
322
  # @return [Integer] Hash code
303
323
  def hash
304
- [id, account_id, profile_id, platform, ad_account_id, campaign_id, campaign_name, campaign_status, ad_set_id, ad_set_name, ad_set_status, keyword, match_type, status, negative, synced_at].hash
324
+ [id, account_id, profile_id, platform, ad_account_id, campaign_id, campaign_name, campaign_status, ad_set_id, ad_set_name, ad_set_status, keyword, match_type, status, negative, quality_score, synced_at, metrics].hash
305
325
  end
306
326
 
307
327
  # Builds the object from hash
@@ -0,0 +1,207 @@
1
+ =begin
2
+ #Zernio API
3
+
4
+ #API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api Versioning and deprecation: all endpoints are versioned in the URL path (current version: /v1). Breaking changes only ship in a new path version; existing versions keep working. Deprecated operations are marked 'deprecated: true' in this spec and announced in the changelog (https://zernio.com/changelog) before removal. Errors: every 4xx/5xx response is application/json with a machine-readable 'code' and a human-readable 'error' message (see the ErrorResponse schema).
5
+
6
+ The version of the OpenAPI document: 1.0.4
7
+ Contact: support@zernio.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module Zernio
17
+ # Trailing 30-day window. Null on rows synced before the metrics columns existed (re-synced on the keyword's next weekly sweep).
18
+ class AdKeywordMetrics < ApiModelBase
19
+ attr_accessor :window_days
20
+
21
+ attr_accessor :clicks
22
+
23
+ attr_accessor :impressions
24
+
25
+ # Account currency, not USD-normalized
26
+ attr_accessor :cost
27
+
28
+ attr_accessor :conversions
29
+
30
+ # Account currency
31
+ attr_accessor :first_page_cpc
32
+
33
+ # Account currency
34
+ attr_accessor :first_position_cpc
35
+
36
+ # Attribute mapping from ruby-style variable name to JSON key.
37
+ def self.attribute_map
38
+ {
39
+ :'window_days' => :'windowDays',
40
+ :'clicks' => :'clicks',
41
+ :'impressions' => :'impressions',
42
+ :'cost' => :'cost',
43
+ :'conversions' => :'conversions',
44
+ :'first_page_cpc' => :'firstPageCpc',
45
+ :'first_position_cpc' => :'firstPositionCpc'
46
+ }
47
+ end
48
+
49
+ # Returns attribute mapping this model knows about
50
+ def self.acceptable_attribute_map
51
+ attribute_map
52
+ end
53
+
54
+ # Returns all the JSON keys this model knows about
55
+ def self.acceptable_attributes
56
+ acceptable_attribute_map.values
57
+ end
58
+
59
+ # Attribute type mapping.
60
+ def self.openapi_types
61
+ {
62
+ :'window_days' => :'Integer',
63
+ :'clicks' => :'Integer',
64
+ :'impressions' => :'Integer',
65
+ :'cost' => :'Float',
66
+ :'conversions' => :'Float',
67
+ :'first_page_cpc' => :'Float',
68
+ :'first_position_cpc' => :'Float'
69
+ }
70
+ end
71
+
72
+ # List of attributes with nullable: true
73
+ def self.openapi_nullable
74
+ Set.new([
75
+ :'first_page_cpc',
76
+ :'first_position_cpc'
77
+ ])
78
+ end
79
+
80
+ # Initializes the object
81
+ # @param [Hash] attributes Model attributes in the form of hash
82
+ def initialize(attributes = {})
83
+ if (!attributes.is_a?(Hash))
84
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Zernio::AdKeywordMetrics` initialize method"
85
+ end
86
+
87
+ # check to see if the attribute exists and convert string to symbol for hash key
88
+ acceptable_attribute_map = self.class.acceptable_attribute_map
89
+ attributes = attributes.each_with_object({}) { |(k, v), h|
90
+ if (!acceptable_attribute_map.key?(k.to_sym))
91
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Zernio::AdKeywordMetrics`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
92
+ end
93
+ h[k.to_sym] = v
94
+ }
95
+
96
+ if attributes.key?(:'window_days')
97
+ self.window_days = attributes[:'window_days']
98
+ end
99
+
100
+ if attributes.key?(:'clicks')
101
+ self.clicks = attributes[:'clicks']
102
+ end
103
+
104
+ if attributes.key?(:'impressions')
105
+ self.impressions = attributes[:'impressions']
106
+ end
107
+
108
+ if attributes.key?(:'cost')
109
+ self.cost = attributes[:'cost']
110
+ end
111
+
112
+ if attributes.key?(:'conversions')
113
+ self.conversions = attributes[:'conversions']
114
+ end
115
+
116
+ if attributes.key?(:'first_page_cpc')
117
+ self.first_page_cpc = attributes[:'first_page_cpc']
118
+ end
119
+
120
+ if attributes.key?(:'first_position_cpc')
121
+ self.first_position_cpc = attributes[:'first_position_cpc']
122
+ end
123
+ end
124
+
125
+ # Show invalid properties with the reasons. Usually used together with valid?
126
+ # @return Array for valid properties with the reasons
127
+ def list_invalid_properties
128
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
129
+ invalid_properties = Array.new
130
+ invalid_properties
131
+ end
132
+
133
+ # Check to see if the all the properties in the model are valid
134
+ # @return true if the model is valid
135
+ def valid?
136
+ warn '[DEPRECATED] the `valid?` method is obsolete'
137
+ true
138
+ end
139
+
140
+ # Checks equality by comparing each attribute.
141
+ # @param [Object] Object to be compared
142
+ def ==(o)
143
+ return true if self.equal?(o)
144
+ self.class == o.class &&
145
+ window_days == o.window_days &&
146
+ clicks == o.clicks &&
147
+ impressions == o.impressions &&
148
+ cost == o.cost &&
149
+ conversions == o.conversions &&
150
+ first_page_cpc == o.first_page_cpc &&
151
+ first_position_cpc == o.first_position_cpc
152
+ end
153
+
154
+ # @see the `==` method
155
+ # @param [Object] Object to be compared
156
+ def eql?(o)
157
+ self == o
158
+ end
159
+
160
+ # Calculates hash code according to all attributes.
161
+ # @return [Integer] Hash code
162
+ def hash
163
+ [window_days, clicks, impressions, cost, conversions, first_page_cpc, first_position_cpc].hash
164
+ end
165
+
166
+ # Builds the object from hash
167
+ # @param [Hash] attributes Model attributes in the form of hash
168
+ # @return [Object] Returns the model itself
169
+ def self.build_from_hash(attributes)
170
+ return nil unless attributes.is_a?(Hash)
171
+ attributes = attributes.transform_keys(&:to_sym)
172
+ transformed_hash = {}
173
+ openapi_types.each_pair do |key, type|
174
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
175
+ transformed_hash["#{key}"] = nil
176
+ elsif type =~ /\AArray<(.*)>/i
177
+ # check to ensure the input is an array given that the attribute
178
+ # is documented as an array but the input is not
179
+ if attributes[attribute_map[key]].is_a?(Array)
180
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
181
+ end
182
+ elsif !attributes[attribute_map[key]].nil?
183
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
184
+ end
185
+ end
186
+ new(transformed_hash)
187
+ end
188
+
189
+ # Returns the object in the form of hash
190
+ # @return [Hash] Returns the object in the form of hash
191
+ def to_hash
192
+ hash = {}
193
+ self.class.attribute_map.each_pair do |attr, param|
194
+ value = self.send(attr)
195
+ if value.nil?
196
+ is_nullable = self.class.openapi_nullable.include?(attr)
197
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
198
+ end
199
+
200
+ hash[param] = _to_hash(value)
201
+ end
202
+ hash
203
+ end
204
+
205
+ end
206
+
207
+ end
@@ -0,0 +1,149 @@
1
+ =begin
2
+ #Zernio API
3
+
4
+ #API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api Versioning and deprecation: all endpoints are versioned in the URL path (current version: /v1). Breaking changes only ship in a new path version; existing versions keep working. Deprecated operations are marked 'deprecated: true' in this spec and announced in the changelog (https://zernio.com/changelog) before removal. Errors: every 4xx/5xx response is application/json with a machine-readable 'code' and a human-readable 'error' message (see the ErrorResponse schema).
5
+
6
+ The version of the OpenAPI document: 1.0.4
7
+ Contact: support@zernio.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module Zernio
17
+ class AddAdKeywords201Response < ApiModelBase
18
+ attr_accessor :keywords
19
+
20
+ # Attribute mapping from ruby-style variable name to JSON key.
21
+ def self.attribute_map
22
+ {
23
+ :'keywords' => :'keywords'
24
+ }
25
+ end
26
+
27
+ # Returns attribute mapping this model knows about
28
+ def self.acceptable_attribute_map
29
+ attribute_map
30
+ end
31
+
32
+ # Returns all the JSON keys this model knows about
33
+ def self.acceptable_attributes
34
+ acceptable_attribute_map.values
35
+ end
36
+
37
+ # Attribute type mapping.
38
+ def self.openapi_types
39
+ {
40
+ :'keywords' => :'Array<AdKeyword>'
41
+ }
42
+ end
43
+
44
+ # List of attributes with nullable: true
45
+ def self.openapi_nullable
46
+ Set.new([
47
+ ])
48
+ end
49
+
50
+ # Initializes the object
51
+ # @param [Hash] attributes Model attributes in the form of hash
52
+ def initialize(attributes = {})
53
+ if (!attributes.is_a?(Hash))
54
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Zernio::AddAdKeywords201Response` initialize method"
55
+ end
56
+
57
+ # check to see if the attribute exists and convert string to symbol for hash key
58
+ acceptable_attribute_map = self.class.acceptable_attribute_map
59
+ attributes = attributes.each_with_object({}) { |(k, v), h|
60
+ if (!acceptable_attribute_map.key?(k.to_sym))
61
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Zernio::AddAdKeywords201Response`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
62
+ end
63
+ h[k.to_sym] = v
64
+ }
65
+
66
+ if attributes.key?(:'keywords')
67
+ if (value = attributes[:'keywords']).is_a?(Array)
68
+ self.keywords = value
69
+ end
70
+ end
71
+ end
72
+
73
+ # Show invalid properties with the reasons. Usually used together with valid?
74
+ # @return Array for valid properties with the reasons
75
+ def list_invalid_properties
76
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
77
+ invalid_properties = Array.new
78
+ invalid_properties
79
+ end
80
+
81
+ # Check to see if the all the properties in the model are valid
82
+ # @return true if the model is valid
83
+ def valid?
84
+ warn '[DEPRECATED] the `valid?` method is obsolete'
85
+ true
86
+ end
87
+
88
+ # Checks equality by comparing each attribute.
89
+ # @param [Object] Object to be compared
90
+ def ==(o)
91
+ return true if self.equal?(o)
92
+ self.class == o.class &&
93
+ keywords == o.keywords
94
+ end
95
+
96
+ # @see the `==` method
97
+ # @param [Object] Object to be compared
98
+ def eql?(o)
99
+ self == o
100
+ end
101
+
102
+ # Calculates hash code according to all attributes.
103
+ # @return [Integer] Hash code
104
+ def hash
105
+ [keywords].hash
106
+ end
107
+
108
+ # Builds the object from hash
109
+ # @param [Hash] attributes Model attributes in the form of hash
110
+ # @return [Object] Returns the model itself
111
+ def self.build_from_hash(attributes)
112
+ return nil unless attributes.is_a?(Hash)
113
+ attributes = attributes.transform_keys(&:to_sym)
114
+ transformed_hash = {}
115
+ openapi_types.each_pair do |key, type|
116
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
117
+ transformed_hash["#{key}"] = nil
118
+ elsif type =~ /\AArray<(.*)>/i
119
+ # check to ensure the input is an array given that the attribute
120
+ # is documented as an array but the input is not
121
+ if attributes[attribute_map[key]].is_a?(Array)
122
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
123
+ end
124
+ elsif !attributes[attribute_map[key]].nil?
125
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
126
+ end
127
+ end
128
+ new(transformed_hash)
129
+ end
130
+
131
+ # Returns the object in the form of hash
132
+ # @return [Hash] Returns the object in the form of hash
133
+ def to_hash
134
+ hash = {}
135
+ self.class.attribute_map.each_pair do |attr, param|
136
+ value = self.send(attr)
137
+ if value.nil?
138
+ is_nullable = self.class.openapi_nullable.include?(attr)
139
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
140
+ end
141
+
142
+ hash[param] = _to_hash(value)
143
+ end
144
+ hash
145
+ end
146
+
147
+ end
148
+
149
+ end