]> source.dussan.org Git - sonarqube.git/blob
0e94087d8e8627ac5d236bf31f13b0a5899aa475
[sonarqube.git] /
1 module ArJdbc
2   # Defines an AR-JDBC extension. An extension consists of a
3   # declaration using this method and an ArJdbc::XYZ module that
4   # contains implementation and overrides for methods in
5   # ActiveRecord::ConnectionAdapters::AbstractAdapter. When you
6   # declare your extension, you provide a block that detects when a
7   # database configured to use the extension is present and loads the
8   # necessary code for it. AR-JDBC will patch the code into the base
9   # ActiveRecord::ConnectionAdapters::JdbcAdapter by extending an
10   # instance of it with your extension module.
11   #
12   # +name+ should be a symbol that is the name of a module to be
13   # defined under the +ArJdbc+ module.
14   #
15   # +block+ should be a one- or two-arity block that receives the
16   # dialect name or driver class name as the first argument, and
17   # optionally the whole database configuration hash as a second
18   # argument.
19   #
20   # Example:
21   #
22   #     ArJdbc.extension :Frob do |name|
23   #       if name =~ /frob/i
24   #         # arjdbc/frob.rb should contain the implementation
25   #         require 'arjdbc/frob'
26   #         true
27   #       end
28   #     end
29   def self.extension(name,&block)
30     if const_defined?(name)
31       mod = const_get(name)
32     else
33       mod = const_set(name, Module.new)
34     end
35     (class << mod; self; end).instance_eval do
36       unless respond_to?(:adapter_matcher)
37         define_method :adapter_matcher do |name, config|
38           if block.arity == 1
39             block.call(name) ? mod : false
40           else
41             block.call(name, config) ? mod : false
42           end
43         end
44       end
45     end
46   end
47 end