From e8bf2c31bde5bb1ca42dced4e6885b076402b7af Mon Sep 17 00:00:00 2001 From: Holger Just Date: Mon, 22 Jan 2018 01:05:04 +0100 Subject: [PATCH] Raise ArgumentError when trying to resolve an unknown adapter URI If we were to fall through, undefined schemes would always end up as a file adapter. This is generally undesired since it hides the fact that we have not found a suitable adapter. Most of the time, this will be a configuration error which should be reported early. If a user still wants to create a file adapter with a filename that looks like a URI, they can create a Rackstash::Adapter::File object manually. --- lib/rackstash/adapter.rb | 4 +++- spec/rackstash/adapter_spec.rb | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/rackstash/adapter.rb b/lib/rackstash/adapter.rb index 6ffa6a7..7fb0a64 100644 --- a/lib/rackstash/adapter.rb +++ b/lib/rackstash/adapter.rb @@ -110,7 +110,9 @@ module Rackstash scheme = uri.scheme || uri.opaque return unless scheme - adapter_class = adapter_schemes.fetch(scheme.to_s.downcase) { return } + adapter_class = adapter_schemes.fetch(scheme.to_s.downcase) { + raise ArgumentError, "No log adapter found for URI #{uri}" + } if adapter_class.respond_to?(:from_uri) adapter_class.from_uri(uri) diff --git a/spec/rackstash/adapter_spec.rb b/spec/rackstash/adapter_spec.rb index c86bc32..6cff907 100644 --- a/spec/rackstash/adapter_spec.rb +++ b/spec/rackstash/adapter_spec.rb @@ -261,8 +261,9 @@ describe Rackstash::Adapter do unknown_uri = 'unknown://example.com' expect(adapter).to_not receive(:from_uri) - expect(adapter).to receive(:new).with(unknown_uri).and_call_original - expect(described_class[unknown_uri]).to be_an Rackstash::Adapter::BaseAdapter + expect(adapter).not_to receive(:new) + expect { described_class[unknown_uri] } + .to raise_error ArgumentError, "No log adapter found for URI unknown://example.com" end end end