fog/fog-proxmox

View on GitHub
lib/fog/proxmox/errors.rb

Summary

Maintainability
A
0 mins
Test Coverage
F
44%
# frozen_string_literal: true

# Copyright 2018 Tristan Robert

# This file is part of Fog::Proxmox.

# Fog::Proxmox is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

# Fog::Proxmox is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with Fog::Proxmox. If not, see <http://www.gnu.org/licenses/>.

module Fog
  module Proxmox
    module Errors
      # class ServiceError
      class ServiceError < Fog::Errors::Error
        attr_reader :response_data

        def self.slurp(error)
          if error.response.body.empty?
            data = nil
            message = nil
          else
            data = Fog::JSON.decode(error.response.body)
            message = data['message']
            data1 = data.values.first
            message = data1['message'] if message.nil? && !data1.nil?
          end

          new_error = super(error, message)
          new_error.instance_variable_set(:@response_data, data)
          new_error
        end
      end

      # class ServiceUnavailable error
      class ServiceUnavailable < ServiceError; end

      # class BadRequest error
      class BadRequest < ServiceError
        attr_reader :validation_errors

        def self.slurp(error)
          new_error = super(error)
          unless new_error.response_data.nil? || new_error.response_data['badRequest'].nil?
            new_error.instance_variable_set(:@validation_errors,
                                            new_error.response_data['badRequest']['validationErrors'])
          end
          new_error
        end
      end

      # class InterfaceNotImplemented error
      class InterfaceNotImplemented < Fog::Errors::Error; end
    end
  end
end