class CMIS::Connection::ResponseParser

Constants

JSON_CONTENT_TYPE

Public Instance Methods

call(env) click to toggle source
# File lib/cmis/connection/response_parser.rb, line 9
def call(env)
  response = @app.call(env)

  response.on_complete do |env|

    # Remove Authorization header when following redirects
    # This hack should be removed when issue #81 is merged
    # Cf. https://github.com/lostisland/faraday_middleware/pull/81
    if [301, 302, 303, 307].include?(response.status)
      env[:request_headers].delete('Authorization')
    end

    case env[:status]
    when 401
      raise Exceptions::Unauthorized
    else
      if env[:response_headers][:content_type] =~ JSON_CONTENT_TYPE
        parse_body(env)
        check_for_cmis_exception!(env[:body])
      end
    end
  end

rescue Faraday::ConnectionFailed
  raise Exceptions::Timeout
end

Private Instance Methods

check_for_cmis_exception!(body) click to toggle source
# File lib/cmis/connection/response_parser.rb, line 44
def check_for_cmis_exception!(body)
  return unless body.is_a?(Hash)

  if body.key?('exception')
    e, m, s = body.values_at('exception', 'message', 'stacktrace')
    raise exception_class(e), "[#{e}] #{m}\n#{s}"
  end
end
exception_class(exception) click to toggle source
# File lib/cmis/connection/response_parser.rb, line 53
def exception_class(exception)
  clazz = exception.dup
  clazz[0] = clazz[0].upcase
  CMIS::Exceptions.const_get(clazz) rescue Exception
end
parse_body(env) click to toggle source
# File lib/cmis/connection/response_parser.rb, line 38
def parse_body(env)
  unless env[:response_headers][:content_disposition]
    env[:body] = JSON.parse(env[:body])
  end
end