module Azure::Table::BatchResponse

Public Class Methods

batch_boundary(context) click to toggle source
# File lib/azure/table/batch_response.rb, line 108
def self.batch_boundary(context)
  match = /--batchresponse_(.*)/.match(current_line(context))
  match ? match[1] : nil
end
batch_headers(context) click to toggle source
# File lib/azure/table/batch_response.rb, line 94
def self.batch_headers(context)
  match = /(.*): (.*)/.match(current_line(context))

  if context[:batch_headers] and not match
    return context[:batch_headers]
  elsif match
    context[:batch_headers] ||= {}
    context[:batch_headers][match[1].downcase] = match[2]
    return nil
  else
    return nil
  end
end
changeset_boundary_or_end(context) click to toggle source
# File lib/azure/table/batch_response.rb, line 87
def self.changeset_boundary_or_end(context)
  match_boundary = /--changesetresponse_(.*)/.match(current_line(context))
  match_end = /--changesetresponse_(.*)--/.match(current_line(context))

  (match_boundary and not match_end) ? :boundary : (match_end ? :end : nil)
end
changeset_headers(context) click to toggle source
# File lib/azure/table/batch_response.rb, line 83
def self.changeset_headers(context)
  current_line(context).strip ==  ''
end
current_line(context) click to toggle source
# File lib/azure/table/batch_response.rb, line 113
def self.current_line(context)
  context[:lines][context[:index]]
end
find(context, &block) click to toggle source
# File lib/azure/table/batch_response.rb, line 38
def self.find(context, &block)
  while(context[:index] < context[:lines].length)
    result = block.call(context)
    return result if result
    context[:index] +=1
  end
end
parse(data) click to toggle source
# File lib/azure/table/batch_response.rb, line 18
def self.parse(data)
  context = {
    :lines => data.lines.to_a,
    :index=> 0,
    :responses => []
  }

  find(context) { |c| batch_boundary c }
  find(context) { |c| batch_headers c }

  while(find(context){ |c| changeset_boundary_or_end c } == :boundary)
    find(context) { |c| changeset_headers c }
    find(context) { |c| response c }
    find(context) { |c| response_headers c }
    find(context) { |c| response_body c }
  end

  context[:responses]
end
response(context) click to toggle source
# File lib/azure/table/batch_response.rb, line 76
def self.response(context)
  match = /HTTP\/1.1 (\d*) (.*)/.match(current_line(context))
  return nil unless match
  response = {:status_code => match[1], :message => match[2] }
  context[:responses].push response
end
response_body(context) click to toggle source
# File lib/azure/table/batch_response.rb, line 46
def self.response_body(context)
  end_of_body = nil
  end_of_body = changeset_boundary_or_end(context.dup.merge!({:index=>context[:index] + 1})) if context[:index] < (context[:lines].length - 1)

  if end_of_body
    context[:responses].last[:body] ||= ""
    context[:responses].last[:body] << current_line(context)
    return context[:responses].last[:body]
  else
    context[:responses].last[:body] ||= ""
    context[:responses].last[:body] << current_line(context)
    return nil
  end
end
response_headers(context) click to toggle source
# File lib/azure/table/batch_response.rb, line 61
def self.response_headers(context)
  match = /(.*): (.*)/.match(current_line(context))

  if context[:responses].last[:headers] and not match
    context[:index] += 1
    return context[:responses].last[:headers]
  elsif match
    context[:responses].last[:headers] ||= {}
    context[:responses].last[:headers][match[1].downcase] = match[2].strip
    return nil
  else
    return nil
  end
end