module Azure::Storage::Table::BatchResponse

Public Class Methods

batch_boundary(context) click to toggle source
# File lib/azure/storage/table/batch_response.rb, line 123
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/storage/table/batch_response.rb, line 109
def self.batch_headers(context)
  match = /(.*): (.*)/.match(current_line(context))

  if context[:batch_headers] && (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/storage/table/batch_response.rb, line 102
def self.changeset_boundary_or_end(context)
  match_boundary = /--changesetresponse_(.*)/.match(current_line(context))
  match_end = /--changesetresponse_(.*)--/.match(current_line(context)) || /--batchresponse_(.*)--/.match(current_line(context))

  (match_boundary && (not match_end)) ? :boundary : (match_end ? :end : nil)
end
changeset_headers(context) click to toggle source
# File lib/azure/storage/table/batch_response.rb, line 98
def self.changeset_headers(context)
  current_line(context).strip == ""
end
current_line(context) click to toggle source
# File lib/azure/storage/table/batch_response.rb, line 128
def self.current_line(context)
  context[:lines][context[:index]]
end
find(context, &block) click to toggle source
# File lib/azure/storage/table/batch_response.rb, line 53
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, is_get) click to toggle source
# File lib/azure/storage/table/batch_response.rb, line 27
def self.parse(data, is_get)
  context = {
    lines: data.lines.to_a,
    index: 0,
    responses: []
  }

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

  if is_get
    find(context) { |c| response c }
    find(context) { |c| response_headers c }
    find(context) { |c| response_body c }
  else
    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
  end

  context[:responses]
end
response(context) click to toggle source
# File lib/azure/storage/table/batch_response.rb, line 91
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/storage/table/batch_response.rb, line 61
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/storage/table/batch_response.rb, line 76
def self.response_headers(context)
  match = /(.*): (.*)/.match(current_line(context))

  if context[:responses].last[:headers] && (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