class Protein::Payload::Response

Public Class Methods

decode(payload) click to toggle source
# File lib/protein/payload.rb, line 36
def decode(payload)
  hash = JSON.parse(payload)
  response_buf_b64 = hash["response_buf_b64"]
  response_buf = response_buf_b64 && Base64.strict_decode64(response_buf_b64)
  errors = hash["errors"]
  errors = errors && decode_errors(errors)

  [response_buf, errors]
end
encode(response_buf, errors) click to toggle source
# File lib/protein/payload.rb, line 29
def encode(response_buf, errors)
  JSON.dump({
    "response_buf_b64" => response_buf && Base64.strict_encode64(response_buf),
    "errors" => encode_errors(errors)
  })
end

Private Class Methods

decode_errors(errors) click to toggle source
# File lib/protein/payload.rb, line 57
def decode_errors(errors)
  errors && errors.map do |error|
    reason_string = error["reason"]
    reason = reason_string =~ /^\:/ ? reason_string[1..-1].to_sym : reason_string
    pointer = error["pointer"]

    ServiceError.new(
      reason: reason,
      pointer: pointer && Pointer.new(nil, "request").load(pointer)
    )
  end
end
encode_errors(errors) click to toggle source
# File lib/protein/payload.rb, line 48
def encode_errors(errors)
  errors && errors.map do |error|
    {
      "reason" => error.reason.is_a?(Symbol) ? ":#{error.reason}" : error.reason,
      "pointer" => error.pointer && error.pointer.dump
    }
  end
end