From 56aa10c54d8df9b7ece3f29d5d6f4bb10e074381 Mon Sep 17 00:00:00 2001 From: Ary Borenszweig Date: Fri, 21 Oct 2016 11:24:32 -0300 Subject: [PATCH] Better error message when requesting a driver that was not found. Fixes #21 --- spec/db_spec.cr | 6 ++++++ src/db.cr | 8 ++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/spec/db_spec.cr b/spec/db_spec.cr index 5094f4e..9d6a854 100644 --- a/spec/db_spec.cr +++ b/spec/db_spec.cr @@ -81,4 +81,10 @@ describe DB do db.scalar "bar" end end + + it "gives nice error message when no driver is registered for schema (#21)" do + expect_raises(ArgumentError, %(no driver was registered for the schema "foobar", did you maybe forget to require the database driver?)) do + DB.open "foobar://baz" + end + end end diff --git a/src/db.cr b/src/db.cr index f474cef..9e2979c 100644 --- a/src/db.cr +++ b/src/db.cr @@ -81,14 +81,18 @@ module DB # :nodoc: def self.driver_class(driver_name) : Driver.class - @@drivers.not_nil![driver_name] + drivers[driver_name]? || + raise(ArgumentError.new(%(no driver was registered for the schema "#{driver_name}", did you maybe forget to require the database driver?))) end # Registers a driver class for a given *driver_name*. # Should be called by drivers implementors only. def self.register_driver(driver_name, driver_class : Driver.class) + drivers[driver_name] = driver_class + end + + private def self.drivers @@drivers ||= {} of String => Driver.class - @@drivers.not_nil![driver_name] = driver_class end # Opens a database using the specified *uri*.