From 38a5c669a3ab3ed8ae8f0b011a9efb16c8da1aa1 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Mon, 22 Jan 2018 01:11:24 +0100 Subject: [PATCH] Allow to register complex URI schemes for Adapters Most notably, we want to use the plus character in URI schemes. By only checking the first character of the scheme registration, we can better fullfil our contract and better distinguish between schemes and class names of registered Adapters. --- lib/rackstash/adapter.rb | 2 +- spec/rackstash/adapter_spec.rb | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) 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'