Sha256: c9dc12fca4e90574aab79b21ccdaf78d304668696c5bb2511c94f8c4abe855fa

Contents?: true

Size: 1.05 KB

Versions: 3

Compression:

Stored size: 1.05 KB

Contents

module Dossier
  module Adapter
    class ActiveRecord

      attr_accessor :options, :connection

      def initialize(options = {})
        self.options    = options
        self.connection = options.delete(:connection) || active_record_connection
      end

      def escape(value)
        connection.quote(value)
      end

      def execute(query, report_name = nil)
        # Ensure that SQL logs show name of report generating query
        Result.new(connection.exec_query(*[query, report_name].compact))
      rescue => e
        raise Dossier::ExecuteError.new "#{e.message}\n\n#{query}"
      end

      private

      def active_record_connection
        @abstract_class = Class.new(::ActiveRecord::Base) do
          self.abstract_class = true
          
          # Needs a unique name for ActiveRecord's connection pool
          def self.name
            "Dossier::Adapter::ActiveRecord::Connection_#{object_id}"
          end
        end
        @abstract_class.establish_connection(options)
        @abstract_class.connection
      end

    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
dossier-2.7.1 lib/dossier/adapter/active_record.rb
dossier-2.7.0 lib/dossier/adapter/active_record.rb
dossier-2.6.0 lib/dossier/adapter/active_record.rb