Sha256: 7f542d5ae33517fb8101122a492a1f9205400fcdc0d65095ead4be348fda2e3d

Contents?: true

Size: 1.32 KB

Versions: 1

Compression:

Stored size: 1.32 KB

Contents

module Test
  module LogSqlPerTest

    def initialize(*args)
      super(*args)
      return unless wrap_methods = self.class.methods_to_log_sql_for
      dirname = "#{RAILS_ROOT}/log/#{self.class.to_s.underscore}"
      FileUtils.mkdir_p dirname unless File.directory? dirname
      wrap_methods = public_methods.grep(/^test_/) if wrap_methods.empty?
      (class << self; self; end).class_eval do
        wrap_methods.each do |name|
          name = name.to_s
          filename = File.join(dirname, name)
          outputter = Log4r::FileOutputter.new(name, :level => 0,
                                               :filename => filename)
          define_method(name) {
            color = ActiveRecord::Base.colorize_logging
            begin
              ActiveRecord::Base.colorize_logging = false
              ActiveRecord::Base.logger.outputters.push outputter
              super
            ensure
              ActiveRecord::Base.logger.outputters.delete outputter
              ActiveRecord::Base.colorize_logging = color
              outputter.close
            end
          }
        end
      end
    end

    def self.included(klass)
      class << klass
        attr_reader :methods_to_log_sql_for

        def log_sql_for(*wrap_methods)
          @methods_to_log_sql_for = wrap_methods
        end
      end
    end

  end
end  

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
revolutionhealth-log4r-2.0.0 lib/test/log_sql_per_test.rb