Module: Azure::Table::BatchResponse

Defined in:
lib/azure/table/batch_response.rb

Class Method Summary collapse

Class Method Details

.batch_boundary(context) ⇒ Object



108
109
110
111
# 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) ⇒ Object



94
95
96
97
98
99
100
101
102
103
104
105
106
# 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) ⇒ Object



87
88
89
90
91
92
# 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) ⇒ Object



83
84
85
# File 'lib/azure/table/batch_response.rb', line 83

def self.changeset_headers(context)
  current_line(context).strip ==  ''
end

.current_line(context) ⇒ Object



113
114
115
# File 'lib/azure/table/batch_response.rb', line 113

def self.current_line(context)
  context[:lines][context[:index]]
end

.find(context, &block) ⇒ Object



38
39
40
41
42
43
44
# 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) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 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) ⇒ Object



76
77
78
79
80
81
# 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) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
# 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) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
# 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