twitter-ads 8.0.0 → 9.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ffe2cf6607163db38e5a09d5cc26e6bd38e700ac5a9a63be8bfaac8837f15725
4
- data.tar.gz: 58becc51cdae11dbb55f40f7bc5aaccb024efb250e6f34d3020cc310cfeb3cdb
3
+ metadata.gz: 3ab4c35b2b3ff9a24fb3475717b923563c484d80b2ac7e981c18570ddbaebdbc
4
+ data.tar.gz: e5f228604a745b96a063c59d80248bd976f27a4cc43243cd34a0f45a55548cb0
5
5
  SHA512:
6
- metadata.gz: 49bec3d898f35d4b0b9e8a95244910230f0c580f6eaf1b111ce71661ea247df2ec5f698600b8a86537889bfe4f4cf2be7a34745f9ffef04be99ad6a9c789f67f
7
- data.tar.gz: 34c513a59fd03118f3c9273401867c1d5e1a8d81dfcb0a9a9891549350639d68d86dd1670e6822aaa3aab171d474c70b28f161350680ed767f702f39dcbe63cc
6
+ metadata.gz: d17c433739bebd2d74a7c62c20e58819f5f4ea29e241b3dd53ec4baeba4e55213761a27f40833d497b356638a8057770ab7a16f73578df96732555f511ddd43c
7
+ data.tar.gz: 2aff371a6a36636f82adce64fa00766bcd6e5257a6c288ea58f06740df3bb879008bc1e2afe8b286c8b0b1e431ce5bf413a011562cae9e5594f65133f5d63752
data/lib/twitter-ads.rb CHANGED
@@ -29,7 +29,7 @@ require 'twitter-ads/http/response'
29
29
 
30
30
  require 'twitter-ads/restapi.rb'
31
31
 
32
- require 'twitter-ads/audiences/tailored_audience'
32
+ require 'twitter-ads/audiences/custom_audience'
33
33
 
34
34
  require 'twitter-ads/campaign/app_list'
35
35
  require 'twitter-ads/campaign/campaign'
@@ -58,6 +58,7 @@ require 'twitter-ads/targeting_criteria/app_store_category'
58
58
 
59
59
  require 'twitter-ads/creative/account_media'
60
60
  require 'twitter-ads/creative/cards_fetch'
61
+ require 'twitter-ads/creative/cards'
61
62
  require 'twitter-ads/creative/image_app_download_card'
62
63
  require 'twitter-ads/creative/image_conversation_card'
63
64
  require 'twitter-ads/creative/media_creative'
@@ -232,9 +232,9 @@ module TwitterAds
232
232
  load_resource(AppList, id, opts)
233
233
  end
234
234
 
235
- # Returns a collection of tailored audiences available to the current account.
235
+ # Returns a collection of custom audiences available to the current account.
236
236
  #
237
- # @param id [String] The TailoredAudience ID value.
237
+ # @param id [String] The CustomAudience ID value.
238
238
  # @param opts [Hash] A Hash of extended options.
239
239
  # @option opts [Boolean] :with_deleted Indicates if deleted items should be included.
240
240
  # @option opts [String] :sort_by The object param to sort the API response by.
@@ -242,8 +242,8 @@ module TwitterAds
242
242
  # @since 0.3.0
243
243
  #
244
244
  # @return A Cursor or object instance.
245
- def tailored_audiences(id = nil, opts = {})
246
- load_resource(TailoredAudience, id, opts)
245
+ def custom_audiences(id = nil, opts = {})
246
+ load_resource(CustomAudience, id, opts)
247
247
  end
248
248
 
249
249
  def authenticated_user_access
@@ -2,7 +2,7 @@
2
2
  # Copyright (C) 2019 Twitter, Inc.
3
3
 
4
4
  module TwitterAds
5
- class TailoredAudience
5
+ class CustomAudience
6
6
 
7
7
  include TwitterAds::DSL
8
8
  include TwitterAds::Resource
@@ -19,19 +19,19 @@ module TwitterAds
19
19
 
20
20
  property :audience_size, read_only: true
21
21
  property :audience_type, read_only: true
22
- property :metadata, read_only: true
23
- property :owner_account_id, read_only: true
24
22
  property :partner_source, read_only: true
25
23
  property :reasons_not_targetable, read_only: true
26
24
  property :targetable, type: :bool, read_only: true
27
25
  property :targetable_types, read_only: true
26
+ property :permission_level, read_only: true
27
+ property :owner_account_id, read_only: true
28
28
 
29
29
  RESOURCE_COLLECTION = "/#{TwitterAds::API_VERSION}/" \
30
- 'accounts/%{account_id}/tailored_audiences' # @api private
30
+ 'accounts/%{account_id}/custom_audiences' # @api private
31
31
  RESOURCE = "/#{TwitterAds::API_VERSION}/" \
32
- 'accounts/%{account_id}/tailored_audiences/%{id}' # @api private
32
+ 'accounts/%{account_id}/custom_audiences/%{id}' # @api private
33
33
  RESOURCE_USERS = "/#{TwitterAds::API_VERSION}/" \
34
- 'accounts/%{account_id}/tailored_audiences/' \
34
+ 'accounts/%{account_id}/custom_audiences/' \
35
35
  '%{id}/users' # @api private
36
36
 
37
37
  LIST_TYPES = %w(
@@ -55,17 +55,17 @@ module TwitterAds
55
55
 
56
56
  class << self
57
57
 
58
- # Creates a new tailored audience.
58
+ # Creates a new custom audience.
59
59
  #
60
60
  # @example
61
- # audience = TailoredAudience.create(account, 'my list')
61
+ # audience = CustomAudience.create(account, 'my list')
62
62
  #
63
63
  # @param account [Account] The account object instance.
64
- # @param name [String] The tailored audience name.
64
+ # @param name [String] The custom audience name.
65
65
  #
66
66
  # @since 4.0
67
67
  #
68
- # @return [TailoredAudience] The newly created tailored audience instance.
68
+ # @return [CustomAudience] The newly created custom audience instance.
69
69
  def create(account, name)
70
70
  audience = new(account)
71
71
  params = { name: name }
@@ -76,7 +76,7 @@ module TwitterAds
76
76
 
77
77
  end
78
78
 
79
- # Deletes the current tailored audience instance.
79
+ # Deletes the current custom audience instance.
80
80
  #
81
81
  # @example
82
82
  # audience.delete!
@@ -85,7 +85,7 @@ module TwitterAds
85
85
  #
86
86
  # @since 0.3.0
87
87
  #
88
- # @return [self] Returns the tailored audience instance refreshed from the API.
88
+ # @return [self] Returns the custom audience instance refreshed from the API.
89
89
  def delete!
90
90
  resource = RESOURCE % { account_id: account.id, id: id }
91
91
  response = Request.new(account.client, :delete, resource).perform
@@ -95,11 +95,11 @@ module TwitterAds
95
95
  # This is a private API and requires allowlisting from Twitter.
96
96
  #
97
97
  # This endpoint will allow partners to add, update and remove users from a given
98
- # tailored_audience_id.
98
+ # custom_audience_id.
99
99
  # The endpoint will also accept multiple user identifier types per user as well.
100
100
  #
101
101
  # @example
102
- # tailored_audience.users(
102
+ # custom_audience.users(
103
103
  # account,
104
104
  # [
105
105
  # {
@@ -194,7 +194,7 @@ module TwitterAds
194
194
  end
195
195
  end
196
196
 
197
- class TailoredAudiencePermission
197
+ class CustomAudiencePermission
198
198
 
199
199
  include TwitterAds::DSL
200
200
  include TwitterAds::Resource
@@ -207,16 +207,16 @@ module TwitterAds
207
207
  property :deleted, type: :bool, read_only: true
208
208
 
209
209
  property :id
210
- property :tailored_audience_id
210
+ property :custom_audience_id
211
211
  property :granted_account_id
212
212
  property :permission_level
213
213
 
214
214
  RESOURCE_COLLECTION = "/#{TwitterAds::API_VERSION}/" \
215
- 'accounts/%{account_id}/tailored_audiences/' \
216
- '%{tailored_audience_id}/permissions' # @api private
215
+ 'accounts/%{account_id}/custom_audiences/' \
216
+ '%{custom_audience_id}/permissions' # @api private
217
217
  RESOURCE = "/#{TwitterAds::API_VERSION}/" \
218
- 'accounts/%{account_id}/tailored_audiences/' \
219
- '%{tailored_audience_id}/permissions/%{id}' # @api private
218
+ 'accounts/%{account_id}/custom_audiences/' \
219
+ '%{custom_audience_id}/permissions/%{id}' # @api private
220
220
 
221
221
  def initialize(account)
222
222
  @account = account
@@ -226,22 +226,22 @@ module TwitterAds
226
226
  class << self
227
227
 
228
228
  # Retrieve details for some or
229
- # all permissions associated with the specified tailored audience.
229
+ # all permissions associated with the specified custom audience.
230
230
  #
231
231
  # @exapmle
232
- # permissions = TailoredAudiencePermission.all(account, '36n4f')
232
+ # permissions = CustomAudiencePermission.all(account, '36n4f')
233
233
  #
234
234
  # @param account [Account] The account object instance.
235
- # @param tailored_audience_id [String] The tailored audience id.
235
+ # @param custom_audience_id [String] The custom audience id.
236
236
  #
237
237
  # @since 5.2.0
238
238
  #
239
- # @return [TailoredAudiencePermission] The tailored audience permission instance.
240
- def all(account, tailored_audience_id, opts = {})
239
+ # @return [CustomAudiencePermission] The custom audience permission instance.
240
+ def all(account, custom_audience_id, opts = {})
241
241
  params = {}.merge!(opts)
242
242
  resource = RESOURCE_COLLECTION % {
243
243
  account_id: account.id,
244
- tailored_audience_id: tailored_audience_id
244
+ custom_audience_id: custom_audience_id
245
245
  }
246
246
  request = Request.new(account.client, :get, resource, params: params)
247
247
  Cursor.new(self, request, init_with: [account])
@@ -250,7 +250,7 @@ module TwitterAds
250
250
  end
251
251
 
252
252
  # Saves or updates the current object instance
253
- # depending on the presence of `object.tailored_audience_id`.
253
+ # depending on the presence of `object.custom_audience_id`.
254
254
  #
255
255
  # @exapmle
256
256
  # object.save
@@ -261,14 +261,14 @@ module TwitterAds
261
261
  def save
262
262
  resource = RESOURCE_COLLECTION % {
263
263
  account_id: account.id,
264
- tailored_audience_id: tailored_audience_id
264
+ custom_audience_id: custom_audience_id
265
265
  }
266
266
  params = to_params
267
267
  response = Request.new(account.client, :post, resource, params: params).perform
268
268
  from_response(response.body[:data])
269
269
  end
270
270
 
271
- # Deletes the current or specified tailored audience permission.
271
+ # Deletes the current or specified custom audience permission.
272
272
  #
273
273
  # @example
274
274
  # object.delete!
@@ -281,7 +281,7 @@ module TwitterAds
281
281
  def delete!
282
282
  resource = RESOURCE % {
283
283
  account_id: account.id,
284
- tailored_audience_id: tailored_audience_id,
284
+ custom_audience_id: custom_audience_id,
285
285
  id: @id
286
286
  }
287
287
  response = Request.new(account.client, :delete, resource).perform
@@ -18,18 +18,19 @@ module TwitterAds
18
18
 
19
19
  property :advertiser_domain
20
20
  property :android_app_store_identifier
21
+ property :audience_expansion
21
22
  property :automatically_select_bid
22
23
  property :bid_amount_local_micro
23
- property :bid_unit
24
+ property :bid_strategy
24
25
  property :campaign_id
25
26
  property :categories
26
- property :charge_by
27
27
  property :end_time, type: :time
28
28
  property :entity_status
29
+ property :goal
29
30
  property :ios_app_store_identifier
30
31
  property :name
31
32
  property :objective
32
- property :optimization
33
+ property :pay_by
33
34
  property :placements
34
35
  property :primary_web_event_tag
35
36
  property :product_type
@@ -38,9 +39,7 @@ module TwitterAds
38
39
 
39
40
  # beta (not yet generally available)
40
41
  property :advertiser_user_id
41
- property :bid_type
42
42
  property :tracking_tags
43
- property :audience_expansion
44
43
 
45
44
  # sdk only
46
45
  property :to_delete, type: :bool
@@ -3,7 +3,7 @@
3
3
 
4
4
  module TwitterAds
5
5
 
6
- API_VERSION = '8'
6
+ API_VERSION = '9'
7
7
 
8
8
  # The Ads API Client class which functions as a
9
9
  # container for basic API consumer information.
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+ # Copyright (C) 2019 Twitter, Inc.
3
+
4
+ module TwitterAds
5
+ module Creative
6
+
7
+ class Cards
8
+
9
+ include TwitterAds::DSL
10
+ include TwitterAds::Resource
11
+ include TwitterAds::Persistence
12
+
13
+ attr_reader :account
14
+
15
+ property :card_uri, read_only: true
16
+ property :created_at, type: :time, read_only: true
17
+ property :deleted, type: :bool, read_only: true
18
+ property :updated_at, type: :time, read_only: true
19
+ # these are writable, but not in the sense that they can be set on an object and then saved
20
+ property :name, read_only: true
21
+ property :components, read_only: true
22
+
23
+ RESOURCE = "/#{TwitterAds::API_VERSION}/" +
24
+ 'accounts/%{account_id}/cards' # @api private
25
+
26
+ def load(*)
27
+ raise ArgumentError.new(
28
+ "'Cards' object has no attribute 'load'")
29
+ end
30
+
31
+ def reload(*)
32
+ raise ArgumentError.new(
33
+ "'Cards' object has no attribute 'reload'")
34
+ end
35
+
36
+ def create(account, name, components)
37
+ resource = RESOURCE % { account_id: account.id }
38
+ params = { 'name': name, 'components': components }
39
+ headers = { 'Content-Type' => 'application/json' }
40
+ response = Request.new(account.client,
41
+ :post,
42
+ resource,
43
+ headers: headers,
44
+ body: params.to_json).perform
45
+ from_response(response.body[:data])
46
+ end
47
+
48
+ def initialize(account)
49
+ @account = account
50
+ self
51
+ end
52
+
53
+ end
54
+
55
+ end
56
+ end
@@ -59,32 +59,31 @@ module TwitterAds
59
59
  end
60
60
  end
61
61
 
62
- module BidUnit
63
- APP_CLICK = 'APP_CLICK'
64
- APP_INSTALL = 'APP_INSTALL'
65
- ENGAGEMENT = 'ENGAGEMENT'
66
- FOLLOW = 'FOLLOW'
67
- LEAD = 'LEAD'
68
- LINK_CLICK = 'LINK_CLICK'
69
- VIEW = 'VIEW'
62
+ module Goal
63
+ APP_CLICKS = 'APP_CLICKS'
64
+ APP_INSTALLS = 'APP_INSTALLS'
65
+ ENGAGEMENT = 'ENGAGEMENT'
66
+ FOLLOWERS = 'FOLLOWERS'
67
+ LINK_CLICKS = 'LINK_CLICKS'
68
+ MAX_REACH = 'MAX_REACH'
69
+ PREROLL = 'PREROLL'
70
+ PREROLL_STARTS = 'PREROLL_STARTS'
71
+ REACH_WITH_ENGAGEMENT = 'REACH_WITH_ENGAGEMENT'
72
+ VIDEO_VIEW = 'VIDEO_VIEW'
70
73
  VIEW_3S_100PCT = 'VIEW_3S_100PCT'
74
+ VIEW_6S = 'VIEW_6S'
75
+ VIEW_15S = 'VIEW_15S'
76
+ WEBSITE_CONVERSIONS = 'WEBSITE_CONVERSIONS'
71
77
  end
72
78
 
73
- module BidType
79
+ module BidStrategy
74
80
  MAX = 'MAX'
75
81
  AUTO = 'AUTO'
76
82
  TARGET = 'TARGET'
77
83
  end
78
84
 
79
- module ChargeBy
80
- APP_CLICK = 'APP_CLICK'
81
- APP_INSTALL = 'APP_INSTALL'
82
- ENGAGEMENT = 'ENGAGEMENT'
83
- FOLLOW = 'FOLLOW'
84
- LEAD = 'LEAD'
85
- LINK_CLICK = 'LINK_CLICK'
86
- VIEW = 'VIEW'
87
- VIEW_3S_100PCT = 'VIEW_3S_100PCT'
85
+ module PayBy
86
+ APP_CLICK = 'APP_CLICK'
88
87
  end
89
88
 
90
89
  module MetricGroup
@@ -147,14 +146,6 @@ module TwitterAds
147
146
  VIDEO = 'VIDEO'
148
147
  end
149
148
 
150
- module Optimizations
151
- APP_CLICKS = 'APP_CLICKS'
152
- APP_INSTALLS = 'APP_INSTALLS'
153
- DEFAULT = 'DEFAULT'
154
- ENGAGEMENTS = 'ENGAGEMENTS'
155
- WEBSITE_CONVERSIONS = 'WEBSITE_CONVERSIONS'
156
- end
157
-
158
149
  module Granularity
159
150
  HOUR = 'HOUR'
160
151
  DAY = 'DAY'
@@ -30,6 +30,7 @@ module TwitterAds
30
30
  property :metric_groups, read_only: true
31
31
 
32
32
  ANALYTICS_MAP = {
33
+ 'TwitterAds::Account' => Entity::ACCOUNT,
33
34
  'TwitterAds::Campaign' => Entity::CAMPAIGN,
34
35
  'TwitterAds::LineItem' => Entity::LINE_ITEM,
35
36
  'TwitterAds::OrganicTweet' => Entity::ORGANIC_TWEET,
@@ -2,5 +2,5 @@
2
2
  # Copyright (C) 2019 Twitter, Inc.
3
3
 
4
4
  module TwitterAds
5
- VERSION = '8.0.0'
5
+ VERSION = '9.0.0'
6
6
  end
@@ -0,0 +1,67 @@
1
+ {
2
+ "request": {
3
+ "params": {
4
+ "account_id": "2iqph"
5
+ }
6
+ },
7
+ "data": [
8
+ {
9
+ "targetable": false,
10
+ "name": "TA #2",
11
+ "targetable_types": [
12
+ "WEB",
13
+ "EXCLUDED_WEB"
14
+ ],
15
+ "audience_type": "WEB",
16
+ "id": "abc2",
17
+ "reasons_not_targetable": [
18
+ "TOO_SMALL"
19
+ ],
20
+ "list_type": null,
21
+ "created_at": "2014-03-09T20:35:41Z",
22
+ "updated_at": "2014-06-11T09:38:06Z",
23
+ "partner_source": "OTHER",
24
+ "deleted": false,
25
+ "audience_size": null
26
+ },
27
+ {
28
+ "targetable": true,
29
+ "name": "TA #1",
30
+ "targetable_types": [
31
+ "CRM",
32
+ "EXCLUDED_CRM"
33
+ ],
34
+ "audience_type": "CRM",
35
+ "id": "abc1",
36
+ "reasons_not_targetable": [],
37
+ "list_type": "DEVICE_ID",
38
+ "created_at": "2014-05-22T17:37:12Z",
39
+ "updated_at": "2014-05-22T21:05:33Z",
40
+ "partner_source": "OTHER",
41
+ "deleted": false,
42
+ "audience_size": null
43
+ },
44
+ {
45
+ "targetable": false,
46
+ "name": "TA #3",
47
+ "targetable_types": [
48
+ "CRM",
49
+ "EXCLUDED_CRM"
50
+ ],
51
+ "audience_type": "CRM",
52
+ "id": "abc3",
53
+ "reasons_not_targetable": [
54
+ "TOO_SMALL"
55
+ ],
56
+ "list_type": "EMAIL",
57
+ "created_at": "2014-05-22T21:43:45Z",
58
+ "updated_at": "2014-05-23T02:27:31Z",
59
+ "partner_source": "OTHER",
60
+ "deleted": false,
61
+ "audience_size": null
62
+ }
63
+ ],
64
+ "data_type": "tailored_audiences",
65
+ "total_count": 3,
66
+ "next_cursor": null
67
+ }
@@ -240,22 +240,22 @@ describe TwitterAds::Account do
240
240
 
241
241
  end
242
242
 
243
- describe '#tailored_audiences' do
243
+ describe '#custom_audiences' do
244
244
 
245
245
  before(:each) do
246
- resource_collection = "#{ADS_API}/accounts/#{account.id}/tailored_audiences"
247
- stub_fixture(:get, :tailored_audiences_all, resource_collection)
246
+ resource_collection = "#{ADS_API}/accounts/#{account.id}/custom_audiences"
247
+ stub_fixture(:get, :custom_audiences_all, resource_collection)
248
248
 
249
- resource = "#{ADS_API}/accounts/#{account.id}/tailored_audiences/abc2"
250
- stub_fixture(:get, :tailored_audiences_load, /#{resource}\?.*/)
249
+ resource = "#{ADS_API}/accounts/#{account.id}/custom_audiences/abc2"
250
+ stub_fixture(:get, :custom_audiences_load, /#{resource}\?.*/)
251
251
  end
252
252
 
253
253
  context 'with an id specified' do
254
254
 
255
- it 'successfully loads the specified tailored audience' do
256
- result = account.tailored_audiences('abc2')
255
+ it 'successfully loads the specified custom audience' do
256
+ result = account.custom_audiences('abc2')
257
257
  expect(result).not_to be_nil
258
- expect(result.class).to eq(TwitterAds::TailoredAudience)
258
+ expect(result.class).to eq(TwitterAds::CustomAudience)
259
259
  expect(result.id).to eq('abc2')
260
260
  end
261
261
 
@@ -263,11 +263,11 @@ describe TwitterAds::Account do
263
263
 
264
264
  context 'without an id specified' do
265
265
 
266
- it 'succesfully returns a cursor with all tailored audiences' do
267
- result = account.tailored_audiences
266
+ it 'succesfully returns a cursor with all custom audiences' do
267
+ result = account.custom_audiences
268
268
  expect(result.to_a.size).to eq(3)
269
269
  expect(result.class).to eq(TwitterAds::Cursor)
270
- expect(result.first.class).to eq(TwitterAds::TailoredAudience)
270
+ expect(result.first.class).to eq(TwitterAds::CustomAudience)
271
271
  expect(result.first.id).to eq('abc2')
272
272
  end
273
273
 
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+ # Copyright (C) 2019 Twitter, Inc.
3
+
4
+ require 'spec_helper'
5
+
6
+ describe TwitterAds::CustomAudience 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
+
27
+ read = %w(
28
+ id
29
+ created_at
30
+ updated_at
31
+ deleted
32
+ audience_size
33
+ audience_type
34
+ partner_source
35
+ reasons_not_targetable
36
+ targetable
37
+ targetable_types
38
+ permission_level
39
+ owner_account_id
40
+ )
41
+
42
+ write = %w(name list_type)
43
+
44
+ include_examples 'object property check', read, write
45
+
46
+ end
@@ -30,17 +30,21 @@ describe TwitterAds::LineItem do
30
30
  name
31
31
  campaign_id
32
32
  advertiser_domain
33
+ android_app_store_identifier
34
+ audience_expansion
33
35
  categories
34
- charge_by
36
+ pay_by
35
37
  objective
36
38
  entity_status
37
39
  primary_web_event_tag
38
40
  product_type
39
41
  placements
40
- bid_unit
42
+ bid_strategy
41
43
  automatically_select_bid
42
44
  bid_amount_local_micro
43
45
  total_budget_amount_local_micro
46
+ goal
47
+ ios_app_store_identifier
44
48
  )
45
49
  include_examples 'object property check', read, write
46
50
 
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: 8.0.0
4
+ version: 9.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: 2020-10-28 00:00:00.000000000 Z
15
+ date: 2021-07-16 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: multi_json
@@ -57,7 +57,7 @@ files:
57
57
  - bin/twitter-ads
58
58
  - lib/twitter-ads.rb
59
59
  - lib/twitter-ads/account.rb
60
- - lib/twitter-ads/audiences/tailored_audience.rb
60
+ - lib/twitter-ads/audiences/custom_audience.rb
61
61
  - lib/twitter-ads/campaign/advertiser_business_categories.rb
62
62
  - lib/twitter-ads/campaign/app_list.rb
63
63
  - lib/twitter-ads/campaign/campaign.rb
@@ -71,6 +71,7 @@ files:
71
71
  - lib/twitter-ads/campaign/tweet.rb
72
72
  - lib/twitter-ads/client.rb
73
73
  - lib/twitter-ads/creative/account_media.rb
74
+ - lib/twitter-ads/creative/cards.rb
74
75
  - lib/twitter-ads/creative/cards_fetch.rb
75
76
  - lib/twitter-ads/creative/draft_tweet.rb
76
77
  - lib/twitter-ads/creative/image_app_download_card.rb
@@ -126,6 +127,8 @@ files:
126
127
  - spec/fixtures/audience_summary.json
127
128
  - spec/fixtures/campaigns_all.json
128
129
  - spec/fixtures/campaigns_load.json
130
+ - spec/fixtures/custom_audiences_all.json
131
+ - spec/fixtures/custom_audiences_load.json
129
132
  - spec/fixtures/funding_instruments_all.json
130
133
  - spec/fixtures/funding_instruments_load.json
131
134
  - spec/fixtures/line_items_all.json
@@ -138,7 +141,6 @@ files:
138
141
  - spec/fixtures/promoted_tweets_load.json
139
142
  - spec/fixtures/reach_estimate.json
140
143
  - spec/fixtures/tailored_audiences_all.json
141
- - spec/fixtures/tailored_audiences_load.json
142
144
  - spec/fixtures/targeted_audiences.json
143
145
  - spec/fixtures/tweet_previews.json
144
146
  - spec/fixtures/videos_all.json
@@ -148,7 +150,7 @@ files:
148
150
  - spec/spec_helper.rb
149
151
  - spec/support/helpers.rb
150
152
  - spec/twitter-ads/account_spec.rb
151
- - spec/twitter-ads/audiences/tailored_audience_spec.rb
153
+ - spec/twitter-ads/audiences/custom_audience_spec.rb
152
154
  - spec/twitter-ads/campaign/app_list_spec.rb
153
155
  - spec/twitter-ads/campaign/line_item_spec.rb
154
156
  - spec/twitter-ads/campaign/targeting_criteria_spec.rb
@@ -184,54 +186,55 @@ required_rubygems_version: !ruby/object:Gem::Requirement
184
186
  - !ruby/object:Gem::Version
185
187
  version: 2.6.0
186
188
  requirements: []
187
- rubygems_version: 3.1.4
189
+ rubygems_version: 3.2.22
188
190
  signing_key:
189
191
  specification_version: 4
190
192
  summary: The officially supported Twitter Ads API SDK for Ruby.
191
193
  test_files:
192
- - spec/quality_spec.rb
193
- - spec/support/helpers.rb
194
- - spec/shared/properties.rb
195
- - spec/twitter-ads/audiences/tailored_audience_spec.rb
196
- - spec/twitter-ads/creative/promoted_account_spec.rb
197
- - spec/twitter-ads/creative/tweet_previews_spec.rb
198
- - spec/twitter-ads/creative/media_creative_spec.rb
199
- - spec/twitter-ads/creative/promoted_tweet_spec.rb
200
- - spec/twitter-ads/rate_limit_spec.rb
201
- - spec/twitter-ads/cursor_spec.rb
202
- - spec/twitter-ads/placements_spec.rb
203
- - spec/twitter-ads/client_spec.rb
204
- - spec/twitter-ads/account_spec.rb
205
- - spec/twitter-ads/targeting/audience_summary_spec.rb
206
- - spec/twitter-ads/retry_count_spec.rb
207
- - spec/twitter-ads/utils_spec.rb
208
- - spec/twitter-ads/campaign/app_list_spec.rb
209
- - spec/twitter-ads/campaign/targeting_criteria_spec.rb
210
- - spec/twitter-ads/campaign/tweet_spec.rb
211
- - spec/twitter-ads/campaign/line_item_spec.rb
212
- - spec/fixtures/promotable_users_load.json
213
- - spec/fixtures/promoted_tweets_load.json
194
+ - spec/fixtures/accounts_all.json
214
195
  - spec/fixtures/accounts_features.json
215
- - spec/fixtures/campaigns_all.json
216
- - spec/fixtures/line_items_load.json
217
- - spec/fixtures/tweet_previews.json
218
- - spec/fixtures/targeted_audiences.json
219
- - spec/fixtures/videos_all.json
220
- - spec/fixtures/tailored_audiences_all.json
221
- - spec/fixtures/funding_instruments_load.json
222
196
  - spec/fixtures/accounts_load.json
223
- - spec/fixtures/line_items_all.json
224
197
  - spec/fixtures/app_lists_all.json
225
- - spec/fixtures/placements.json
226
198
  - spec/fixtures/app_lists_load.json
199
+ - spec/fixtures/audience_summary.json
200
+ - spec/fixtures/campaigns_all.json
227
201
  - spec/fixtures/campaigns_load.json
228
- - spec/fixtures/accounts_all.json
202
+ - spec/fixtures/custom_audiences_all.json
203
+ - spec/fixtures/custom_audiences_load.json
204
+ - spec/fixtures/funding_instruments_all.json
205
+ - spec/fixtures/funding_instruments_load.json
206
+ - spec/fixtures/line_items_all.json
207
+ - spec/fixtures/line_items_load.json
208
+ - spec/fixtures/no_content.json
209
+ - spec/fixtures/placements.json
229
210
  - spec/fixtures/promotable_users_all.json
230
- - spec/fixtures/tailored_audiences_load.json
211
+ - spec/fixtures/promotable_users_load.json
231
212
  - spec/fixtures/promoted_tweets_all.json
232
- - spec/fixtures/videos_load.json
233
- - spec/fixtures/funding_instruments_all.json
213
+ - spec/fixtures/promoted_tweets_load.json
234
214
  - spec/fixtures/reach_estimate.json
235
- - spec/fixtures/no_content.json
236
- - spec/fixtures/audience_summary.json
215
+ - spec/fixtures/tailored_audiences_all.json
216
+ - spec/fixtures/targeted_audiences.json
217
+ - spec/fixtures/tweet_previews.json
218
+ - spec/fixtures/videos_all.json
219
+ - spec/fixtures/videos_load.json
220
+ - spec/quality_spec.rb
221
+ - spec/shared/properties.rb
237
222
  - spec/spec_helper.rb
223
+ - spec/support/helpers.rb
224
+ - spec/twitter-ads/account_spec.rb
225
+ - spec/twitter-ads/audiences/custom_audience_spec.rb
226
+ - spec/twitter-ads/campaign/app_list_spec.rb
227
+ - spec/twitter-ads/campaign/line_item_spec.rb
228
+ - spec/twitter-ads/campaign/targeting_criteria_spec.rb
229
+ - spec/twitter-ads/campaign/tweet_spec.rb
230
+ - spec/twitter-ads/client_spec.rb
231
+ - spec/twitter-ads/creative/media_creative_spec.rb
232
+ - spec/twitter-ads/creative/promoted_account_spec.rb
233
+ - spec/twitter-ads/creative/promoted_tweet_spec.rb
234
+ - spec/twitter-ads/creative/tweet_previews_spec.rb
235
+ - spec/twitter-ads/cursor_spec.rb
236
+ - spec/twitter-ads/placements_spec.rb
237
+ - spec/twitter-ads/rate_limit_spec.rb
238
+ - spec/twitter-ads/retry_count_spec.rb
239
+ - spec/twitter-ads/targeting/audience_summary_spec.rb
240
+ - spec/twitter-ads/utils_spec.rb
@@ -1,68 +0,0 @@
1
- # frozen_string_literal: true
2
- # Copyright (C) 2019 Twitter, Inc.
3
-
4
- require 'spec_helper'
5
-
6
- describe TwitterAds::TailoredAudience do
7
-
8
- before(:each) do
9
- stub_fixture(:get, :accounts_all, "#{ADS_API}/accounts")
10
- stub_fixture(:get,
11
- :tailored_audiences_load,
12
- "#{ADS_API}/accounts/2iqph/tailored_audiences/abc2?with_deleted=true")
13
- stub_fixture(:get,
14
- :targeted_audiences,
15
- "#{ADS_API}/accounts/2iqph/tailored_audiences/abc2/targeted")
16
- end
17
-
18
- let(:client) do
19
- Client.new(
20
- Faker::Lorem.characters(15),
21
- Faker::Lorem.characters(40),
22
- "123456-#{Faker::Lorem.characters(40)}",
23
- Faker::Lorem.characters(40)
24
- )
25
- end
26
-
27
- let(:account) { client.accounts.first }
28
- let(:tailored_audience) { described_class.load(account, 'abc2') }
29
- # check model properties
30
- subject { described_class.new(account) }
31
-
32
- read = %w(
33
- id
34
- created_at
35
- updated_at
36
- deleted
37
- owner_account_id
38
- audience_size
39
- audience_type
40
- metadata
41
- partner_source
42
- reasons_not_targetable
43
- targetable
44
- targetable_types
45
- )
46
-
47
- write = %w(name list_type)
48
-
49
- include_examples 'object property check', read, write
50
-
51
- describe '#targeted' do
52
-
53
- let(:cursor) { tailored_audience.targeted }
54
-
55
- it 'has all the correct properties' do
56
- result = cursor.first
57
- expect(result).to eq(cursor.instance_variable_get('@collection').first)
58
- expect(result).to be_instance_of(TwitterAds::TargetedTailoredAudience)
59
- expect(cursor).to be_instance_of(Cursor)
60
- end
61
-
62
- it 'raises error when TailoredAudience is not loaded' do
63
- result = TwitterAds::TailoredAudience.new(account)
64
- expect(result).to receive(:validate_loaded).and_call_original
65
- expect { result.targeted }.to raise_error(ArgumentError)
66
- end
67
- end
68
- end