twitter-ads 0.3.4 → 1.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
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/twitter-ads.rb +18 -0
- data/lib/twitter-ads/account.rb +20 -5
- data/lib/twitter-ads/audiences/tailored_audience.rb +4 -4
- data/lib/twitter-ads/campaign/app_list.rb +2 -2
- data/lib/twitter-ads/campaign/campaign.rb +4 -3
- data/lib/twitter-ads/campaign/funding_instrument.rb +2 -2
- data/lib/twitter-ads/campaign/line_item.rb +12 -14
- data/lib/twitter-ads/campaign/promotable_user.rb +2 -2
- data/lib/twitter-ads/campaign/targeting_criteria.rb +2 -2
- data/lib/twitter-ads/campaign/tweet.rb +5 -4
- data/lib/twitter-ads/creative/account_media.rb +36 -0
- data/lib/twitter-ads/creative/app_download_card.rb +2 -2
- data/lib/twitter-ads/creative/image_app_download_card.rb +2 -2
- data/lib/twitter-ads/creative/image_conversation_card.rb +2 -2
- data/lib/twitter-ads/creative/lead_gen_card.rb +2 -2
- data/lib/twitter-ads/creative/media_creative.rb +37 -0
- data/lib/twitter-ads/creative/promoted_account.rb +4 -3
- data/lib/twitter-ads/creative/promoted_tweet.rb +4 -3
- data/lib/twitter-ads/creative/video.rb +2 -2
- data/lib/twitter-ads/creative/video_app_download_card.rb +2 -2
- data/lib/twitter-ads/creative/video_conversation_card.rb +2 -2
- data/lib/twitter-ads/creative/website_card.rb +2 -2
- data/lib/twitter-ads/enum.rb +49 -2
- data/lib/twitter-ads/http/request.rb +2 -2
- data/lib/twitter-ads/resources/analytics.rb +129 -24
- data/lib/twitter-ads/resources/dsl.rb +1 -1
- data/lib/twitter-ads/targeting/reach_estimate.rb +17 -10
- data/lib/twitter-ads/targeting_criteria/app_store_category.rb +22 -0
- data/lib/twitter-ads/targeting_criteria/behavior.rb +26 -0
- data/lib/twitter-ads/targeting_criteria/behavior_taxonomy.rb +23 -0
- data/lib/twitter-ads/targeting_criteria/device.rb +24 -0
- data/lib/twitter-ads/targeting_criteria/event.rb +32 -0
- data/lib/twitter-ads/targeting_criteria/interest.rb +22 -0
- data/lib/twitter-ads/targeting_criteria/language.rb +21 -0
- data/lib/twitter-ads/targeting_criteria/location.rb +22 -0
- data/lib/twitter-ads/targeting_criteria/network_operator.rb +22 -0
- data/lib/twitter-ads/targeting_criteria/platform.rb +22 -0
- data/lib/twitter-ads/targeting_criteria/platform_version.rb +23 -0
- data/lib/twitter-ads/targeting_criteria/tv_channel.rb +20 -0
- data/lib/twitter-ads/targeting_criteria/tv_genre.rb +20 -0
- data/lib/twitter-ads/targeting_criteria/tv_market.rb +22 -0
- data/lib/twitter-ads/targeting_criteria/tv_show.rb +22 -0
- data/lib/twitter-ads/version.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- data/spec/twitter-ads/campaign/app_list_spec.rb +1 -1
- data/spec/twitter-ads/campaign/line_item_spec.rb +0 -22
- data/spec/twitter-ads/campaign/reach_estimate_spec.rb +16 -11
- data/spec/twitter-ads/campaign/tweet_spec.rb +2 -2
- data/spec/twitter-ads/client_spec.rb +1 -1
- data/spec/twitter-ads/creative/account_media_spec.rb +32 -0
- data/spec/twitter-ads/creative/media_creative_spec.rb +32 -0
- metadata +44 -22
- metadata.gz.sig +0 -0
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# Copyright (C) 2015 Twitter, Inc.
|
3
|
+
|
4
|
+
module TwitterAds
|
5
|
+
class Language
|
6
|
+
|
7
|
+
include TwitterAds::DSL
|
8
|
+
include TwitterAds::Resource
|
9
|
+
|
10
|
+
property :name, read_only: true
|
11
|
+
property :targeting_type, read_only: true
|
12
|
+
property :targeting_value, read_only: true
|
13
|
+
|
14
|
+
RESOURCE_COLLECTION = '/1/targeting_criteria/languages'.freeze # @api private
|
15
|
+
|
16
|
+
def initialize(account)
|
17
|
+
@account = account
|
18
|
+
self
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# Copyright (C) 2015 Twitter, Inc.
|
3
|
+
|
4
|
+
module TwitterAds
|
5
|
+
class Location
|
6
|
+
|
7
|
+
include TwitterAds::DSL
|
8
|
+
include TwitterAds::Resource
|
9
|
+
|
10
|
+
property :name, read_only: true
|
11
|
+
property :targeting_type, read_only: true
|
12
|
+
property :targeting_value, read_only: true
|
13
|
+
property :location_type, read_only: true
|
14
|
+
|
15
|
+
RESOURCE_COLLECTION = '/1/targeting_criteria/locations'.freeze # @api private
|
16
|
+
|
17
|
+
def initialize(account)
|
18
|
+
@account = account
|
19
|
+
self
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# Copyright (C) 2015 Twitter, Inc.
|
3
|
+
|
4
|
+
module TwitterAds
|
5
|
+
class NetworkOperator
|
6
|
+
|
7
|
+
include TwitterAds::DSL
|
8
|
+
include TwitterAds::Resource
|
9
|
+
|
10
|
+
property :name, read_only: true
|
11
|
+
property :targeting_type, read_only: true
|
12
|
+
property :targeting_value, read_only: true
|
13
|
+
property :country_code, read_only: true
|
14
|
+
|
15
|
+
RESOURCE_COLLECTION = '/1/targeting_criteria/network_operators'.freeze # @api private
|
16
|
+
|
17
|
+
def initialize(account)
|
18
|
+
@account = account
|
19
|
+
self
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# Copyright (C) 2015 Twitter, Inc.
|
3
|
+
|
4
|
+
module TwitterAds
|
5
|
+
class Platform
|
6
|
+
|
7
|
+
include TwitterAds::DSL
|
8
|
+
include TwitterAds::Resource
|
9
|
+
|
10
|
+
property :name, read_only: true
|
11
|
+
property :targeting_type, read_only: true
|
12
|
+
property :targeting_value, read_only: true
|
13
|
+
property :localized_name, read_only: true
|
14
|
+
|
15
|
+
RESOURCE_COLLECTION = '/1/targeting_criteria/platforms'.freeze # @api private
|
16
|
+
|
17
|
+
def initialize(account)
|
18
|
+
@account = account
|
19
|
+
self
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# Copyright (C) 2015 Twitter, Inc.
|
3
|
+
|
4
|
+
module TwitterAds
|
5
|
+
class PlatformVersion
|
6
|
+
|
7
|
+
include TwitterAds::DSL
|
8
|
+
include TwitterAds::Resource
|
9
|
+
|
10
|
+
property :name, read_only: true
|
11
|
+
property :targeting_type, read_only: true
|
12
|
+
property :targeting_value, read_only: true
|
13
|
+
property :number, read_only: true
|
14
|
+
property :platform, read_only: true
|
15
|
+
|
16
|
+
RESOURCE_COLLECTION = '/1/targeting_criteria/platform_versions'.freeze # @api private
|
17
|
+
|
18
|
+
def initialize(account)
|
19
|
+
@account = account
|
20
|
+
self
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# Copyright (C) 2015 Twitter, Inc.
|
3
|
+
|
4
|
+
module TwitterAds
|
5
|
+
class TVChannel
|
6
|
+
|
7
|
+
include TwitterAds::DSL
|
8
|
+
include TwitterAds::Resource
|
9
|
+
|
10
|
+
property :id, read_only: true
|
11
|
+
property :name, read_only: true
|
12
|
+
|
13
|
+
RESOURCE_COLLECTION = '/1/targeting_criteria/tv_channels'.freeze # @api private
|
14
|
+
|
15
|
+
def initialize(account)
|
16
|
+
@account = account
|
17
|
+
self
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# Copyright (C) 2015 Twitter, Inc.
|
3
|
+
|
4
|
+
module TwitterAds
|
5
|
+
class TVGenre
|
6
|
+
|
7
|
+
include TwitterAds::DSL
|
8
|
+
include TwitterAds::Resource
|
9
|
+
|
10
|
+
property :id, read_only: true
|
11
|
+
property :name, read_only: true
|
12
|
+
|
13
|
+
RESOURCE_COLLECTION = '/1/targeting_criteria/tv_genres'.freeze # @api private
|
14
|
+
|
15
|
+
def initialize(account)
|
16
|
+
@account = account
|
17
|
+
self
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# Copyright (C) 2015 Twitter, Inc.
|
3
|
+
|
4
|
+
module TwitterAds
|
5
|
+
class TVMarket
|
6
|
+
|
7
|
+
include TwitterAds::DSL
|
8
|
+
include TwitterAds::Resource
|
9
|
+
|
10
|
+
property :id, read_only: true
|
11
|
+
property :name, read_only: true
|
12
|
+
property :locale, read_only: true
|
13
|
+
property :country_code, read_only: true
|
14
|
+
|
15
|
+
RESOURCE_COLLECTION = '/1/targeting_criteria/tv_markets'.freeze # @api private
|
16
|
+
|
17
|
+
def initialize(account)
|
18
|
+
@account = account
|
19
|
+
self
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# Copyright (C) 2015 Twitter, Inc.
|
3
|
+
|
4
|
+
module TwitterAds
|
5
|
+
class TVShow
|
6
|
+
|
7
|
+
include TwitterAds::DSL
|
8
|
+
include TwitterAds::Resource
|
9
|
+
|
10
|
+
property :id, read_only: true
|
11
|
+
property :name, read_only: true
|
12
|
+
property :estimated_users, read_only: true
|
13
|
+
property :genre, read_only: true
|
14
|
+
|
15
|
+
RESOURCE_COLLECTION = '/1/targeting_criteria/tv_shows'.freeze # @api private
|
16
|
+
|
17
|
+
def initialize(account)
|
18
|
+
@account = account
|
19
|
+
self
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/twitter-ads/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -28,7 +28,7 @@ include TwitterAds
|
|
28
28
|
# Require All Support Files
|
29
29
|
Dir['./spec/support/*.rb'].sort.each { |file| require file }
|
30
30
|
|
31
|
-
ADS_API = 'https://ads-api.twitter.com/
|
31
|
+
ADS_API = 'https://ads-api.twitter.com/1'.freeze
|
32
32
|
TON_API = 'https://ton.twitter.com'.freeze
|
33
33
|
UPLOAD_API = 'https://upload.twitter.com/1.1'.freeze
|
34
34
|
|
@@ -31,7 +31,7 @@ describe TwitterAds::AppList do
|
|
31
31
|
|
32
32
|
let(:app_list) { TwitterAds::AppList.new(account) }
|
33
33
|
let!(:resource) { "#{ADS_API}/accounts/#{account.id}/app_lists" }
|
34
|
-
let!(:rel_path) { "/
|
34
|
+
let!(:rel_path) { "/1/accounts/#{account.id}/app_lists" }
|
35
35
|
|
36
36
|
before(:each) do
|
37
37
|
stub_fixture(:post, :app_lists_load, /#{resource}\?.*/)
|
@@ -70,26 +70,4 @@ describe TwitterAds::LineItem do
|
|
70
70
|
|
71
71
|
end
|
72
72
|
|
73
|
-
describe '#objective=' do
|
74
|
-
|
75
|
-
context 'when using TwitterAds::Objective::CUSTOM' do
|
76
|
-
|
77
|
-
it 'raises a warning message' do
|
78
|
-
expect(TwitterAds::Utils).to receive(:deprecated).with('TwitterAds::Objective::CUSTOM')
|
79
|
-
subject.objective = TwitterAds::Objective::CUSTOM
|
80
|
-
end
|
81
|
-
|
82
|
-
end
|
83
|
-
|
84
|
-
context 'when using any object other than TwitterAds::Objective::CUSTOM' do
|
85
|
-
|
86
|
-
it 'does not raise a warning message' do
|
87
|
-
expect(TwitterAds::Utils).not_to receive(:deprecated).with(any_args)
|
88
|
-
subject.objective = TwitterAds::Objective::VIDEO_VIEWS
|
89
|
-
end
|
90
|
-
|
91
|
-
end
|
92
|
-
|
93
|
-
end
|
94
|
-
|
95
73
|
end
|
@@ -24,7 +24,7 @@ describe TwitterAds::ReachEstimate do
|
|
24
24
|
describe '#fetch' do
|
25
25
|
|
26
26
|
let!(:resource) { "#{ADS_API}/accounts/#{account.id}/reach_estimate" }
|
27
|
-
let!(:rel_path) { "/
|
27
|
+
let!(:rel_path) { "/1/accounts/#{account.id}/reach_estimate" }
|
28
28
|
|
29
29
|
before(:each) do
|
30
30
|
stub_fixture(:get, :reach_estimate, /#{resource}\?.*/)
|
@@ -32,22 +32,23 @@ describe TwitterAds::ReachEstimate do
|
|
32
32
|
|
33
33
|
it 'creates proper get request with no optional parameters specified' do
|
34
34
|
expected = { product_type: 'PROMOTED_TWEETS', objective: 'WEBSITE_CLICKS',
|
35
|
-
|
35
|
+
campaign_daily_budget_amount_local_micro: 30000000, bid_type: 'AUTO' }
|
36
36
|
args = [account.client, :get, rel_path, params: expected]
|
37
37
|
|
38
38
|
expect(Request).to receive(:new).with(*args).and_call_original
|
39
|
-
TwitterAds::ReachEstimate.fetch(account, 'PROMOTED_TWEETS', 'WEBSITE_CLICKS',
|
39
|
+
TwitterAds::ReachEstimate.fetch(account, 'PROMOTED_TWEETS', 'WEBSITE_CLICKS', 30000000)
|
40
40
|
end
|
41
41
|
|
42
42
|
it 'creates proper get request when optional paremeters are specified' do
|
43
43
|
|
44
44
|
expected = { product_type: 'PROMOTED_TWEETS', objective: 'WEBSITE_CLICKS',
|
45
|
-
|
45
|
+
campaign_daily_budget_amount_local_micro: 30000000,
|
46
|
+
similar_to_followers_of_user: '12', gender: '2', bid_type: 'AUTO' }
|
46
47
|
args = [account.client, :get, rel_path, params: expected]
|
47
48
|
|
48
49
|
expect(Request).to receive(:new).with(*args).and_call_original
|
49
50
|
TwitterAds::ReachEstimate.fetch(
|
50
|
-
account, 'PROMOTED_TWEETS', 'WEBSITE_CLICKS',
|
51
|
+
account, 'PROMOTED_TWEETS', 'WEBSITE_CLICKS', 30000000,
|
51
52
|
similar_to_followers_of_user: '12', gender: '2')
|
52
53
|
|
53
54
|
end
|
@@ -56,11 +57,12 @@ describe TwitterAds::ReachEstimate do
|
|
56
57
|
|
57
58
|
it 'defaults bid_type to AUTO for backward compatibility' do
|
58
59
|
expected = { product_type: 'PROMOTED_TWEETS', objective: 'WEBSITE_CLICKS',
|
59
|
-
|
60
|
+
campaign_daily_budget_amount_local_micro: 30000000,
|
61
|
+
bid_type: 'AUTO' }
|
60
62
|
args = [account.client, :get, rel_path, params: expected]
|
61
63
|
|
62
64
|
expect(Request).to receive(:new).with(*args).and_call_original
|
63
|
-
TwitterAds::ReachEstimate.fetch(account, 'PROMOTED_TWEETS', 'WEBSITE_CLICKS',
|
65
|
+
TwitterAds::ReachEstimate.fetch(account, 'PROMOTED_TWEETS', 'WEBSITE_CLICKS', 30000000)
|
64
66
|
end
|
65
67
|
|
66
68
|
end
|
@@ -69,12 +71,14 @@ describe TwitterAds::ReachEstimate do
|
|
69
71
|
|
70
72
|
it 'does not default bid_type to AUTO' do
|
71
73
|
expected = { product_type: 'PROMOTED_TWEETS', objective: 'WEBSITE_CLICKS',
|
72
|
-
|
74
|
+
bid_amount_local_micro: 3000000,
|
75
|
+
campaign_daily_budget_amount_local_micro: 30000000, bid_type: 'MAX' }
|
73
76
|
args = [account.client, :get, rel_path, params: expected]
|
74
77
|
|
75
78
|
expect(Request).to receive(:new).with(*args).and_call_original
|
76
79
|
TwitterAds::ReachEstimate.fetch(
|
77
|
-
account, 'PROMOTED_TWEETS', 'WEBSITE_CLICKS',
|
80
|
+
account, 'PROMOTED_TWEETS', 'WEBSITE_CLICKS', 30000000,
|
81
|
+
bid_amount_local_micro: 3000000, bid_type: 'MAX')
|
78
82
|
end
|
79
83
|
|
80
84
|
end
|
@@ -83,12 +87,13 @@ describe TwitterAds::ReachEstimate do
|
|
83
87
|
|
84
88
|
it 'does not default bid_type to AUTO' do
|
85
89
|
expected = { product_type: 'PROMOTED_TWEETS', objective: 'WEBSITE_CLICKS',
|
86
|
-
|
90
|
+
bid_amount_local_micro: 1500000,
|
91
|
+
campaign_daily_budget_amount_local_micro: 30000000 }
|
87
92
|
args = [account.client, :get, rel_path, params: expected]
|
88
93
|
|
89
94
|
expect(Request).to receive(:new).with(*args).and_call_original
|
90
95
|
TwitterAds::ReachEstimate.fetch(
|
91
|
-
account, 'PROMOTED_TWEETS', 'WEBSITE_CLICKS',
|
96
|
+
account, 'PROMOTED_TWEETS', 'WEBSITE_CLICKS', 30000000, bid_amount_local_micro: 1500000)
|
92
97
|
end
|
93
98
|
|
94
99
|
end
|
@@ -51,7 +51,7 @@ describe TwitterAds::Tweet do
|
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'allows a single value for the media_ids param' do
|
54
|
-
resource = "/
|
54
|
+
resource = "/1/accounts/#{account.id}/tweet/preview"
|
55
55
|
expected = { status: 'Hello%20World!', media_ids: 634458428836962304 }
|
56
56
|
|
57
57
|
expect(TwitterAds::Request).to receive(:new).with(
|
@@ -64,7 +64,7 @@ describe TwitterAds::Tweet do
|
|
64
64
|
end
|
65
65
|
|
66
66
|
it 'allows an array of values for the media_ids param' do
|
67
|
-
resource = "/
|
67
|
+
resource = "/1/accounts/#{account.id}/tweet/preview"
|
68
68
|
expected = { status: 'Hello%20World!', media_ids: '634458428836962304,634458428836962305' }
|
69
69
|
|
70
70
|
expect(TwitterAds::Request).to receive(:new).with(
|
@@ -99,7 +99,7 @@ describe TwitterAds::Client do
|
|
99
99
|
let!(:account_id) { '2iqph' }
|
100
100
|
|
101
101
|
before(:all) do
|
102
|
-
stub_fixture(:get, :accounts_load, /(.*\/
|
102
|
+
stub_fixture(:get, :accounts_load, /(.*\/1\/accounts\/)([a-zA-Z0-9]*)\z/)
|
103
103
|
end
|
104
104
|
|
105
105
|
it 'returns a specific Account object' do
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# Copyright (C) 2015 Twitter, Inc.
|
3
|
+
|
4
|
+
require 'spec_helper'
|
5
|
+
|
6
|
+
include TwitterAds::Enum
|
7
|
+
|
8
|
+
describe TwitterAds::Creative::AccountMedia do
|
9
|
+
|
10
|
+
before(:each) do
|
11
|
+
stub_fixture(:get, :accounts_all, "#{ADS_API}/accounts")
|
12
|
+
stub_fixture(:get, :accounts_load, "#{ADS_API}/accounts/2iqph")
|
13
|
+
end
|
14
|
+
|
15
|
+
let(:client) do
|
16
|
+
Client.new(
|
17
|
+
Faker::Lorem.characters(15),
|
18
|
+
Faker::Lorem.characters(40),
|
19
|
+
"123456-#{Faker::Lorem.characters(40)}",
|
20
|
+
Faker::Lorem.characters(40)
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
let(:account) { client.accounts.first }
|
25
|
+
|
26
|
+
# check model properties
|
27
|
+
subject { described_class.new(account) }
|
28
|
+
read = %w(id created_at updated_at deleted media_url)
|
29
|
+
write = %w(media_id creative_type video_id)
|
30
|
+
include_examples 'object property check', read, write
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# Copyright (C) 2015 Twitter, Inc.
|
3
|
+
|
4
|
+
require 'spec_helper'
|
5
|
+
|
6
|
+
include TwitterAds::Enum
|
7
|
+
|
8
|
+
describe TwitterAds::Creative::MediaCreative do
|
9
|
+
|
10
|
+
before(:each) do
|
11
|
+
stub_fixture(:get, :accounts_all, "#{ADS_API}/accounts")
|
12
|
+
stub_fixture(:get, :accounts_load, "#{ADS_API}/accounts/2iqph")
|
13
|
+
end
|
14
|
+
|
15
|
+
let(:client) do
|
16
|
+
Client.new(
|
17
|
+
Faker::Lorem.characters(15),
|
18
|
+
Faker::Lorem.characters(40),
|
19
|
+
"123456-#{Faker::Lorem.characters(40)}",
|
20
|
+
Faker::Lorem.characters(40)
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
let(:account) { client.accounts.first }
|
25
|
+
|
26
|
+
# check model properties
|
27
|
+
subject { described_class.new(account) }
|
28
|
+
read = %w(id created_at updated_at deleted approval_status serving_status)
|
29
|
+
write = %w(account_media_id line_item_id landing_url)
|
30
|
+
include_examples 'object property check', read, write
|
31
|
+
|
32
|
+
end
|
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: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brandon Black
|
@@ -10,27 +10,28 @@ bindir: bin
|
|
10
10
|
cert_chain:
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
13
|
+
MIIDkjCCAnqgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMRcwFQYDVQQDDA50d2l0
|
14
|
+
dGVyZGV2LWFkczEXMBUGCgmSJomT8ixkARkWB3R3aXR0ZXIxEzARBgoJkiaJk/Is
|
15
|
+
ZAEZFgNjb20wHhcNMTYwNTI4MDA0OTAwWhcNMTcwNTI4MDA0OTAwWjBHMRcwFQYD
|
16
|
+
VQQDDA50d2l0dGVyZGV2LWFkczEXMBUGCgmSJomT8ixkARkWB3R3aXR0ZXIxEzAR
|
17
|
+
BgoJkiaJk/IsZAEZFgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
|
18
|
+
AQDRu2wbJR414kYzFQhuhSarGi5olf7uXCI+0qcDjlErUTil6zaE60DDyWft/8aC
|
19
|
+
H+s0f8r6Ii875ASHXf3e0ImIpeHuuJyVPi5krsdbmujjDEGuuDuuYylRdOThICxH
|
20
|
+
f4Jm/9kLgtPTTpOPvwlCTIVQzMwZfBlIuSjpz4sLptFuj8VFme6jd2uFUSFj8Mkv
|
21
|
+
2bLFK6opau3poGJaTHEEu0XF8aEEHTrUOnEWCO8PnY/fwoICl/b62Efoltsgsvtv
|
22
|
+
VoHf2SpB+0V1SX85QRNgtmmcOjKbQsl3viUeXWywz8V39dsjIXf/URcAQ7opfqTj
|
23
|
+
uCXwXQKEZWIAxGn5ek4cf5gbAgMBAAGjgYgwgYUwCQYDVR0TBAIwADALBgNVHQ8E
|
24
|
+
BAMCBLAwHQYDVR0OBBYEFEisIhn7R3j2V1lkUmbMj+y+qn5TMCUGA1UdEQQeMByB
|
25
|
+
GnR3aXR0ZXJkZXYtYWRzQHR3aXR0ZXIuY29tMCUGA1UdEgQeMByBGnR3aXR0ZXJk
|
26
|
+
ZXYtYWRzQHR3aXR0ZXIuY29tMA0GCSqGSIb3DQEBBQUAA4IBAQB1M62XZp9prwnv
|
27
|
+
4KlkNmzfUeqN/Ou9OPNOmgko7s/spuzlg5ZkdZh0iiz5Uw0Mf4gpCks06n/cy7XP
|
28
|
+
cs63IW0VLLdlRcXSNX7zm91iXHOQBkX8/mzg6pVzhhqXjMZezfi0Cgb86t5ZzR7L
|
29
|
+
Dl5UKO3vRh/aR++y6oigeuSo5Yr9tLFA0MPPORJPgXlNjul6eLaCL12r8WTMwMBP
|
30
|
+
taq3q3kbi4nXBIvBaiCrmsRKB7aUApUV8dOOXArW+Xm2NuIIUfv8sg6fSosFHuD7
|
31
|
+
6iKH3qLrNmP7FTqx/7IFHIgiptkRhr9W3yyaIregdBYXFNXj9HLpaJWNmDoei1vM
|
32
|
+
GNwER2EW
|
32
33
|
-----END CERTIFICATE-----
|
33
|
-
date: 2016-
|
34
|
+
date: 2016-05-28 00:00:00.000000000 Z
|
34
35
|
dependencies:
|
35
36
|
- !ruby/object:Gem::Dependency
|
36
37
|
name: multi_json
|
@@ -98,10 +99,12 @@ files:
|
|
98
99
|
- lib/twitter-ads/campaign/targeting_criteria.rb
|
99
100
|
- lib/twitter-ads/campaign/tweet.rb
|
100
101
|
- lib/twitter-ads/client.rb
|
102
|
+
- lib/twitter-ads/creative/account_media.rb
|
101
103
|
- lib/twitter-ads/creative/app_download_card.rb
|
102
104
|
- lib/twitter-ads/creative/image_app_download_card.rb
|
103
105
|
- lib/twitter-ads/creative/image_conversation_card.rb
|
104
106
|
- lib/twitter-ads/creative/lead_gen_card.rb
|
107
|
+
- lib/twitter-ads/creative/media_creative.rb
|
105
108
|
- lib/twitter-ads/creative/promoted_account.rb
|
106
109
|
- lib/twitter-ads/creative/promoted_tweet.rb
|
107
110
|
- lib/twitter-ads/creative/video.rb
|
@@ -120,6 +123,21 @@ files:
|
|
120
123
|
- lib/twitter-ads/resources/persistence.rb
|
121
124
|
- lib/twitter-ads/resources/resource.rb
|
122
125
|
- lib/twitter-ads/targeting/reach_estimate.rb
|
126
|
+
- lib/twitter-ads/targeting_criteria/app_store_category.rb
|
127
|
+
- lib/twitter-ads/targeting_criteria/behavior.rb
|
128
|
+
- lib/twitter-ads/targeting_criteria/behavior_taxonomy.rb
|
129
|
+
- lib/twitter-ads/targeting_criteria/device.rb
|
130
|
+
- lib/twitter-ads/targeting_criteria/event.rb
|
131
|
+
- lib/twitter-ads/targeting_criteria/interest.rb
|
132
|
+
- lib/twitter-ads/targeting_criteria/language.rb
|
133
|
+
- lib/twitter-ads/targeting_criteria/location.rb
|
134
|
+
- lib/twitter-ads/targeting_criteria/network_operator.rb
|
135
|
+
- lib/twitter-ads/targeting_criteria/platform.rb
|
136
|
+
- lib/twitter-ads/targeting_criteria/platform_version.rb
|
137
|
+
- lib/twitter-ads/targeting_criteria/tv_channel.rb
|
138
|
+
- lib/twitter-ads/targeting_criteria/tv_genre.rb
|
139
|
+
- lib/twitter-ads/targeting_criteria/tv_market.rb
|
140
|
+
- lib/twitter-ads/targeting_criteria/tv_show.rb
|
123
141
|
- lib/twitter-ads/utils.rb
|
124
142
|
- lib/twitter-ads/version.rb
|
125
143
|
- spec/fixtures/accounts_all.json
|
@@ -156,10 +174,12 @@ files:
|
|
156
174
|
- spec/twitter-ads/campaign/targeting_criteria_spec.rb
|
157
175
|
- spec/twitter-ads/campaign/tweet_spec.rb
|
158
176
|
- spec/twitter-ads/client_spec.rb
|
177
|
+
- spec/twitter-ads/creative/account_media_spec.rb
|
159
178
|
- spec/twitter-ads/creative/app_download_card_spec.rb
|
160
179
|
- spec/twitter-ads/creative/image_app_download_card_spec.rb
|
161
180
|
- spec/twitter-ads/creative/image_conversation_card_spec.rb
|
162
181
|
- spec/twitter-ads/creative/lead_gen_card_spec.rb
|
182
|
+
- spec/twitter-ads/creative/media_creative_spec.rb
|
163
183
|
- spec/twitter-ads/creative/promoted_account_spec.rb
|
164
184
|
- spec/twitter-ads/creative/promoted_tweet_spec.rb
|
165
185
|
- spec/twitter-ads/creative/video_app_download_card_spec.rb
|
@@ -191,7 +211,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
191
211
|
version: 2.0.0
|
192
212
|
requirements: []
|
193
213
|
rubyforge_project:
|
194
|
-
rubygems_version: 2.5.1
|
214
|
+
rubygems_version: 2.4.5.1
|
195
215
|
signing_key:
|
196
216
|
specification_version: 4
|
197
217
|
summary: The officially supported Twitter Ads API SDK for Ruby.
|
@@ -230,10 +250,12 @@ test_files:
|
|
230
250
|
- spec/twitter-ads/campaign/targeting_criteria_spec.rb
|
231
251
|
- spec/twitter-ads/campaign/tweet_spec.rb
|
232
252
|
- spec/twitter-ads/client_spec.rb
|
253
|
+
- spec/twitter-ads/creative/account_media_spec.rb
|
233
254
|
- spec/twitter-ads/creative/app_download_card_spec.rb
|
234
255
|
- spec/twitter-ads/creative/image_app_download_card_spec.rb
|
235
256
|
- spec/twitter-ads/creative/image_conversation_card_spec.rb
|
236
257
|
- spec/twitter-ads/creative/lead_gen_card_spec.rb
|
258
|
+
- spec/twitter-ads/creative/media_creative_spec.rb
|
237
259
|
- spec/twitter-ads/creative/promoted_account_spec.rb
|
238
260
|
- spec/twitter-ads/creative/promoted_tweet_spec.rb
|
239
261
|
- spec/twitter-ads/creative/video_app_download_card_spec.rb
|