diff --git a/lib/rackstash/adapter.rb b/lib/rackstash/adapter.rb index 7fb0a64..c3a508a 100644 --- a/lib/rackstash/adapter.rb +++ b/lib/rackstash/adapter.rb @@ -53,7 +53,7 @@ module Rackstash case matcher when String matcher = matcher.to_s - if matcher =~ /\A[a-z0-9]+\z/ + if matcher =~ /\A[a-z0-9]/ # If the matcher is a lower-case string, we assume it is a URL # scheme. adapter_schemes[matcher.downcase] = adapter_class diff --git a/spec/rackstash/adapter_spec.rb b/spec/rackstash/adapter_spec.rb index 6cff907..84a8a99 100644 --- a/spec/rackstash/adapter_spec.rb +++ b/spec/rackstash/adapter_spec.rb @@ -210,6 +210,7 @@ describe Rackstash::Adapter do context 'with a registered scheme' do before do described_class.register adapter, 'dummy' + described_class.register adapter, 'foo+dummy' end it 'creates an adapter from the scheme' do @@ -218,6 +219,12 @@ describe Rackstash::Adapter do expect(described_class[raw_uri]).to be_an Rackstash::Adapter::BaseAdapter end + it 'can use a complex scheme' do + raw_uri = 'foo+dummy://example.com' + expect(adapter).to receive(:from_uri).with(URI(raw_uri)).and_call_original + expect(described_class[raw_uri]).to be_an Rackstash::Adapter::BaseAdapter + end + it 'calls adapter.new if adapter.from_uri is not available' do plain_adapter = Class.new(Rackstash::Adapter::BaseAdapter) described_class.register plain_adapter, 'dummy'