Forráskód Böngészése

Added very basic MongoDB adapter

Andrew Kane 8 éve
szülő
commit
7ae75f40c1
3 módosított fájl, 38 hozzáadás és 0 törlés
  1. 1 0
      lib/blazer.rb
  2. 35 0
      lib/blazer/adapters/mongodb_adapter.rb
  3. 2 0
      lib/blazer/data_source.rb

+ 1 - 0
lib/blazer.rb

@@ -9,6 +9,7 @@ require "blazer/run_statement"
 require "blazer/adapters/base_adapter"
 require "blazer/adapters/active_record_adapter"
 require "blazer/adapters/elasticsearch_adapter"
+require "blazer/adapters/mongodb_adapter"
 require "blazer/engine"
 
 module Blazer

+ 35 - 0
lib/blazer/adapters/mongodb_adapter.rb

@@ -0,0 +1,35 @@
+module Blazer
+  module Adapters
+    class MongodbAdapter < BaseAdapter
+      def run_statement(statement, comment)
+        columns = []
+        rows = []
+        error = nil
+
+        begin
+          documents = db.command({:$eval => "#{statement}.toArray()"}).documents.first["retval"]
+          columns = documents.flat_map { |r| r.keys }.uniq
+          rows = documents.map { |r| columns.map { |c| r[c] } }
+        rescue => e
+          error = e.message
+        end
+
+        [columns, rows, error]
+      end
+
+      def tables
+        db.collection_names
+      end
+
+      protected
+
+      def client
+        @client ||= Mongo::Client.new(settings["url"])
+      end
+
+      def db
+        @db ||= client.database
+      end
+    end
+  end
+end

+ 2 - 0
lib/blazer/data_source.rb

@@ -22,6 +22,8 @@ module Blazer
           Blazer::Adapters::ActiveRecordAdapter.new(self)
         when "elasticsearch"
           Blazer::Adapters::ElasticsearchAdapter.new(self)
+        when "mongodb"
+          Blazer::Adapters::MongodbAdapter.new(self)
         else
           raise Blazer::Error, "Unknown adapter"
         end