twitter-ads 9.0.0 → 10.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.
- checksums.yaml +4 -4
- data/lib/twitter-ads/account.rb +17 -1
- data/lib/twitter-ads/campaign/line_item.rb +3 -2
- data/lib/twitter-ads/campaign/tracking_tags.rb +97 -0
- data/lib/twitter-ads/client.rb +1 -1
- data/lib/twitter-ads/creative/cards_fetch.rb +2 -4
- data/lib/twitter-ads/creative/image_app_download_card.rb +2 -4
- data/lib/twitter-ads/creative/video_app_download_card.rb +2 -4
- data/lib/twitter-ads/enum.rb +1 -0
- data/lib/twitter-ads/targeting/{audience_summary.rb → audience_estimate.rb} +3 -3
- data/lib/twitter-ads/version.rb +1 -1
- data/lib/twitter-ads.rb +2 -1
- data/spec/fixtures/accounts_all.json +0 -5
- data/spec/fixtures/accounts_load.json +0 -1
- data/spec/fixtures/{audience_summary.json → audience_estimate.json} +0 -0
- data/spec/fixtures/line_items_all.json +0 -10
- data/spec/fixtures/line_items_load.json +0 -1
- data/spec/fixtures/tracking_tags_load.json +17 -0
- data/spec/twitter-ads/campaign/line_item_spec.rb +0 -1
- data/spec/twitter-ads/campaign/tracking_tag_spec.rb +58 -0
- data/spec/twitter-ads/targeting/{audience_summary_spec.rb → audience_estimate_spec.rb} +2 -2
- metadata +12 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 65246c52bd294821d06f0bb059d9e06645f9085e7dc0864185075311749565ff
|
4
|
+
data.tar.gz: 630e877969ad75d32f4e95f6a454558aaea1338815f3aae00c813ca6e7e3e1e5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f392d87fd861feba16a6555158670f63048489986bfc1e82b4f3c596f94b240803e50892865da4e2a930e134e1ae52d4c3b4b9e9b44a344a63d5d5a82985d661
|
7
|
+
data.tar.gz: 57ddabd5051fff96bbb3542e3e7616e38476abc1de375ff01fb1c00746247a0f554eff6c2c5af83a0d4635d6d3fe400e0a38a0b7a36742d8e146be21acfe1fec
|
data/lib/twitter-ads/account.rb
CHANGED
@@ -10,7 +10,6 @@ module TwitterAds
|
|
10
10
|
|
11
11
|
property :id, read_only: true
|
12
12
|
property :name, read_only: true
|
13
|
-
property :salt, read_only: true
|
14
13
|
property :timezone, read_only: true
|
15
14
|
property :timezone_switch_at, type: :time, read_only: true
|
16
15
|
property :created_at, type: :time, read_only: true
|
@@ -218,6 +217,23 @@ module TwitterAds
|
|
218
217
|
load_resource(LineItem, id, opts)
|
219
218
|
end
|
220
219
|
|
220
|
+
# Returns a collection of tracking tags available to the
|
221
|
+
# current account.
|
222
|
+
#
|
223
|
+
# @param id [String] The LineItem ID value.
|
224
|
+
# @param opts [Hash] A Hash of extended options.
|
225
|
+
# @option opts [Boolean] :with_deleted Indicates if deleted items should be included.
|
226
|
+
# @option opts [String] :sort_by The object param to sort the API response by.
|
227
|
+
# @option opts [String] :line_item_ids The object param to sort the API response by.
|
228
|
+
# @option opts [String] :tracking_tag_ids The object param to sort the API response by.
|
229
|
+
#
|
230
|
+
# @return A Cursor or object instance.
|
231
|
+
#
|
232
|
+
# @since 10.0.0
|
233
|
+
def tracking_tags(id = nil, opts = {})
|
234
|
+
load_resource(TrackingTag, id, opts)
|
235
|
+
end
|
236
|
+
|
221
237
|
# Returns a collection of app lists available to the current account.
|
222
238
|
#
|
223
239
|
# @param id [String] The AppList ID value.
|
@@ -19,7 +19,6 @@ module TwitterAds
|
|
19
19
|
property :advertiser_domain
|
20
20
|
property :android_app_store_identifier
|
21
21
|
property :audience_expansion
|
22
|
-
property :automatically_select_bid
|
23
22
|
property :bid_amount_local_micro
|
24
23
|
property :bid_strategy
|
25
24
|
property :campaign_id
|
@@ -39,7 +38,6 @@ module TwitterAds
|
|
39
38
|
|
40
39
|
# beta (not yet generally available)
|
41
40
|
property :advertiser_user_id
|
42
|
-
property :tracking_tags
|
43
41
|
|
44
42
|
# sdk only
|
45
43
|
property :to_delete, type: :bool
|
@@ -94,5 +92,8 @@ module TwitterAds
|
|
94
92
|
id ? TargetingCriteria.load(account, id, opts) : TargetingCriteria.all(account, @id, opts)
|
95
93
|
end
|
96
94
|
|
95
|
+
def tracking_tags(id = nil, opts = {})
|
96
|
+
id ? TrackingTag.load(account, id, opts) : TrackingTag.all(account, @id, opts)
|
97
|
+
end
|
97
98
|
end
|
98
99
|
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# Copyright (C) 2019 Twitter, Inc.
|
3
|
+
|
4
|
+
module TwitterAds
|
5
|
+
class TrackingTag
|
6
|
+
|
7
|
+
include TwitterAds::DSL
|
8
|
+
include TwitterAds::Resource
|
9
|
+
include TwitterAds::Persistence
|
10
|
+
|
11
|
+
attr_reader :account
|
12
|
+
|
13
|
+
property :id, read_only: true
|
14
|
+
property :deleted, type: :bool, read_only: true
|
15
|
+
property :created_at, type: :time, read_only: true
|
16
|
+
property :updated_at, type: :time, read_only: true
|
17
|
+
|
18
|
+
property :line_item_id
|
19
|
+
property :tracking_tag_type
|
20
|
+
property :tracking_tag_url
|
21
|
+
|
22
|
+
# sdk only
|
23
|
+
property :to_delete, type: :bool
|
24
|
+
|
25
|
+
RESOURCE_COLLECTION = "/#{TwitterAds::API_VERSION}/" \
|
26
|
+
'accounts/%{account_id}/tracking_tags' # @api private
|
27
|
+
RESOURCE = "/#{TwitterAds::API_VERSION}/" \
|
28
|
+
'accounts/%{account_id}/tracking_tags/%{id}' # @api private
|
29
|
+
|
30
|
+
def initialize(account)
|
31
|
+
@account = account
|
32
|
+
self
|
33
|
+
end
|
34
|
+
|
35
|
+
# Creates a new Tracking Tag
|
36
|
+
#
|
37
|
+
# @param line_item_id [String] The line item id to create tags for.
|
38
|
+
# @param tracking_tag_url [String] tracking tag URL.
|
39
|
+
#
|
40
|
+
# @return [self] Returns the instance refreshed from the API
|
41
|
+
def create(line_item_id, tracking_tag_url)
|
42
|
+
resource = self.class::RESOURCE_COLLECTION % { account_id: account.id }
|
43
|
+
params = to_params.merge!(
|
44
|
+
line_item_id: line_item_id,
|
45
|
+
tracking_tag_url: tracking_tag_url,
|
46
|
+
tracking_tag_type: 'IMPRESSION_TAG'
|
47
|
+
)
|
48
|
+
response = Request.new(account.client, :post, resource, params: params).perform
|
49
|
+
from_response(response.body[:data])
|
50
|
+
end
|
51
|
+
|
52
|
+
class << self
|
53
|
+
|
54
|
+
# Returns a Cursor instance for a given resource.
|
55
|
+
#
|
56
|
+
# @param account [Account] The Account object instance.
|
57
|
+
# @param line_item_ids [String] A String or String array of Line Item IDs.
|
58
|
+
# @param opts [Hash] An optional Hash of extended options.
|
59
|
+
# @option opts [Boolean] :with_deleted Indicates if deleted items should be included.
|
60
|
+
# @option opts [String] :sort_by The object param to sort the API response by.
|
61
|
+
#
|
62
|
+
# @return [Cursor] A Cusor object ready to iterate through the API response.
|
63
|
+
#
|
64
|
+
# @since 0.3.1
|
65
|
+
# @see Cursor
|
66
|
+
# @see https://dev.twitter.com/ads/basics/sorting Sorting
|
67
|
+
def all(account, line_item_ids, opts = {})
|
68
|
+
if !line_item_ids.empty?
|
69
|
+
params = { line_item_ids: Array(line_item_ids).join(',') }.merge!(opts)
|
70
|
+
end
|
71
|
+
resource = RESOURCE_COLLECTION % { account_id: account.id }
|
72
|
+
request = Request.new(account.client, :get, resource, params: params)
|
73
|
+
Cursor.new(self, request, init_with: [account])
|
74
|
+
end
|
75
|
+
|
76
|
+
# Returns an object instance for a given resource.
|
77
|
+
#
|
78
|
+
# @param account [Account] The Account object instance.
|
79
|
+
# @param id [String] The ID of the specific object to be loaded.
|
80
|
+
# @param opts [Hash] An optional Hash of extended options.
|
81
|
+
# @option opts [Boolean] :with_deleted Indicates if deleted items should be included.
|
82
|
+
# @option opts [String] :sort_by The object param to sort the API response by.
|
83
|
+
#
|
84
|
+
# @return [self] The object instance for the specified resource.
|
85
|
+
#
|
86
|
+
# @since 0.3.1
|
87
|
+
def load(account, id, opts = {})
|
88
|
+
params = { with_deleted: true }.merge!(opts)
|
89
|
+
resource = RESOURCE % { account_id: account.id, id: id }
|
90
|
+
response = Request.new(account.client, :get, resource, params: params).perform
|
91
|
+
new(account).from_response(response.body[:data])
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
end
|
data/lib/twitter-ads/client.rb
CHANGED
@@ -35,10 +35,8 @@ module TwitterAds
|
|
35
35
|
property :image, read_only: true
|
36
36
|
property :image_display_height, read_only: true
|
37
37
|
property :image_display_width, read_only: true
|
38
|
-
property :
|
39
|
-
property :
|
40
|
-
property :iphone_app_id, read_only: true
|
41
|
-
property :iphone_deep_link, read_only: true
|
38
|
+
property :ios_app_store_identifier, read_only: true
|
39
|
+
property :ios_deep_link, read_only: true
|
42
40
|
property :name, read_only: true
|
43
41
|
property :recipient_user_id, read_only: true
|
44
42
|
property :second_choice, read_only: true
|
@@ -26,10 +26,8 @@ module TwitterAds
|
|
26
26
|
property :app_cta
|
27
27
|
property :googleplay_app_id
|
28
28
|
property :googleplay_deep_link
|
29
|
-
property :
|
30
|
-
property :
|
31
|
-
property :ipad_app_id
|
32
|
-
property :ipad_deep_link
|
29
|
+
property :ios_app_store_identifier
|
30
|
+
property :ios_deep_link
|
33
31
|
property :name
|
34
32
|
property :media_key
|
35
33
|
|
@@ -25,10 +25,8 @@ module TwitterAds
|
|
25
25
|
property :country_code
|
26
26
|
property :app_cta
|
27
27
|
property :poster_media_key
|
28
|
-
property :
|
29
|
-
property :
|
30
|
-
property :iphone_app_id
|
31
|
-
property :iphone_deep_link
|
28
|
+
property :ios_app_store_identifier
|
29
|
+
property :ios_deep_link
|
32
30
|
property :googleplay_app_id
|
33
31
|
property :googleplay_deep_link
|
34
32
|
property :name
|
data/lib/twitter-ads/enum.rb
CHANGED
@@ -2,13 +2,13 @@
|
|
2
2
|
# Copyright (C) 2019 Twitter, Inc.
|
3
3
|
|
4
4
|
module TwitterAds
|
5
|
-
module
|
5
|
+
module AudienceEstimate
|
6
6
|
|
7
7
|
include TwitterAds::DSL
|
8
8
|
include TwitterAds::Resource
|
9
9
|
|
10
10
|
RESOURCE = "/#{TwitterAds::API_VERSION}/" \
|
11
|
-
'accounts/%{account_id}/
|
11
|
+
'accounts/%{account_id}/audience_estimate'
|
12
12
|
|
13
13
|
property :audience_size, read_only: true
|
14
14
|
|
@@ -17,7 +17,7 @@ module TwitterAds
|
|
17
17
|
# Get an audience summary for the specified targeting criteria.
|
18
18
|
#
|
19
19
|
# @example
|
20
|
-
# TwitterAds::
|
20
|
+
# TwitterAds::AudienceEstimate.fetch(
|
21
21
|
# account,
|
22
22
|
# params: {targeting_criteria:[{targeting_type:'LOCATION',
|
23
23
|
# targeting_value:'96683cc9126741d1'}]}
|
data/lib/twitter-ads/version.rb
CHANGED
data/lib/twitter-ads.rb
CHANGED
@@ -37,6 +37,7 @@ require 'twitter-ads/campaign/funding_instrument'
|
|
37
37
|
require 'twitter-ads/campaign/line_item'
|
38
38
|
require 'twitter-ads/campaign/promotable_user'
|
39
39
|
require 'twitter-ads/campaign/targeting_criteria'
|
40
|
+
require 'twitter-ads/campaign/tracking_tags'
|
40
41
|
require 'twitter-ads/campaign/tweet'
|
41
42
|
require 'twitter-ads/campaign/organic_tweet'
|
42
43
|
require 'twitter-ads/campaign/iab_category'
|
@@ -75,7 +76,7 @@ require 'twitter-ads/creative/poll_cards'
|
|
75
76
|
require 'twitter-ads/creative/tweet_previews'
|
76
77
|
require 'twitter-ads/creative/tweets'
|
77
78
|
|
78
|
-
require 'twitter-ads/targeting/
|
79
|
+
require 'twitter-ads/targeting/audience_estimate'
|
79
80
|
|
80
81
|
require 'twitter-ads/measurement/web_event_tag'
|
81
82
|
require 'twitter-ads/measurement/app_event_tag'
|
@@ -9,7 +9,6 @@
|
|
9
9
|
"timezone_switch_at": "2014-11-17T08:00:00Z",
|
10
10
|
"id": "2iqph",
|
11
11
|
"created_at": "2015-03-04T10:50:42Z",
|
12
|
-
"salt": "5ab2pizq7qxjjqrx3z67f4wbko61o7xs",
|
13
12
|
"updated_at": "2015-04-11T05:20:08Z",
|
14
13
|
"approval_status": "ACCEPTED",
|
15
14
|
"deleted": false
|
@@ -20,7 +19,6 @@
|
|
20
19
|
"timezone_switch_at": "2014-11-17T08:00:00Z",
|
21
20
|
"id": "pz6ec",
|
22
21
|
"created_at": "2015-05-29T00:52:16Z",
|
23
|
-
"salt": "39ku32xvhdt0jax8thps2c70e2fv3yok",
|
24
22
|
"updated_at": "2015-05-29T00:52:16Z",
|
25
23
|
"approval_status": "ACCEPTED",
|
26
24
|
"deleted": false
|
@@ -31,7 +29,6 @@
|
|
31
29
|
"timezone_switch_at": "2014-11-17T08:00:00Z",
|
32
30
|
"id": "j9ozo",
|
33
31
|
"created_at": "2015-05-01T12:08:10Z",
|
34
|
-
"salt": "winwfne3y6oyikl4tm84bj9r50waxj37",
|
35
32
|
"updated_at": "2015-05-01T12:08:10Z",
|
36
33
|
"approval_status": "ACCEPTED",
|
37
34
|
"deleted": false
|
@@ -42,7 +39,6 @@
|
|
42
39
|
"timezone_switch_at": "2014-11-17T08:00:00Z",
|
43
40
|
"id": "9ttgd",
|
44
41
|
"created_at": "2015-06-24T18:51:20Z",
|
45
|
-
"salt": "tj9hmt5xylm5zztrq05w7hwh4mkpkg5r",
|
46
42
|
"updated_at": "2015-06-26T06:13:24Z",
|
47
43
|
"approval_status": "ACCEPTED",
|
48
44
|
"deleted": false
|
@@ -53,7 +49,6 @@
|
|
53
49
|
"timezone_switch_at": "2013-05-22T07:00:00Z",
|
54
50
|
"id": "47d0v",
|
55
51
|
"created_at": "2015-05-28T05:42:03Z",
|
56
|
-
"salt": "1ms1mq1nww7zl7169865gwqt89s9127m",
|
57
52
|
"updated_at": "2015-05-28T05:42:03Z",
|
58
53
|
"approval_status": "ACCEPTED",
|
59
54
|
"deleted": false
|
File without changes
|
@@ -13,7 +13,6 @@
|
|
13
13
|
"ALL_ON_TWITTER"
|
14
14
|
],
|
15
15
|
"bid_amount_local_micro": 2000000,
|
16
|
-
"automatically_select_bid": false,
|
17
16
|
"advertiser_domain": null,
|
18
17
|
"primary_web_event_tag": null,
|
19
18
|
"charge_by": "ENGAGEMENT",
|
@@ -40,7 +39,6 @@
|
|
40
39
|
"ALL_ON_TWITTER"
|
41
40
|
],
|
42
41
|
"bid_amount_local_micro": 2000000,
|
43
|
-
"automatically_select_bid": false,
|
44
42
|
"advertiser_domain": null,
|
45
43
|
"primary_web_event_tag": null,
|
46
44
|
"charge_by": "ENGAGEMENT",
|
@@ -67,7 +65,6 @@
|
|
67
65
|
"TWITTER_SEARCH"
|
68
66
|
],
|
69
67
|
"bid_amount_local_micro": 100000,
|
70
|
-
"automatically_select_bid": false,
|
71
68
|
"advertiser_domain": null,
|
72
69
|
"primary_web_event_tag": null,
|
73
70
|
"charge_by": "ENGAGEMENT",
|
@@ -94,7 +91,6 @@
|
|
94
91
|
"TWITTER_SEARCH"
|
95
92
|
],
|
96
93
|
"bid_amount_local_micro": 500000,
|
97
|
-
"automatically_select_bid": false,
|
98
94
|
"advertiser_domain": null,
|
99
95
|
"primary_web_event_tag": null,
|
100
96
|
"charge_by": "ENGAGEMENT",
|
@@ -121,7 +117,6 @@
|
|
121
117
|
"TWITTER_TIMELINE"
|
122
118
|
],
|
123
119
|
"bid_amount_local_micro": 50000000,
|
124
|
-
"automatically_select_bid": false,
|
125
120
|
"advertiser_domain": null,
|
126
121
|
"primary_web_event_tag": null,
|
127
122
|
"charge_by": "ENGAGEMENT",
|
@@ -149,7 +144,6 @@
|
|
149
144
|
"TWITTER_TIMELINE"
|
150
145
|
],
|
151
146
|
"bid_amount_local_micro": 50000000,
|
152
|
-
"automatically_select_bid": false,
|
153
147
|
"advertiser_domain": null,
|
154
148
|
"primary_web_event_tag": null,
|
155
149
|
"charge_by": "ENGAGEMENT",
|
@@ -177,7 +171,6 @@
|
|
177
171
|
"TWITTER_SEARCH"
|
178
172
|
],
|
179
173
|
"bid_amount_local_micro": 50000000,
|
180
|
-
"automatically_select_bid": false,
|
181
174
|
"advertiser_domain": null,
|
182
175
|
"primary_web_event_tag": null,
|
183
176
|
"charge_by": "ENGAGEMENT",
|
@@ -204,7 +197,6 @@
|
|
204
197
|
"TWITTER_TIMELINE"
|
205
198
|
],
|
206
199
|
"bid_amount_local_micro": 500000,
|
207
|
-
"automatically_select_bid": false,
|
208
200
|
"advertiser_domain": null,
|
209
201
|
"primary_web_event_tag": null,
|
210
202
|
"charge_by": "ENGAGEMENT",
|
@@ -231,7 +223,6 @@
|
|
231
223
|
"TWITTER_SEARCH"
|
232
224
|
],
|
233
225
|
"bid_amount_local_micro": 50000000,
|
234
|
-
"automatically_select_bid": false,
|
235
226
|
"advertiser_domain": null,
|
236
227
|
"primary_web_event_tag": null,
|
237
228
|
"charge_by": "ENGAGEMENT",
|
@@ -258,7 +249,6 @@
|
|
258
249
|
"TWITTER_TIMELINE"
|
259
250
|
],
|
260
251
|
"bid_amount_local_micro": 2009999,
|
261
|
-
"automatically_select_bid": false,
|
262
252
|
"advertiser_domain": null,
|
263
253
|
"primary_web_event_tag": null,
|
264
254
|
"charge_by": "ENGAGEMENT",
|
@@ -0,0 +1,17 @@
|
|
1
|
+
{
|
2
|
+
"request": {
|
3
|
+
"params": {
|
4
|
+
"tracking_tag_id": "7035",
|
5
|
+
"account_id": "18ce54uhdu0"
|
6
|
+
}
|
7
|
+
},
|
8
|
+
"data": {
|
9
|
+
"line_item_id": "dmbc0",
|
10
|
+
"tracking_tag_url": "https://ad.doubleclick.net/ddm/trackimp/N1234.2061500TWITTER-OFFICIAL/B9156151.125630439;dc_trk_aid=1355;dc_trk_cid=8675309",
|
11
|
+
"tracking_tag_type": "IMPRESSION_TAG",
|
12
|
+
"id": "7035",
|
13
|
+
"created_at": "2021-11-16T00:12:26Z",
|
14
|
+
"updated_at": "2021-11-16T00:12:26Z",
|
15
|
+
"deleted": false
|
16
|
+
}
|
17
|
+
}
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# Copyright (C) 2019 Twitter, Inc.
|
3
|
+
|
4
|
+
require 'spec_helper'
|
5
|
+
|
6
|
+
describe TwitterAds::TrackingTag do
|
7
|
+
|
8
|
+
before(:each) do
|
9
|
+
stub_fixture(:get, :accounts_all, "#{ADS_API}/accounts")
|
10
|
+
stub_fixture(:get, :accounts_load, "#{ADS_API}/accounts/2iqph")
|
11
|
+
end
|
12
|
+
|
13
|
+
let(:client) do
|
14
|
+
Client.new(
|
15
|
+
Faker::Lorem.characters(15),
|
16
|
+
Faker::Lorem.characters(40),
|
17
|
+
"123456-#{Faker::Lorem.characters(40)}",
|
18
|
+
Faker::Lorem.characters(40)
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
let(:account) { client.accounts.first }
|
23
|
+
|
24
|
+
# check model properties
|
25
|
+
subject { described_class.new(account) }
|
26
|
+
read = %w(id)
|
27
|
+
write = %w(line_item_id tracking_tag_type tracking_tag_url)
|
28
|
+
include_examples 'object property check', read, write
|
29
|
+
|
30
|
+
describe '#create' do
|
31
|
+
|
32
|
+
let(:tracking_tag) { TwitterAds::TrackingTag.new(account) }
|
33
|
+
let!(:resource) { "#{ADS_API}/accounts/#{account.id}/tracking_tags" }
|
34
|
+
let!(:rel_path) { "/#{TwitterAds::API_VERSION}/accounts/#{account.id}/tracking_tags" }
|
35
|
+
|
36
|
+
before(:each) do
|
37
|
+
stub_fixture(:post, :tracking_tags_load, /#{resource}\?.*/)
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'creates post request with line item ID and url' do
|
41
|
+
line_item_id = 'axe123'
|
42
|
+
tracking_tag_url = 'https://ad.doubleclick.net/ddm/trackimp/N1234.2061500TWITTER-OFFICIAL/B9156151.125630439;dc_trk_aid=1355;dc_trk_cid=8675309'
|
43
|
+
tracking_tag_type = 'IMPRESSION_TAG'
|
44
|
+
|
45
|
+
params = {
|
46
|
+
line_item_id: line_item_id,
|
47
|
+
tracking_tag_url: tracking_tag_url,
|
48
|
+
tracking_tag_type: tracking_tag_type
|
49
|
+
}
|
50
|
+
args = [account.client, :post, rel_path, params: params]
|
51
|
+
|
52
|
+
expect(Request).to receive(:new).with(*args).and_call_original
|
53
|
+
tracking_tag.create(line_item_id, tracking_tag_url)
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
@@ -3,12 +3,12 @@
|
|
3
3
|
|
4
4
|
require 'spec_helper'
|
5
5
|
|
6
|
-
describe TwitterAds::
|
6
|
+
describe TwitterAds::AudienceEstimate do
|
7
7
|
|
8
8
|
before(:each) do
|
9
9
|
stub_fixture(:get, :accounts_all, "#{ADS_API}/accounts")
|
10
10
|
stub_fixture(:get, :accounts_load, "#{ADS_API}/accounts/2iqph")
|
11
|
-
stub_fixture(:post, :
|
11
|
+
stub_fixture(:post, :audience_estimate, "#{ADS_API}/accounts/2iqph/audience_estimate")
|
12
12
|
end
|
13
13
|
|
14
14
|
let(:client) do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: twitter-ads
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 10.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Babich
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2021-
|
15
|
+
date: 2021-11-18 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: multi_json
|
@@ -68,6 +68,7 @@ files:
|
|
68
68
|
- lib/twitter-ads/campaign/organic_tweet.rb
|
69
69
|
- lib/twitter-ads/campaign/promotable_user.rb
|
70
70
|
- lib/twitter-ads/campaign/targeting_criteria.rb
|
71
|
+
- lib/twitter-ads/campaign/tracking_tags.rb
|
71
72
|
- lib/twitter-ads/campaign/tweet.rb
|
72
73
|
- lib/twitter-ads/client.rb
|
73
74
|
- lib/twitter-ads/creative/account_media.rb
|
@@ -104,7 +105,7 @@ files:
|
|
104
105
|
- lib/twitter-ads/restapi.rb
|
105
106
|
- lib/twitter-ads/settings/tax.rb
|
106
107
|
- lib/twitter-ads/settings/user.rb
|
107
|
-
- lib/twitter-ads/targeting/
|
108
|
+
- lib/twitter-ads/targeting/audience_estimate.rb
|
108
109
|
- lib/twitter-ads/targeting_criteria/app_store_category.rb
|
109
110
|
- lib/twitter-ads/targeting_criteria/conversation.rb
|
110
111
|
- lib/twitter-ads/targeting_criteria/device.rb
|
@@ -124,7 +125,7 @@ files:
|
|
124
125
|
- spec/fixtures/accounts_load.json
|
125
126
|
- spec/fixtures/app_lists_all.json
|
126
127
|
- spec/fixtures/app_lists_load.json
|
127
|
-
- spec/fixtures/
|
128
|
+
- spec/fixtures/audience_estimate.json
|
128
129
|
- spec/fixtures/campaigns_all.json
|
129
130
|
- spec/fixtures/campaigns_load.json
|
130
131
|
- spec/fixtures/custom_audiences_all.json
|
@@ -142,6 +143,7 @@ files:
|
|
142
143
|
- spec/fixtures/reach_estimate.json
|
143
144
|
- spec/fixtures/tailored_audiences_all.json
|
144
145
|
- spec/fixtures/targeted_audiences.json
|
146
|
+
- spec/fixtures/tracking_tags_load.json
|
145
147
|
- spec/fixtures/tweet_previews.json
|
146
148
|
- spec/fixtures/videos_all.json
|
147
149
|
- spec/fixtures/videos_load.json
|
@@ -154,6 +156,7 @@ files:
|
|
154
156
|
- spec/twitter-ads/campaign/app_list_spec.rb
|
155
157
|
- spec/twitter-ads/campaign/line_item_spec.rb
|
156
158
|
- spec/twitter-ads/campaign/targeting_criteria_spec.rb
|
159
|
+
- spec/twitter-ads/campaign/tracking_tag_spec.rb
|
157
160
|
- spec/twitter-ads/campaign/tweet_spec.rb
|
158
161
|
- spec/twitter-ads/client_spec.rb
|
159
162
|
- spec/twitter-ads/creative/media_creative_spec.rb
|
@@ -164,7 +167,7 @@ files:
|
|
164
167
|
- spec/twitter-ads/placements_spec.rb
|
165
168
|
- spec/twitter-ads/rate_limit_spec.rb
|
166
169
|
- spec/twitter-ads/retry_count_spec.rb
|
167
|
-
- spec/twitter-ads/targeting/
|
170
|
+
- spec/twitter-ads/targeting/audience_estimate_spec.rb
|
168
171
|
- spec/twitter-ads/utils_spec.rb
|
169
172
|
- twitter-ads.gemspec
|
170
173
|
homepage: https://github.com/twitterdev/twitter-ruby-ads-sdk
|
@@ -196,7 +199,7 @@ test_files:
|
|
196
199
|
- spec/fixtures/accounts_load.json
|
197
200
|
- spec/fixtures/app_lists_all.json
|
198
201
|
- spec/fixtures/app_lists_load.json
|
199
|
-
- spec/fixtures/
|
202
|
+
- spec/fixtures/audience_estimate.json
|
200
203
|
- spec/fixtures/campaigns_all.json
|
201
204
|
- spec/fixtures/campaigns_load.json
|
202
205
|
- spec/fixtures/custom_audiences_all.json
|
@@ -214,6 +217,7 @@ test_files:
|
|
214
217
|
- spec/fixtures/reach_estimate.json
|
215
218
|
- spec/fixtures/tailored_audiences_all.json
|
216
219
|
- spec/fixtures/targeted_audiences.json
|
220
|
+
- spec/fixtures/tracking_tags_load.json
|
217
221
|
- spec/fixtures/tweet_previews.json
|
218
222
|
- spec/fixtures/videos_all.json
|
219
223
|
- spec/fixtures/videos_load.json
|
@@ -226,6 +230,7 @@ test_files:
|
|
226
230
|
- spec/twitter-ads/campaign/app_list_spec.rb
|
227
231
|
- spec/twitter-ads/campaign/line_item_spec.rb
|
228
232
|
- spec/twitter-ads/campaign/targeting_criteria_spec.rb
|
233
|
+
- spec/twitter-ads/campaign/tracking_tag_spec.rb
|
229
234
|
- spec/twitter-ads/campaign/tweet_spec.rb
|
230
235
|
- spec/twitter-ads/client_spec.rb
|
231
236
|
- spec/twitter-ads/creative/media_creative_spec.rb
|
@@ -236,5 +241,5 @@ test_files:
|
|
236
241
|
- spec/twitter-ads/placements_spec.rb
|
237
242
|
- spec/twitter-ads/rate_limit_spec.rb
|
238
243
|
- spec/twitter-ads/retry_count_spec.rb
|
239
|
-
- spec/twitter-ads/targeting/
|
244
|
+
- spec/twitter-ads/targeting/audience_estimate_spec.rb
|
240
245
|
- spec/twitter-ads/utils_spec.rb
|