twitter-ads 9.0.0 → 10.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
 - data/lib/twitter-ads/account.rb +17 -1
 - data/lib/twitter-ads/campaign/line_item.rb +3 -2
 - data/lib/twitter-ads/campaign/tracking_tags.rb +97 -0
 - data/lib/twitter-ads/client.rb +1 -1
 - data/lib/twitter-ads/creative/cards_fetch.rb +2 -4
 - data/lib/twitter-ads/creative/image_app_download_card.rb +2 -4
 - data/lib/twitter-ads/creative/video_app_download_card.rb +2 -4
 - data/lib/twitter-ads/enum.rb +1 -0
 - data/lib/twitter-ads/targeting/{audience_summary.rb → audience_estimate.rb} +3 -3
 - data/lib/twitter-ads/version.rb +1 -1
 - data/lib/twitter-ads.rb +2 -1
 - data/spec/fixtures/accounts_all.json +0 -5
 - data/spec/fixtures/accounts_load.json +0 -1
 - data/spec/fixtures/{audience_summary.json → audience_estimate.json} +0 -0
 - data/spec/fixtures/line_items_all.json +0 -10
 - data/spec/fixtures/line_items_load.json +0 -1
 - data/spec/fixtures/tracking_tags_load.json +17 -0
 - data/spec/twitter-ads/campaign/line_item_spec.rb +0 -1
 - data/spec/twitter-ads/campaign/tracking_tag_spec.rb +58 -0
 - data/spec/twitter-ads/targeting/{audience_summary_spec.rb → audience_estimate_spec.rb} +2 -2
 - metadata +12 -7
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 65246c52bd294821d06f0bb059d9e06645f9085e7dc0864185075311749565ff
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 630e877969ad75d32f4e95f6a454558aaea1338815f3aae00c813ca6e7e3e1e5
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: f392d87fd861feba16a6555158670f63048489986bfc1e82b4f3c596f94b240803e50892865da4e2a930e134e1ae52d4c3b4b9e9b44a344a63d5d5a82985d661
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 57ddabd5051fff96bbb3542e3e7616e38476abc1de375ff01fb1c00746247a0f554eff6c2c5af83a0d4635d6d3fe400e0a38a0b7a36742d8e146be21acfe1fec
         
     | 
    
        data/lib/twitter-ads/account.rb
    CHANGED
    
    | 
         @@ -10,7 +10,6 @@ module TwitterAds 
     | 
|
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
                property :id, read_only: true
         
     | 
| 
       12 
12 
     | 
    
         
             
                property :name, read_only: true
         
     | 
| 
       13 
     | 
    
         
            -
                property :salt, read_only: true
         
     | 
| 
       14 
13 
     | 
    
         
             
                property :timezone, read_only: true
         
     | 
| 
       15 
14 
     | 
    
         
             
                property :timezone_switch_at, type: :time, read_only: true
         
     | 
| 
       16 
15 
     | 
    
         
             
                property :created_at, type: :time, read_only: true
         
     | 
| 
         @@ -218,6 +217,23 @@ module TwitterAds 
     | 
|
| 
       218 
217 
     | 
    
         
             
                  load_resource(LineItem, id, opts)
         
     | 
| 
       219 
218 
     | 
    
         
             
                end
         
     | 
| 
       220 
219 
     | 
    
         | 
| 
      
 220 
     | 
    
         
            +
                # Returns a collection of tracking tags available to the
         
     | 
| 
      
 221 
     | 
    
         
            +
                # current account.
         
     | 
| 
      
 222 
     | 
    
         
            +
                #
         
     | 
| 
      
 223 
     | 
    
         
            +
                # @param id [String] The LineItem ID value.
         
     | 
| 
      
 224 
     | 
    
         
            +
                # @param opts [Hash] A Hash of extended options.
         
     | 
| 
      
 225 
     | 
    
         
            +
                # @option opts [Boolean] :with_deleted Indicates if deleted items should be included.
         
     | 
| 
      
 226 
     | 
    
         
            +
                # @option opts [String] :sort_by The object param to sort the API response by.
         
     | 
| 
      
 227 
     | 
    
         
            +
                # @option opts [String] :line_item_ids The object param to sort the API response by.
         
     | 
| 
      
 228 
     | 
    
         
            +
                # @option opts [String] :tracking_tag_ids The object param to sort the API response by.
         
     | 
| 
      
 229 
     | 
    
         
            +
                #
         
     | 
| 
      
 230 
     | 
    
         
            +
                # @return A Cursor or object instance.
         
     | 
| 
      
 231 
     | 
    
         
            +
                #
         
     | 
| 
      
 232 
     | 
    
         
            +
                # @since 10.0.0
         
     | 
| 
      
 233 
     | 
    
         
            +
                def tracking_tags(id = nil, opts = {})
         
     | 
| 
      
 234 
     | 
    
         
            +
                  load_resource(TrackingTag, id, opts)
         
     | 
| 
      
 235 
     | 
    
         
            +
                end
         
     | 
| 
      
 236 
     | 
    
         
            +
             
     | 
| 
       221 
237 
     | 
    
         
             
                # Returns a collection of app lists available to the current account.
         
     | 
| 
       222 
238 
     | 
    
         
             
                #
         
     | 
| 
       223 
239 
     | 
    
         
             
                # @param id [String] The AppList ID value.
         
     | 
| 
         @@ -19,7 +19,6 @@ module TwitterAds 
     | 
|
| 
       19 
19 
     | 
    
         
             
                property :advertiser_domain
         
     | 
| 
       20 
20 
     | 
    
         
             
                property :android_app_store_identifier
         
     | 
| 
       21 
21 
     | 
    
         
             
                property :audience_expansion
         
     | 
| 
       22 
     | 
    
         
            -
                property :automatically_select_bid
         
     | 
| 
       23 
22 
     | 
    
         
             
                property :bid_amount_local_micro
         
     | 
| 
       24 
23 
     | 
    
         
             
                property :bid_strategy
         
     | 
| 
       25 
24 
     | 
    
         
             
                property :campaign_id
         
     | 
| 
         @@ -39,7 +38,6 @@ module TwitterAds 
     | 
|
| 
       39 
38 
     | 
    
         | 
| 
       40 
39 
     | 
    
         
             
                # beta (not yet generally available)
         
     | 
| 
       41 
40 
     | 
    
         
             
                property :advertiser_user_id
         
     | 
| 
       42 
     | 
    
         
            -
                property :tracking_tags
         
     | 
| 
       43 
41 
     | 
    
         | 
| 
       44 
42 
     | 
    
         
             
                # sdk only
         
     | 
| 
       45 
43 
     | 
    
         
             
                property :to_delete, type: :bool
         
     | 
| 
         @@ -94,5 +92,8 @@ module TwitterAds 
     | 
|
| 
       94 
92 
     | 
    
         
             
                  id ? TargetingCriteria.load(account, id, opts) : TargetingCriteria.all(account, @id, opts)
         
     | 
| 
       95 
93 
     | 
    
         
             
                end
         
     | 
| 
       96 
94 
     | 
    
         | 
| 
      
 95 
     | 
    
         
            +
                def tracking_tags(id = nil, opts = {})
         
     | 
| 
      
 96 
     | 
    
         
            +
                  id ? TrackingTag.load(account, id, opts) : TrackingTag.all(account, @id, opts)
         
     | 
| 
      
 97 
     | 
    
         
            +
                end
         
     | 
| 
       97 
98 
     | 
    
         
             
              end
         
     | 
| 
       98 
99 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,97 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (C) 2019 Twitter, Inc.
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module TwitterAds
         
     | 
| 
      
 5 
     | 
    
         
            +
              class TrackingTag
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                include TwitterAds::DSL
         
     | 
| 
      
 8 
     | 
    
         
            +
                include TwitterAds::Resource
         
     | 
| 
      
 9 
     | 
    
         
            +
                include TwitterAds::Persistence
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                attr_reader :account
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                property :id, read_only: true
         
     | 
| 
      
 14 
     | 
    
         
            +
                property :deleted, type: :bool, read_only: true
         
     | 
| 
      
 15 
     | 
    
         
            +
                property :created_at, type: :time, read_only: true
         
     | 
| 
      
 16 
     | 
    
         
            +
                property :updated_at, type: :time, read_only: true
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                property :line_item_id
         
     | 
| 
      
 19 
     | 
    
         
            +
                property :tracking_tag_type
         
     | 
| 
      
 20 
     | 
    
         
            +
                property :tracking_tag_url
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                # sdk only
         
     | 
| 
      
 23 
     | 
    
         
            +
                property :to_delete, type: :bool
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                RESOURCE_COLLECTION  = "/#{TwitterAds::API_VERSION}/" \
         
     | 
| 
      
 26 
     | 
    
         
            +
                                       'accounts/%{account_id}/tracking_tags' # @api private
         
     | 
| 
      
 27 
     | 
    
         
            +
                RESOURCE             = "/#{TwitterAds::API_VERSION}/" \
         
     | 
| 
      
 28 
     | 
    
         
            +
                                       'accounts/%{account_id}/tracking_tags/%{id}' # @api private
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                def initialize(account)
         
     | 
| 
      
 31 
     | 
    
         
            +
                  @account = account
         
     | 
| 
      
 32 
     | 
    
         
            +
                  self
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                # Creates a new Tracking Tag
         
     | 
| 
      
 36 
     | 
    
         
            +
                #
         
     | 
| 
      
 37 
     | 
    
         
            +
                # @param line_item_id [String] The line item id to create tags for.
         
     | 
| 
      
 38 
     | 
    
         
            +
                # @param tracking_tag_url [String] tracking tag URL.
         
     | 
| 
      
 39 
     | 
    
         
            +
                #
         
     | 
| 
      
 40 
     | 
    
         
            +
                # @return [self] Returns the instance refreshed from the API
         
     | 
| 
      
 41 
     | 
    
         
            +
                def create(line_item_id, tracking_tag_url)
         
     | 
| 
      
 42 
     | 
    
         
            +
                  resource = self.class::RESOURCE_COLLECTION % { account_id: account.id }
         
     | 
| 
      
 43 
     | 
    
         
            +
                  params = to_params.merge!(
         
     | 
| 
      
 44 
     | 
    
         
            +
                    line_item_id: line_item_id,
         
     | 
| 
      
 45 
     | 
    
         
            +
                    tracking_tag_url: tracking_tag_url,
         
     | 
| 
      
 46 
     | 
    
         
            +
                    tracking_tag_type: 'IMPRESSION_TAG'
         
     | 
| 
      
 47 
     | 
    
         
            +
                  )
         
     | 
| 
      
 48 
     | 
    
         
            +
                  response = Request.new(account.client, :post, resource, params: params).perform
         
     | 
| 
      
 49 
     | 
    
         
            +
                  from_response(response.body[:data])
         
     | 
| 
      
 50 
     | 
    
         
            +
                end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                class << self
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                  # Returns a Cursor instance for a given resource.
         
     | 
| 
      
 55 
     | 
    
         
            +
                  #
         
     | 
| 
      
 56 
     | 
    
         
            +
                  # @param account [Account] The Account object instance.
         
     | 
| 
      
 57 
     | 
    
         
            +
                  # @param line_item_ids [String] A String or String array of Line Item IDs.
         
     | 
| 
      
 58 
     | 
    
         
            +
                  # @param opts [Hash] An optional Hash of extended options.
         
     | 
| 
      
 59 
     | 
    
         
            +
                  # @option opts [Boolean] :with_deleted Indicates if deleted items should be included.
         
     | 
| 
      
 60 
     | 
    
         
            +
                  # @option opts [String] :sort_by The object param to sort the API response by.
         
     | 
| 
      
 61 
     | 
    
         
            +
                  #
         
     | 
| 
      
 62 
     | 
    
         
            +
                  # @return [Cursor] A Cusor object ready to iterate through the API response.
         
     | 
| 
      
 63 
     | 
    
         
            +
                  #
         
     | 
| 
      
 64 
     | 
    
         
            +
                  # @since 0.3.1
         
     | 
| 
      
 65 
     | 
    
         
            +
                  # @see Cursor
         
     | 
| 
      
 66 
     | 
    
         
            +
                  # @see https://dev.twitter.com/ads/basics/sorting Sorting
         
     | 
| 
      
 67 
     | 
    
         
            +
                  def all(account, line_item_ids, opts = {})
         
     | 
| 
      
 68 
     | 
    
         
            +
                    if !line_item_ids.empty?
         
     | 
| 
      
 69 
     | 
    
         
            +
                      params = { line_item_ids: Array(line_item_ids).join(',') }.merge!(opts)
         
     | 
| 
      
 70 
     | 
    
         
            +
                    end
         
     | 
| 
      
 71 
     | 
    
         
            +
                    resource = RESOURCE_COLLECTION % { account_id: account.id }
         
     | 
| 
      
 72 
     | 
    
         
            +
                    request = Request.new(account.client, :get, resource, params: params)
         
     | 
| 
      
 73 
     | 
    
         
            +
                    Cursor.new(self, request, init_with: [account])
         
     | 
| 
      
 74 
     | 
    
         
            +
                  end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                  # Returns an object instance for a given resource.
         
     | 
| 
      
 77 
     | 
    
         
            +
                  #
         
     | 
| 
      
 78 
     | 
    
         
            +
                  # @param account [Account] The Account object instance.
         
     | 
| 
      
 79 
     | 
    
         
            +
                  # @param id [String] The ID of the specific object to be loaded.
         
     | 
| 
      
 80 
     | 
    
         
            +
                  # @param opts [Hash] An optional Hash of extended options.
         
     | 
| 
      
 81 
     | 
    
         
            +
                  # @option opts [Boolean] :with_deleted Indicates if deleted items should be included.
         
     | 
| 
      
 82 
     | 
    
         
            +
                  # @option opts [String] :sort_by The object param to sort the API response by.
         
     | 
| 
      
 83 
     | 
    
         
            +
                  #
         
     | 
| 
      
 84 
     | 
    
         
            +
                  # @return [self] The object instance for the specified resource.
         
     | 
| 
      
 85 
     | 
    
         
            +
                  #
         
     | 
| 
      
 86 
     | 
    
         
            +
                  # @since 0.3.1
         
     | 
| 
      
 87 
     | 
    
         
            +
                  def load(account, id, opts = {})
         
     | 
| 
      
 88 
     | 
    
         
            +
                    params   = { with_deleted: true }.merge!(opts)
         
     | 
| 
      
 89 
     | 
    
         
            +
                    resource = RESOURCE % { account_id: account.id, id: id }
         
     | 
| 
      
 90 
     | 
    
         
            +
                    response = Request.new(account.client, :get, resource, params: params).perform
         
     | 
| 
      
 91 
     | 
    
         
            +
                    new(account).from_response(response.body[:data])
         
     | 
| 
      
 92 
     | 
    
         
            +
                  end
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                end
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
              end
         
     | 
| 
      
 97 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/twitter-ads/client.rb
    CHANGED
    
    
| 
         @@ -35,10 +35,8 @@ module TwitterAds 
     | 
|
| 
       35 
35 
     | 
    
         
             
                  property :image, read_only: true
         
     | 
| 
       36 
36 
     | 
    
         
             
                  property :image_display_height, read_only: true
         
     | 
| 
       37 
37 
     | 
    
         
             
                  property :image_display_width, read_only: true
         
     | 
| 
       38 
     | 
    
         
            -
                  property : 
     | 
| 
       39 
     | 
    
         
            -
                  property : 
     | 
| 
       40 
     | 
    
         
            -
                  property :iphone_app_id, read_only: true
         
     | 
| 
       41 
     | 
    
         
            -
                  property :iphone_deep_link, read_only: true
         
     | 
| 
      
 38 
     | 
    
         
            +
                  property :ios_app_store_identifier, read_only: true
         
     | 
| 
      
 39 
     | 
    
         
            +
                  property :ios_deep_link, read_only: true
         
     | 
| 
       42 
40 
     | 
    
         
             
                  property :name, read_only: true
         
     | 
| 
       43 
41 
     | 
    
         
             
                  property :recipient_user_id, read_only: true
         
     | 
| 
       44 
42 
     | 
    
         
             
                  property :second_choice, read_only: true
         
     | 
| 
         @@ -26,10 +26,8 @@ module TwitterAds 
     | 
|
| 
       26 
26 
     | 
    
         
             
                  property :app_cta
         
     | 
| 
       27 
27 
     | 
    
         
             
                  property :googleplay_app_id
         
     | 
| 
       28 
28 
     | 
    
         
             
                  property :googleplay_deep_link
         
     | 
| 
       29 
     | 
    
         
            -
                  property : 
     | 
| 
       30 
     | 
    
         
            -
                  property : 
     | 
| 
       31 
     | 
    
         
            -
                  property :ipad_app_id
         
     | 
| 
       32 
     | 
    
         
            -
                  property :ipad_deep_link
         
     | 
| 
      
 29 
     | 
    
         
            +
                  property :ios_app_store_identifier
         
     | 
| 
      
 30 
     | 
    
         
            +
                  property :ios_deep_link
         
     | 
| 
       33 
31 
     | 
    
         
             
                  property :name
         
     | 
| 
       34 
32 
     | 
    
         
             
                  property :media_key
         
     | 
| 
       35 
33 
     | 
    
         | 
| 
         @@ -25,10 +25,8 @@ module TwitterAds 
     | 
|
| 
       25 
25 
     | 
    
         
             
                  property :country_code
         
     | 
| 
       26 
26 
     | 
    
         
             
                  property :app_cta
         
     | 
| 
       27 
27 
     | 
    
         
             
                  property :poster_media_key
         
     | 
| 
       28 
     | 
    
         
            -
                  property : 
     | 
| 
       29 
     | 
    
         
            -
                  property : 
     | 
| 
       30 
     | 
    
         
            -
                  property :iphone_app_id
         
     | 
| 
       31 
     | 
    
         
            -
                  property :iphone_deep_link
         
     | 
| 
      
 28 
     | 
    
         
            +
                  property :ios_app_store_identifier
         
     | 
| 
      
 29 
     | 
    
         
            +
                  property :ios_deep_link
         
     | 
| 
       32 
30 
     | 
    
         
             
                  property :googleplay_app_id
         
     | 
| 
       33 
31 
     | 
    
         
             
                  property :googleplay_deep_link
         
     | 
| 
       34 
32 
     | 
    
         
             
                  property :name
         
     | 
    
        data/lib/twitter-ads/enum.rb
    CHANGED
    
    
| 
         @@ -2,13 +2,13 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
            # Copyright (C) 2019 Twitter, Inc.
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            module TwitterAds
         
     | 
| 
       5 
     | 
    
         
            -
              module  
     | 
| 
      
 5 
     | 
    
         
            +
              module AudienceEstimate
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
                include TwitterAds::DSL
         
     | 
| 
       8 
8 
     | 
    
         
             
                include TwitterAds::Resource
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
                RESOURCE = "/#{TwitterAds::API_VERSION}/" \
         
     | 
| 
       11 
     | 
    
         
            -
                                       'accounts/%{account_id}/ 
     | 
| 
      
 11 
     | 
    
         
            +
                                       'accounts/%{account_id}/audience_estimate'
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
                property :audience_size, read_only: true
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
         @@ -17,7 +17,7 @@ module TwitterAds 
     | 
|
| 
       17 
17 
     | 
    
         
             
                  # Get an audience summary for the specified targeting criteria.
         
     | 
| 
       18 
18 
     | 
    
         
             
                  #
         
     | 
| 
       19 
19 
     | 
    
         
             
                  # @example
         
     | 
| 
       20 
     | 
    
         
            -
                  #   TwitterAds:: 
     | 
| 
      
 20 
     | 
    
         
            +
                  #   TwitterAds::AudienceEstimate.fetch(
         
     | 
| 
       21 
21 
     | 
    
         
             
                  #     account,
         
     | 
| 
       22 
22 
     | 
    
         
             
                  #     params: {targeting_criteria:[{targeting_type:'LOCATION',
         
     | 
| 
       23 
23 
     | 
    
         
             
                  #             targeting_value:'96683cc9126741d1'}]}
         
     | 
    
        data/lib/twitter-ads/version.rb
    CHANGED
    
    
    
        data/lib/twitter-ads.rb
    CHANGED
    
    | 
         @@ -37,6 +37,7 @@ require 'twitter-ads/campaign/funding_instrument' 
     | 
|
| 
       37 
37 
     | 
    
         
             
            require 'twitter-ads/campaign/line_item'
         
     | 
| 
       38 
38 
     | 
    
         
             
            require 'twitter-ads/campaign/promotable_user'
         
     | 
| 
       39 
39 
     | 
    
         
             
            require 'twitter-ads/campaign/targeting_criteria'
         
     | 
| 
      
 40 
     | 
    
         
            +
            require 'twitter-ads/campaign/tracking_tags'
         
     | 
| 
       40 
41 
     | 
    
         
             
            require 'twitter-ads/campaign/tweet'
         
     | 
| 
       41 
42 
     | 
    
         
             
            require 'twitter-ads/campaign/organic_tweet'
         
     | 
| 
       42 
43 
     | 
    
         
             
            require 'twitter-ads/campaign/iab_category'
         
     | 
| 
         @@ -75,7 +76,7 @@ require 'twitter-ads/creative/poll_cards' 
     | 
|
| 
       75 
76 
     | 
    
         
             
            require 'twitter-ads/creative/tweet_previews'
         
     | 
| 
       76 
77 
     | 
    
         
             
            require 'twitter-ads/creative/tweets'
         
     | 
| 
       77 
78 
     | 
    
         | 
| 
       78 
     | 
    
         
            -
            require 'twitter-ads/targeting/ 
     | 
| 
      
 79 
     | 
    
         
            +
            require 'twitter-ads/targeting/audience_estimate'
         
     | 
| 
       79 
80 
     | 
    
         | 
| 
       80 
81 
     | 
    
         
             
            require 'twitter-ads/measurement/web_event_tag'
         
     | 
| 
       81 
82 
     | 
    
         
             
            require 'twitter-ads/measurement/app_event_tag'
         
     | 
| 
         @@ -9,7 +9,6 @@ 
     | 
|
| 
       9 
9 
     | 
    
         
             
                  "timezone_switch_at": "2014-11-17T08:00:00Z",
         
     | 
| 
       10 
10 
     | 
    
         
             
                  "id": "2iqph",
         
     | 
| 
       11 
11 
     | 
    
         
             
                  "created_at": "2015-03-04T10:50:42Z",
         
     | 
| 
       12 
     | 
    
         
            -
                  "salt": "5ab2pizq7qxjjqrx3z67f4wbko61o7xs",
         
     | 
| 
       13 
12 
     | 
    
         
             
                  "updated_at": "2015-04-11T05:20:08Z",
         
     | 
| 
       14 
13 
     | 
    
         
             
                  "approval_status": "ACCEPTED",
         
     | 
| 
       15 
14 
     | 
    
         
             
                  "deleted": false
         
     | 
| 
         @@ -20,7 +19,6 @@ 
     | 
|
| 
       20 
19 
     | 
    
         
             
                  "timezone_switch_at": "2014-11-17T08:00:00Z",
         
     | 
| 
       21 
20 
     | 
    
         
             
                  "id": "pz6ec",
         
     | 
| 
       22 
21 
     | 
    
         
             
                  "created_at": "2015-05-29T00:52:16Z",
         
     | 
| 
       23 
     | 
    
         
            -
                  "salt": "39ku32xvhdt0jax8thps2c70e2fv3yok",
         
     | 
| 
       24 
22 
     | 
    
         
             
                  "updated_at": "2015-05-29T00:52:16Z",
         
     | 
| 
       25 
23 
     | 
    
         
             
                  "approval_status": "ACCEPTED",
         
     | 
| 
       26 
24 
     | 
    
         
             
                  "deleted": false
         
     | 
| 
         @@ -31,7 +29,6 @@ 
     | 
|
| 
       31 
29 
     | 
    
         
             
                  "timezone_switch_at": "2014-11-17T08:00:00Z",
         
     | 
| 
       32 
30 
     | 
    
         
             
                  "id": "j9ozo",
         
     | 
| 
       33 
31 
     | 
    
         
             
                  "created_at": "2015-05-01T12:08:10Z",
         
     | 
| 
       34 
     | 
    
         
            -
                  "salt": "winwfne3y6oyikl4tm84bj9r50waxj37",
         
     | 
| 
       35 
32 
     | 
    
         
             
                  "updated_at": "2015-05-01T12:08:10Z",
         
     | 
| 
       36 
33 
     | 
    
         
             
                  "approval_status": "ACCEPTED",
         
     | 
| 
       37 
34 
     | 
    
         
             
                  "deleted": false
         
     | 
| 
         @@ -42,7 +39,6 @@ 
     | 
|
| 
       42 
39 
     | 
    
         
             
                  "timezone_switch_at": "2014-11-17T08:00:00Z",
         
     | 
| 
       43 
40 
     | 
    
         
             
                  "id": "9ttgd",
         
     | 
| 
       44 
41 
     | 
    
         
             
                  "created_at": "2015-06-24T18:51:20Z",
         
     | 
| 
       45 
     | 
    
         
            -
                  "salt": "tj9hmt5xylm5zztrq05w7hwh4mkpkg5r",
         
     | 
| 
       46 
42 
     | 
    
         
             
                  "updated_at": "2015-06-26T06:13:24Z",
         
     | 
| 
       47 
43 
     | 
    
         
             
                  "approval_status": "ACCEPTED",
         
     | 
| 
       48 
44 
     | 
    
         
             
                  "deleted": false
         
     | 
| 
         @@ -53,7 +49,6 @@ 
     | 
|
| 
       53 
49 
     | 
    
         
             
                  "timezone_switch_at": "2013-05-22T07:00:00Z",
         
     | 
| 
       54 
50 
     | 
    
         
             
                  "id": "47d0v",
         
     | 
| 
       55 
51 
     | 
    
         
             
                  "created_at": "2015-05-28T05:42:03Z",
         
     | 
| 
       56 
     | 
    
         
            -
                  "salt": "1ms1mq1nww7zl7169865gwqt89s9127m",
         
     | 
| 
       57 
52 
     | 
    
         
             
                  "updated_at": "2015-05-28T05:42:03Z",
         
     | 
| 
       58 
53 
     | 
    
         
             
                  "approval_status": "ACCEPTED",
         
     | 
| 
       59 
54 
     | 
    
         
             
                  "deleted": false
         
     | 
| 
         
            File without changes
         
     | 
| 
         @@ -13,7 +13,6 @@ 
     | 
|
| 
       13 
13 
     | 
    
         
             
                    "ALL_ON_TWITTER"
         
     | 
| 
       14 
14 
     | 
    
         
             
                  ],
         
     | 
| 
       15 
15 
     | 
    
         
             
                  "bid_amount_local_micro": 2000000,
         
     | 
| 
       16 
     | 
    
         
            -
                  "automatically_select_bid": false,
         
     | 
| 
       17 
16 
     | 
    
         
             
                  "advertiser_domain": null,
         
     | 
| 
       18 
17 
     | 
    
         
             
                  "primary_web_event_tag": null,
         
     | 
| 
       19 
18 
     | 
    
         
             
                  "charge_by": "ENGAGEMENT",
         
     | 
| 
         @@ -40,7 +39,6 @@ 
     | 
|
| 
       40 
39 
     | 
    
         
             
                    "ALL_ON_TWITTER"
         
     | 
| 
       41 
40 
     | 
    
         
             
                  ],
         
     | 
| 
       42 
41 
     | 
    
         
             
                  "bid_amount_local_micro": 2000000,
         
     | 
| 
       43 
     | 
    
         
            -
                  "automatically_select_bid": false,
         
     | 
| 
       44 
42 
     | 
    
         
             
                  "advertiser_domain": null,
         
     | 
| 
       45 
43 
     | 
    
         
             
                  "primary_web_event_tag": null,
         
     | 
| 
       46 
44 
     | 
    
         
             
                  "charge_by": "ENGAGEMENT",
         
     | 
| 
         @@ -67,7 +65,6 @@ 
     | 
|
| 
       67 
65 
     | 
    
         
             
                    "TWITTER_SEARCH"
         
     | 
| 
       68 
66 
     | 
    
         
             
                  ],
         
     | 
| 
       69 
67 
     | 
    
         
             
                  "bid_amount_local_micro": 100000,
         
     | 
| 
       70 
     | 
    
         
            -
                  "automatically_select_bid": false,
         
     | 
| 
       71 
68 
     | 
    
         
             
                  "advertiser_domain": null,
         
     | 
| 
       72 
69 
     | 
    
         
             
                  "primary_web_event_tag": null,
         
     | 
| 
       73 
70 
     | 
    
         
             
                  "charge_by": "ENGAGEMENT",
         
     | 
| 
         @@ -94,7 +91,6 @@ 
     | 
|
| 
       94 
91 
     | 
    
         
             
                    "TWITTER_SEARCH"
         
     | 
| 
       95 
92 
     | 
    
         
             
                  ],
         
     | 
| 
       96 
93 
     | 
    
         
             
                  "bid_amount_local_micro": 500000,
         
     | 
| 
       97 
     | 
    
         
            -
                  "automatically_select_bid": false,
         
     | 
| 
       98 
94 
     | 
    
         
             
                  "advertiser_domain": null,
         
     | 
| 
       99 
95 
     | 
    
         
             
                  "primary_web_event_tag": null,
         
     | 
| 
       100 
96 
     | 
    
         
             
                  "charge_by": "ENGAGEMENT",
         
     | 
| 
         @@ -121,7 +117,6 @@ 
     | 
|
| 
       121 
117 
     | 
    
         
             
                    "TWITTER_TIMELINE"
         
     | 
| 
       122 
118 
     | 
    
         
             
                  ],
         
     | 
| 
       123 
119 
     | 
    
         
             
                  "bid_amount_local_micro": 50000000,
         
     | 
| 
       124 
     | 
    
         
            -
                  "automatically_select_bid": false,
         
     | 
| 
       125 
120 
     | 
    
         
             
                  "advertiser_domain": null,
         
     | 
| 
       126 
121 
     | 
    
         
             
                  "primary_web_event_tag": null,
         
     | 
| 
       127 
122 
     | 
    
         
             
                  "charge_by": "ENGAGEMENT",
         
     | 
| 
         @@ -149,7 +144,6 @@ 
     | 
|
| 
       149 
144 
     | 
    
         
             
                    "TWITTER_TIMELINE"
         
     | 
| 
       150 
145 
     | 
    
         
             
                  ],
         
     | 
| 
       151 
146 
     | 
    
         
             
                  "bid_amount_local_micro": 50000000,
         
     | 
| 
       152 
     | 
    
         
            -
                  "automatically_select_bid": false,
         
     | 
| 
       153 
147 
     | 
    
         
             
                  "advertiser_domain": null,
         
     | 
| 
       154 
148 
     | 
    
         
             
                  "primary_web_event_tag": null,
         
     | 
| 
       155 
149 
     | 
    
         
             
                  "charge_by": "ENGAGEMENT",
         
     | 
| 
         @@ -177,7 +171,6 @@ 
     | 
|
| 
       177 
171 
     | 
    
         
             
                    "TWITTER_SEARCH"
         
     | 
| 
       178 
172 
     | 
    
         
             
                  ],
         
     | 
| 
       179 
173 
     | 
    
         
             
                  "bid_amount_local_micro": 50000000,
         
     | 
| 
       180 
     | 
    
         
            -
                  "automatically_select_bid": false,
         
     | 
| 
       181 
174 
     | 
    
         
             
                  "advertiser_domain": null,
         
     | 
| 
       182 
175 
     | 
    
         
             
                  "primary_web_event_tag": null,
         
     | 
| 
       183 
176 
     | 
    
         
             
                  "charge_by": "ENGAGEMENT",
         
     | 
| 
         @@ -204,7 +197,6 @@ 
     | 
|
| 
       204 
197 
     | 
    
         
             
                    "TWITTER_TIMELINE"
         
     | 
| 
       205 
198 
     | 
    
         
             
                  ],
         
     | 
| 
       206 
199 
     | 
    
         
             
                  "bid_amount_local_micro": 500000,
         
     | 
| 
       207 
     | 
    
         
            -
                  "automatically_select_bid": false,
         
     | 
| 
       208 
200 
     | 
    
         
             
                  "advertiser_domain": null,
         
     | 
| 
       209 
201 
     | 
    
         
             
                  "primary_web_event_tag": null,
         
     | 
| 
       210 
202 
     | 
    
         
             
                  "charge_by": "ENGAGEMENT",
         
     | 
| 
         @@ -231,7 +223,6 @@ 
     | 
|
| 
       231 
223 
     | 
    
         
             
                    "TWITTER_SEARCH"
         
     | 
| 
       232 
224 
     | 
    
         
             
                  ],
         
     | 
| 
       233 
225 
     | 
    
         
             
                  "bid_amount_local_micro": 50000000,
         
     | 
| 
       234 
     | 
    
         
            -
                  "automatically_select_bid": false,
         
     | 
| 
       235 
226 
     | 
    
         
             
                  "advertiser_domain": null,
         
     | 
| 
       236 
227 
     | 
    
         
             
                  "primary_web_event_tag": null,
         
     | 
| 
       237 
228 
     | 
    
         
             
                  "charge_by": "ENGAGEMENT",
         
     | 
| 
         @@ -258,7 +249,6 @@ 
     | 
|
| 
       258 
249 
     | 
    
         
             
                    "TWITTER_TIMELINE"
         
     | 
| 
       259 
250 
     | 
    
         
             
                  ],
         
     | 
| 
       260 
251 
     | 
    
         
             
                  "bid_amount_local_micro": 2009999,
         
     | 
| 
       261 
     | 
    
         
            -
                  "automatically_select_bid": false,
         
     | 
| 
       262 
252 
     | 
    
         
             
                  "advertiser_domain": null,
         
     | 
| 
       263 
253 
     | 
    
         
             
                  "primary_web_event_tag": null,
         
     | 
| 
       264 
254 
     | 
    
         
             
                  "charge_by": "ENGAGEMENT",
         
     | 
| 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            {
         
     | 
| 
      
 2 
     | 
    
         
            +
              "request": {
         
     | 
| 
      
 3 
     | 
    
         
            +
                "params": {
         
     | 
| 
      
 4 
     | 
    
         
            +
                  "tracking_tag_id": "7035",
         
     | 
| 
      
 5 
     | 
    
         
            +
                  "account_id": "18ce54uhdu0"
         
     | 
| 
      
 6 
     | 
    
         
            +
                }
         
     | 
| 
      
 7 
     | 
    
         
            +
              },
         
     | 
| 
      
 8 
     | 
    
         
            +
              "data": {
         
     | 
| 
      
 9 
     | 
    
         
            +
                "line_item_id": "dmbc0",
         
     | 
| 
      
 10 
     | 
    
         
            +
                "tracking_tag_url": "https://ad.doubleclick.net/ddm/trackimp/N1234.2061500TWITTER-OFFICIAL/B9156151.125630439;dc_trk_aid=1355;dc_trk_cid=8675309",
         
     | 
| 
      
 11 
     | 
    
         
            +
                "tracking_tag_type": "IMPRESSION_TAG",
         
     | 
| 
      
 12 
     | 
    
         
            +
                "id": "7035",
         
     | 
| 
      
 13 
     | 
    
         
            +
                "created_at": "2021-11-16T00:12:26Z",
         
     | 
| 
      
 14 
     | 
    
         
            +
                "updated_at": "2021-11-16T00:12:26Z",
         
     | 
| 
      
 15 
     | 
    
         
            +
                "deleted": false
         
     | 
| 
      
 16 
     | 
    
         
            +
              }
         
     | 
| 
      
 17 
     | 
    
         
            +
            }
         
     | 
| 
         @@ -0,0 +1,58 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright (C) 2019 Twitter, Inc.
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            describe TwitterAds::TrackingTag do
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              before(:each) do
         
     | 
| 
      
 9 
     | 
    
         
            +
                stub_fixture(:get, :accounts_all, "#{ADS_API}/accounts")
         
     | 
| 
      
 10 
     | 
    
         
            +
                stub_fixture(:get, :accounts_load, "#{ADS_API}/accounts/2iqph")
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              let(:client) do
         
     | 
| 
      
 14 
     | 
    
         
            +
                Client.new(
         
     | 
| 
      
 15 
     | 
    
         
            +
                  Faker::Lorem.characters(15),
         
     | 
| 
      
 16 
     | 
    
         
            +
                  Faker::Lorem.characters(40),
         
     | 
| 
      
 17 
     | 
    
         
            +
                  "123456-#{Faker::Lorem.characters(40)}",
         
     | 
| 
      
 18 
     | 
    
         
            +
                  Faker::Lorem.characters(40)
         
     | 
| 
      
 19 
     | 
    
         
            +
                )
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              let(:account) { client.accounts.first }
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              # check model properties
         
     | 
| 
      
 25 
     | 
    
         
            +
              subject { described_class.new(account) }
         
     | 
| 
      
 26 
     | 
    
         
            +
              read  = %w(id)
         
     | 
| 
      
 27 
     | 
    
         
            +
              write = %w(line_item_id tracking_tag_type tracking_tag_url)
         
     | 
| 
      
 28 
     | 
    
         
            +
              include_examples 'object property check', read, write
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              describe '#create' do
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                let(:tracking_tag) { TwitterAds::TrackingTag.new(account) }
         
     | 
| 
      
 33 
     | 
    
         
            +
                let!(:resource) { "#{ADS_API}/accounts/#{account.id}/tracking_tags" }
         
     | 
| 
      
 34 
     | 
    
         
            +
                let!(:rel_path) { "/#{TwitterAds::API_VERSION}/accounts/#{account.id}/tracking_tags" }
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                before(:each) do
         
     | 
| 
      
 37 
     | 
    
         
            +
                  stub_fixture(:post, :tracking_tags_load, /#{resource}\?.*/)
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                it 'creates post request with line item ID and url' do
         
     | 
| 
      
 41 
     | 
    
         
            +
                  line_item_id = 'axe123'
         
     | 
| 
      
 42 
     | 
    
         
            +
                  tracking_tag_url = 'https://ad.doubleclick.net/ddm/trackimp/N1234.2061500TWITTER-OFFICIAL/B9156151.125630439;dc_trk_aid=1355;dc_trk_cid=8675309'
         
     | 
| 
      
 43 
     | 
    
         
            +
                  tracking_tag_type = 'IMPRESSION_TAG'
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                  params = {
         
     | 
| 
      
 46 
     | 
    
         
            +
                    line_item_id: line_item_id,
         
     | 
| 
      
 47 
     | 
    
         
            +
                    tracking_tag_url: tracking_tag_url,
         
     | 
| 
      
 48 
     | 
    
         
            +
                    tracking_tag_type: tracking_tag_type
         
     | 
| 
      
 49 
     | 
    
         
            +
                  }
         
     | 
| 
      
 50 
     | 
    
         
            +
                  args = [account.client, :post, rel_path, params: params]
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                  expect(Request).to receive(:new).with(*args).and_call_original
         
     | 
| 
      
 53 
     | 
    
         
            +
                  tracking_tag.create(line_item_id, tracking_tag_url)
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
              end
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -3,12 +3,12 @@ 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            require 'spec_helper'
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
            describe TwitterAds:: 
     | 
| 
      
 6 
     | 
    
         
            +
            describe TwitterAds::AudienceEstimate do
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
              before(:each) do
         
     | 
| 
       9 
9 
     | 
    
         
             
                stub_fixture(:get, :accounts_all, "#{ADS_API}/accounts")
         
     | 
| 
       10 
10 
     | 
    
         
             
                stub_fixture(:get, :accounts_load, "#{ADS_API}/accounts/2iqph")
         
     | 
| 
       11 
     | 
    
         
            -
                stub_fixture(:post, : 
     | 
| 
      
 11 
     | 
    
         
            +
                stub_fixture(:post, :audience_estimate, "#{ADS_API}/accounts/2iqph/audience_estimate")
         
     | 
| 
       12 
12 
     | 
    
         
             
              end
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
              let(:client) do
         
     | 
    
        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:  
     | 
| 
      
 4 
     | 
    
         
            +
              version: 10.0.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - John Babich
         
     | 
| 
         @@ -12,7 +12,7 @@ authors: 
     | 
|
| 
       12 
12 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       13 
13 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       14 
14 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       15 
     | 
    
         
            -
            date: 2021- 
     | 
| 
      
 15 
     | 
    
         
            +
            date: 2021-11-18 00:00:00.000000000 Z
         
     | 
| 
       16 
16 
     | 
    
         
             
            dependencies:
         
     | 
| 
       17 
17 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       18 
18 
     | 
    
         
             
              name: multi_json
         
     | 
| 
         @@ -68,6 +68,7 @@ files: 
     | 
|
| 
       68 
68 
     | 
    
         
             
            - lib/twitter-ads/campaign/organic_tweet.rb
         
     | 
| 
       69 
69 
     | 
    
         
             
            - lib/twitter-ads/campaign/promotable_user.rb
         
     | 
| 
       70 
70 
     | 
    
         
             
            - lib/twitter-ads/campaign/targeting_criteria.rb
         
     | 
| 
      
 71 
     | 
    
         
            +
            - lib/twitter-ads/campaign/tracking_tags.rb
         
     | 
| 
       71 
72 
     | 
    
         
             
            - lib/twitter-ads/campaign/tweet.rb
         
     | 
| 
       72 
73 
     | 
    
         
             
            - lib/twitter-ads/client.rb
         
     | 
| 
       73 
74 
     | 
    
         
             
            - lib/twitter-ads/creative/account_media.rb
         
     | 
| 
         @@ -104,7 +105,7 @@ files: 
     | 
|
| 
       104 
105 
     | 
    
         
             
            - lib/twitter-ads/restapi.rb
         
     | 
| 
       105 
106 
     | 
    
         
             
            - lib/twitter-ads/settings/tax.rb
         
     | 
| 
       106 
107 
     | 
    
         
             
            - lib/twitter-ads/settings/user.rb
         
     | 
| 
       107 
     | 
    
         
            -
            - lib/twitter-ads/targeting/ 
     | 
| 
      
 108 
     | 
    
         
            +
            - lib/twitter-ads/targeting/audience_estimate.rb
         
     | 
| 
       108 
109 
     | 
    
         
             
            - lib/twitter-ads/targeting_criteria/app_store_category.rb
         
     | 
| 
       109 
110 
     | 
    
         
             
            - lib/twitter-ads/targeting_criteria/conversation.rb
         
     | 
| 
       110 
111 
     | 
    
         
             
            - lib/twitter-ads/targeting_criteria/device.rb
         
     | 
| 
         @@ -124,7 +125,7 @@ files: 
     | 
|
| 
       124 
125 
     | 
    
         
             
            - spec/fixtures/accounts_load.json
         
     | 
| 
       125 
126 
     | 
    
         
             
            - spec/fixtures/app_lists_all.json
         
     | 
| 
       126 
127 
     | 
    
         
             
            - spec/fixtures/app_lists_load.json
         
     | 
| 
       127 
     | 
    
         
            -
            - spec/fixtures/ 
     | 
| 
      
 128 
     | 
    
         
            +
            - spec/fixtures/audience_estimate.json
         
     | 
| 
       128 
129 
     | 
    
         
             
            - spec/fixtures/campaigns_all.json
         
     | 
| 
       129 
130 
     | 
    
         
             
            - spec/fixtures/campaigns_load.json
         
     | 
| 
       130 
131 
     | 
    
         
             
            - spec/fixtures/custom_audiences_all.json
         
     | 
| 
         @@ -142,6 +143,7 @@ files: 
     | 
|
| 
       142 
143 
     | 
    
         
             
            - spec/fixtures/reach_estimate.json
         
     | 
| 
       143 
144 
     | 
    
         
             
            - spec/fixtures/tailored_audiences_all.json
         
     | 
| 
       144 
145 
     | 
    
         
             
            - spec/fixtures/targeted_audiences.json
         
     | 
| 
      
 146 
     | 
    
         
            +
            - spec/fixtures/tracking_tags_load.json
         
     | 
| 
       145 
147 
     | 
    
         
             
            - spec/fixtures/tweet_previews.json
         
     | 
| 
       146 
148 
     | 
    
         
             
            - spec/fixtures/videos_all.json
         
     | 
| 
       147 
149 
     | 
    
         
             
            - spec/fixtures/videos_load.json
         
     | 
| 
         @@ -154,6 +156,7 @@ files: 
     | 
|
| 
       154 
156 
     | 
    
         
             
            - spec/twitter-ads/campaign/app_list_spec.rb
         
     | 
| 
       155 
157 
     | 
    
         
             
            - spec/twitter-ads/campaign/line_item_spec.rb
         
     | 
| 
       156 
158 
     | 
    
         
             
            - spec/twitter-ads/campaign/targeting_criteria_spec.rb
         
     | 
| 
      
 159 
     | 
    
         
            +
            - spec/twitter-ads/campaign/tracking_tag_spec.rb
         
     | 
| 
       157 
160 
     | 
    
         
             
            - spec/twitter-ads/campaign/tweet_spec.rb
         
     | 
| 
       158 
161 
     | 
    
         
             
            - spec/twitter-ads/client_spec.rb
         
     | 
| 
       159 
162 
     | 
    
         
             
            - spec/twitter-ads/creative/media_creative_spec.rb
         
     | 
| 
         @@ -164,7 +167,7 @@ files: 
     | 
|
| 
       164 
167 
     | 
    
         
             
            - spec/twitter-ads/placements_spec.rb
         
     | 
| 
       165 
168 
     | 
    
         
             
            - spec/twitter-ads/rate_limit_spec.rb
         
     | 
| 
       166 
169 
     | 
    
         
             
            - spec/twitter-ads/retry_count_spec.rb
         
     | 
| 
       167 
     | 
    
         
            -
            - spec/twitter-ads/targeting/ 
     | 
| 
      
 170 
     | 
    
         
            +
            - spec/twitter-ads/targeting/audience_estimate_spec.rb
         
     | 
| 
       168 
171 
     | 
    
         
             
            - spec/twitter-ads/utils_spec.rb
         
     | 
| 
       169 
172 
     | 
    
         
             
            - twitter-ads.gemspec
         
     | 
| 
       170 
173 
     | 
    
         
             
            homepage: https://github.com/twitterdev/twitter-ruby-ads-sdk
         
     | 
| 
         @@ -196,7 +199,7 @@ test_files: 
     | 
|
| 
       196 
199 
     | 
    
         
             
            - spec/fixtures/accounts_load.json
         
     | 
| 
       197 
200 
     | 
    
         
             
            - spec/fixtures/app_lists_all.json
         
     | 
| 
       198 
201 
     | 
    
         
             
            - spec/fixtures/app_lists_load.json
         
     | 
| 
       199 
     | 
    
         
            -
            - spec/fixtures/ 
     | 
| 
      
 202 
     | 
    
         
            +
            - spec/fixtures/audience_estimate.json
         
     | 
| 
       200 
203 
     | 
    
         
             
            - spec/fixtures/campaigns_all.json
         
     | 
| 
       201 
204 
     | 
    
         
             
            - spec/fixtures/campaigns_load.json
         
     | 
| 
       202 
205 
     | 
    
         
             
            - spec/fixtures/custom_audiences_all.json
         
     | 
| 
         @@ -214,6 +217,7 @@ test_files: 
     | 
|
| 
       214 
217 
     | 
    
         
             
            - spec/fixtures/reach_estimate.json
         
     | 
| 
       215 
218 
     | 
    
         
             
            - spec/fixtures/tailored_audiences_all.json
         
     | 
| 
       216 
219 
     | 
    
         
             
            - spec/fixtures/targeted_audiences.json
         
     | 
| 
      
 220 
     | 
    
         
            +
            - spec/fixtures/tracking_tags_load.json
         
     | 
| 
       217 
221 
     | 
    
         
             
            - spec/fixtures/tweet_previews.json
         
     | 
| 
       218 
222 
     | 
    
         
             
            - spec/fixtures/videos_all.json
         
     | 
| 
       219 
223 
     | 
    
         
             
            - spec/fixtures/videos_load.json
         
     | 
| 
         @@ -226,6 +230,7 @@ test_files: 
     | 
|
| 
       226 
230 
     | 
    
         
             
            - spec/twitter-ads/campaign/app_list_spec.rb
         
     | 
| 
       227 
231 
     | 
    
         
             
            - spec/twitter-ads/campaign/line_item_spec.rb
         
     | 
| 
       228 
232 
     | 
    
         
             
            - spec/twitter-ads/campaign/targeting_criteria_spec.rb
         
     | 
| 
      
 233 
     | 
    
         
            +
            - spec/twitter-ads/campaign/tracking_tag_spec.rb
         
     | 
| 
       229 
234 
     | 
    
         
             
            - spec/twitter-ads/campaign/tweet_spec.rb
         
     | 
| 
       230 
235 
     | 
    
         
             
            - spec/twitter-ads/client_spec.rb
         
     | 
| 
       231 
236 
     | 
    
         
             
            - spec/twitter-ads/creative/media_creative_spec.rb
         
     | 
| 
         @@ -236,5 +241,5 @@ test_files: 
     | 
|
| 
       236 
241 
     | 
    
         
             
            - spec/twitter-ads/placements_spec.rb
         
     | 
| 
       237 
242 
     | 
    
         
             
            - spec/twitter-ads/rate_limit_spec.rb
         
     | 
| 
       238 
243 
     | 
    
         
             
            - spec/twitter-ads/retry_count_spec.rb
         
     | 
| 
       239 
     | 
    
         
            -
            - spec/twitter-ads/targeting/ 
     | 
| 
      
 244 
     | 
    
         
            +
            - spec/twitter-ads/targeting/audience_estimate_spec.rb
         
     | 
| 
       240 
245 
     | 
    
         
             
            - spec/twitter-ads/utils_spec.rb
         
     |