Sha256: 9578e5b76fbcd9fab98334222651e3a5cf0ff654606ee2e2f10201f465b9621d

Contents?: true

Size: 1.9 KB

Versions: 32

Compression:

Stored size: 1.9 KB

Contents

# frozen_string_literal: true

module ArJdbc

  # 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 JdbcAdapter by
  # extending an instance of it with your extension module.
  #
  # +name+ 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
  #       require 'arjdbc/frob' # contains ArJdbc::FRoB
  #       true
  #     end
  #   end
  #
  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
      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 unless mod.respond_to?(:adapter_matcher)
  end

  private
  def self.discover_extensions
    if defined?(Gem) && Gem.respond_to?(:find_files)
      files = Gem.find_files('arjdbc/discover')
    else
      files = $LOAD_PATH.map do |path|
        discover = File.join(path, 'arjdbc', 'discover.rb')
        File.exist?(discover) ? discover : nil
      end.compact
    end
    files.each do |file|
      puts "Loading AR-JDBC extension #{file}" if $DEBUG
      require file
    end
  end

end

Version data entries

32 entries across 32 versions & 2 rubygems

Version Path
activerecord-jdbc-alt-adapter-72.0.0.alpha1-java lib/arjdbc/jdbc/extension.rb
activerecord-jdbc-alt-adapter-71.0.0-java lib/arjdbc/jdbc/extension.rb
activerecord-jdbc-adapter-71.0-java lib/arjdbc/jdbc/extension.rb
activerecord-jdbc-alt-adapter-61.3.0-java lib/arjdbc/jdbc/extension.rb
activerecord-jdbc-alt-adapter-71.0.0.alpha2-java lib/arjdbc/jdbc/extension.rb
activerecord-jdbc-alt-adapter-71.0.0.alpha1-java lib/arjdbc/jdbc/extension.rb
activerecord-jdbc-alt-adapter-70.2.0-java lib/arjdbc/jdbc/extension.rb
activerecord-jdbc-adapter-70.2-java lib/arjdbc/jdbc/extension.rb
activerecord-jdbc-adapter-61.3-java lib/arjdbc/jdbc/extension.rb
activerecord-jdbc-alt-adapter-70.1.0-java lib/arjdbc/jdbc/extension.rb
activerecord-jdbc-alt-adapter-70.0.0-java lib/arjdbc/jdbc/extension.rb
activerecord-jdbc-adapter-70.1-java lib/arjdbc/jdbc/extension.rb
activerecord-jdbc-alt-adapter-70.0.0.rc2-java lib/arjdbc/jdbc/extension.rb
activerecord-jdbc-alt-adapter-60.3.0-java lib/arjdbc/jdbc/extension.rb
activerecord-jdbc-alt-adapter-61.2.0-java lib/arjdbc/jdbc/extension.rb
activerecord-jdbc-alt-adapter-70.0.0.rc1-java lib/arjdbc/jdbc/extension.rb
activerecord-jdbc-adapter-70.0-java lib/arjdbc/jdbc/extension.rb
activerecord-jdbc-adapter-70.0.pre-java lib/arjdbc/jdbc/extension.rb
activerecord-jdbc-adapter-61.2-java lib/arjdbc/jdbc/extension.rb
activerecord-jdbc-alt-adapter-60.2.0-java lib/arjdbc/jdbc/extension.rb