late-sdk 0.0.712 → 0.0.713
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.
- checksums.yaml +4 -4
- data/README.md +2 -0
- data/docs/AdCampaignsApi.md +1 -1
- data/docs/CreateStandaloneAdRequest.md +3 -1
- data/docs/UpdateAdRequestTargeting.md +4 -0
- data/docs/UpdateAdRequestTargetingKeywordsInner.md +49 -0
- data/docs/UpdateAdRequestTargetingKeywordsInnerOneOf.md +20 -0
- data/lib/zernio-sdk/api/ad_campaigns_api.rb +2 -2
- data/lib/zernio-sdk/models/create_standalone_ad_request.rb +14 -2
- data/lib/zernio-sdk/models/update_ad_request_targeting.rb +26 -2
- data/lib/zernio-sdk/models/update_ad_request_targeting_keywords_inner.rb +104 -0
- data/lib/zernio-sdk/models/update_ad_request_targeting_keywords_inner_one_of.rb +216 -0
- data/lib/zernio-sdk/version.rb +1 -1
- data/lib/zernio-sdk.rb +2 -0
- data/openapi.yaml +24 -3
- data/spec/api/ad_campaigns_api_spec.rb +1 -1
- data/spec/models/create_standalone_ad_request_spec.rb +6 -0
- data/spec/models/update_ad_request_targeting_keywords_inner_one_of_spec.rb +46 -0
- data/spec/models/update_ad_request_targeting_keywords_inner_spec.rb +32 -0
- data/spec/models/update_ad_request_targeting_spec.rb +12 -0
- data/zernio-sdk-0.0.713.gem +0 -0
- metadata +10 -2
- data/zernio-sdk-0.0.712.gem +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 703c1ee72b50525532fe3bb4cf4fd913c54fe744716dee6049caf65df8399197
|
|
4
|
+
data.tar.gz: '0974a8f4104db93718fb7cc07d22e0f5c1f597a92fae31afad7d2aad686eb94b'
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1b7916c0259740e78ab6b594b6b9aa60934fdc8ff0c569581b66609c22461324b414edee01340893fd35486998fb6487725f0909ac7faf346149e1d8e56a5d26
|
|
7
|
+
data.tar.gz: 4a98a2cf187b820711d948905e30bd799eddbffc2d60af331bb17c142a50e4612beefccd7160b3ec8daf45cbe1002526bc035da1658295589640adf8e9abfaf8
|
data/README.md
CHANGED
|
@@ -1956,6 +1956,8 @@ Class | Method | HTTP request | Description
|
|
|
1956
1956
|
- [Zernio::UpdateAdRequestCreative](docs/UpdateAdRequestCreative.md)
|
|
1957
1957
|
- [Zernio::UpdateAdRequestTargeting](docs/UpdateAdRequestTargeting.md)
|
|
1958
1958
|
- [Zernio::UpdateAdRequestTargetingInterestsInner](docs/UpdateAdRequestTargetingInterestsInner.md)
|
|
1959
|
+
- [Zernio::UpdateAdRequestTargetingKeywordsInner](docs/UpdateAdRequestTargetingKeywordsInner.md)
|
|
1960
|
+
- [Zernio::UpdateAdRequestTargetingKeywordsInnerOneOf](docs/UpdateAdRequestTargetingKeywordsInnerOneOf.md)
|
|
1959
1961
|
- [Zernio::UpdateAdSet200Response](docs/UpdateAdSet200Response.md)
|
|
1960
1962
|
- [Zernio::UpdateAdSetRequest](docs/UpdateAdSetRequest.md)
|
|
1961
1963
|
- [Zernio::UpdateAdSetRequestBudget](docs/UpdateAdSetRequestBudget.md)
|
data/docs/AdCampaignsApi.md
CHANGED
|
@@ -1288,7 +1288,7 @@ end
|
|
|
1288
1288
|
|
|
1289
1289
|
Update ad
|
|
1290
1290
|
|
|
1291
|
-
Patch one or more fields on an ad. Status, budget, targeting, and creative changes are propagated to the platform. Per-platform support: - **Meta** (Facebook + Instagram): all fields supported. - **TikTok**: status, budget, targeting (via `/v2/adgroup/update/`), and creative (via `/v2/ad/update/` patch-style — `headline` is ignored, `body` becomes `ad_text`). - **Pinterest / X / LinkedIn /
|
|
1291
|
+
Patch one or more fields on an ad. Status, budget, targeting, and creative changes are propagated to the platform. Per-platform support: - **Meta** (Facebook + Instagram): all fields supported. - **TikTok**: status, budget, targeting (via `/v2/adgroup/update/`), and creative (via `/v2/ad/update/` patch-style — `headline` is ignored, `body` becomes `ad_text`). - **Google**: status, budget, and KEYWORD edits via `targeting.keywords` / `targeting.negativeKeywords` — each list you send becomes the FULL new set of its kind on the ad group (criteria not in the list are removed); a kind left out is untouched. Any other `targeting` field returns 400: Google cannot mutate broad targeting post-create without recreating the campaign. `creative` returns 501. - **Pinterest / X / LinkedIn / OpenAI Ads**: status + budget only. Sending `targeting` or `creative` returns 501 with code `unsupported_platform_operation`. OpenAI Ads budget is lifetime-only (see `budget.type` below).
|
|
1292
1292
|
|
|
1293
1293
|
### Examples
|
|
1294
1294
|
|
|
@@ -69,7 +69,8 @@
|
|
|
69
69
|
| **placement_assets** | [**CreateStandaloneAdRequestPlacementAssets**](CreateStandaloneAdRequestPlacementAssets.md) | | [optional] |
|
|
70
70
|
| **audience_id** | **String** | Custom audience ID for targeting | [optional] |
|
|
71
71
|
| **campaign_type** | **String** | Google only | [optional][default to 'display'] |
|
|
72
|
-
| **keywords** | **Array<String>** | Google Search only | [optional] |
|
|
72
|
+
| **keywords** | **Array<String>** | Google Search only. BROAD-match keywords on the new ad group (first 20). | [optional] |
|
|
73
|
+
| **negative_keywords** | **Array<String>** | Google Search only; other platforms return 400. BROAD-match negative keywords on the new ad group. Editable later via PUT /v1/ads/{adId} targeting.negativeKeywords. | [optional] |
|
|
73
74
|
| **additional_headlines** | **Array<String>** | Google Search RSA only. Extra headlines. | [optional] |
|
|
74
75
|
| **additional_descriptions** | **Array<String>** | Google Search RSA only. Extra descriptions. | [optional] |
|
|
75
76
|
| **advantage_audience** | **Integer** | Meta only. Controls the Advantage audience feature (targeting_automation). 0 = disabled (default), 1 = enabled. Meta Marketing API requires this field on all ad set creation requests. | [optional] |
|
|
@@ -159,6 +160,7 @@ instance = Zernio::CreateStandaloneAdRequest.new(
|
|
|
159
160
|
audience_id: null,
|
|
160
161
|
campaign_type: null,
|
|
161
162
|
keywords: null,
|
|
163
|
+
negative_keywords: null,
|
|
162
164
|
additional_headlines: null,
|
|
163
165
|
additional_descriptions: null,
|
|
164
166
|
advantage_audience: null,
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
| Name | Type | Description | Notes |
|
|
6
6
|
| ---- | ---- | ----------- | ----- |
|
|
7
|
+
| **keywords** | [**Array<UpdateAdRequestTargetingKeywordsInner>**](UpdateAdRequestTargetingKeywordsInner.md) | Google only. The FULL new set of positive keywords for the ad group; live keywords not listed are removed. Entries are strings (BROAD) or { text, matchType } with matchType exact | phrase | broad. Mirrored to GET /v1/ads/keywords immediately. | [optional] |
|
|
8
|
+
| **negative_keywords** | [**Array<UpdateAdRequestTargetingKeywordsInner>**](UpdateAdRequestTargetingKeywordsInner.md) | Google only. Same declarative contract as keywords, for the ad group's negative keywords. | [optional] |
|
|
7
9
|
| **age_min** | **Integer** | | [optional] |
|
|
8
10
|
| **age_max** | **Integer** | | [optional] |
|
|
9
11
|
| **countries** | **Array<String>** | | [optional] |
|
|
@@ -16,6 +18,8 @@
|
|
|
16
18
|
require 'zernio-sdk'
|
|
17
19
|
|
|
18
20
|
instance = Zernio::UpdateAdRequestTargeting.new(
|
|
21
|
+
keywords: null,
|
|
22
|
+
negative_keywords: null,
|
|
19
23
|
age_min: null,
|
|
20
24
|
age_max: null,
|
|
21
25
|
countries: null,
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Zernio::UpdateAdRequestTargetingKeywordsInner
|
|
2
|
+
|
|
3
|
+
## Class instance methods
|
|
4
|
+
|
|
5
|
+
### `openapi_one_of`
|
|
6
|
+
|
|
7
|
+
Returns the list of classes defined in oneOf.
|
|
8
|
+
|
|
9
|
+
#### Example
|
|
10
|
+
|
|
11
|
+
```ruby
|
|
12
|
+
require 'zernio-sdk'
|
|
13
|
+
|
|
14
|
+
Zernio::UpdateAdRequestTargetingKeywordsInner.openapi_one_of
|
|
15
|
+
# =>
|
|
16
|
+
# [
|
|
17
|
+
# :'String',
|
|
18
|
+
# :'UpdateAdRequestTargetingKeywordsInnerOneOf'
|
|
19
|
+
# ]
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### build
|
|
23
|
+
|
|
24
|
+
Find the appropriate object from the `openapi_one_of` list and casts the data into it.
|
|
25
|
+
|
|
26
|
+
#### Example
|
|
27
|
+
|
|
28
|
+
```ruby
|
|
29
|
+
require 'zernio-sdk'
|
|
30
|
+
|
|
31
|
+
Zernio::UpdateAdRequestTargetingKeywordsInner.build(data)
|
|
32
|
+
# => #<String:0x00007fdd4aab02a0>
|
|
33
|
+
|
|
34
|
+
Zernio::UpdateAdRequestTargetingKeywordsInner.build(data_that_doesnt_match)
|
|
35
|
+
# => nil
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
#### Parameters
|
|
39
|
+
|
|
40
|
+
| Name | Type | Description |
|
|
41
|
+
| ---- | ---- | ----------- |
|
|
42
|
+
| **data** | **Mixed** | data to be matched against the list of oneOf items |
|
|
43
|
+
|
|
44
|
+
#### Return type
|
|
45
|
+
|
|
46
|
+
- `String`
|
|
47
|
+
- `UpdateAdRequestTargetingKeywordsInnerOneOf`
|
|
48
|
+
- `nil` (if no type matches)
|
|
49
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Zernio::UpdateAdRequestTargetingKeywordsInnerOneOf
|
|
2
|
+
|
|
3
|
+
## Properties
|
|
4
|
+
|
|
5
|
+
| Name | Type | Description | Notes |
|
|
6
|
+
| ---- | ---- | ----------- | ----- |
|
|
7
|
+
| **text** | **String** | | |
|
|
8
|
+
| **match_type** | **String** | | [optional] |
|
|
9
|
+
|
|
10
|
+
## Example
|
|
11
|
+
|
|
12
|
+
```ruby
|
|
13
|
+
require 'zernio-sdk'
|
|
14
|
+
|
|
15
|
+
instance = Zernio::UpdateAdRequestTargetingKeywordsInnerOneOf.new(
|
|
16
|
+
text: null,
|
|
17
|
+
match_type: null
|
|
18
|
+
)
|
|
19
|
+
```
|
|
20
|
+
|
|
@@ -1381,7 +1381,7 @@ module Zernio
|
|
|
1381
1381
|
end
|
|
1382
1382
|
|
|
1383
1383
|
# Update ad
|
|
1384
|
-
# Patch one or more fields on an ad. Status, budget, targeting, and creative changes are propagated to the platform. Per-platform support: - **Meta** (Facebook + Instagram): all fields supported. - **TikTok**: status, budget, targeting (via `/v2/adgroup/update/`), and creative (via `/v2/ad/update/` patch-style — `headline` is ignored, `body` becomes `ad_text`). - **Pinterest / X / LinkedIn /
|
|
1384
|
+
# Patch one or more fields on an ad. Status, budget, targeting, and creative changes are propagated to the platform. Per-platform support: - **Meta** (Facebook + Instagram): all fields supported. - **TikTok**: status, budget, targeting (via `/v2/adgroup/update/`), and creative (via `/v2/ad/update/` patch-style — `headline` is ignored, `body` becomes `ad_text`). - **Google**: status, budget, and KEYWORD edits via `targeting.keywords` / `targeting.negativeKeywords` — each list you send becomes the FULL new set of its kind on the ad group (criteria not in the list are removed); a kind left out is untouched. Any other `targeting` field returns 400: Google cannot mutate broad targeting post-create without recreating the campaign. `creative` returns 501. - **Pinterest / X / LinkedIn / OpenAI Ads**: status + budget only. Sending `targeting` or `creative` returns 501 with code `unsupported_platform_operation`. OpenAI Ads budget is lifetime-only (see `budget.type` below).
|
|
1385
1385
|
# @param ad_id [String]
|
|
1386
1386
|
# @param update_ad_request [UpdateAdRequest]
|
|
1387
1387
|
# @param [Hash] opts the optional parameters
|
|
@@ -1392,7 +1392,7 @@ module Zernio
|
|
|
1392
1392
|
end
|
|
1393
1393
|
|
|
1394
1394
|
# Update ad
|
|
1395
|
-
# Patch one or more fields on an ad. Status, budget, targeting, and creative changes are propagated to the platform. Per-platform support: - **Meta** (Facebook + Instagram): all fields supported. - **TikTok**: status, budget, targeting (via `/v2/adgroup/update/`), and creative (via `/v2/ad/update/` patch-style — `headline` is ignored, `body` becomes `ad_text`). - **Pinterest / X / LinkedIn /
|
|
1395
|
+
# Patch one or more fields on an ad. Status, budget, targeting, and creative changes are propagated to the platform. Per-platform support: - **Meta** (Facebook + Instagram): all fields supported. - **TikTok**: status, budget, targeting (via `/v2/adgroup/update/`), and creative (via `/v2/ad/update/` patch-style — `headline` is ignored, `body` becomes `ad_text`). - **Google**: status, budget, and KEYWORD edits via `targeting.keywords` / `targeting.negativeKeywords` — each list you send becomes the FULL new set of its kind on the ad group (criteria not in the list are removed); a kind left out is untouched. Any other `targeting` field returns 400: Google cannot mutate broad targeting post-create without recreating the campaign. `creative` returns 501. - **Pinterest / X / LinkedIn / OpenAI Ads**: status + budget only. Sending `targeting` or `creative` returns 501 with code `unsupported_platform_operation`. OpenAI Ads budget is lifetime-only (see `budget.type` below).
|
|
1396
1396
|
# @param ad_id [String]
|
|
1397
1397
|
# @param update_ad_request [UpdateAdRequest]
|
|
1398
1398
|
# @param [Hash] opts the optional parameters
|
|
@@ -198,9 +198,12 @@ module Zernio
|
|
|
198
198
|
# Google only
|
|
199
199
|
attr_accessor :campaign_type
|
|
200
200
|
|
|
201
|
-
# Google Search only
|
|
201
|
+
# Google Search only. BROAD-match keywords on the new ad group (first 20).
|
|
202
202
|
attr_accessor :keywords
|
|
203
203
|
|
|
204
|
+
# Google Search only; other platforms return 400. BROAD-match negative keywords on the new ad group. Editable later via PUT /v1/ads/{adId} targeting.negativeKeywords.
|
|
205
|
+
attr_accessor :negative_keywords
|
|
206
|
+
|
|
204
207
|
# Google Search RSA only. Extra headlines.
|
|
205
208
|
attr_accessor :additional_headlines
|
|
206
209
|
|
|
@@ -337,6 +340,7 @@ module Zernio
|
|
|
337
340
|
:'audience_id' => :'audienceId',
|
|
338
341
|
:'campaign_type' => :'campaignType',
|
|
339
342
|
:'keywords' => :'keywords',
|
|
343
|
+
:'negative_keywords' => :'negativeKeywords',
|
|
340
344
|
:'additional_headlines' => :'additionalHeadlines',
|
|
341
345
|
:'additional_descriptions' => :'additionalDescriptions',
|
|
342
346
|
:'advantage_audience' => :'advantageAudience',
|
|
@@ -435,6 +439,7 @@ module Zernio
|
|
|
435
439
|
:'audience_id' => :'String',
|
|
436
440
|
:'campaign_type' => :'String',
|
|
437
441
|
:'keywords' => :'Array<String>',
|
|
442
|
+
:'negative_keywords' => :'Array<String>',
|
|
438
443
|
:'additional_headlines' => :'Array<String>',
|
|
439
444
|
:'additional_descriptions' => :'Array<String>',
|
|
440
445
|
:'advantage_audience' => :'Integer',
|
|
@@ -784,6 +789,12 @@ module Zernio
|
|
|
784
789
|
end
|
|
785
790
|
end
|
|
786
791
|
|
|
792
|
+
if attributes.key?(:'negative_keywords')
|
|
793
|
+
if (value = attributes[:'negative_keywords']).is_a?(Array)
|
|
794
|
+
self.negative_keywords = value
|
|
795
|
+
end
|
|
796
|
+
end
|
|
797
|
+
|
|
787
798
|
if attributes.key?(:'additional_headlines')
|
|
788
799
|
if (value = attributes[:'additional_headlines']).is_a?(Array)
|
|
789
800
|
self.additional_headlines = value
|
|
@@ -1473,6 +1484,7 @@ module Zernio
|
|
|
1473
1484
|
audience_id == o.audience_id &&
|
|
1474
1485
|
campaign_type == o.campaign_type &&
|
|
1475
1486
|
keywords == o.keywords &&
|
|
1487
|
+
negative_keywords == o.negative_keywords &&
|
|
1476
1488
|
additional_headlines == o.additional_headlines &&
|
|
1477
1489
|
additional_descriptions == o.additional_descriptions &&
|
|
1478
1490
|
advantage_audience == o.advantage_audience &&
|
|
@@ -1500,7 +1512,7 @@ module Zernio
|
|
|
1500
1512
|
# Calculates hash code according to all attributes.
|
|
1501
1513
|
# @return [Integer] Hash code
|
|
1502
1514
|
def hash
|
|
1503
|
-
[account_id, ad_account_id, name, campaign_name, ad_set_name, ad_name, tracking, goal, optimization_goal, billing_event, buying_type, rf_prediction_id, creative_features, multi_advertiser, validate_only, budget_amount, budget_type, status, budget_level, currency, headline, long_headline, body, description, call_to_action, link_url, lead_gen_form_id, image_url, images, video, creatives, ad_set_id, existing_campaign_id, existing_creative_id, business_name, board_id, organization_id, targeting, countries, cities, regions, age_min, age_max, interests, zips, metros, custom_locations, behaviors, income_tier, languages, placements, saved_targeting_id, raw_targeting, special_ad_categories, special_ad_category_country, end_date, start_date, instagram_account_id, dynamic_creative, carousel_cards, default_locale, translations, placement_assets, audience_id, campaign_type, keywords, additional_headlines, additional_descriptions, advantage_audience, attribution_spec, gender, bid_strategy, bid_amount, roas_average_floor, value_rule_set_id, value_rules_applied, platform_specific_data, dsa_beneficiary, dsa_payor, brand_identity, identity_type, promoted_object].hash
|
|
1515
|
+
[account_id, ad_account_id, name, campaign_name, ad_set_name, ad_name, tracking, goal, optimization_goal, billing_event, buying_type, rf_prediction_id, creative_features, multi_advertiser, validate_only, budget_amount, budget_type, status, budget_level, currency, headline, long_headline, body, description, call_to_action, link_url, lead_gen_form_id, image_url, images, video, creatives, ad_set_id, existing_campaign_id, existing_creative_id, business_name, board_id, organization_id, targeting, countries, cities, regions, age_min, age_max, interests, zips, metros, custom_locations, behaviors, income_tier, languages, placements, saved_targeting_id, raw_targeting, special_ad_categories, special_ad_category_country, end_date, start_date, instagram_account_id, dynamic_creative, carousel_cards, default_locale, translations, placement_assets, audience_id, campaign_type, keywords, negative_keywords, additional_headlines, additional_descriptions, advantage_audience, attribution_spec, gender, bid_strategy, bid_amount, roas_average_floor, value_rule_set_id, value_rules_applied, platform_specific_data, dsa_beneficiary, dsa_payor, brand_identity, identity_type, promoted_object].hash
|
|
1504
1516
|
end
|
|
1505
1517
|
|
|
1506
1518
|
# Builds the object from hash
|
|
@@ -14,8 +14,14 @@ require 'date'
|
|
|
14
14
|
require 'time'
|
|
15
15
|
|
|
16
16
|
module Zernio
|
|
17
|
-
# Meta + TikTok only. Pinterest / X / LinkedIn
|
|
17
|
+
# Meta + TikTok (demographics/interests) and Google (keyword edits only). Pinterest / X / LinkedIn return 501.
|
|
18
18
|
class UpdateAdRequestTargeting < ApiModelBase
|
|
19
|
+
# Google only. The FULL new set of positive keywords for the ad group; live keywords not listed are removed. Entries are strings (BROAD) or { text, matchType } with matchType exact | phrase | broad. Mirrored to GET /v1/ads/keywords immediately.
|
|
20
|
+
attr_accessor :keywords
|
|
21
|
+
|
|
22
|
+
# Google only. Same declarative contract as keywords, for the ad group's negative keywords.
|
|
23
|
+
attr_accessor :negative_keywords
|
|
24
|
+
|
|
19
25
|
attr_accessor :age_min
|
|
20
26
|
|
|
21
27
|
attr_accessor :age_max
|
|
@@ -53,6 +59,8 @@ module Zernio
|
|
|
53
59
|
# Attribute mapping from ruby-style variable name to JSON key.
|
|
54
60
|
def self.attribute_map
|
|
55
61
|
{
|
|
62
|
+
:'keywords' => :'keywords',
|
|
63
|
+
:'negative_keywords' => :'negativeKeywords',
|
|
56
64
|
:'age_min' => :'ageMin',
|
|
57
65
|
:'age_max' => :'ageMax',
|
|
58
66
|
:'countries' => :'countries',
|
|
@@ -74,6 +82,8 @@ module Zernio
|
|
|
74
82
|
# Attribute type mapping.
|
|
75
83
|
def self.openapi_types
|
|
76
84
|
{
|
|
85
|
+
:'keywords' => :'Array<UpdateAdRequestTargetingKeywordsInner>',
|
|
86
|
+
:'negative_keywords' => :'Array<UpdateAdRequestTargetingKeywordsInner>',
|
|
77
87
|
:'age_min' => :'Integer',
|
|
78
88
|
:'age_max' => :'Integer',
|
|
79
89
|
:'countries' => :'Array<String>',
|
|
@@ -104,6 +114,18 @@ module Zernio
|
|
|
104
114
|
h[k.to_sym] = v
|
|
105
115
|
}
|
|
106
116
|
|
|
117
|
+
if attributes.key?(:'keywords')
|
|
118
|
+
if (value = attributes[:'keywords']).is_a?(Array)
|
|
119
|
+
self.keywords = value
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
if attributes.key?(:'negative_keywords')
|
|
124
|
+
if (value = attributes[:'negative_keywords']).is_a?(Array)
|
|
125
|
+
self.negative_keywords = value
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
107
129
|
if attributes.key?(:'age_min')
|
|
108
130
|
self.age_min = attributes[:'age_min']
|
|
109
131
|
end
|
|
@@ -217,6 +239,8 @@ module Zernio
|
|
|
217
239
|
def ==(o)
|
|
218
240
|
return true if self.equal?(o)
|
|
219
241
|
self.class == o.class &&
|
|
242
|
+
keywords == o.keywords &&
|
|
243
|
+
negative_keywords == o.negative_keywords &&
|
|
220
244
|
age_min == o.age_min &&
|
|
221
245
|
age_max == o.age_max &&
|
|
222
246
|
countries == o.countries &&
|
|
@@ -233,7 +257,7 @@ module Zernio
|
|
|
233
257
|
# Calculates hash code according to all attributes.
|
|
234
258
|
# @return [Integer] Hash code
|
|
235
259
|
def hash
|
|
236
|
-
[age_min, age_max, countries, interests, advantage_audience].hash
|
|
260
|
+
[keywords, negative_keywords, age_min, age_max, countries, interests, advantage_audience].hash
|
|
237
261
|
end
|
|
238
262
|
|
|
239
263
|
# Builds the object from hash
|
|
@@ -0,0 +1,104 @@
|
|
|
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.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
|
+
module UpdateAdRequestTargetingKeywordsInner
|
|
18
|
+
class << self
|
|
19
|
+
# List of class defined in oneOf (OpenAPI v3)
|
|
20
|
+
def openapi_one_of
|
|
21
|
+
[
|
|
22
|
+
:'String',
|
|
23
|
+
:'UpdateAdRequestTargetingKeywordsInnerOneOf'
|
|
24
|
+
]
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Builds the object
|
|
28
|
+
# @param [Mixed] Data to be matched against the list of oneOf items
|
|
29
|
+
# @return [Object] Returns the model or the data itself
|
|
30
|
+
def build(data)
|
|
31
|
+
# Go through the list of oneOf items and attempt to identify the appropriate one.
|
|
32
|
+
# Note:
|
|
33
|
+
# - We do not attempt to check whether exactly one item matches.
|
|
34
|
+
# - No advanced validation of types in some cases (e.g. "x: { type: string }" will happily match { x: 123 })
|
|
35
|
+
# due to the way the deserialization is made in the base_object template (it just casts without verifying).
|
|
36
|
+
# - TODO: scalar values are de facto behaving as if they were nullable.
|
|
37
|
+
# - TODO: logging when debugging is set.
|
|
38
|
+
openapi_one_of.each do |klass|
|
|
39
|
+
begin
|
|
40
|
+
next if klass == :AnyType # "nullable: true"
|
|
41
|
+
return find_and_cast_into_type(klass, data)
|
|
42
|
+
rescue # rescue all errors so we keep iterating even if the current item lookup raises
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
openapi_one_of.include?(:AnyType) ? data : nil
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
SchemaMismatchError = Class.new(StandardError)
|
|
52
|
+
|
|
53
|
+
# Note: 'File' is missing here because in the regular case we get the data _after_ a call to JSON.parse.
|
|
54
|
+
def find_and_cast_into_type(klass, data)
|
|
55
|
+
return if data.nil?
|
|
56
|
+
|
|
57
|
+
case klass.to_s
|
|
58
|
+
when 'Boolean'
|
|
59
|
+
return data if data.instance_of?(TrueClass) || data.instance_of?(FalseClass)
|
|
60
|
+
when 'Float'
|
|
61
|
+
return data if data.instance_of?(Float)
|
|
62
|
+
when 'Integer'
|
|
63
|
+
return data if data.instance_of?(Integer)
|
|
64
|
+
when 'Time'
|
|
65
|
+
return Time.parse(data)
|
|
66
|
+
when 'Date'
|
|
67
|
+
return Date.iso8601(data)
|
|
68
|
+
when 'String'
|
|
69
|
+
return data if data.instance_of?(String)
|
|
70
|
+
when 'Object' # "type: object"
|
|
71
|
+
return data if data.instance_of?(Hash)
|
|
72
|
+
when /\AArray<(?<sub_type>.+)>\z/ # "type: array"
|
|
73
|
+
if data.instance_of?(Array)
|
|
74
|
+
sub_type = Regexp.last_match[:sub_type]
|
|
75
|
+
return data.map { |item| find_and_cast_into_type(sub_type, item) }
|
|
76
|
+
end
|
|
77
|
+
when /\AHash<String, (?<sub_type>.+)>\z/ # "type: object" with "additionalProperties: { ... }"
|
|
78
|
+
if data.instance_of?(Hash) && data.keys.all? { |k| k.instance_of?(Symbol) || k.instance_of?(String) }
|
|
79
|
+
sub_type = Regexp.last_match[:sub_type]
|
|
80
|
+
return data.each_with_object({}) { |(k, v), hsh| hsh[k] = find_and_cast_into_type(sub_type, v) }
|
|
81
|
+
end
|
|
82
|
+
else # model
|
|
83
|
+
const = Zernio.const_get(klass)
|
|
84
|
+
if const
|
|
85
|
+
if const.respond_to?(:openapi_one_of) # nested oneOf model
|
|
86
|
+
model = const.build(data)
|
|
87
|
+
return model if model
|
|
88
|
+
else
|
|
89
|
+
# raise if data contains keys that are not known to the model
|
|
90
|
+
raise if const.respond_to?(:acceptable_attributes) && !(data.keys - const.acceptable_attributes).empty?
|
|
91
|
+
model = const.build_from_hash(data)
|
|
92
|
+
return model if model
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
raise # if no match by now, raise
|
|
98
|
+
rescue
|
|
99
|
+
raise SchemaMismatchError, "#{data} doesn't match the #{klass} type"
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
end
|
|
@@ -0,0 +1,216 @@
|
|
|
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.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 UpdateAdRequestTargetingKeywordsInnerOneOf < ApiModelBase
|
|
18
|
+
attr_accessor :text
|
|
19
|
+
|
|
20
|
+
attr_accessor :match_type
|
|
21
|
+
|
|
22
|
+
class EnumAttributeValidator
|
|
23
|
+
attr_reader :datatype
|
|
24
|
+
attr_reader :allowable_values
|
|
25
|
+
|
|
26
|
+
def initialize(datatype, allowable_values)
|
|
27
|
+
@allowable_values = allowable_values.map do |value|
|
|
28
|
+
case datatype.to_s
|
|
29
|
+
when /Integer/i
|
|
30
|
+
value.to_i
|
|
31
|
+
when /Float/i
|
|
32
|
+
value.to_f
|
|
33
|
+
else
|
|
34
|
+
value
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def valid?(value)
|
|
40
|
+
!value || allowable_values.include?(value)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Attribute mapping from ruby-style variable name to JSON key.
|
|
45
|
+
def self.attribute_map
|
|
46
|
+
{
|
|
47
|
+
:'text' => :'text',
|
|
48
|
+
:'match_type' => :'matchType'
|
|
49
|
+
}
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Returns attribute mapping this model knows about
|
|
53
|
+
def self.acceptable_attribute_map
|
|
54
|
+
attribute_map
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Returns all the JSON keys this model knows about
|
|
58
|
+
def self.acceptable_attributes
|
|
59
|
+
acceptable_attribute_map.values
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Attribute type mapping.
|
|
63
|
+
def self.openapi_types
|
|
64
|
+
{
|
|
65
|
+
:'text' => :'String',
|
|
66
|
+
:'match_type' => :'String'
|
|
67
|
+
}
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# List of attributes with nullable: true
|
|
71
|
+
def self.openapi_nullable
|
|
72
|
+
Set.new([
|
|
73
|
+
])
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Initializes the object
|
|
77
|
+
# @param [Hash] attributes Model attributes in the form of hash
|
|
78
|
+
def initialize(attributes = {})
|
|
79
|
+
if (!attributes.is_a?(Hash))
|
|
80
|
+
fail ArgumentError, "The input argument (attributes) must be a hash in `Zernio::UpdateAdRequestTargetingKeywordsInnerOneOf` initialize method"
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# check to see if the attribute exists and convert string to symbol for hash key
|
|
84
|
+
acceptable_attribute_map = self.class.acceptable_attribute_map
|
|
85
|
+
attributes = attributes.each_with_object({}) { |(k, v), h|
|
|
86
|
+
if (!acceptable_attribute_map.key?(k.to_sym))
|
|
87
|
+
fail ArgumentError, "`#{k}` is not a valid attribute in `Zernio::UpdateAdRequestTargetingKeywordsInnerOneOf`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
|
|
88
|
+
end
|
|
89
|
+
h[k.to_sym] = v
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if attributes.key?(:'text')
|
|
93
|
+
self.text = attributes[:'text']
|
|
94
|
+
else
|
|
95
|
+
self.text = nil
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
if attributes.key?(:'match_type')
|
|
99
|
+
self.match_type = attributes[:'match_type']
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# Show invalid properties with the reasons. Usually used together with valid?
|
|
104
|
+
# @return Array for valid properties with the reasons
|
|
105
|
+
def list_invalid_properties
|
|
106
|
+
warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
|
|
107
|
+
invalid_properties = Array.new
|
|
108
|
+
if @text.nil?
|
|
109
|
+
invalid_properties.push('invalid value for "text", text cannot be nil.')
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
if @text.to_s.length > 80
|
|
113
|
+
invalid_properties.push('invalid value for "text", the character length must be smaller than or equal to 80.')
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
invalid_properties
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# Check to see if the all the properties in the model are valid
|
|
120
|
+
# @return true if the model is valid
|
|
121
|
+
def valid?
|
|
122
|
+
warn '[DEPRECATED] the `valid?` method is obsolete'
|
|
123
|
+
return false if @text.nil?
|
|
124
|
+
return false if @text.to_s.length > 80
|
|
125
|
+
match_type_validator = EnumAttributeValidator.new('String', ["exact", "phrase", "broad"])
|
|
126
|
+
return false unless match_type_validator.valid?(@match_type)
|
|
127
|
+
true
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
# Custom attribute writer method with validation
|
|
131
|
+
# @param [Object] text Value to be assigned
|
|
132
|
+
def text=(text)
|
|
133
|
+
if text.nil?
|
|
134
|
+
fail ArgumentError, 'text cannot be nil'
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
if text.to_s.length > 80
|
|
138
|
+
fail ArgumentError, 'invalid value for "text", the character length must be smaller than or equal to 80.'
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
@text = text
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# Custom attribute writer method checking allowed values (enum).
|
|
145
|
+
# @param [Object] match_type Object to be assigned
|
|
146
|
+
def match_type=(match_type)
|
|
147
|
+
validator = EnumAttributeValidator.new('String', ["exact", "phrase", "broad"])
|
|
148
|
+
unless validator.valid?(match_type)
|
|
149
|
+
fail ArgumentError, "invalid value for \"match_type\", must be one of #{validator.allowable_values}."
|
|
150
|
+
end
|
|
151
|
+
@match_type = match_type
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
# Checks equality by comparing each attribute.
|
|
155
|
+
# @param [Object] Object to be compared
|
|
156
|
+
def ==(o)
|
|
157
|
+
return true if self.equal?(o)
|
|
158
|
+
self.class == o.class &&
|
|
159
|
+
text == o.text &&
|
|
160
|
+
match_type == o.match_type
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
# @see the `==` method
|
|
164
|
+
# @param [Object] Object to be compared
|
|
165
|
+
def eql?(o)
|
|
166
|
+
self == o
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
# Calculates hash code according to all attributes.
|
|
170
|
+
# @return [Integer] Hash code
|
|
171
|
+
def hash
|
|
172
|
+
[text, match_type].hash
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# Builds the object from hash
|
|
176
|
+
# @param [Hash] attributes Model attributes in the form of hash
|
|
177
|
+
# @return [Object] Returns the model itself
|
|
178
|
+
def self.build_from_hash(attributes)
|
|
179
|
+
return nil unless attributes.is_a?(Hash)
|
|
180
|
+
attributes = attributes.transform_keys(&:to_sym)
|
|
181
|
+
transformed_hash = {}
|
|
182
|
+
openapi_types.each_pair do |key, type|
|
|
183
|
+
if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
|
|
184
|
+
transformed_hash["#{key}"] = nil
|
|
185
|
+
elsif type =~ /\AArray<(.*)>/i
|
|
186
|
+
# check to ensure the input is an array given that the attribute
|
|
187
|
+
# is documented as an array but the input is not
|
|
188
|
+
if attributes[attribute_map[key]].is_a?(Array)
|
|
189
|
+
transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
|
|
190
|
+
end
|
|
191
|
+
elsif !attributes[attribute_map[key]].nil?
|
|
192
|
+
transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
new(transformed_hash)
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
# Returns the object in the form of hash
|
|
199
|
+
# @return [Hash] Returns the object in the form of hash
|
|
200
|
+
def to_hash
|
|
201
|
+
hash = {}
|
|
202
|
+
self.class.attribute_map.each_pair do |attr, param|
|
|
203
|
+
value = self.send(attr)
|
|
204
|
+
if value.nil?
|
|
205
|
+
is_nullable = self.class.openapi_nullable.include?(attr)
|
|
206
|
+
next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
hash[param] = _to_hash(value)
|
|
210
|
+
end
|
|
211
|
+
hash
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
end
|
data/lib/zernio-sdk/version.rb
CHANGED
data/lib/zernio-sdk.rb
CHANGED
|
@@ -1350,6 +1350,8 @@ require 'zernio-sdk/models/update_ad_request_budget'
|
|
|
1350
1350
|
require 'zernio-sdk/models/update_ad_request_creative'
|
|
1351
1351
|
require 'zernio-sdk/models/update_ad_request_targeting'
|
|
1352
1352
|
require 'zernio-sdk/models/update_ad_request_targeting_interests_inner'
|
|
1353
|
+
require 'zernio-sdk/models/update_ad_request_targeting_keywords_inner'
|
|
1354
|
+
require 'zernio-sdk/models/update_ad_request_targeting_keywords_inner_one_of'
|
|
1353
1355
|
require 'zernio-sdk/models/update_ad_set200_response'
|
|
1354
1356
|
require 'zernio-sdk/models/update_ad_set_request'
|
|
1355
1357
|
require 'zernio-sdk/models/update_ad_set_request_budget'
|
data/openapi.yaml
CHANGED
|
@@ -38079,7 +38079,12 @@ paths:
|
|
|
38079
38079
|
- **Meta** (Facebook + Instagram): all fields supported.
|
|
38080
38080
|
- **TikTok**: status, budget, targeting (via `/v2/adgroup/update/`), and creative
|
|
38081
38081
|
(via `/v2/ad/update/` patch-style — `headline` is ignored, `body` becomes `ad_text`).
|
|
38082
|
-
- **
|
|
38082
|
+
- **Google**: status, budget, and KEYWORD edits via `targeting.keywords` /
|
|
38083
|
+
`targeting.negativeKeywords` — each list you send becomes the FULL new set of its
|
|
38084
|
+
kind on the ad group (criteria not in the list are removed); a kind left out is
|
|
38085
|
+
untouched. Any other `targeting` field returns 400: Google cannot mutate broad
|
|
38086
|
+
targeting post-create without recreating the campaign. `creative` returns 501.
|
|
38087
|
+
- **Pinterest / X / LinkedIn / OpenAI Ads**: status + budget only. Sending
|
|
38083
38088
|
`targeting` or `creative` returns 501 with code `unsupported_platform_operation`.
|
|
38084
38089
|
OpenAI Ads budget is lifetime-only (see `budget.type` below).
|
|
38085
38090
|
security:
|
|
@@ -38102,8 +38107,23 @@ paths:
|
|
|
38102
38107
|
targeting:
|
|
38103
38108
|
type: object
|
|
38104
38109
|
description: |
|
|
38105
|
-
Meta + TikTok
|
|
38110
|
+
Meta + TikTok (demographics/interests) and Google (keyword edits only).
|
|
38111
|
+
Pinterest / X / LinkedIn return 501.
|
|
38106
38112
|
properties:
|
|
38113
|
+
keywords:
|
|
38114
|
+
type: array
|
|
38115
|
+
description: "Google only. The FULL new set of positive keywords for the ad group; live keywords not listed are removed. Entries are strings (BROAD) or { text, matchType } with matchType exact | phrase | broad. Mirrored to GET /v1/ads/keywords immediately."
|
|
38116
|
+
items:
|
|
38117
|
+
oneOf:
|
|
38118
|
+
- { type: string }
|
|
38119
|
+
- { type: object, required: [text], properties: { text: { type: string, maxLength: 80 }, matchType: { type: string, enum: [exact, phrase, broad] } } }
|
|
38120
|
+
negativeKeywords:
|
|
38121
|
+
type: array
|
|
38122
|
+
description: "Google only. Same declarative contract as keywords, for the ad group's negative keywords."
|
|
38123
|
+
items:
|
|
38124
|
+
oneOf:
|
|
38125
|
+
- { type: string }
|
|
38126
|
+
- { type: object, required: [text], properties: { text: { type: string, maxLength: 80 }, matchType: { type: string, enum: [exact, phrase, broad] } } }
|
|
38107
38127
|
ageMin: { type: integer, minimum: 13, maximum: 65 }
|
|
38108
38128
|
ageMax: { type: integer, minimum: 13, maximum: 65 }
|
|
38109
38129
|
countries: { type: array, items: { type: string } }
|
|
@@ -41000,7 +41020,8 @@ paths:
|
|
|
41000
41020
|
items: { type: string, enum: [mobile, desktop] }
|
|
41001
41021
|
audienceId: { type: string, description: Custom audience ID for targeting }
|
|
41002
41022
|
campaignType: { type: string, enum: [display, search], default: display, description: Google only }
|
|
41003
|
-
keywords: { type: array, items: { type: string }, description: Google Search only }
|
|
41023
|
+
keywords: { type: array, items: { type: string }, description: "Google Search only. BROAD-match keywords on the new ad group (first 20)." }
|
|
41024
|
+
negativeKeywords: { type: array, items: { type: string, maxLength: 80 }, description: "Google Search only; other platforms return 400. BROAD-match negative keywords on the new ad group. Editable later via PUT /v1/ads/{adId} targeting.negativeKeywords." }
|
|
41004
41025
|
additionalHeadlines: { type: array, items: { type: string }, description: "Google Search RSA only. Extra headlines." }
|
|
41005
41026
|
additionalDescriptions: { type: array, items: { type: string }, description: "Google Search RSA only. Extra descriptions." }
|
|
41006
41027
|
advantageAudience: { type: integer, enum: [0, 1], description: "Meta only. Controls the Advantage audience feature (targeting_automation). 0 = disabled (default), 1 = enabled. Meta Marketing API requires this field on all ad set creation requests." }
|
|
@@ -290,7 +290,7 @@ describe 'AdCampaignsApi' do
|
|
|
290
290
|
|
|
291
291
|
# unit tests for update_ad
|
|
292
292
|
# Update ad
|
|
293
|
-
# Patch one or more fields on an ad. Status, budget, targeting, and creative changes are propagated to the platform. Per-platform support: - **Meta** (Facebook + Instagram): all fields supported. - **TikTok**: status, budget, targeting (via `/v2/adgroup/update/`), and creative (via `/v2/ad/update/` patch-style — `headline` is ignored, `body` becomes `ad_text`). - **Pinterest / X / LinkedIn /
|
|
293
|
+
# Patch one or more fields on an ad. Status, budget, targeting, and creative changes are propagated to the platform. Per-platform support: - **Meta** (Facebook + Instagram): all fields supported. - **TikTok**: status, budget, targeting (via `/v2/adgroup/update/`), and creative (via `/v2/ad/update/` patch-style — `headline` is ignored, `body` becomes `ad_text`). - **Google**: status, budget, and KEYWORD edits via `targeting.keywords` / `targeting.negativeKeywords` — each list you send becomes the FULL new set of its kind on the ad group (criteria not in the list are removed); a kind left out is untouched. Any other `targeting` field returns 400: Google cannot mutate broad targeting post-create without recreating the campaign. `creative` returns 501. - **Pinterest / X / LinkedIn / OpenAI Ads**: status + budget only. Sending `targeting` or `creative` returns 501 with code `unsupported_platform_operation`. OpenAI Ads budget is lifetime-only (see `budget.type` below).
|
|
294
294
|
# @param ad_id
|
|
295
295
|
# @param update_ad_request
|
|
296
296
|
# @param [Hash] opts the optional parameters
|
|
@@ -467,6 +467,12 @@ describe Zernio::CreateStandaloneAdRequest do
|
|
|
467
467
|
end
|
|
468
468
|
end
|
|
469
469
|
|
|
470
|
+
describe 'test attribute "negative_keywords"' do
|
|
471
|
+
it 'should work' do
|
|
472
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
473
|
+
end
|
|
474
|
+
end
|
|
475
|
+
|
|
470
476
|
describe 'test attribute "additional_headlines"' do
|
|
471
477
|
it 'should work' do
|
|
472
478
|
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
@@ -0,0 +1,46 @@
|
|
|
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.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 'spec_helper'
|
|
14
|
+
require 'json'
|
|
15
|
+
require 'date'
|
|
16
|
+
|
|
17
|
+
# Unit tests for Zernio::UpdateAdRequestTargetingKeywordsInnerOneOf
|
|
18
|
+
# Automatically generated by openapi-generator (https://openapi-generator.tech)
|
|
19
|
+
# Please update as you see appropriate
|
|
20
|
+
describe Zernio::UpdateAdRequestTargetingKeywordsInnerOneOf do
|
|
21
|
+
#let(:instance) { Zernio::UpdateAdRequestTargetingKeywordsInnerOneOf.new }
|
|
22
|
+
|
|
23
|
+
describe 'test an instance of UpdateAdRequestTargetingKeywordsInnerOneOf' do
|
|
24
|
+
it 'should create an instance of UpdateAdRequestTargetingKeywordsInnerOneOf' do
|
|
25
|
+
# uncomment below to test the instance creation
|
|
26
|
+
#expect(instance).to be_instance_of(Zernio::UpdateAdRequestTargetingKeywordsInnerOneOf)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe 'test attribute "text"' 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 "match_type"' do
|
|
37
|
+
it 'should work' do
|
|
38
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
39
|
+
# validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["exact", "phrase", "broad"])
|
|
40
|
+
# validator.allowable_values.each do |value|
|
|
41
|
+
# expect { instance.match_type = value }.not_to raise_error
|
|
42
|
+
# end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
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.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 'spec_helper'
|
|
14
|
+
require 'json'
|
|
15
|
+
require 'date'
|
|
16
|
+
|
|
17
|
+
# Unit tests for Zernio::UpdateAdRequestTargetingKeywordsInner
|
|
18
|
+
# Automatically generated by openapi-generator (https://openapi-generator.tech)
|
|
19
|
+
# Please update as you see appropriate
|
|
20
|
+
describe Zernio::UpdateAdRequestTargetingKeywordsInner do
|
|
21
|
+
describe '.openapi_one_of' do
|
|
22
|
+
it 'lists the items referenced in the oneOf array' do
|
|
23
|
+
expect(described_class.openapi_one_of).to_not be_empty
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe '.build' do
|
|
28
|
+
it 'returns the correct model' do
|
|
29
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -27,6 +27,18 @@ describe Zernio::UpdateAdRequestTargeting do
|
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
+
describe 'test attribute "keywords"' 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 "negative_keywords"' 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
|
+
|
|
30
42
|
describe 'test attribute "age_min"' do
|
|
31
43
|
it 'should work' do
|
|
32
44
|
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: late-sdk
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.713
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- OpenAPI-Generator
|
|
@@ -1446,6 +1446,8 @@ files:
|
|
|
1446
1446
|
- docs/UpdateAdRequestCreative.md
|
|
1447
1447
|
- docs/UpdateAdRequestTargeting.md
|
|
1448
1448
|
- docs/UpdateAdRequestTargetingInterestsInner.md
|
|
1449
|
+
- docs/UpdateAdRequestTargetingKeywordsInner.md
|
|
1450
|
+
- docs/UpdateAdRequestTargetingKeywordsInnerOneOf.md
|
|
1449
1451
|
- docs/UpdateAdSet200Response.md
|
|
1450
1452
|
- docs/UpdateAdSetRequest.md
|
|
1451
1453
|
- docs/UpdateAdSetRequestBudget.md
|
|
@@ -3144,6 +3146,8 @@ files:
|
|
|
3144
3146
|
- lib/zernio-sdk/models/update_ad_request_creative.rb
|
|
3145
3147
|
- lib/zernio-sdk/models/update_ad_request_targeting.rb
|
|
3146
3148
|
- lib/zernio-sdk/models/update_ad_request_targeting_interests_inner.rb
|
|
3149
|
+
- lib/zernio-sdk/models/update_ad_request_targeting_keywords_inner.rb
|
|
3150
|
+
- lib/zernio-sdk/models/update_ad_request_targeting_keywords_inner_one_of.rb
|
|
3147
3151
|
- lib/zernio-sdk/models/update_ad_set200_response.rb
|
|
3148
3152
|
- lib/zernio-sdk/models/update_ad_set_request.rb
|
|
3149
3153
|
- lib/zernio-sdk/models/update_ad_set_request_budget.rb
|
|
@@ -4821,6 +4825,8 @@ files:
|
|
|
4821
4825
|
- spec/models/update_ad_request_creative_spec.rb
|
|
4822
4826
|
- spec/models/update_ad_request_spec.rb
|
|
4823
4827
|
- spec/models/update_ad_request_targeting_interests_inner_spec.rb
|
|
4828
|
+
- spec/models/update_ad_request_targeting_keywords_inner_one_of_spec.rb
|
|
4829
|
+
- spec/models/update_ad_request_targeting_keywords_inner_spec.rb
|
|
4824
4830
|
- spec/models/update_ad_request_targeting_spec.rb
|
|
4825
4831
|
- spec/models/update_ad_set200_response_spec.rb
|
|
4826
4832
|
- spec/models/update_ad_set_request_budget_spec.rb
|
|
@@ -5102,7 +5108,7 @@ files:
|
|
|
5102
5108
|
- spec/models/you_tube_video_retention_response_retention_curve_inner_spec.rb
|
|
5103
5109
|
- spec/models/you_tube_video_retention_response_spec.rb
|
|
5104
5110
|
- spec/spec_helper.rb
|
|
5105
|
-
- zernio-sdk-0.0.
|
|
5111
|
+
- zernio-sdk-0.0.713.gem
|
|
5106
5112
|
- zernio-sdk.gemspec
|
|
5107
5113
|
homepage: https://openapi-generator.tech
|
|
5108
5114
|
licenses:
|
|
@@ -5857,6 +5863,7 @@ test_files:
|
|
|
5857
5863
|
- spec/models/update_ad_request_budget_spec.rb
|
|
5858
5864
|
- spec/models/review_webhook_review_reply_spec.rb
|
|
5859
5865
|
- spec/models/list_logs200_response_spec.rb
|
|
5866
|
+
- spec/models/update_ad_request_targeting_keywords_inner_spec.rb
|
|
5860
5867
|
- spec/models/send_private_reply_to_comment_request_buttons_inner_one_of2_spec.rb
|
|
5861
5868
|
- spec/models/boost_post_request_targeting_regions_inner_spec.rb
|
|
5862
5869
|
- spec/models/update_webhook_settings_request_spec.rb
|
|
@@ -6337,6 +6344,7 @@ test_files:
|
|
|
6337
6344
|
- spec/models/get_inbox_post_comments200_response_pagination_spec.rb
|
|
6338
6345
|
- spec/models/instagram_account_insights_response_metrics_value_values_inner_spec.rb
|
|
6339
6346
|
- spec/models/send_conversions200_response_spec.rb
|
|
6347
|
+
- spec/models/update_ad_request_targeting_keywords_inner_one_of_spec.rb
|
|
6340
6348
|
- spec/models/get_pending_o_auth_data200_response_spec.rb
|
|
6341
6349
|
- spec/models/custom_conversion_spec.rb
|
|
6342
6350
|
- spec/models/send_inbox_message_request_template_spec.rb
|
data/zernio-sdk-0.0.712.gem
DELETED
|
Binary file
|