class SoapyBing::Ads::Campaigns
Constants
- DEFAULT_ENTITIES
- DEFAULT_POLLING_SETTINGS
- NotCompleted
- StatusFailed
Attributes
campaign_ids[R]
entities[R]
polling_settings[R]
service[R]
status[R]
Public Class Methods
new( service_options:, entities: DEFAULT_ENTITIES, polling_settings: {}, campaign_ids: nil )
click to toggle source
# File lib/soapy_bing/ads/campaigns.rb, line 18 def initialize( service_options:, entities: DEFAULT_ENTITIES, polling_settings: {}, campaign_ids: nil ) @service = Service.bulk(service_options) @entities = entities @polling_settings = DEFAULT_POLLING_SETTINGS.merge(polling_settings) @campaign_ids = campaign_ids end
Public Instance Methods
rows()
click to toggle source
# File lib/soapy_bing/ads/campaigns.rb, line 30 def rows @rows ||= Parsers::BulkCsvParser.new(Helpers::ZipDownloader.new(result_file_url).read).rows end
Private Instance Methods
by_account_ids()
click to toggle source
# File lib/soapy_bing/ads/campaigns.rb, line 86 def by_account_ids service.download_campaigns_by_account_ids( { account_ids: { '@xmlns:a1' => 'http://schemas.microsoft.com/2003/10/Serialization/Arrays', 'a1:long' => service.account.account_id } }.merge(common_request_body) ) end
by_campaign_ids()
click to toggle source
# File lib/soapy_bing/ads/campaigns.rb, line 67 def by_campaign_ids service.download_campaigns_by_campaign_ids( { campaigns: { campaign_scope: campaign_scope } }.merge(common_request_body) ) end
campaign_scope()
click to toggle source
# File lib/soapy_bing/ads/campaigns.rb, line 77 def campaign_scope campaign_ids.map do |campaign_id| { campaign_id: campaign_id, parent_account_id: service.account.account_id } end end
common_request_body()
click to toggle source
# File lib/soapy_bing/ads/campaigns.rb, line 97 def common_request_body { download_entities: { download_entity: entities }, download_file_type: 'Csv', format_version: '6.0' } end
download_campaigns()
click to toggle source
# File lib/soapy_bing/ads/campaigns.rb, line 62 def download_campaigns response = campaign_ids ? by_campaign_ids : by_account_ids response[:download_request_id] end
download_request_id()
click to toggle source
# File lib/soapy_bing/ads/campaigns.rb, line 58 def download_request_id @download_request_id ||= download_campaigns end
fetch_status()
click to toggle source
# File lib/soapy_bing/ads/campaigns.rb, line 43 def fetch_status response = service.get_bulk_download_status(request_id: download_request_id) if response[:request_status] == 'Failed' raise StatusFailed, response[:errors].to_s end @status = response.slice(:percent_complete, :request_status, :result_file_url) end
result_file_url()
click to toggle source
# File lib/soapy_bing/ads/campaigns.rb, line 36 def result_file_url @result_file_url ||= begin wait_status_complete status[:result_file_url] end end
wait_status_complete()
click to toggle source
# File lib/soapy_bing/ads/campaigns.rb, line 51 def wait_status_complete Retryable.retryable(polling_settings.merge(on: NotCompleted)) do fetch_status raise NotCompleted if status[:request_status] != 'Completed' end end