class AdwordsApi::ReportStream

Public Class Methods

new(report_utils, report_definition, cid = nil, format = nil, is_awql = false) click to toggle source
# File lib/adwords_api/report_stream.rb, line 23
def initialize(report_utils, report_definition, cid = nil, format = nil,
    is_awql = false)
  @report_utils = report_utils
  @report_definition = report_definition
  @format = format
  @cid = cid
  @is_awql = is_awql
end
set_up(report_utils, report_definition, cid = nil) click to toggle source
# File lib/adwords_api/report_stream.rb, line 32
def self.set_up(report_utils, report_definition, cid = nil)
  return ReportStream.new(report_utils, report_definition, cid)
end
set_up_with_awql( report_utils, report_query, format, cid = nil) click to toggle source
# File lib/adwords_api/report_stream.rb, line 36
def self.set_up_with_awql(
    report_utils, report_query, format, cid = nil)
  return ReportStream.new(
      report_utils, report_query, cid, format, true)
end

Public Instance Methods

each_line() { |chomp| ... } click to toggle source
# File lib/adwords_api/report_stream.rb, line 42
def each_line()
  # Determine which method and arguments to use depending on whether
  # this is an AWQL request or not.
  method = 'download_report_as_stream'
  method += '_with_awql' if @is_awql
  args = [@report_definition]
  args << @format if @is_awql
  args << @cid

  leftover_data = ''
  @report_utils.send(method, *args) do |batch|
    data_to_process = leftover_data + batch
    leftover_data = ''
    while !data_to_process.valid_encoding?
      leftover_data = data_to_process[-1] + leftover_data
      data_to_process = data_to_process[0, data_to_process.length - 1]
    end
    lines = data_to_process.each_line.map {|line| line}
    remainder = lines.pop
    leftover_data = remainder + leftover_data unless remainder.nil?
    lines.each do |line|
      yield line.chomp
    end
  end
  yield leftover_data.chomp unless
      leftover_data.nil? || leftover_data.empty?
end