class SoapyBing::Ads::Report
Constants
- DEFAULT_POLLING_SETTINGS
- DEFAULT_REPORT_SETTINGS
Attributes
polling_settings[R]
service[R]
settings[R]
status[R]
Public Class Methods
new(options)
click to toggle source
# File lib/soapy_bing/ads/report.rb, line 28 def initialize(options) @service = Service.reporting(options.fetch(:service_options)) @settings = OpenStruct.new(DEFAULT_REPORT_SETTINGS.merge(options.fetch(:settings, {}))) @polling_settings = DEFAULT_POLLING_SETTINGS.merge(options.fetch(:polling_settings, {})) end
Public Instance Methods
rows()
click to toggle source
# File lib/soapy_bing/ads/report.rb, line 34 def rows @rows ||= download_and_parse_rows end
Private Instance Methods
base_message()
click to toggle source
# File lib/soapy_bing/ads/report.rb, line 83 def base_message { # https://msdn.microsoft.com/en-us/library/bing-ads-reporting-campaignperformancereportrequest.aspx#Anchor_2 format: settings.format, language: settings.language, report_name: settings.name, return_only_completed_data: false } end
download_and_parse_rows()
click to toggle source
# File lib/soapy_bing/ads/report.rb, line 40 def download_and_parse_rows # https://msdn.microsoft.com/en-us/library/bing-ads-api-migration-guide(v=msads.100).aspx#Report-Download-URL-and-Empty-Reports return [] unless download_url Parsers::ReportCsvParser.new(Helpers::ZipDownloader.new(download_url).read).rows end
download_url()
click to toggle source
# File lib/soapy_bing/ads/report.rb, line 46 def download_url @download_url ||= begin wait_status_complete status[:report_download_url] end end
fetch_status()
click to toggle source
# File lib/soapy_bing/ads/report.rb, line 53 def fetch_status response = service.poll_generate_report(report_request_id: report_request_id) if response[:report_request_status][:status] == 'Error' raise StatusFailed, response[:errors].to_s end @status = response[:report_request_status].slice(:status, :report_download_url) end
report_request_id()
click to toggle source
# File lib/soapy_bing/ads/report.rb, line 68 def report_request_id @report_request_id ||= submit_generate_report end
submit_generate_report()
click to toggle source
# File lib/soapy_bing/ads/report.rb, line 72 def submit_generate_report response = service.submit_generate_report do |namespace_identifier| { report_request: { '@xsi:type' => "#{namespace_identifier}:#{request_type}" }.merge(base_message).merge(message) } end response[:report_request_id] end
wait_status_complete()
click to toggle source
# File lib/soapy_bing/ads/report.rb, line 61 def wait_status_complete Retryable.retryable(polling_settings.merge(on: NotCompleted)) do fetch_status raise NotCompleted if status[:status] != 'Success' end end