Sha256: 5a2c669fad832dd73fb68ec21577bb6a77cf19b46ba6a11146349ff6a741a28f

Contents?: true

Size: 1.04 KB

Versions: 2

Compression:

Stored size: 1.04 KB

Contents

# frozen_string_literal: true

require 'excon'
require 'forwardable'
require 'peddler/errors/class_generator'
require 'peddler/errors/parser'

module Peddler
  module Errors
    # @api private
    class Builder
      extend Forwardable

      DIGIT_AS_FIRST_CHAR = /^\d/
      private_constant :DIGIT_AS_FIRST_CHAR

      def_delegator :error, :response

      def self.call(error)
        new(error).build
      end

      attr_reader :error

      def initialize(error)
        @error = error
      end

      def build
        parse_original_response
        return if bad_class_name?
        error_class.new(error_message, error)
      end

      private

      def bad_class_name?
        error_name =~ DIGIT_AS_FIRST_CHAR
      end

      def error_class
        ClassGenerator.call(error_name)
      end

      def error_name
        response.code
      end

      def error_message
        response.message
      end

      def parse_original_response
        error.instance_variable_set :@response, Parser.new(error.response)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
peddler-2.0.4 lib/peddler/errors/builder.rb
peddler-2.0.3 lib/peddler/errors/builder.rb