Module: AdvancedConnection::ActiveRecordExt::AbstractAdapter::StatementPooling::ExecuteWrapper
- Defined in:
- lib/advanced_connection/active_record_ext/abstract_adapter/statement_pooling.rb
Instance Method Summary collapse
- #__wrap_adapter_exec_methods(*methods) ⇒ Object (also: #__wrap_adapter_exec_method)
- #__wrap_without_callbacks(*methods) ⇒ Object (also: #__wrap_without_callback)
Instance Method Details
#__wrap_adapter_exec_methods(*methods) ⇒ Object Also known as: __wrap_adapter_exec_method
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/advanced_connection/active_record_ext/abstract_adapter/statement_pooling.rb', line 30 def __wrap_adapter_exec_methods(*methods) Array(methods).flat_map(&:to_sym).each do |exec_method| class_eval(<<-EOS, __FILE__, __LINE__ + 1) def #{exec_method}_with_callback(sql, *args, &block) if Thread.current[:without_callbacks] || sql =~ /^BEGIN/i || transaction_open? || pool.nil? #{exec_method}_without_callback(sql, *args, &block) else run_callbacks(:statement_pooling_connection_checkin) do #{exec_method}_without_callback(sql, *args, &block).tap { reset! pool.release_connection } end end end EOS alias_method_chain exec_method, :callback end end |
#__wrap_without_callbacks(*methods) ⇒ Object Also known as: __wrap_without_callback
51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/advanced_connection/active_record_ext/abstract_adapter/statement_pooling.rb', line 51 def __wrap_without_callbacks(*methods) Array(methods).flat_map(&:to_sym).each do |exec_method| target, punctuation = exec_method.to_s.sub(/([?!=])$/, ''), $1 class_eval(<<-EOS, __FILE__, __LINE__ + 1) def #{target}_with_no_callbacks#{punctuation}(*args, &block) Thread.current[:without_callbacks] = true #{target}_without_no_callbacks#{punctuation}(*args, &block) ensure Thread.current[:without_callbacks] = nil end EOS alias_method_chain exec_method, :no_callbacks end end |