late-sdk 0.0.82 → 0.0.84

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.
@@ -0,0 +1,272 @@
1
+ =begin
2
+ #Zernio API
3
+
4
+ #API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api
5
+
6
+ The version of the OpenAPI document: 1.0.1
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 Late
17
+ class UpdatePostMetadataRequest < ApiModelBase
18
+ # The platform to update metadata on
19
+ attr_accessor :platform
20
+
21
+ # New video title (max 100 characters for YouTube)
22
+ attr_accessor :title
23
+
24
+ # New video description
25
+ attr_accessor :description
26
+
27
+ # Array of keyword tags (max 500 characters combined for YouTube)
28
+ attr_accessor :tags
29
+
30
+ # YouTube video category ID
31
+ attr_accessor :category_id
32
+
33
+ # Video privacy setting
34
+ attr_accessor :privacy_status
35
+
36
+ class EnumAttributeValidator
37
+ attr_reader :datatype
38
+ attr_reader :allowable_values
39
+
40
+ def initialize(datatype, allowable_values)
41
+ @allowable_values = allowable_values.map do |value|
42
+ case datatype.to_s
43
+ when /Integer/i
44
+ value.to_i
45
+ when /Float/i
46
+ value.to_f
47
+ else
48
+ value
49
+ end
50
+ end
51
+ end
52
+
53
+ def valid?(value)
54
+ !value || allowable_values.include?(value)
55
+ end
56
+ end
57
+
58
+ # Attribute mapping from ruby-style variable name to JSON key.
59
+ def self.attribute_map
60
+ {
61
+ :'platform' => :'platform',
62
+ :'title' => :'title',
63
+ :'description' => :'description',
64
+ :'tags' => :'tags',
65
+ :'category_id' => :'categoryId',
66
+ :'privacy_status' => :'privacyStatus'
67
+ }
68
+ end
69
+
70
+ # Returns attribute mapping this model knows about
71
+ def self.acceptable_attribute_map
72
+ attribute_map
73
+ end
74
+
75
+ # Returns all the JSON keys this model knows about
76
+ def self.acceptable_attributes
77
+ acceptable_attribute_map.values
78
+ end
79
+
80
+ # Attribute type mapping.
81
+ def self.openapi_types
82
+ {
83
+ :'platform' => :'String',
84
+ :'title' => :'String',
85
+ :'description' => :'String',
86
+ :'tags' => :'Array<String>',
87
+ :'category_id' => :'String',
88
+ :'privacy_status' => :'String'
89
+ }
90
+ end
91
+
92
+ # List of attributes with nullable: true
93
+ def self.openapi_nullable
94
+ Set.new([
95
+ ])
96
+ end
97
+
98
+ # Initializes the object
99
+ # @param [Hash] attributes Model attributes in the form of hash
100
+ def initialize(attributes = {})
101
+ if (!attributes.is_a?(Hash))
102
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Late::UpdatePostMetadataRequest` initialize method"
103
+ end
104
+
105
+ # check to see if the attribute exists and convert string to symbol for hash key
106
+ acceptable_attribute_map = self.class.acceptable_attribute_map
107
+ attributes = attributes.each_with_object({}) { |(k, v), h|
108
+ if (!acceptable_attribute_map.key?(k.to_sym))
109
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Late::UpdatePostMetadataRequest`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
110
+ end
111
+ h[k.to_sym] = v
112
+ }
113
+
114
+ if attributes.key?(:'platform')
115
+ self.platform = attributes[:'platform']
116
+ else
117
+ self.platform = nil
118
+ end
119
+
120
+ if attributes.key?(:'title')
121
+ self.title = attributes[:'title']
122
+ end
123
+
124
+ if attributes.key?(:'description')
125
+ self.description = attributes[:'description']
126
+ end
127
+
128
+ if attributes.key?(:'tags')
129
+ if (value = attributes[:'tags']).is_a?(Array)
130
+ self.tags = value
131
+ end
132
+ end
133
+
134
+ if attributes.key?(:'category_id')
135
+ self.category_id = attributes[:'category_id']
136
+ end
137
+
138
+ if attributes.key?(:'privacy_status')
139
+ self.privacy_status = attributes[:'privacy_status']
140
+ end
141
+ end
142
+
143
+ # Show invalid properties with the reasons. Usually used together with valid?
144
+ # @return Array for valid properties with the reasons
145
+ def list_invalid_properties
146
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
147
+ invalid_properties = Array.new
148
+ if @platform.nil?
149
+ invalid_properties.push('invalid value for "platform", platform cannot be nil.')
150
+ end
151
+
152
+ if !@title.nil? && @title.to_s.length > 100
153
+ invalid_properties.push('invalid value for "title", the character length must be smaller than or equal to 100.')
154
+ end
155
+
156
+ invalid_properties
157
+ end
158
+
159
+ # Check to see if the all the properties in the model are valid
160
+ # @return true if the model is valid
161
+ def valid?
162
+ warn '[DEPRECATED] the `valid?` method is obsolete'
163
+ return false if @platform.nil?
164
+ platform_validator = EnumAttributeValidator.new('String', ["youtube"])
165
+ return false unless platform_validator.valid?(@platform)
166
+ return false if !@title.nil? && @title.to_s.length > 100
167
+ privacy_status_validator = EnumAttributeValidator.new('String', ["public", "private", "unlisted"])
168
+ return false unless privacy_status_validator.valid?(@privacy_status)
169
+ true
170
+ end
171
+
172
+ # Custom attribute writer method checking allowed values (enum).
173
+ # @param [Object] platform Object to be assigned
174
+ def platform=(platform)
175
+ validator = EnumAttributeValidator.new('String', ["youtube"])
176
+ unless validator.valid?(platform)
177
+ fail ArgumentError, "invalid value for \"platform\", must be one of #{validator.allowable_values}."
178
+ end
179
+ @platform = platform
180
+ end
181
+
182
+ # Custom attribute writer method with validation
183
+ # @param [Object] title Value to be assigned
184
+ def title=(title)
185
+ if title.nil?
186
+ fail ArgumentError, 'title cannot be nil'
187
+ end
188
+
189
+ if title.to_s.length > 100
190
+ fail ArgumentError, 'invalid value for "title", the character length must be smaller than or equal to 100.'
191
+ end
192
+
193
+ @title = title
194
+ end
195
+
196
+ # Custom attribute writer method checking allowed values (enum).
197
+ # @param [Object] privacy_status Object to be assigned
198
+ def privacy_status=(privacy_status)
199
+ validator = EnumAttributeValidator.new('String', ["public", "private", "unlisted"])
200
+ unless validator.valid?(privacy_status)
201
+ fail ArgumentError, "invalid value for \"privacy_status\", must be one of #{validator.allowable_values}."
202
+ end
203
+ @privacy_status = privacy_status
204
+ end
205
+
206
+ # Checks equality by comparing each attribute.
207
+ # @param [Object] Object to be compared
208
+ def ==(o)
209
+ return true if self.equal?(o)
210
+ self.class == o.class &&
211
+ platform == o.platform &&
212
+ title == o.title &&
213
+ description == o.description &&
214
+ tags == o.tags &&
215
+ category_id == o.category_id &&
216
+ privacy_status == o.privacy_status
217
+ end
218
+
219
+ # @see the `==` method
220
+ # @param [Object] Object to be compared
221
+ def eql?(o)
222
+ self == o
223
+ end
224
+
225
+ # Calculates hash code according to all attributes.
226
+ # @return [Integer] Hash code
227
+ def hash
228
+ [platform, title, description, tags, category_id, privacy_status].hash
229
+ end
230
+
231
+ # Builds the object from hash
232
+ # @param [Hash] attributes Model attributes in the form of hash
233
+ # @return [Object] Returns the model itself
234
+ def self.build_from_hash(attributes)
235
+ return nil unless attributes.is_a?(Hash)
236
+ attributes = attributes.transform_keys(&:to_sym)
237
+ transformed_hash = {}
238
+ openapi_types.each_pair do |key, type|
239
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
240
+ transformed_hash["#{key}"] = nil
241
+ elsif type =~ /\AArray<(.*)>/i
242
+ # check to ensure the input is an array given that the attribute
243
+ # is documented as an array but the input is not
244
+ if attributes[attribute_map[key]].is_a?(Array)
245
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
246
+ end
247
+ elsif !attributes[attribute_map[key]].nil?
248
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
249
+ end
250
+ end
251
+ new(transformed_hash)
252
+ end
253
+
254
+ # Returns the object in the form of hash
255
+ # @return [Hash] Returns the object in the form of hash
256
+ def to_hash
257
+ hash = {}
258
+ self.class.attribute_map.each_pair do |attr, param|
259
+ value = self.send(attr)
260
+ if value.nil?
261
+ is_nullable = self.class.openapi_nullable.include?(attr)
262
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
263
+ end
264
+
265
+ hash[param] = _to_hash(value)
266
+ end
267
+ hash
268
+ end
269
+
270
+ end
271
+
272
+ end
@@ -11,5 +11,5 @@ Generator version: 7.19.0
11
11
  =end
12
12
 
13
13
  module Late
14
- VERSION = '0.0.82'
14
+ VERSION = '0.0.84'
15
15
  end
data/lib/late-sdk.rb CHANGED
@@ -592,6 +592,8 @@ require 'late-sdk/models/update_inbox_conversation200_response_data'
592
592
  require 'late-sdk/models/update_inbox_conversation_request'
593
593
  require 'late-sdk/models/update_linked_in_organization_request'
594
594
  require 'late-sdk/models/update_pinterest_boards_request'
595
+ require 'late-sdk/models/update_post_metadata200_response'
596
+ require 'late-sdk/models/update_post_metadata_request'
595
597
  require 'late-sdk/models/update_post_request'
596
598
  require 'late-sdk/models/update_profile200_response'
597
599
  require 'late-sdk/models/update_profile_request'
data/openapi.yaml CHANGED
@@ -1934,7 +1934,7 @@ components:
1934
1934
  type: object
1935
1935
  properties:
1936
1936
  postId: { type: string }
1937
- latePostId: { type: string, nullable: true, description: 'Original Late post ID if scheduled via Late' }
1937
+ latePostId: { type: string, nullable: true, description: 'Original Zernio post ID if scheduled via Zernio' }
1938
1938
  status: { type: string, enum: [published, failed, partial], description: 'Overall post status. "partial" when some platforms published and others failed.' }
1939
1939
  content: { type: string }
1940
1940
  scheduledFor: { type: string, format: date-time }
@@ -1972,7 +1972,7 @@ components:
1972
1972
  type: object
1973
1973
  properties:
1974
1974
  _id: { type: string }
1975
- latePostId: { type: string, nullable: true, description: 'Original Late post ID if scheduled via Late' }
1975
+ latePostId: { type: string, nullable: true, description: 'Original Zernio post ID if scheduled via Zernio' }
1976
1976
  content: { type: string }
1977
1977
  scheduledFor: { type: string, format: date-time }
1978
1978
  publishedAt: { type: string, format: date-time }
@@ -3135,7 +3135,7 @@ paths:
3135
3135
  - $ref: '#/components/schemas/AnalyticsListResponse'
3136
3136
  examples:
3137
3137
  singlePost:
3138
- summary: Single post analytics (Late post with synced analytics)
3138
+ summary: Single post analytics (Zernio post with synced analytics)
3139
3139
  value:
3140
3140
  postId: "65f1c0a9e2b5af0012ab34cd"
3141
3141
  latePostId: null
@@ -5360,6 +5360,83 @@ paths:
5360
5360
  '404': { $ref: '#/components/responses/NotFound' }
5361
5361
  '500':
5362
5362
  description: Platform API deletion failed
5363
+ /v1/posts/{postId}/update-metadata:
5364
+ post:
5365
+ operationId: updatePostMetadata
5366
+ tags: [Posts]
5367
+ summary: Update post metadata
5368
+ description: |
5369
+ Updates metadata of an already-published post on the specified platform without re-uploading the media.
5370
+ Currently only supported for YouTube videos (title, description, tags, category, privacy status).
5371
+ The post must have "published" status on the target platform. At least one updatable field is required.
5372
+ parameters:
5373
+ - name: postId
5374
+ in: path
5375
+ required: true
5376
+ schema: { type: string }
5377
+ requestBody:
5378
+ required: true
5379
+ content:
5380
+ application/json:
5381
+ schema:
5382
+ type: object
5383
+ required: [platform]
5384
+ properties:
5385
+ platform:
5386
+ type: string
5387
+ description: The platform to update metadata on
5388
+ enum:
5389
+ - youtube
5390
+ title:
5391
+ type: string
5392
+ maxLength: 100
5393
+ description: New video title (max 100 characters for YouTube)
5394
+ description:
5395
+ type: string
5396
+ description: New video description
5397
+ tags:
5398
+ type: array
5399
+ items:
5400
+ type: string
5401
+ maxLength: 100
5402
+ description: Array of keyword tags (max 500 characters combined for YouTube)
5403
+ categoryId:
5404
+ type: string
5405
+ description: YouTube video category ID
5406
+ privacyStatus:
5407
+ type: string
5408
+ enum: [public, private, unlisted]
5409
+ description: Video privacy setting
5410
+ example:
5411
+ platform: "youtube"
5412
+ title: "Updated Video Title"
5413
+ description: "New SEO-optimized description"
5414
+ tags: ["seo", "marketing", "tutorial"]
5415
+ responses:
5416
+ '200':
5417
+ description: Metadata updated successfully
5418
+ content:
5419
+ application/json:
5420
+ schema:
5421
+ type: object
5422
+ properties:
5423
+ success: { type: boolean }
5424
+ message: { type: string }
5425
+ updatedFields:
5426
+ type: array
5427
+ items: { type: string }
5428
+ example:
5429
+ success: true
5430
+ message: "Video metadata updated on youtube successfully"
5431
+ updatedFields: ["title", "description", "tags"]
5432
+ '400':
5433
+ description: "Invalid request: unsupported platform, post not published, missing fields, or validation error."
5434
+ '401': { $ref: '#/components/responses/Unauthorized' }
5435
+ '403':
5436
+ description: Forbidden
5437
+ '404': { $ref: '#/components/responses/NotFound' }
5438
+ '500':
5439
+ description: Platform API update failed
5363
5440
  /v1/users:
5364
5441
  get:
5365
5442
  operationId: listUsers
@@ -8500,7 +8577,7 @@ paths:
8500
8577
  properties:
8501
8578
  profileId:
8502
8579
  type: string
8503
- description: Your Late profile ID
8580
+ description: Your Zernio profile ID
8504
8581
  accessToken:
8505
8582
  type: string
8506
8583
  description: Permanent System User access token from Meta Business Suite
@@ -141,4 +141,17 @@ describe 'PostsApi' do
141
141
  end
142
142
  end
143
143
 
144
+ # unit tests for update_post_metadata
145
+ # Update post metadata
146
+ # Updates metadata of an already-published post on the specified platform without re-uploading the media. Currently only supported for YouTube videos (title, description, tags, category, privacy status). The post must have \&quot;published\&quot; status on the target platform. At least one updatable field is required.
147
+ # @param post_id
148
+ # @param update_post_metadata_request
149
+ # @param [Hash] opts the optional parameters
150
+ # @return [UpdatePostMetadata200Response]
151
+ describe 'update_post_metadata test' do
152
+ it 'should work' do
153
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
154
+ end
155
+ end
156
+
144
157
  end
@@ -0,0 +1,48 @@
1
+ =begin
2
+ #Zernio API
3
+
4
+ #API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api
5
+
6
+ The version of the OpenAPI document: 1.0.1
7
+ Contact: support@zernio.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'spec_helper'
14
+ require 'json'
15
+ require 'date'
16
+
17
+ # Unit tests for Late::UpdatePostMetadata200Response
18
+ # Automatically generated by openapi-generator (https://openapi-generator.tech)
19
+ # Please update as you see appropriate
20
+ describe Late::UpdatePostMetadata200Response do
21
+ #let(:instance) { Late::UpdatePostMetadata200Response.new }
22
+
23
+ describe 'test an instance of UpdatePostMetadata200Response' do
24
+ it 'should create an instance of UpdatePostMetadata200Response' do
25
+ # uncomment below to test the instance creation
26
+ #expect(instance).to be_instance_of(Late::UpdatePostMetadata200Response)
27
+ end
28
+ end
29
+
30
+ describe 'test attribute "success"' do
31
+ it 'should work' do
32
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
33
+ end
34
+ end
35
+
36
+ describe 'test attribute "message"' do
37
+ it 'should work' do
38
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
39
+ end
40
+ end
41
+
42
+ describe 'test attribute "updated_fields"' do
43
+ it 'should work' do
44
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
45
+ end
46
+ end
47
+
48
+ end
@@ -0,0 +1,74 @@
1
+ =begin
2
+ #Zernio API
3
+
4
+ #API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api
5
+
6
+ The version of the OpenAPI document: 1.0.1
7
+ Contact: support@zernio.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'spec_helper'
14
+ require 'json'
15
+ require 'date'
16
+
17
+ # Unit tests for Late::UpdatePostMetadataRequest
18
+ # Automatically generated by openapi-generator (https://openapi-generator.tech)
19
+ # Please update as you see appropriate
20
+ describe Late::UpdatePostMetadataRequest do
21
+ #let(:instance) { Late::UpdatePostMetadataRequest.new }
22
+
23
+ describe 'test an instance of UpdatePostMetadataRequest' do
24
+ it 'should create an instance of UpdatePostMetadataRequest' do
25
+ # uncomment below to test the instance creation
26
+ #expect(instance).to be_instance_of(Late::UpdatePostMetadataRequest)
27
+ end
28
+ end
29
+
30
+ describe 'test attribute "platform"' do
31
+ it 'should work' do
32
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
33
+ # validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["youtube"])
34
+ # validator.allowable_values.each do |value|
35
+ # expect { instance.platform = value }.not_to raise_error
36
+ # end
37
+ end
38
+ end
39
+
40
+ describe 'test attribute "title"' do
41
+ it 'should work' do
42
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
43
+ end
44
+ end
45
+
46
+ describe 'test attribute "description"' do
47
+ it 'should work' do
48
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
49
+ end
50
+ end
51
+
52
+ describe 'test attribute "tags"' do
53
+ it 'should work' do
54
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
55
+ end
56
+ end
57
+
58
+ describe 'test attribute "category_id"' do
59
+ it 'should work' do
60
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
61
+ end
62
+ end
63
+
64
+ describe 'test attribute "privacy_status"' do
65
+ it 'should work' do
66
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
67
+ # validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["public", "private", "unlisted"])
68
+ # validator.allowable_values.each do |value|
69
+ # expect { instance.privacy_status = value }.not_to raise_error
70
+ # end
71
+ end
72
+ end
73
+
74
+ end
Binary file