« index

Coverage for /Users/yunong/workspace/node-restify/lib/plugins/pre/pause.js : 57%

52 lines | 30 run | 22 missing | 0 partial | 8 blocks | 0 blocks run | 8 blocks missing

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

  // Copyright 2012 Mark Cavage, Inc.  All rights reserved.
  
  
  ///--- Helpers
  
  function pauseStream(stream) {
      function _buffer(chunk) {
          stream.__buffered.push(chunk);
      }
  
      function _catchEnd(chunk) {
          stream.__rstfy_ended = true;
      }
  
      stream.__rstfy_ended = false;
      stream.__rstfy_paused = true;
      stream.__buffered = [];
      stream.on('data', _buffer);
      stream.once('end', _catchEnd);
      stream.pause();
  
      stream._resume = stream.resume;
      stream.resume = function _rstfy_resume() {
          if (!stream.__rstfy_paused)
              return;
  
          stream.removeListener('data', _buffer);
          stream.removeListener('end', _catchEnd);
  
          stream.__buffered.forEach(stream.emit.bind(stream, 'data'));
          stream.__buffered.length = 0;
  
          stream._resume();
          stream.resume = stream._resume;
  
          if (stream.__rstfy_ended)
              stream.emit('end');
      };
  }
  
  
  ///--- Exports
  
  module.exports = function pause() {
  
      function prePause(req, res, next) {
          pauseStream(req);
          next();
      }
  
      return (prePause);
  };
« index | cover.io