module ActiveRecord
  module ConnectionAdapters
    class AbstractAdapter
    protected
      alias_method :old_log, :log

      def log(sql, name)
        if block_given?
          old_log(sql, name) do
            yield
          end
        else
          old_log(sql, name)
        end
      rescue ActiveRecord::StatementInvalid => ex
        if ex.message =~ /^OSM::APITimeoutError: /
          raise OSM::APITimeoutError.new
        else
          raise
        end
      end
    end
  end
end

module ActiveRecord
  module ConnectionAdapters
    class AbstractAdapter
    protected
      alias_method :old_log, :log

      def log(sql, name)
        if block_given?
          old_log(sql, name) do
            yield
          end
        else
          old_log(sql, name)
        end
      rescue ActiveRecord::StatementInvalid => ex
        if ex.message =~ /^OSM::APITimeoutError: /
          raise OSM::APITimeoutError.new
        elsif ex.message =~ /^Timeout::Error: /
          raise Timeout::Error.new
        else
          raise
        end
      end
    end
  end
end

Handle Timeout::Error exceptions which are caught by ActiveRecord.
Handle Timeout::Error exceptions which are caught by ActiveRecord.


