module Tankard
  module Configuration
    attr_writer :api_key

    KEYS = [:api_key]
    BREWERYDB_URL = "http://api.brewerydb.com/v2/"

    def configure
      yield self
      validate_api_key!
      self
    end

    def reset!
      Tankard::Configuration::KEYS.each do |key|
        instance_variable_set(:"@#{key}", nil)
      end
      reset_client
    end

    private

      def credentials
        {
          api_key: @api_key
        }
      end

      def validate_api_key!
        unless @api_key.is_a?(String)
          raise Tankard::Error::ConfigurationError, "api_key is not a string"
        end
      end

      def reset_client
        raise Tankard::Error::ConfigurationError, "Implement reset_client"
      end
  end
end
module Tankard
  module Configuration
    attr_writer :api_key

    KEYS = [:api_key]
    BREWERYDB_URL = "http://api.brewerydb.com/v2/"

    def configure
      yield self
      validate_api_key!
      reset_client
      self
    end

    private

      def credentials
        {
          api_key: @api_key
        }
      end

      def validate_api_key!
        unless @api_key.is_a?(String)
          raise Tankard::Error::ConfigurationError, "api_key is not a string"
        end
      end

      def reset_client
        raise Tankard::Error::ConfigurationError, "Implement reset_client"
      end
  end
end
Remove reset and have configure call reset client.
Remove reset and have configure call reset client.

allows configuration to be changed after tankard is already initialized.  updating the configuration would reset the tankard client so next time it is called it is regenerated.
