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.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/lib/twitter-ads.rb +18 -0
  5. data/lib/twitter-ads/account.rb +20 -5
  6. data/lib/twitter-ads/audiences/tailored_audience.rb +4 -4
  7. data/lib/twitter-ads/campaign/app_list.rb +2 -2
  8. data/lib/twitter-ads/campaign/campaign.rb +4 -3
  9. data/lib/twitter-ads/campaign/funding_instrument.rb +2 -2
  10. data/lib/twitter-ads/campaign/line_item.rb +12 -14
  11. data/lib/twitter-ads/campaign/promotable_user.rb +2 -2
  12. data/lib/twitter-ads/campaign/targeting_criteria.rb +2 -2
  13. data/lib/twitter-ads/campaign/tweet.rb +5 -4
  14. data/lib/twitter-ads/creative/account_media.rb +36 -0
  15. data/lib/twitter-ads/creative/app_download_card.rb +2 -2
  16. data/lib/twitter-ads/creative/image_app_download_card.rb +2 -2
  17. data/lib/twitter-ads/creative/image_conversation_card.rb +2 -2
  18. data/lib/twitter-ads/creative/lead_gen_card.rb +2 -2
  19. data/lib/twitter-ads/creative/media_creative.rb +37 -0
  20. data/lib/twitter-ads/creative/promoted_account.rb +4 -3
  21. data/lib/twitter-ads/creative/promoted_tweet.rb +4 -3
  22. data/lib/twitter-ads/creative/video.rb +2 -2
  23. data/lib/twitter-ads/creative/video_app_download_card.rb +2 -2
  24. data/lib/twitter-ads/creative/video_conversation_card.rb +2 -2
  25. data/lib/twitter-ads/creative/website_card.rb +2 -2
  26. data/lib/twitter-ads/enum.rb +49 -2
  27. data/lib/twitter-ads/http/request.rb +2 -2
  28. data/lib/twitter-ads/resources/analytics.rb +129 -24
  29. data/lib/twitter-ads/resources/dsl.rb +1 -1
  30. data/lib/twitter-ads/targeting/reach_estimate.rb +17 -10
  31. data/lib/twitter-ads/targeting_criteria/app_store_category.rb +22 -0
  32. data/lib/twitter-ads/targeting_criteria/behavior.rb +26 -0
  33. data/lib/twitter-ads/targeting_criteria/behavior_taxonomy.rb +23 -0
  34. data/lib/twitter-ads/targeting_criteria/device.rb +24 -0
  35. data/lib/twitter-ads/targeting_criteria/event.rb +32 -0
  36. data/lib/twitter-ads/targeting_criteria/interest.rb +22 -0
  37. data/lib/twitter-ads/targeting_criteria/language.rb +21 -0
  38. data/lib/twitter-ads/targeting_criteria/location.rb +22 -0
  39. data/lib/twitter-ads/targeting_criteria/network_operator.rb +22 -0
  40. data/lib/twitter-ads/targeting_criteria/platform.rb +22 -0
  41. data/lib/twitter-ads/targeting_criteria/platform_version.rb +23 -0
  42. data/lib/twitter-ads/targeting_criteria/tv_channel.rb +20 -0
  43. data/lib/twitter-ads/targeting_criteria/tv_genre.rb +20 -0
  44. data/lib/twitter-ads/targeting_criteria/tv_market.rb +22 -0
  45. data/lib/twitter-ads/targeting_criteria/tv_show.rb +22 -0
  46. data/lib/twitter-ads/version.rb +1 -1
  47. data/spec/spec_helper.rb +1 -1
  48. data/spec/twitter-ads/campaign/app_list_spec.rb +1 -1
  49. data/spec/twitter-ads/campaign/line_item_spec.rb +0 -22
  50. data/spec/twitter-ads/campaign/reach_estimate_spec.rb +16 -11
  51. data/spec/twitter-ads/campaign/tweet_spec.rb +2 -2
  52. data/spec/twitter-ads/client_spec.rb +1 -1
  53. data/spec/twitter-ads/creative/account_media_spec.rb +32 -0
  54. data/spec/twitter-ads/creative/media_creative_spec.rb +32 -0
  55. metadata +44 -22
  56. 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
@@ -2,5 +2,5 @@
2
2
  # Copyright (C) 2015 Twitter, Inc.
3
3
 
4
4
  module TwitterAds
5
- VERSION = '0.3.4'.freeze
5
+ VERSION = '1.0.0'.freeze
6
6
  end
@@ -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/0'.freeze
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) { "/0/accounts/#{account.id}/app_lists" }
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) { "/0/accounts/#{account.id}/reach_estimate" }
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
- user_id: 12, bid_type: 'AUTO' }
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', 12)
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
- user_id: 12, similar_to_followers_of_user: '12', gender: '2', bid_type: 'AUTO' }
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', 12,
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
- user_id: 12, bid_type: 'AUTO' }
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', 12)
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
- user_id: 12, bid_type: 'MAX' }
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', 12, bid_type: 'MAX')
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
- user_id: 12, bid_amount_local_micro: 1500000 }
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', 12, bid_amount_local_micro: 1500000)
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 = "/0/accounts/#{account.id}/tweet/preview"
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 = "/0/accounts/#{account.id}/tweet/preview"
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, /(.*\/0\/accounts\/)([a-zA-Z0-9]*)\z/)
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.3.4
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
- MIIDcDCCAligAwIBAgIBATANBgkqhkiG9w0BAQUFADA/MQ8wDQYDVQQDDAZiYmxh
14
- Y2sxFzAVBgoJkiaJk/IsZAEZFgd0d2l0dGVyMRMwEQYKCZImiZPyLGQBGRYDY29t
15
- MB4XDTE1MDUxNDIwMzE0OFoXDTE2MDUxMzIwMzE0OFowPzEPMA0GA1UEAwwGYmJs
16
- YWNrMRcwFQYKCZImiZPyLGQBGRYHdHdpdHRlcjETMBEGCgmSJomT8ixkARkWA2Nv
17
- bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALFcA39CQg7YbcP8v2By
18
- AzyhEpVlrxa2ohJ7LFmi8/Xw8cxS3/XvweWJuufambhfpT/KkUcf0FMA4egt3w8c
19
- PYanwpUCyBnLCXsMvFWGBnyWQqVNSg6CKTVcY1urtCUSA3Jv5KKBPffSUoTOCL5E
20
- uLD3BW9VnPS4Z9SOKzhg7c4aIr0siNBf0/AU0aiwtOhqgJpRkECcd5C74JdYTLdF
21
- 5Gdxzxifr50Em+lojr+hatfYZ51gOksPBtqotQ4l+vSth9JQB8jX1DOfHf/4LdGJ
22
- Y7b9bOORAx4XPncn6VXlNH5YUVRu/pshNf5N0YbQUgXKMG/M0Drxv+VmHpxeg3Ep
23
- MSsCAwEAAaN3MHUwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFJdU
24
- 3qERWamEyBidCvO8vyO4Ofj8MB0GA1UdEQQWMBSBEmJibGFja0B0d2l0dGVyLmNv
25
- bTAdBgNVHRIEFjAUgRJiYmxhY2tAdHdpdHRlci5jb20wDQYJKoZIhvcNAQEFBQAD
26
- ggEBAAEqjpDTcLHBKDhqqSDMmW0gWQTYHBuyKAUuaEleE9fWBS+q9SIPmQSoj2yX
27
- aqzkMmCvcTpiIoVlu2QtYvxtI6bef+HM50hkNjF+AeEyhTSucLxRmg232CzykGZa
28
- sIuWL8AhyPmyLaIi5gsGXUIChk4aXcXE8iD/VGWyPZ3r8zV/EA8dTnT/iVYkxpTv
29
- dUlOT1v22STyPF3Zttqqe5XtOtIN9+i3Szoi1OGueqSB9+XMZyinZoxherrs1BVH
30
- 8Jwp/juPnThUiQlA6qjWMlKQJW9Junn+gQJWm6jW/hR3klmk4uPIB+wxSW2J2K50
31
- aU47pXYcbHgF3qfpEAXAq9qH06E=
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-02-10 00:00:00.000000000 Z
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