twitter-ads 1.0.0 → 1.1.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
  SHA1:
3
- metadata.gz: 9a50bc00ab21ca3c398e31b761134e6ec380f364
4
- data.tar.gz: bb364bf536c4d0263ceb9cbb344b6f92b7dd970f
3
+ metadata.gz: 515186149614e6ad01864e1c993d6d507b9b700a
4
+ data.tar.gz: 35a9ccc5c1d33bfe13b46ea21841e9c1fe504e87
5
5
  SHA512:
6
- metadata.gz: 72b852ad83d11e5ec80fbffff9bc89d5a19da8825075eeccd78e9ae9353cad4e281a85822925d52f3521ef61e0fdedb65e886d96d015b33a97ab914392567c9d
7
- data.tar.gz: b13816066362a49a23d8ddb31b57faf58b4eceb7be3e5afcf51c088cbbaae9a4e5c2159c313f8a1a12815cd0771f6a6bedb36bb93bc95ba5a251b3eee483b416
6
+ metadata.gz: eb3b164f846c1588f9a4f878c78b095c8c2d995023b5f198c464de95f71f7bc48f882adc2c5904aba04d3b4b17e84757335a5060b6b03208038e1e5dec76e12d
7
+ data.tar.gz: fddb7139f5e4f6fe7d29eb672ce89e384fb37f3adccbdc8843dc5205e34cfb6ec736bd8a02668349263297933299617c9acbbf05e8d483d6fafa9d3969bd7df1
@@ -1,2 +1 @@
1
- VK��T�ߺ��I�[��]z�iIy'0`��_� �=��߿҅f�ub�������g��=p\w�1�E=����4g��D���"6jDU�Of+��#����:�� �-�P1$��颷V~c��.�л�b�"�\�!nb������:3y�C�k"6ZJ}�a\��
2
- �="���&[l=HA:�� �$29+2C,3�1���ݽ@c=��*��^,�R�F���
1
+ ��� B֡#�9#{�����[dgA@Y�/w�]��"�|���l��� �#.��Q:蹖|�T9�Ì���n��,�i(K��`{�/�� w& \yjN�:,��\ӈ8�J�[�%��S���>)��$F��"ui�3i��m��=z�K���Ȯ��%�����:Z�,'I��.��\ �����k�.�A�m���K��eBZj�����n3R1��a��i9y�|�6��=C�ɿ�k�vz5��y
data.tar.gz.sig CHANGED
Binary file
@@ -17,6 +17,7 @@ require 'twitter-ads/resources/dsl'
17
17
  require 'twitter-ads/resources/resource'
18
18
  require 'twitter-ads/resources/persistence'
19
19
  require 'twitter-ads/resources/analytics'
20
+ require 'twitter-ads/resources/batch'
20
21
 
21
22
  require 'twitter-ads/client'
22
23
  require 'twitter-ads/cursor'
@@ -35,6 +36,8 @@ require 'twitter-ads/campaign/line_item'
35
36
  require 'twitter-ads/campaign/promotable_user'
36
37
  require 'twitter-ads/campaign/targeting_criteria'
37
38
  require 'twitter-ads/campaign/tweet'
39
+ require 'twitter-ads/campaign/organic_tweet'
40
+ require 'twitter-ads/campaign/iab_category'
38
41
 
39
42
  require 'twitter-ads/enum'
40
43
 
@@ -69,4 +72,7 @@ require 'twitter-ads/creative/video'
69
72
 
70
73
  require 'twitter-ads/targeting/reach_estimate'
71
74
 
75
+ require 'twitter-ads/measurement/web_event_tag'
76
+ require 'twitter-ads/measurement/app_event_tag'
77
+
72
78
  require 'twitter-ads/legacy.rb'
@@ -227,6 +227,14 @@ module TwitterAds
227
227
  response.body[:data]
228
228
  end
229
229
 
230
+ def web_event_tags(id = nil, opts = {})
231
+ load_resource(WebEventTag, id, opts)
232
+ end
233
+
234
+ def app_event_tags(id = nil, opts = {})
235
+ load_resource(AppEventTag, id, opts)
236
+ end
237
+
230
238
  private
231
239
 
232
240
  def load_resource(klass, id = nil, opts = {})
@@ -7,6 +7,8 @@ module TwitterAds
7
7
  include TwitterAds::DSL
8
8
  include TwitterAds::Resource
9
9
  include TwitterAds::Persistence
10
+ include TwitterAds::Analytics
11
+ include TwitterAds::Batch
10
12
 
11
13
  attr_reader :account
12
14
 
@@ -27,10 +29,14 @@ module TwitterAds
27
29
  property :daily_budget_amount_local_micro
28
30
  property :total_budget_amount_local_micro
29
31
 
32
+ # sdk only
33
+ property :to_delete, type: :bool
34
+
30
35
  RESOURCE_COLLECTION = '/1/accounts/%{account_id}/campaigns'.freeze # @api private
31
36
  RESOURCE_STATS = '/1/stats/accounts/%{account_id}'.freeze # @api private
32
37
  RESOURCE_ASYNC_STATS = '/1/stats/jobs/accounts/%{account_id}'.freeze # @api private
33
- RESOURCE = '/1/accounts/%{account_id}/campaigns/%{id}'.freeze # @api private
38
+ RESOURCE_BATCH = '/1/batch/accounts/%{account_id}/campaigns'.freeze # @api private
39
+ RESOURCE = '/1/accounts/%{account_id}/campaigns/%{id}'.freeze # @api private
34
40
 
35
41
  def initialize(account)
36
42
  @account = account
@@ -20,6 +20,10 @@ module TwitterAds
20
20
  property :created_at, type: :time, read_only: true
21
21
  property :updated_at, type: :time, read_only: true
22
22
  property :deleted, type: :bool, read_only: true
23
+ property :able_to_fund, type: :bool, read_only: true
24
+ property :paused, type: :bool, read_only: true
25
+ property :io_header, read_only: true
26
+ property :reasons_not_able_to_fund, read_only: true
23
27
 
24
28
  RESOURCE_COLLECTION = '/1/accounts/%{account_id}/funding_instruments'.freeze # @api private
25
29
  RESOURCE = '/1/accounts/%{account_id}/funding_instruments/%{id}'.freeze # @api private
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+ # Copyright (C) 2015 Twitter, Inc.
3
+
4
+ module TwitterAds
5
+ class IABCategory
6
+
7
+ include TwitterAds::DSL
8
+ include TwitterAds::Resource
9
+
10
+ attr_reader :account
11
+
12
+ property :id, read_only: true
13
+ property :name, read_only: true
14
+ property :parent_id, read_only: true
15
+
16
+ RESOURCE_COLLECTION = '/1/iab_categories'.freeze # @api private
17
+
18
+ def initialize(account)
19
+ @account = account
20
+ self
21
+ end
22
+ end
23
+ end
@@ -8,6 +8,7 @@ module TwitterAds
8
8
  include TwitterAds::Resource
9
9
  include TwitterAds::Persistence
10
10
  include TwitterAds::Analytics
11
+ include TwitterAds::Batch
11
12
 
12
13
  attr_reader :account
13
14
 
@@ -32,15 +33,20 @@ module TwitterAds
32
33
  property :automatically_select_bid
33
34
  property :bid_amount_local_micro
34
35
  property :total_budget_amount_local_micro
36
+ property :target_cpa_local_micro
35
37
 
36
38
  # beta (not yet generally available)
37
39
  property :advertiser_user_id
38
40
  property :bid_type
39
41
  property :tracking_tags
40
42
 
43
+ # sdk only
44
+ property :to_delete, type: :bool
45
+
41
46
  RESOURCE_COLLECTION = '/1/accounts/%{account_id}/line_items'.freeze # @api private
42
47
  RESOURCE_STATS = '/1/stats/accounts/%{account_id}'.freeze # @api private
43
48
  RESOURCE_ASYNC_STATS = '/1/stats/jobs/accounts/%{account_id}'.freeze # @api private
49
+ RESOURCE_BATCH = '/1/batch/accounts/%{account_id}/line_items'.freeze # @api private
44
50
  RESOURCE = '/1/accounts/%{account_id}/line_items/%{id}'.freeze # @api private
45
51
  RESOURCE_PLACEMENTS = '/1/line_items/placements'.freeze # @api private
46
52
 
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+ # Copyright (C) 2015 Twitter, Inc.
3
+ # Author Bob, Nugit
4
+
5
+ module TwitterAds
6
+ class OrganicTweet
7
+
8
+ include TwitterAds::Analytics
9
+
10
+ RESOURCE_ASYNC_STATS = '/1/stats/jobs/accounts/%{account_id}'.freeze # @api private
11
+ end
12
+ end
@@ -7,6 +7,7 @@ module TwitterAds
7
7
  include TwitterAds::DSL
8
8
  include TwitterAds::Persistence
9
9
  include TwitterAds::Resource::InstanceMethods
10
+ include TwitterAds::Batch
10
11
 
11
12
  attr_reader :account
12
13
 
@@ -22,8 +23,13 @@ module TwitterAds
22
23
  property :targeting_value
23
24
  property :tailored_audience_expansion, type: :bool
24
25
  property :tailored_audience_type
26
+ property :location_type
27
+
28
+ # sdk only
29
+ property :to_delete, type: :bool
25
30
 
26
31
  RESOURCE_COLLECTION = '/1/accounts/%{account_id}/targeting_criteria'.freeze # @api private
32
+ RESOURCE_BATCH = '/1/batch/accounts/%{account_id}/targeting_criteria'.freeze # @api private
27
33
  RESOURCE = '/1/accounts/%{account_id}/targeting_criteria/%{id}'.freeze # @api private
28
34
 
29
35
  def initialize(account)
@@ -7,13 +7,14 @@ module TwitterAds
7
7
  module Enum
8
8
 
9
9
  module Objective
10
- APP_ENGAGEMENTS = 'APP_ENGAGEMENTS'.freeze
11
- APP_INSTALLS = 'APP_INSTALLS'.freeze
12
- FOLLOWERS = 'FOLLOWERS'.freeze
13
- LEAD_GENERATION = 'LEAD_GENERATION'.freeze
14
- TWEET_ENGAGEMENTS = 'TWEET_ENGAGEMENTS'.freeze
15
- VIDEO_VIEWS = 'VIDEO_VIEWS'.freeze
16
- WEBSITE_CLICKS = 'WEBSITE_CLICKS'.freeze
10
+ APP_ENGAGEMENTS = 'APP_ENGAGEMENTS'.freeze
11
+ APP_INSTALLS = 'APP_INSTALLS'.freeze
12
+ FOLLOWERS = 'FOLLOWERS'.freeze
13
+ LEAD_GENERATION = 'LEAD_GENERATION'.freeze
14
+ TWEET_ENGAGEMENTS = 'TWEET_ENGAGEMENTS'.freeze
15
+ VIDEO_VIEWS = 'VIDEO_VIEWS'.freeze
16
+ WEBSITE_CLICKS = 'WEBSITE_CLICKS'.freeze
17
+ WEBSITE_CONVERSIONS = 'WEBSITE_CONVERSIONS'.freeze
17
18
 
18
19
  end
19
20
 
@@ -10,7 +10,7 @@ module TwitterAds
10
10
  DEFAULT_RESOURCE = '/1.1/ton/bucket/'.freeze # @api private
11
11
  DEFAULT_BUCKET = 'ta_partner'.freeze # @api private
12
12
  DEFAULT_EXPIRE = (Time.now + 10 * 24 * 60 * 60).httpdate # @api private
13
- MIN_FILE_SIZE = 1024 * 1024 * 1 # @api private
13
+ MIN_FILE_SIZE = 1024 * 1024 * 64 # @api private
14
14
 
15
15
  private_constant :DEFAULT_DOMAIN,
16
16
  :DEFAULT_BUCKET,
@@ -71,7 +71,7 @@ module TwitterAds
71
71
  end
72
72
  end
73
73
 
74
- location
74
+ location.split('?')[0]
75
75
  end
76
76
  end
77
77
 
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+ # Copyright (C) 2015 Twitter, Inc.
3
+
4
+ module TwitterAds
5
+ class AppEventTag
6
+
7
+ include TwitterAds::DSL
8
+ include TwitterAds::Resource
9
+ include TwitterAds::Persistence
10
+
11
+ property :id, read_only: true
12
+ property :account_id
13
+ property :app_store_identifier
14
+ property :os_type
15
+ property :conversion_type
16
+ property :provider_app_event_id
17
+ property :provider_app_event_name
18
+ property :deleted, read_only: true
19
+ property :post_view_attribution_window
20
+ property :post_engagement_attribution_window
21
+
22
+ RESOURCE_COLLECTION = '/1/accounts/%{account_id}/app_event_tags'.freeze # @api private
23
+
24
+ def initialize(account)
25
+ @account = account
26
+ self
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+ # Copyright (C) 2015 Twitter, Inc.
3
+
4
+ module TwitterAds
5
+ class WebEventTag
6
+
7
+ include TwitterAds::DSL
8
+ include TwitterAds::Resource
9
+ include TwitterAds::Persistence
10
+
11
+ property :id, read_only: true
12
+ property :name
13
+ property :retargeting_enabled, type: :bool
14
+ property :status, read_only: true
15
+ property :type
16
+ property :view_through_window
17
+ property :deleted, read_only: true
18
+ property :embed_code, read_only: true
19
+ property :click_window
20
+
21
+ RESOURCE_COLLECTION = '/1/accounts/%{account_id}/web_event_tags'.freeze # @api private
22
+
23
+ def initialize(account)
24
+ @account = account
25
+ self
26
+ end
27
+ end
28
+ end
@@ -8,6 +8,7 @@ module TwitterAds
8
8
  module Analytics
9
9
 
10
10
  ANALYTICS_MAP = {
11
+ 'TwitterAds::Campaign' => 'CAMPAIGN'.freeze,
11
12
  'TwitterAds::LineItem' => 'LINE_ITEM'.freeze,
12
13
  'TwitterAds::OrganicTweet' => 'ORGANIC_TWEET'.freeze,
13
14
  'TwitterAds::Creative::PromotedTweet' => 'PROMOTED_TWEET'.freeze
@@ -119,6 +120,8 @@ module TwitterAds
119
120
  granularity = opts.fetch(:granularity, :hour)
120
121
  placement = opts.fetch(:placement, Placement::ALL_ON_TWITTER)
121
122
  segmentation_type = opts.fetch(:segmentation_type, nil)
123
+ country = opts.fetch(:country, nil)
124
+ platform = opts.fetch(:platform, nil)
122
125
 
123
126
  params = {
124
127
  metric_groups: metric_groups.join(','),
@@ -126,8 +129,10 @@ module TwitterAds
126
129
  end_time: TwitterAds::Utils.to_time(end_time, granularity),
127
130
  granularity: granularity.to_s.upcase,
128
131
  entity: ANALYTICS_MAP[name],
129
- placement: placement
130
- }
132
+ placement: placement,
133
+ country: country,
134
+ platform: platform
135
+ }.compact
131
136
 
132
137
  params[:segmentation_type] = segmentation_type.to_s.upcase if segmentation_type
133
138
  params['entity_ids'] = ids.join(',')
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+ # Copyright (C) 2015 Twitter, Inc.
3
+
4
+ module TwitterAds
5
+ module Batch
6
+
7
+ CLASS_ID_MAP = {
8
+ 'TwitterAds::LineItem' => 'LINE_ITEM'.freeze,
9
+ 'TwitterAds::Campaign' => 'CAMPAIGN'.freeze,
10
+ 'TwitterAds::TargetingCriteria' => 'TARGETING_CRITERION'.freeze
11
+ }.freeze # @api private
12
+
13
+ def self.included(klass)
14
+ klass.extend ClassMethods
15
+ end
16
+
17
+ module ClassMethods
18
+
19
+ # Makes batch request(s) for a passed in list of objects
20
+ #
21
+ # @param account [Account] The Account object instance.
22
+ # @param objs [Array] A collection of entities to save.
23
+ #
24
+ # @since 1.1.0
25
+ def batch_save(account, objs)
26
+ resource = self::RESOURCE_BATCH % { account_id: account.id }
27
+
28
+ json_body = []
29
+
30
+ objs.each do |obj|
31
+ entity_type = CLASS_ID_MAP[obj.class.name].downcase
32
+ obj_params = obj.to_params
33
+ obj_json = { 'params' => obj_params }
34
+
35
+ if obj.id.nil?
36
+ obj_json['operation_type'] = 'Create'
37
+ elsif obj.to_delete == true
38
+ obj_json['operation_type'] = 'Delete'
39
+ obj_json['params'][entity_type + '_id'] = obj.id
40
+ else
41
+ obj_json['operation_type'] = 'Update'
42
+ obj_json['params'][entity_type + '_id'] = obj.id
43
+ end
44
+
45
+ json_body.push(obj_json)
46
+
47
+ end
48
+
49
+ headers = { 'Content-Type' => 'application/json' }
50
+ response = TwitterAds::Request.new(account.client,
51
+ :post,
52
+ resource,
53
+ headers: headers,
54
+ body: json_body.to_json).perform
55
+
56
+ # persist each entity
57
+ objs.zip(response.body[:data]) { |obj, res_obj|
58
+ obj.from_response(res_obj)
59
+ }
60
+ end
61
+
62
+ end
63
+
64
+ end
65
+ end
@@ -55,9 +55,11 @@ module TwitterAds
55
55
  def fetch(account, product_type, objective, campaign_daily_budget,
56
56
  opts = {})
57
57
  resource = "/1/accounts/#{account.id}/reach_estimate"
58
- params = { product_type: product_type, objective: objective,
59
- campaign_daily_budget_amount_local_micro: campaign_daily_budget
60
- }.merge!(opts)
58
+ params = {
59
+ product_type: product_type,
60
+ objective: objective,
61
+ campaign_daily_budget_amount_local_micro: campaign_daily_budget
62
+ }.merge!(opts)
61
63
 
62
64
  # The response value count is "bid sensitive", we default to bid_type=AUTO here to preserve
63
65
  # expected behavior despite an API change that occurred in December 2015.
@@ -2,5 +2,5 @@
2
2
  # Copyright (C) 2015 Twitter, Inc.
3
3
 
4
4
  module TwitterAds
5
- VERSION = '1.0.0'.freeze
5
+ VERSION = '1.1.0'.freeze
6
6
  end
@@ -8,8 +8,8 @@ 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']
12
- s.email = ['brandonmblack@gmail.com']
11
+ s.authors = ['Brandon Black', 'John Babich', 'Jacob Petrie']
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.'
15
15
  s.summary = s.description
metadata CHANGED
@@ -1,10 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twitter-ads
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Black
8
+ - John Babich
9
+ - Jacob Petrie
8
10
  autorequire:
9
11
  bindir: bin
10
12
  cert_chain:
@@ -12,89 +14,86 @@ cert_chain:
12
14
  -----BEGIN CERTIFICATE-----
13
15
  MIIDkjCCAnqgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMRcwFQYDVQQDDA50d2l0
14
16
  dGVyZGV2LWFkczEXMBUGCgmSJomT8ixkARkWB3R3aXR0ZXIxEzARBgoJkiaJk/Is
15
- ZAEZFgNjb20wHhcNMTYwNTI4MDA0OTAwWhcNMTcwNTI4MDA0OTAwWjBHMRcwFQYD
17
+ ZAEZFgNjb20wHhcNMTcwMTEyMDIwNTIxWhcNMTgwMTEyMDIwNTIxWjBHMRcwFQYD
16
18
  VQQDDA50d2l0dGVyZGV2LWFkczEXMBUGCgmSJomT8ixkARkWB3R3aXR0ZXIxEzAR
17
19
  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
20
+ AQCohThVTk44k9/nFQyBlZBpf6fxtqxtJkSUPQjBLyiXgNwtbsK1XVX7isPCe48P
21
+ EfLyXhflaNdAxu4Ho26/Zdt3S2qyfP1hAWVmwJKTqVsE1bUnSTPcWs1LYWeyIkW2
22
+ 5GRAndY6aQn9zncEVu/Ri8umA8NsIUL3WBVW1wcR28e61Fq1Js8Vqeui5n8C+sh3
23
+ lce3vrlY1UtBeGmGGA5rQQTiGzN3FCUdjHo8bqq7AWw5jIwdRA3rOpT7zj25ppc9
24
+ 7IacnOz8U7lJ/xjDwnZqkzQCPESSIWWUqhhaQY4c3cfq7nxHDVnxtN9DA7uzOLKx
25
+ 8cM8dbobNw3Of/TTs1CG/dKTAgMBAAGjgYgwgYUwCQYDVR0TBAIwADALBgNVHQ8E
26
+ BAMCBLAwHQYDVR0OBBYEFF/89vydkzOdlfrSj279rAJq5UNZMCUGA1UdEQQeMByB
25
27
  GnR3aXR0ZXJkZXYtYWRzQHR3aXR0ZXIuY29tMCUGA1UdEgQeMByBGnR3aXR0ZXJk
26
- ZXYtYWRzQHR3aXR0ZXIuY29tMA0GCSqGSIb3DQEBBQUAA4IBAQB1M62XZp9prwnv
27
- 4KlkNmzfUeqN/Ou9OPNOmgko7s/spuzlg5ZkdZh0iiz5Uw0Mf4gpCks06n/cy7XP
28
- cs63IW0VLLdlRcXSNX7zm91iXHOQBkX8/mzg6pVzhhqXjMZezfi0Cgb86t5ZzR7L
29
- Dl5UKO3vRh/aR++y6oigeuSo5Yr9tLFA0MPPORJPgXlNjul6eLaCL12r8WTMwMBP
30
- taq3q3kbi4nXBIvBaiCrmsRKB7aUApUV8dOOXArW+Xm2NuIIUfv8sg6fSosFHuD7
31
- 6iKH3qLrNmP7FTqx/7IFHIgiptkRhr9W3yyaIregdBYXFNXj9HLpaJWNmDoei1vM
32
- GNwER2EW
28
+ ZXYtYWRzQHR3aXR0ZXIuY29tMA0GCSqGSIb3DQEBBQUAA4IBAQClOgtZ70c9sj73
29
+ X3I0lXKHxTv+Pwvd3dRp7NXJzPjmq93muuj5uyHsi5gbQdHul8pRka3i5qxZodNn
30
+ vWguk67iWN7m4pIqEtc456JflY2H5UWnChLHCmZ5MqrKNJh9us8cClyKn3/rBqnV
31
+ uu/+mfbfpqDp2MLLKFo77cFNXpzKl0JmKyxtBJlWCK6PeTqU3IvWIvQ9R1OfyMN0
32
+ B0nhMKYDZajZXhtjz/tyeakKeyVZV/99hDa63V+08xClwMLVHNoc1+no48kXRog5
33
+ ouZXSlxLCCseakgV8oMPuyzeHOo/xRmPR+aePyLRG8makXFDQIVfHE2YdLuARcEy
34
+ rpYQ/nux
33
35
  -----END CERTIFICATE-----
34
- date: 2016-05-28 00:00:00.000000000 Z
36
+ date: 2017-01-12 00:00:00.000000000 Z
35
37
  dependencies:
36
38
  - !ruby/object:Gem::Dependency
37
39
  name: multi_json
38
40
  requirement: !ruby/object:Gem::Requirement
39
41
  requirements:
40
- - - "~>"
42
+ - - ~>
41
43
  - !ruby/object:Gem::Version
42
44
  version: '1.11'
43
45
  type: :runtime
44
46
  prerelease: false
45
47
  version_requirements: !ruby/object:Gem::Requirement
46
48
  requirements:
47
- - - "~>"
49
+ - - ~>
48
50
  - !ruby/object:Gem::Version
49
51
  version: '1.11'
50
52
  - !ruby/object:Gem::Dependency
51
53
  name: oauth
52
54
  requirement: !ruby/object:Gem::Requirement
53
55
  requirements:
54
- - - "~>"
56
+ - - ~>
55
57
  - !ruby/object:Gem::Version
56
58
  version: '0.4'
57
59
  type: :runtime
58
60
  prerelease: false
59
61
  version_requirements: !ruby/object:Gem::Requirement
60
62
  requirements:
61
- - - "~>"
63
+ - - ~>
62
64
  - !ruby/object:Gem::Version
63
65
  version: '0.4'
64
66
  - !ruby/object:Gem::Dependency
65
67
  name: bundler
66
68
  requirement: !ruby/object:Gem::Requirement
67
69
  requirements:
68
- - - "~>"
70
+ - - ~>
69
71
  - !ruby/object:Gem::Version
70
72
  version: '1.6'
71
73
  type: :development
72
74
  prerelease: false
73
75
  version_requirements: !ruby/object:Gem::Requirement
74
76
  requirements:
75
- - - "~>"
77
+ - - ~>
76
78
  - !ruby/object:Gem::Version
77
79
  version: '1.6'
78
80
  description: The officially supported Twitter Ads API SDK for Ruby.
79
81
  email:
80
- - brandonmblack@gmail.com
82
+ - twitterdev-ads@twitter.com
81
83
  executables:
82
84
  - twitter-ads
83
85
  extensions: []
84
86
  extra_rdoc_files: []
85
87
  files:
86
- - CONTRIBUTING.md
87
- - LICENSE
88
- - README.md
89
- - Rakefile
90
88
  - bin/twitter-ads
91
- - lib/twitter-ads.rb
92
89
  - lib/twitter-ads/account.rb
93
90
  - lib/twitter-ads/audiences/tailored_audience.rb
94
91
  - lib/twitter-ads/campaign/app_list.rb
95
92
  - lib/twitter-ads/campaign/campaign.rb
96
93
  - lib/twitter-ads/campaign/funding_instrument.rb
94
+ - lib/twitter-ads/campaign/iab_category.rb
97
95
  - lib/twitter-ads/campaign/line_item.rb
96
+ - lib/twitter-ads/campaign/organic_tweet.rb
98
97
  - lib/twitter-ads/campaign/promotable_user.rb
99
98
  - lib/twitter-ads/campaign/targeting_criteria.rb
100
99
  - lib/twitter-ads/campaign/tweet.rb
@@ -118,7 +117,10 @@ files:
118
117
  - lib/twitter-ads/http/response.rb
119
118
  - lib/twitter-ads/http/ton_upload.rb
120
119
  - lib/twitter-ads/legacy.rb
120
+ - lib/twitter-ads/measurement/app_event_tag.rb
121
+ - lib/twitter-ads/measurement/web_event_tag.rb
121
122
  - lib/twitter-ads/resources/analytics.rb
123
+ - lib/twitter-ads/resources/batch.rb
122
124
  - lib/twitter-ads/resources/dsl.rb
123
125
  - lib/twitter-ads/resources/persistence.rb
124
126
  - lib/twitter-ads/resources/resource.rb
@@ -140,6 +142,12 @@ files:
140
142
  - lib/twitter-ads/targeting_criteria/tv_show.rb
141
143
  - lib/twitter-ads/utils.rb
142
144
  - lib/twitter-ads/version.rb
145
+ - lib/twitter-ads.rb
146
+ - twitter-ads.gemspec
147
+ - LICENSE
148
+ - README.md
149
+ - CONTRIBUTING.md
150
+ - Rakefile
143
151
  - spec/fixtures/accounts_all.json
144
152
  - spec/fixtures/accounts_features.json
145
153
  - spec/fixtures/accounts_load.json
@@ -190,7 +198,6 @@ files:
190
198
  - spec/twitter-ads/cursor_spec.rb
191
199
  - spec/twitter-ads/placements_spec.rb
192
200
  - spec/twitter-ads/utils_spec.rb
193
- - twitter-ads.gemspec
194
201
  homepage: https://github.com/twitterdev/twitter-ruby-ads-sdk
195
202
  licenses:
196
203
  - MIT
@@ -201,17 +208,17 @@ require_paths:
201
208
  - lib
202
209
  required_ruby_version: !ruby/object:Gem::Requirement
203
210
  requirements:
204
- - - ">="
211
+ - - '>='
205
212
  - !ruby/object:Gem::Version
206
213
  version: 2.0.0
207
214
  required_rubygems_version: !ruby/object:Gem::Requirement
208
215
  requirements:
209
- - - ">="
216
+ - - '>='
210
217
  - !ruby/object:Gem::Version
211
218
  version: 2.0.0
212
219
  requirements: []
213
220
  rubyforge_project:
214
- rubygems_version: 2.4.5.1
221
+ rubygems_version: 2.0.14.1
215
222
  signing_key:
216
223
  specification_version: 4
217
224
  summary: The officially supported Twitter Ads API SDK for Ruby.
@@ -266,4 +273,3 @@ test_files:
266
273
  - spec/twitter-ads/cursor_spec.rb
267
274
  - spec/twitter-ads/placements_spec.rb
268
275
  - spec/twitter-ads/utils_spec.rb
269
- has_rdoc:
metadata.gz.sig CHANGED
Binary file