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*.