twitter-ads 2.0.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1831dee8de9255d8b7b9a5131ebd8a2f7960cca7
4
- data.tar.gz: 180c8bb92cf67b4cf01fb662f6a39d9557cfae29
3
+ metadata.gz: c478e42cfbc201c9d7b1398f4839d3c7ed371516
4
+ data.tar.gz: 8d095aa46a24e63d4d82d458b3c212374e8af751
5
5
  SHA512:
6
- metadata.gz: 78279f2ea036bd2c39b5b603d0985d6d796f72a4cbfb8fe83355acd6ea4c3b0c9f6540c850d8c7ff15b82bec598e0b38c6f7457f11808151b9a8cb3e39929a5d
7
- data.tar.gz: c3dd5a42d10352ac6c39fe9064c3e30535a0741f4a15a958547845b8acfdc2127f5b1404e1730d2a7d36b33e48bc7813694a3bee2310ccd1cedbc5316f475f40
6
+ metadata.gz: a1580a6a6ced69b6697cff139584e179a0d2922aab01d655e836f085f5de8723b93fe57f7d831217493b0108413ff7bebe7c963772e3064115a7e3289e6a97e7
7
+ data.tar.gz: 77cc29877f848a55e04459c73ca8041769b1ce6043c499e1c2ea6fce5f13d8b48beb319c90e8867a9d696fc3954cbd3053e1c25898c11158a899e8dbf3eaa534
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
data/README.md CHANGED
@@ -24,7 +24,7 @@ account = client.accounts('c3won9gy')
24
24
 
25
25
  # load and update a specific campaign
26
26
  campaign = account.campaigns('4m0gjms')
27
- campaign.paused = true
27
+ campaign.entity_status = EntityStatus::PAUSED
28
28
  campaign.save
29
29
 
30
30
  # iterate through campaigns
data/lib/twitter-ads.rb CHANGED
@@ -27,6 +27,7 @@ require 'twitter-ads/http/request'
27
27
  require 'twitter-ads/http/response'
28
28
  require 'twitter-ads/http/ton_upload'
29
29
 
30
+ require 'twitter-ads/audiences/audience_intelligence'
30
31
  require 'twitter-ads/audiences/tailored_audience'
31
32
 
32
33
  require 'twitter-ads/campaign/app_list'
@@ -56,9 +57,11 @@ require 'twitter-ads/targeting_criteria/behavior_taxonomy'
56
57
  require 'twitter-ads/targeting_criteria/app_store_category'
57
58
 
58
59
  require 'twitter-ads/creative/account_media'
60
+ require 'twitter-ads/creative/cards_fetch'
59
61
  require 'twitter-ads/creative/image_app_download_card'
60
62
  require 'twitter-ads/creative/image_conversation_card'
61
63
  require 'twitter-ads/creative/media_creative'
64
+ require 'twitter-ads/creative/media_library'
62
65
  require 'twitter-ads/creative/promoted_account'
63
66
  require 'twitter-ads/creative/promoted_tweet'
64
67
  require 'twitter-ads/creative/scheduled_tweet'
@@ -67,6 +70,7 @@ require 'twitter-ads/creative/video_conversation_card'
67
70
  require 'twitter-ads/creative/video_website_card'
68
71
  require 'twitter-ads/creative/website_card'
69
72
  require 'twitter-ads/creative/video'
73
+ require 'twitter-ads/creative/poll_cards'
70
74
 
71
75
  require 'twitter-ads/targeting/reach_estimate'
72
76
 
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+ # Copyright (C) 2015 Twitter, Inc.
3
+
4
+ module TwitterAds
5
+ class AudienceIntelligence
6
+
7
+ include TwitterAds::DSL
8
+ include TwitterAds::Resource::InstanceMethods
9
+
10
+ attr_reader :account
11
+
12
+ # writable
13
+ property :conversation_type
14
+ property :targeting_inputs
15
+ property :audience_definition
16
+
17
+ # demographics-only
18
+ property :start_time, type: :time
19
+ property :end_time, type: :time
20
+
21
+ # read
22
+ property :operator_type, read_only: true
23
+ property :targeting_type, read_only: true
24
+ property :targeting_value, read_only: true
25
+ property :localized, read_only: true
26
+
27
+ RESOURCE_CONVERSATIONS = "/#{TwitterAds::API_VERSION}/" \
28
+ 'accounts/%{account_id}/audience_intelligence/' \
29
+ 'conversations'.freeze # @api private
30
+ RESOURCE_DEMOGRAPHICS = "/#{TwitterAds::API_VERSION}/" \
31
+ 'accounts/%{account_id}/audience_intelligence/' \
32
+ 'demographics'.freeze # @api private
33
+
34
+ def initialize(account)
35
+ @account = account
36
+ self
37
+ end
38
+
39
+ def conversations
40
+ headers = { 'Content-Type' => 'application/json' }
41
+ params = {
42
+ conversation_type: conversation_type,
43
+ audience_definition: audience_definition,
44
+ targeting_inputs: targeting_inputs
45
+ }
46
+ resource = RESOURCE_CONVERSATIONS % { account_id: account.id }
47
+ request = Request.new(account.client, :post, resource, body: params.to_json, headers: headers)
48
+ Cursor.new(self.class, request, init_with: [account])
49
+ end
50
+
51
+ def demographics
52
+ headers = { 'Content-Type' => 'application/json' }
53
+ params = {
54
+ audience_definition: audience_definition,
55
+ targeting_inputs: targeting_inputs
56
+ }
57
+ resource = RESOURCE_DEMOGRAPHICS % { account_id: account.id }
58
+ response = Request.new(
59
+ account.client,
60
+ :post,
61
+ resource,
62
+ body: params.to_json,
63
+ headers: headers).perform
64
+ response.body[:data]
65
+ # cannot use cursor here given that the response "keys" are dynmaic based on input values
66
+ end
67
+ end
68
+ end
@@ -11,7 +11,6 @@ module TwitterAds
11
11
 
12
12
  property :id, read_only: true
13
13
  property :name, read_only: true
14
- property :cancelled, read_only: true
15
14
  property :credit_limit_local_micro, read_only: true
16
15
  property :currency, read_only: true
17
16
  property :description, read_only: true
@@ -21,7 +20,7 @@ module TwitterAds
21
20
  property :updated_at, type: :time, read_only: true
22
21
  property :deleted, type: :bool, read_only: true
23
22
  property :able_to_fund, type: :bool, read_only: true
24
- property :paused, type: :bool, read_only: true
23
+ property :entity_status, read_only: true
25
24
  property :io_header, read_only: true
26
25
  property :reasons_not_able_to_fund, read_only: true
27
26
 
@@ -3,7 +3,7 @@
3
3
 
4
4
  module TwitterAds
5
5
 
6
- API_VERSION = '2'.freeze
6
+ API_VERSION = '3'.freeze
7
7
 
8
8
  # The Ads API Client class which functions as a
9
9
  # container for basic API consumer information.
@@ -0,0 +1,119 @@
1
+ # frozen_string_literal: true
2
+ # Copyright (C) 2015 Twitter, Inc.
3
+
4
+ module TwitterAds
5
+ module Creative
6
+
7
+ class CardsFetch
8
+
9
+ include TwitterAds::DSL
10
+ include TwitterAds::Resource
11
+ include TwitterAds::Persistence
12
+
13
+ attr_reader :account
14
+
15
+ property :app_country_code, read_only: true
16
+ property :app_cta, read_only: true
17
+ property :card_type, read_only: true
18
+ property :card_uri, read_only: true
19
+ property :content_duration_seconds, read_only: true
20
+ property :created_at, type: :time, read_only: true
21
+ property :deleted, type: :bool, read_only: true
22
+ property :duration_in_minutes, read_only: true
23
+ property :end_time, type: :time, read_only: true
24
+ property :first_choice, read_only: true
25
+ property :first_cta, read_only: true
26
+ property :first_cta_tweet, read_only: true
27
+ property :first_cta_welcome_message_id, read_only: true
28
+ property :fouth_choice, read_only: true
29
+ property :fouth_cta, read_only: true
30
+ property :fouth_cta_tweet, read_only: true
31
+ property :fourth_cta_welcome_message_id, read_only: true
32
+ property :googleplay_app_id, read_only: true
33
+ property :googleplay_deep_link, read_only: true
34
+ property :id, read_only: true
35
+ property :image, read_only: true
36
+ property :image_display_height, read_only: true
37
+ property :image_display_width, read_only: true
38
+ property :ipad_app_id, read_only: true
39
+ property :ipad_deep_link, read_only: true
40
+ property :iphone_app_id, read_only: true
41
+ property :iphone_deep_link, read_only: true
42
+ property :name, read_only: true
43
+ property :preview_url, read_only: true
44
+ property :recipient_user_id, read_only: true
45
+ property :second_choice, read_only: true
46
+ property :second_cta, read_only: true
47
+ property :second_cta_tweet, read_only: true
48
+ property :second_cta_welcome_message_id, read_only: true
49
+ property :start_time, type: :time, read_only: true
50
+ property :thank_you_text, read_only: true
51
+ property :thank_you_url, read_only: true
52
+ property :third_choice, read_only: true
53
+ property :third_cta, read_only: true
54
+ property :third_cta_tweet, read_only: true
55
+ property :third_cta_welcome_message_id, read_only: true
56
+ property :title, read_only: true
57
+ property :updated_at, type: :time, read_only: true
58
+ property :video_content_id, read_only: true
59
+ property :video_height, read_only: true
60
+ property :video_hls_url, read_only: true
61
+ property :video_owner_id, read_only: true
62
+ property :video_poster_height, read_only: true
63
+ property :video_poster_url, read_only: true
64
+ property :video_poster_width, read_only: true
65
+ property :video_width, read_only: true
66
+ property :video_url, read_only: true
67
+ property :website_dest_url, read_only: true
68
+ property :website_display_url, read_only: true
69
+ property :website_shortened_url, read_only: true
70
+ property :website_title, read_only: true
71
+ property :website_url, read_only: true
72
+ property :wide_app_image, read_only: true
73
+ property :id, read_only: true
74
+
75
+ FETCH_URI = "/#{TwitterAds::API_VERSION}/" +
76
+ 'accounts/%{account_id}/cards'.freeze # @api private
77
+ FETCH_ID = "/#{TwitterAds::API_VERSION}/" +
78
+ 'accounts/%{account_id}/cards/all/%{id}'.freeze # @api private
79
+
80
+ def all(*)
81
+ raise ArgumentError.new(
82
+ "'CardsFetch' object has no attribute 'all'")
83
+ end
84
+
85
+ def load(account, card_uri = nil, card_id = nil, with_deleted = nil, opts = {})
86
+ if (card_uri && card_id) || (card_uri.nil? && card_id.nil?)
87
+ raise ArgumentError.new('card_uri and card_id are exclusive parameters. ' \
88
+ 'Please supply one or the other, but not both.')
89
+ end
90
+
91
+ if card_uri
92
+ params = { card_uri: card_uri }.merge!(opts)
93
+ resource = FETCH_URI % { account_id: account.id }
94
+ else
95
+ params = { card_id: card_id }.merge!(opts)
96
+ resource = FETCH_ID % { account_id: account.id, id: card_id }
97
+ end
98
+
99
+ if with_deleted && TwitterAds::Utils.to_bool(with_deleted)
100
+ params = { with_deleted: true }.merge!(opts)
101
+ end
102
+
103
+ response = Request.new(account.client, :get, resource, params: params).perform
104
+ from_response(response.body[:data])
105
+ end
106
+
107
+ def reload!
108
+ load(@account, card_id: @id) if @id
109
+ end
110
+
111
+ def initialize(account)
112
+ @account = account
113
+ self
114
+ end
115
+
116
+ end
117
+
118
+ end
119
+ end
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+ # Copyright (C) 2015 Twitter, Inc.
3
+
4
+ module TwitterAds
5
+ module Creative
6
+
7
+ class MediaLibrary
8
+
9
+ include TwitterAds::DSL
10
+ include TwitterAds::Resource
11
+ include TwitterAds::Persistence
12
+
13
+ attr_reader :account
14
+
15
+ # read-only
16
+ property :aspect_ratio, read_only: true
17
+ property :created_at, type: :bool, read_only: true
18
+ property :deleted, type: :bool, read_only: true
19
+ property :duration, read_only: true
20
+ property :media_status, read_only: true
21
+ property :media_type, read_only: true
22
+ property :media_url, read_only: true
23
+ property :tweeted, type: :bool, read_only: true
24
+ property :updated_at, type: :time, read_only: true
25
+
26
+ # writable
27
+ property :media_category
28
+ property :media_id
29
+ property :media_key
30
+ property :description
31
+ property :file_name
32
+ property :name
33
+ property :poster_image_media_id
34
+ property :poster_image_media_key
35
+ property :title
36
+
37
+ RESOURCE_COLLECTION = "/#{TwitterAds::API_VERSION}/" +
38
+ 'accounts/%{account_id}/media_library'.freeze # @api private
39
+ RESOURCE = "/#{TwitterAds::API_VERSION}/" +
40
+ 'accounts/%{account_id}/media_library/%{id}'.freeze # @api private
41
+
42
+ def reload(account, opts = {})
43
+ if @media_key
44
+ resource = self.class::RESOURCE % { account_id: account.id, id: media_key }
45
+ response = Request.new(account.client, :get, resource, params: opts).perform
46
+ response.body[:data]
47
+ end
48
+ end
49
+
50
+ def save
51
+ params = to_params
52
+ if @media_key
53
+ resource = self.class::RESOURCE % { account_id: account.id, id: media_key }
54
+ response = Request.new(account.client, :put, resource, params: params).perform
55
+ else
56
+ resource = self.class::RESOURCE_COLLECTION % { account_id: account.id }
57
+ response = Request.new(account.client, :post, resource, params: params).perform
58
+ end
59
+ from_response(response.body[:data])
60
+ end
61
+
62
+ def delete!
63
+ resource = RESOURCE % { account_id: account.id, id: media_key }
64
+ response = Request.new(account.client, :delete, resource).perform
65
+ from_response(response.body[:data])
66
+ end
67
+
68
+ def initialize(account)
69
+ @account = account
70
+ self
71
+ end
72
+
73
+ end
74
+
75
+ end
76
+ end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+ # Copyright (C) 2015 Twitter, Inc.
3
+
4
+ module TwitterAds
5
+ module Creative
6
+
7
+ class PollCard
8
+
9
+ include TwitterAds::DSL
10
+ include TwitterAds::Resource
11
+ include TwitterAds::Persistence
12
+
13
+ attr_reader :account
14
+
15
+ property :card_type, read_only: true
16
+ property :card_uri, read_only: true
17
+ property :content_duration_seconds, read_only: true
18
+ property :created_at, type: :time, read_only: true
19
+ property :deleted, type: :bool, read_only: true
20
+ property :end_time, type: :time, read_only: true
21
+ property :id, read_only: true
22
+ property :image, read_only: true
23
+ property :image_display_height, read_only: true
24
+ property :image_display_width, read_only: true
25
+ property :preview_url, read_only: true
26
+ property :start_time, type: :time, read_only: true
27
+ property :updated_at, type: :time, read_only: true
28
+ property :video_height, read_only: true
29
+ property :video_hls_url, read_only: true
30
+ property :video_poster_height, read_only: true
31
+ property :video_poster_url, read_only: true
32
+ property :video_poster_width, read_only: true
33
+ property :video_url, read_only: true
34
+ property :video_width, read_only: true
35
+
36
+ property :duration_in_minutes
37
+ property :name
38
+ property :media_key
39
+ property :first_choice
40
+ property :second_choice
41
+ property :third_choice
42
+ property :fourth_choice
43
+
44
+ RESOURCE_COLLECTION = "/#{TwitterAds::API_VERSION}/" +
45
+ 'accounts/%{account_id}/cards/poll'.freeze # @api private
46
+ RESOURCE = "/#{TwitterAds::API_VERSION}/" +
47
+ 'accounts/%{account_id}/cards/poll/%{id}'.freeze # @api private
48
+
49
+ def initialize(account)
50
+ @account = account
51
+ self
52
+ end
53
+
54
+ end
55
+
56
+ end
57
+ end
@@ -128,6 +128,19 @@ module TwitterAds
128
128
  INTERSTITIAL_LANDSCAPE_TABLET = 'INTERSTITIAL_LANDSCAPE_TABLET'.freeze
129
129
  end
130
130
 
131
+ module MediaCategory
132
+ AMPLIFY_VIDEO = 'AMPLIFY_VIDEO'.freeze
133
+ TWEET_GIF = 'TWEET_GIF'.freeze
134
+ TWEET_IMAGE = 'TWEET_IMAGE'.freeze
135
+ TWEET_VIDEO = 'TWEET_VIDEO'.freeze
136
+ end
137
+
138
+ module MediaType
139
+ GIF = 'GIF'.freeze
140
+ IMAGE = 'IMAGE'.freeze
141
+ VIDEO = 'VIDEO'.freeze
142
+ end
143
+
131
144
  module Optimizations
132
145
  DEFAULT = 'DEFAULT'.freeze
133
146
  WEBSITE_CONVERSIONS = 'WEBSITE_CONVERSIONS'.freeze
@@ -198,5 +211,15 @@ module TwitterAds
198
211
  DOUBLE_CLICK = 'DOUBLE_CLICK'.freeze
199
212
  end
200
213
 
214
+ module ConversationType
215
+ EVENT = 'EVENT'.freeze
216
+ HANDLE = 'HANDLE'.freeze
217
+ HASHTAG = 'HASHTAG'.freeze
218
+ end
219
+
220
+ module AudienceDefinition
221
+ TARGETING_CRITERIA = 'TARGETING_CRITERIA'.freeze
222
+ KEYWORD_AUDIENCE = 'KEYWORD_AUDIENCE'.freeze
223
+ end
201
224
  end
202
225
  end
@@ -2,5 +2,5 @@
2
2
  # Copyright (C) 2015 Twitter, Inc.
3
3
 
4
4
  module TwitterAds
5
- VERSION = '2.0.0'.freeze
5
+ VERSION = '3.0.0'.freeze
6
6
  end
@@ -11,7 +11,7 @@
11
11
  "standard_delivery": true,
12
12
  "total_budget_amount_local_micro": null,
13
13
  "id": "2wap7",
14
- "paused": false,
14
+ "entity_status": "ACTIVE",
15
15
  "account_id": "2iqph",
16
16
  "currency": "USD",
17
17
  "created_at": "2015-08-12T20:26:24Z",
@@ -13,11 +13,11 @@
13
13
  "description": "Denesik, O'Reilly and Zulauf",
14
14
  "credit_limit_local_micro": null,
15
15
  "end_time": "2017-02-28T08:15:40Z",
16
- "cancelled": false,
17
16
  "id": "5aa0p",
18
- "paused": false,
17
+ "entity_status": "ACTIVE",
19
18
  "account_id": "2iqph",
20
19
  "reasons_not_able_to_fund": [],
20
+ "io_header": null,
21
21
  "currency": "USD",
22
22
  "funded_amount_local_micro": 5000000000,
23
23
  "created_at": "2015-08-19T01:35:10Z",
@@ -32,13 +32,13 @@
32
32
  "description": "Simonis-Barton",
33
33
  "credit_limit_local_micro": null,
34
34
  "end_time": "2012-07-12T06:59:59Z",
35
- "cancelled": false,
36
35
  "id": "7cdql",
37
- "paused": false,
36
+ "entity_status": "ACTIVE",
38
37
  "account_id": "2iqph",
39
38
  "reasons_not_able_to_fund": [
40
39
  "EXPIRED"
41
40
  ],
41
+ "io_header": null,
42
42
  "currency": "USD",
43
43
  "funded_amount_local_micro": 5000000000,
44
44
  "created_at": "2011-07-11T17:33:01Z",
@@ -53,11 +53,11 @@
53
53
  "description": "Farrell Group",
54
54
  "credit_limit_local_micro": 5000000000,
55
55
  "end_time": "2017-02-28T08:15:40Z",
56
- "cancelled": false,
57
56
  "id": "dhuk2",
58
- "paused": false,
57
+ "entity_status": "ACTIVE",
59
58
  "account_id": "2iqph",
60
59
  "reasons_not_able_to_fund": [],
60
+ "io_header": null,
61
61
  "currency": "USD",
62
62
  "funded_amount_local_micro": null,
63
63
  "created_at": "2015-08-19T01:35:10Z",
@@ -5,11 +5,11 @@
5
5
  "description": "Denesik, O'Reilly and Zulauf",
6
6
  "credit_limit_local_micro": null,
7
7
  "end_time": "2017-02-28T08:15:40Z",
8
- "cancelled": false,
9
8
  "id": "5aa0p",
10
- "paused": false,
9
+ "entity_status": "ACTIVE",
11
10
  "account_id": "2iqph",
12
11
  "reasons_not_able_to_fund": [],
12
+ "io_header": null,
13
13
  "currency": "USD",
14
14
  "funded_amount_local_micro": 5000000000,
15
15
  "created_at": "2015-08-19T01:35:10Z",
data/twitter-ads.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
8
8
  s.version = TwitterAds::VERSION
9
9
  s.platform = Gem::Platform::RUBY
10
10
  s.licenses = ['MIT']
11
- s.authors = ['Brandon Black', 'John Babich', 'Jacob Petrie']
11
+ s.authors = ['John Babich', 'Tushar Bhushan', 'Juan Shishido']
12
12
  s.email = ['twitterdev-ads@twitter.com']
13
13
  s.homepage = 'https://github.com/twitterdev/twitter-ruby-ads-sdk'
14
14
  s.description = 'The officially supported Twitter Ads API SDK for Ruby.'
metadata CHANGED
@@ -1,39 +1,38 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twitter-ads
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
- - Brandon Black
8
7
  - John Babich
9
- - Jacob Petrie
8
+ - Tushar Bhushan
9
+ - Juan Shishido
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain:
13
13
  - |
14
14
  -----BEGIN CERTIFICATE-----
15
- MIIDkjCCAnqgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMRcwFQYDVQQDDA50d2l0
16
- dGVyZGV2LWFkczEXMBUGCgmSJomT8ixkARkWB3R3aXR0ZXIxEzARBgoJkiaJk/Is
17
- ZAEZFgNjb20wHhcNMTcwMTEyMDIwNTIxWhcNMTgwMTEyMDIwNTIxWjBHMRcwFQYD
18
- VQQDDA50d2l0dGVyZGV2LWFkczEXMBUGCgmSJomT8ixkARkWB3R3aXR0ZXIxEzAR
19
- BgoJkiaJk/IsZAEZFgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
20
- AQCohThVTk44k9/nFQyBlZBpf6fxtqxtJkSUPQjBLyiXgNwtbsK1XVX7isPCe48P
21
- EfLyXhflaNdAxu4Ho26/Zdt3S2qyfP1hAWVmwJKTqVsE1bUnSTPcWs1LYWeyIkW2
22
- 5GRAndY6aQn9zncEVu/Ri8umA8NsIUL3WBVW1wcR28e61Fq1Js8Vqeui5n8C+sh3
23
- lce3vrlY1UtBeGmGGA5rQQTiGzN3FCUdjHo8bqq7AWw5jIwdRA3rOpT7zj25ppc9
24
- 7IacnOz8U7lJ/xjDwnZqkzQCPESSIWWUqhhaQY4c3cfq7nxHDVnxtN9DA7uzOLKx
25
- 8cM8dbobNw3Of/TTs1CG/dKTAgMBAAGjgYgwgYUwCQYDVR0TBAIwADALBgNVHQ8E
26
- BAMCBLAwHQYDVR0OBBYEFF/89vydkzOdlfrSj279rAJq5UNZMCUGA1UdEQQeMByB
27
- GnR3aXR0ZXJkZXYtYWRzQHR3aXR0ZXIuY29tMCUGA1UdEgQeMByBGnR3aXR0ZXJk
28
- ZXYtYWRzQHR3aXR0ZXIuY29tMA0GCSqGSIb3DQEBBQUAA4IBAQClOgtZ70c9sj73
29
- X3I0lXKHxTv+Pwvd3dRp7NXJzPjmq93muuj5uyHsi5gbQdHul8pRka3i5qxZodNn
30
- vWguk67iWN7m4pIqEtc456JflY2H5UWnChLHCmZ5MqrKNJh9us8cClyKn3/rBqnV
31
- uu/+mfbfpqDp2MLLKFo77cFNXpzKl0JmKyxtBJlWCK6PeTqU3IvWIvQ9R1OfyMN0
32
- B0nhMKYDZajZXhtjz/tyeakKeyVZV/99hDa63V+08xClwMLVHNoc1+no48kXRog5
33
- ouZXSlxLCCseakgV8oMPuyzeHOo/xRmPR+aePyLRG8makXFDQIVfHE2YdLuARcEy
34
- rpYQ/nux
15
+ MIIDgDCCAmigAwIBAgIBATANBgkqhkiG9w0BAQUFADBDMRMwEQYDVQQDDAphZHNh
16
+ cGktZGV2MRcwFQYKCZImiZPyLGQBGRYHdHdpdHRlcjETMBEGCgmSJomT8ixkARkW
17
+ A2NvbTAeFw0xODAzMjIxNDU1NDNaFw0xOTAzMjIxNDU1NDNaMEMxEzARBgNVBAMM
18
+ CmFkc2FwaS1kZXYxFzAVBgoJkiaJk/IsZAEZFgd0d2l0dGVyMRMwEQYKCZImiZPy
19
+ LGQBGRYDY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvc9MVtVP
20
+ iFcis6l0AVMhrz6PY2q6phws6rXDVlnfJ6YoCzKVaZQ7/F7rNccgBRm3e1YtfSMS
21
+ Rbi6utXIyvi5w6f05R8ete2aI1mzocoErsg179ohrp9NCE1kkfX+1LV/HbFPhmcm
22
+ KjbmBisAhcAz2SHUk+GBq8fbfKj+jv/K0WpsCinZtd38s96dBIiWK/o+evpSCXIo
23
+ OwCwP+rxj9m3R6ZbyhFmagfMl3bTk8Xw+UZwc1GgCOJwODVqHMV7/ryyX6IY/Wbu
24
+ Xw7hQ/4+dMs3xumArhfjQG/3ocHLo4jFScXJ0JYY+b1fW7b0EuvTAEoIcUctNz8o
25
+ R+ptZC3y2GQ2BQIDAQABo38wfTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNV
26
+ HQ4EFgQU/NBrOwjh8uJx/JrAN0FA9dy+RsIwIQYDVR0RBBowGIEWYWRzYXBpLWRl
27
+ dkB0d2l0dGVyLmNvbTAhBgNVHRIEGjAYgRZhZHNhcGktZGV2QHR3aXR0ZXIuY29t
28
+ MA0GCSqGSIb3DQEBBQUAA4IBAQAHgAKu94Ix68zuH9+sd89YLpj/bQKyrsW/YZMK
29
+ JOIbklJGn2xzipuOnaiWCnetm4twROdmVqz+eu7DPFpVRuh8yd72/w5xO8GPBihs
30
+ WiE4Wn2nS83n6szuSHtz+Osuwnpwi+IGcRaUU5k0ql4wzq0ThxfV1JLp1rYhioWn
31
+ AwnieA4MlAGo5XyxOBSfgWz6J7qsG9iyvbMMSzn81PX0bUz0n0F1W4A+GPnn62/C
32
+ 6/42oM9SP/6CMxevv7dmeQsbzuQWezV1EvcgHn8ITnFH9JXY8ZfDXPVyqvxPjeFH
33
+ gs09+Abi4upZUoQi8GBp5k0sYT1f3aGIpxtuAJtahWypI+LI
35
34
  -----END CERTIFICATE-----
36
- date: 2017-12-13 00:00:00.000000000 Z
35
+ date: 2018-03-22 00:00:00.000000000 Z
37
36
  dependencies:
38
37
  - !ruby/object:Gem::Dependency
39
38
  name: multi_json
@@ -92,6 +91,7 @@ files:
92
91
  - bin/twitter-ads
93
92
  - lib/twitter-ads.rb
94
93
  - lib/twitter-ads/account.rb
94
+ - lib/twitter-ads/audiences/audience_intelligence.rb
95
95
  - lib/twitter-ads/audiences/tailored_audience.rb
96
96
  - lib/twitter-ads/campaign/app_list.rb
97
97
  - lib/twitter-ads/campaign/campaign.rb
@@ -104,9 +104,12 @@ files:
104
104
  - lib/twitter-ads/campaign/tweet.rb
105
105
  - lib/twitter-ads/client.rb
106
106
  - lib/twitter-ads/creative/account_media.rb
107
+ - lib/twitter-ads/creative/cards_fetch.rb
107
108
  - lib/twitter-ads/creative/image_app_download_card.rb
108
109
  - lib/twitter-ads/creative/image_conversation_card.rb
109
110
  - lib/twitter-ads/creative/media_creative.rb
111
+ - lib/twitter-ads/creative/media_library.rb
112
+ - lib/twitter-ads/creative/poll_cards.rb
110
113
  - lib/twitter-ads/creative/promoted_account.rb
111
114
  - lib/twitter-ads/creative/promoted_tweet.rb
112
115
  - lib/twitter-ads/creative/scheduled_tweet.rb
metadata.gz.sig CHANGED
Binary file