Sha256: ccd2790c9cd36451d13ba2798e4d12883c1bcc1866ceb69c43174c3db116704b

Contents?: true

Size: 1.76 KB

Versions: 4

Compression:

Stored size: 1.76 KB

Contents

require 'set'

begin
  require 'fastthread'
rescue LoadError
end

module DataObjects
  class Connection

    def self.new(uri)
      uri = DataObjects::URI::parse(uri)

      if uri.scheme == 'jdbc'
        driver_name = uri.path.split(':').first
      else
        driver_name = uri.scheme.capitalize
      end

      DataObjects.const_get(driver_name.capitalize)::Connection.new(uri)
    end

    def self.inherited(target)
      target.class_eval do

        def self.new(*args)
          instance = allocate
          instance.send(:initialize, *args)
          instance
        end

        include Extlib::Pooling
        alias close release
      end

      if driver_module_name = target.name.split('::')[-2]
        driver_module = DataObjects::const_get(driver_module_name)
        driver_module.class_eval <<-EOS, __FILE__, __LINE__
          def self.logger
            @logger
          end

          def self.logger=(logger)
            @logger = logger
          end
        EOS

        driver_module.logger = DataObjects::Logger.new(nil, :off)
      end
    end

    #####################################################
    # Standard API Definition
    #####################################################
    def to_s
      @uri.to_s
    end

    def initialize(uri)
      raise NotImplementedError.new
    end

    def dispose
      raise NotImplementedError.new
    end

    def create_command(text)
      concrete_command.new(self, text)
    end

    private
    def concrete_command
      @concrete_command || begin

        class << self
          private
          def concrete_command
            @concrete_command
          end
        end

        @concrete_command = DataObjects::const_get(self.class.name.split('::')[-2]).const_get('Command')
      end
    end

  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
data_objects-0.9.9 lib/data_objects/connection.rb
data_objects-0.9.8 lib/data_objects/connection.rb
data_objects-0.9.6 lib/data_objects/connection.rb
data_objects-0.9.7 lib/data_objects/connection.rb