Files

Class/Module Index [+]

Quicksearch

Object::JdbcSpec

Common methods for handling TSQL databases.


NOTE: lot of code kindly borrowed from activerecord-sqlserver-adapter


arjdbc/discover.rb: Declare ArJdbc.extension modules in this file that loads a custom module and adapter.

Constants

MsSQL

Public Class Methods

discover_extensions() click to toggle source
# File lib/arjdbc/jdbc/discover.rb, line 2
def self.discover_extensions
  if defined?(::Gem) && ::Gem.respond_to?(:find_files)
    files = ::Gem.find_files('arjdbc/discover')
  else
    files = $LOAD_PATH.map do |p|
      discover = File.join(p, 'arjdbc', 'discover.rb')
      File.exist?(discover) ? discover : nil
    end.compact
  end
  files.each do |f|
    puts "Loading #{f}" if $DEBUG
    require f
  end
end
extension(name, &block) click to toggle source

Defines an AR-JDBC extension. An extension consists of a declaration using this method and an ArJdbc::XYZ module that contains implementation and overrides for methods in ActiveRecord::ConnectionAdapters::AbstractAdapter. When you declare your extension, you provide a block that detects when a database configured to use the extension is present and loads the necessary code for it. AR-JDBC will patch the code into the base ActiveRecord::ConnectionAdapters::JdbcAdapter by extending an instance of it with your extension module.

name should be a symbol that is the name of a module to be defined under the ArJdbc module.

block should be a one- or two-arity block that receives the dialect name or driver class name as the first argument, and optionally the whole database configuration hash as a second argument.

Example:

ArJdbc.extension :Frob do |name|
  if name =~ /frob/i
    # arjdbc/frob.rb should contain the implementation
    require 'arjdbc/frob'
    true
  end
end
# File lib/arjdbc/jdbc/extension.rb, line 29
def self.extension(name, &block)
  if const_defined?(name)
    mod = const_get(name)
  else
    mod = const_set(name, Module.new)
  end
  (class << mod; self; end).instance_eval do
    unless respond_to?(:adapter_matcher)
      define_method :adapter_matcher do |_name, config|
        if block.arity == 1
          block.call(_name) ? mod : false
        else
          block.call(_name, config) ? mod : false
        end
      end
    end
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.