class Bing::Ads::API::V11::Data::ReportRequest

Bing::Ads::API::V11::Data::ReportRequest

Constants

KEYS_ORDER

@order msdn.microsoft.com/en-us/library/bing-ads-reporting-reportrequest.aspx

Public Class Methods

prepare(type, report_request_raw) click to toggle source
# File lib/bing/ads/api/v11/data/report_request.rb, line 27
def prepare(type, report_request_raw)
  report_request_raw[:columns] = prepare_columns(
    columns: report_request_raw[:columns],
    type: type.to_s.classify
  )

  report_request_raw[:scope] = prepare_scope(
    account_ids: report_request_raw[:account_ids]
  )

  report_request_raw[:time] = prepare_time_period(
    from_date: report_request_raw[:from_date],
    to_date:   report_request_raw[:to_date]
  )

  report_request_raw.except!(:from_date, :to_date, :account_ids)

  report_request = Bing::Ads::Utils.sort_keys(report_request_raw, KEYS_ORDER)
  namespace_identifier = Bing::Ads::API::V11::NAMESPACE_IDENTIFIER
  {
    report_request: Bing::Ads::Utils.camelcase_keys(report_request),
    :attributes! => {
      report_request: {
        "xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance",
        "i:type" => "#{namespace_identifier}:#{type.to_s.classify}ReportRequest"
      }
    }
  }
end

Private Class Methods

prepare_columns(type:, columns:) click to toggle source
# File lib/bing/ads/api/v11/data/report_request.rb, line 59
def prepare_columns(type:, columns:)
  {
    "#{type}ReportColumn" => columns.map(&:to_s).map(&:camelcase)
  }
end
prepare_scope(account_ids:) click to toggle source
# File lib/bing/ads/api/v11/data/report_request.rb, line 65
def prepare_scope(account_ids:)
  account_ids_elements =
    if account_ids.nil?
      nil
    else
      {
        'a1:long' => account_ids,
        '@xmlns:a1' => 'http://schemas.microsoft.com/2003/10/Serialization/Arrays'
      }
    end

  {
    account_ids: account_ids_elements,
    ad_groups: nil,
    campaigns: nil
  }
end
prepare_time_period(from_date:, to_date:) click to toggle source
# File lib/bing/ads/api/v11/data/report_request.rb, line 83
def prepare_time_period(from_date:, to_date:)
  from_date = Date.parse(from_date)
  to_date = Date.parse(to_date)

  {
    custom_date_range_end: {
      day: to_date.day,
      month: to_date.month,
      year: to_date.year
    },
    custom_date_range_start: {
      day: from_date.day,
      month: from_date.month,
      year: from_date.year
    }
  }
end