twitter-ads 1.0.0 → 1.1.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: 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