aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/dbshell/database_client.rb15
-rw-r--r--spec/dbshell/database_client_spec.rb26
2 files changed, 41 insertions, 0 deletions
diff --git a/lib/dbshell/database_client.rb b/lib/dbshell/database_client.rb
new file mode 100644
index 0000000..8d55095
--- /dev/null
+++ b/lib/dbshell/database_client.rb
@@ -0,0 +1,15 @@
+class DBShell::DatabaseClient
+ def self.handler(connection_params)
+ case connection_params['adapter']
+ when 'sqlite3'
+ DBShell::Sqlite3Client
+ when 'postgresql'
+ DBShell::PostgresClient
+ else
+ raise DBShell::InvalidDatabaseAdapter
+ end
+ end
+end
+
+
+class DBShell::InvalidDatabaseAdapter < StandardError; end
diff --git a/spec/dbshell/database_client_spec.rb b/spec/dbshell/database_client_spec.rb
new file mode 100644
index 0000000..1659fa3
--- /dev/null
+++ b/spec/dbshell/database_client_spec.rb
@@ -0,0 +1,26 @@
+require 'minitest/autorun'
+require 'dbshell/database_client'
+
+describe DBShell::DatabaseClient do
+ describe ".handler" do
+ it "handles SQLite3" do
+ DBShell::DatabaseClient.handler({
+ 'adapter' => 'sqlite3'
+ }).must_equal(DBShell::Sqlite3Client)
+ end
+
+ it "handles Postgres" do
+ DBShell::DatabaseClient.handler({
+ 'adapter' => 'postgresql'
+ }).must_equal(DBShell::PostgresClient)
+ end
+
+ it "raises an error if no suitable adapter is found" do
+ proc do
+ DBShell::DatabaseClient.handler({
+ 'adapter' => 'sybil_system'
+ })
+ end.must_raise(DBShell::InvalidDatabaseAdapter)
+ end
+ end
+end