Class: WZCloud::Nova::ErrorHandler

Inherits:
Object
  • Object
show all
Defined in:
lib/wzcloud/nova.rb

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ ErrorHandler

Returns a new instance of ErrorHandler.



465
466
467
# File 'lib/wzcloud/nova.rb', line 465

def initialize(app)
  @app = app
end

Instance Method Details

#call(envir) ⇒ Object



469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
# File 'lib/wzcloud/nova.rb', line 469

def call(envir)
  @app.call(envir)
rescue Faraday::Error::TimeoutError => e
  raise Transport::TimeoutError.new(envir[:url].to_s, 'Timeout error', 504)
rescue Faraday::Error::ClientError => e
  raise unless e.response
  case e.response[:status]
  when 400
    message = e.response[:body][:badRequest][:message]
    raise Transport::BadRequestError.new(envir[:url].to_s, message, 400)
  when 403
    raise Transport::UnauthorizedError.new(
      envir[:url].to_s,
      e.response[:body].values.first[:message],
      403
    )
  when 404
    message = if e.response[:body].class == String
                e.response[:body]
              else
                e.response[:body][:itemNotFound][:message]
              end
    raise Transport::NotFoundError.new(envir[:url].to_s, message, 404)
  when 409
    message = e.response[:body][:conflictingRequest][:message]
    raise Transport::ConflictError.new(envir[:url].to_s, message, 409)
  else
    body = e.response[:body]
    message = body.values.first[:message] if body && body.class == Hash
    raise Transport::RequestError.new(envir[:url].to_s, message, e.response[:status])
  end
end