diff --git a/spec/std/db/driver_spec.cr b/spec/std/db/driver_spec.cr new file mode 100644 index 0000000..887afb1 --- /dev/null +++ b/spec/std/db/driver_spec.cr @@ -0,0 +1,19 @@ +require "spec" +require "db" + +class DummyDriver < DB::Driver +end + +DB.register_driver "dummy", DummyDriver + +describe DB::Driver do + it "should get driver class by name" do + DB.driver_class("dummy").should eq(DummyDriver) + end + + it "should instantiate driver with options" do + driver = DB.driver "dummy", {"host": "localhost", "port": "1027"} + driver.options["host"].should eq("localhost") + driver.options["port"].should eq("1027") + end +end diff --git a/src/db/db.cr b/src/db/db.cr new file mode 100644 index 0000000..ba2477f --- /dev/null +++ b/src/db/db.cr @@ -0,0 +1,16 @@ +module DB + def self.driver_class(name) # : Driver.class + @@drivers.not_nil![name] + end + + def self.register_driver(name, klass : Driver.class) + @@drivers ||= {} of String => Driver.class + @@drivers.not_nil![name] = klass + end + + def self.driver(name, options) + driver_class(name).new(options) + end +end + +require "./driver" diff --git a/src/db/driver.cr b/src/db/driver.cr new file mode 100644 index 0000000..2ba7116 --- /dev/null +++ b/src/db/driver.cr @@ -0,0 +1,8 @@ +module DB + abstract class Driver + getter options + + def initialize(@options) + end + end +end