batman-rails-flo 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (162) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +29 -0
  3. data/Rakefile +2 -0
  4. data/lib/batman-rails-flo.rb +5 -0
  5. data/lib/batman_rails_flo/railtie.rb +9 -0
  6. data/lib/batman_rails_flo/tasks.rake +14 -0
  7. data/lib/batman_rails_flo/version.rb +3 -0
  8. data/vendor/assets/javascripts/batman_rails_flo/flo_server.js +67 -0
  9. data/vendor/assets/javascripts/batman_rails_flo/live_reload.js.coffee +129 -0
  10. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/CNAME +1 -0
  11. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/CONTRIBUTING.md +9 -0
  12. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/LICENSE +22 -0
  13. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/README +50 -0
  14. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/bin/cake +7 -0
  15. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/bin/coffee +7 -0
  16. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/lib/coffee-script/browser.js +134 -0
  17. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/lib/coffee-script/cake.js +112 -0
  18. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/lib/coffee-script/coffee-script.js +335 -0
  19. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/lib/coffee-script/command.js +569 -0
  20. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/lib/coffee-script/grammar.js +631 -0
  21. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/lib/coffee-script/helpers.js +252 -0
  22. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/lib/coffee-script/index.js +11 -0
  23. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/lib/coffee-script/lexer.js +926 -0
  24. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/lib/coffee-script/nodes.js +3158 -0
  25. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/lib/coffee-script/optparse.js +139 -0
  26. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/lib/coffee-script/parser.js +724 -0
  27. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/lib/coffee-script/register.js +66 -0
  28. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/lib/coffee-script/repl.js +163 -0
  29. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/lib/coffee-script/rewriter.js +475 -0
  30. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/lib/coffee-script/scope.js +146 -0
  31. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/lib/coffee-script/sourcemap.js +161 -0
  32. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/node_modules/mkdirp/LICENSE +21 -0
  33. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/node_modules/mkdirp/examples/pow.js +6 -0
  34. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/node_modules/mkdirp/index.js +82 -0
  35. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/node_modules/mkdirp/package.json +34 -0
  36. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/node_modules/mkdirp/readme.markdown +63 -0
  37. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/node_modules/mkdirp/test/chmod.js +38 -0
  38. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/node_modules/mkdirp/test/clobber.js +37 -0
  39. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/node_modules/mkdirp/test/mkdirp.js +28 -0
  40. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/node_modules/mkdirp/test/perm.js +32 -0
  41. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/node_modules/mkdirp/test/perm_sync.js +39 -0
  42. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/node_modules/mkdirp/test/race.js +41 -0
  43. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/node_modules/mkdirp/test/rel.js +32 -0
  44. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/node_modules/mkdirp/test/return.js +25 -0
  45. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/node_modules/mkdirp/test/return_sync.js +24 -0
  46. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/node_modules/mkdirp/test/root.js +18 -0
  47. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/node_modules/mkdirp/test/sync.js +32 -0
  48. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/node_modules/mkdirp/test/umask.js +28 -0
  49. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/node_modules/mkdirp/test/umask_sync.js +32 -0
  50. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/package.json +50 -0
  51. data/vendor/assets/javascripts/batman_rails_flo/node_modules/coffee-script/register.js +1 -0
  52. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/LICENSE +30 -0
  53. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/PATENTS +23 -0
  54. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/README.md +124 -0
  55. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/bin/flo +26 -0
  56. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/client/configure/configure.html +57 -0
  57. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/client/configure/configure.js +205 -0
  58. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/client/configure/style.css +334 -0
  59. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/client/connection.js +235 -0
  60. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/client/devtools.html +12 -0
  61. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/client/index.js +323 -0
  62. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/client/logger.js +42 -0
  63. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/client/logo.png +0 -0
  64. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/client/manifest.json +13 -0
  65. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/client/session.js +305 -0
  66. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/index.js +10 -0
  67. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/lib/flo.js +226 -0
  68. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/lib/server.js +94 -0
  69. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/README.md +66 -0
  70. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/index.js +437 -0
  71. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/minimatch/LICENSE +23 -0
  72. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/minimatch/README.md +218 -0
  73. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/minimatch/minimatch.js +1055 -0
  74. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/minimatch/node_modules/lru-cache/CONTRIBUTORS +14 -0
  75. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/minimatch/node_modules/lru-cache/LICENSE +23 -0
  76. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/minimatch/node_modules/lru-cache/README.md +97 -0
  77. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js +252 -0
  78. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/minimatch/node_modules/lru-cache/package.json +33 -0
  79. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/minimatch/node_modules/lru-cache/test/basic.js +369 -0
  80. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/minimatch/node_modules/lru-cache/test/foreach.js +52 -0
  81. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js +50 -0
  82. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/minimatch/node_modules/sigmund/LICENSE +27 -0
  83. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/minimatch/node_modules/sigmund/README.md +53 -0
  84. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/minimatch/node_modules/sigmund/bench.js +283 -0
  85. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/minimatch/node_modules/sigmund/package.json +42 -0
  86. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/minimatch/node_modules/sigmund/sigmund.js +39 -0
  87. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/minimatch/node_modules/sigmund/test/basic.js +24 -0
  88. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/minimatch/package.json +40 -0
  89. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/minimatch/test/basic.js +399 -0
  90. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/minimatch/test/brace-expand.js +33 -0
  91. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/minimatch/test/caching.js +14 -0
  92. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/minimatch/test/defaults.js +274 -0
  93. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/minimatch/test/extglob-ending-with-state-char.js +8 -0
  94. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/walker/lib/walker.js +111 -0
  95. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/walker/license +13 -0
  96. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/walker/node_modules/makeerror/lib/makeerror.js +87 -0
  97. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/walker/node_modules/makeerror/node_modules/tmpl/lib/tmpl.js +17 -0
  98. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/walker/node_modules/makeerror/node_modules/tmpl/package.json +31 -0
  99. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/walker/node_modules/makeerror/node_modules/tmpl/readme.md +10 -0
  100. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/walker/node_modules/makeerror/package.json +34 -0
  101. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/walker/node_modules/makeerror/readme.md +77 -0
  102. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/walker/package.json +36 -0
  103. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/walker/readme.md +52 -0
  104. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/watch/LICENSE +55 -0
  105. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/watch/main.js +128 -0
  106. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/watch/package.json +34 -0
  107. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/watch/readme.mkd +72 -0
  108. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/watch/test/d/d/t +0 -0
  109. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/watch/test/d/t +0 -0
  110. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/watch/test/test_monitor.js +31 -0
  111. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/watch/test/test_monitorRootDirectory.js +28 -0
  112. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/node_modules/watch/test/test_watchTree.js +20 -0
  113. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/package.json +45 -0
  114. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/sane/test/test.js +243 -0
  115. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/CHANGELOG.md +81 -0
  116. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/LICENSE +177 -0
  117. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/Makefile +11 -0
  118. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/README.md +245 -0
  119. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/binding.gyp +14 -0
  120. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/build/Makefile +355 -0
  121. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/build/Release/linker.lock +0 -0
  122. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/build/Release/obj.target/validation/src/validation.o +0 -0
  123. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/build/Release/obj.target/xor/src/xor.o +0 -0
  124. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/build/Release/validation.node +0 -0
  125. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/build/Release/xor.node +0 -0
  126. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/build/binding.Makefile +6 -0
  127. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/build/config.gypi +115 -0
  128. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/build/gyp-mac-tool +512 -0
  129. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/build/validation.target.mk +154 -0
  130. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/build/xor.target.mk +154 -0
  131. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/index.js +1 -0
  132. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/install.js +31 -0
  133. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/lib/Constants.js +23 -0
  134. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/lib/Deprecation.js +38 -0
  135. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/lib/Validation.fallback.js +12 -0
  136. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/lib/Validation.js +18 -0
  137. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/lib/WebSocketClient.js +359 -0
  138. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/lib/WebSocketConnection.js +717 -0
  139. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/lib/WebSocketFrame.js +282 -0
  140. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/lib/WebSocketRequest.js +478 -0
  141. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/lib/WebSocketRouter.js +154 -0
  142. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/lib/WebSocketRouterRequest.js +59 -0
  143. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/lib/WebSocketServer.js +216 -0
  144. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/lib/utils.js +7 -0
  145. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/lib/websocket.js +11 -0
  146. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/lib/xor.fallback.js +13 -0
  147. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/lib/xor.js +18 -0
  148. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/package.json +43 -0
  149. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/src/validation.cc +144 -0
  150. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/src/xor.cpp +86 -0
  151. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/vendor/FastBufferList.js +192 -0
  152. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/vendor/node-ctype/LICENSE +18 -0
  153. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/node_modules/websocket/vendor/node-ctype/ctio-faster.js +1126 -0
  154. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/package.json +25 -0
  155. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/test/client/browser_websocket.js +63 -0
  156. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/test/client/connection_test.js +57 -0
  157. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/test/client/logger_mock.js +15 -0
  158. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/test/client/session_test.js +194 -0
  159. data/vendor/assets/javascripts/batman_rails_flo/node_modules/fb-flo/test/server/flo_test.js +211 -0
  160. data/vendor/assets/javascripts/batman_rails_flo/package.json +15 -0
  161. data/vendor/assets/javascripts/batman_rails_flo/reload_event_handler.js.coffee +56 -0
  162. metadata +232 -0
@@ -0,0 +1,52 @@
1
+ var test = require('tap').test
2
+ var LRU = require('../')
3
+
4
+ test('forEach', function (t) {
5
+ var l = new LRU(5)
6
+ for (var i = 0; i < 10; i ++) {
7
+ l.set(i.toString(), i.toString(2))
8
+ }
9
+
10
+ var i = 9
11
+ l.forEach(function (val, key, cache) {
12
+ t.equal(cache, l)
13
+ t.equal(key, i.toString())
14
+ t.equal(val, i.toString(2))
15
+ i -= 1
16
+ })
17
+
18
+ // get in order of most recently used
19
+ l.get(6)
20
+ l.get(8)
21
+
22
+ var order = [ 8, 6, 9, 7, 5 ]
23
+ var i = 0
24
+
25
+ l.forEach(function (val, key, cache) {
26
+ var j = order[i ++]
27
+ t.equal(cache, l)
28
+ t.equal(key, j.toString())
29
+ t.equal(val, j.toString(2))
30
+ })
31
+
32
+ t.end()
33
+ })
34
+
35
+ test('keys() and values()', function (t) {
36
+ var l = new LRU(5)
37
+ for (var i = 0; i < 10; i ++) {
38
+ l.set(i.toString(), i.toString(2))
39
+ }
40
+
41
+ t.similar(l.keys(), ['9', '8', '7', '6', '5'])
42
+ t.similar(l.values(), ['1001', '1000', '111', '110', '101'])
43
+
44
+ // get in order of most recently used
45
+ l.get(6)
46
+ l.get(8)
47
+
48
+ t.similar(l.keys(), ['8', '6', '9', '7', '5'])
49
+ t.similar(l.values(), ['1000', '110', '1001', '111', '101'])
50
+
51
+ t.end()
52
+ })
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env node --expose_gc
2
+
3
+ var weak = require('weak');
4
+ var test = require('tap').test
5
+ var LRU = require('../')
6
+ var l = new LRU({ max: 10 })
7
+ var refs = 0
8
+ function X() {
9
+ refs ++
10
+ weak(this, deref)
11
+ }
12
+
13
+ function deref() {
14
+ refs --
15
+ }
16
+
17
+ test('no leaks', function (t) {
18
+ // fill up the cache
19
+ for (var i = 0; i < 100; i++) {
20
+ l.set(i, new X);
21
+ // throw some gets in there, too.
22
+ if (i % 2 === 0)
23
+ l.get(i / 2)
24
+ }
25
+
26
+ gc()
27
+
28
+ var start = process.memoryUsage()
29
+
30
+ // capture the memory
31
+ var startRefs = refs
32
+
33
+ // do it again, but more
34
+ for (var i = 0; i < 10000; i++) {
35
+ l.set(i, new X);
36
+ // throw some gets in there, too.
37
+ if (i % 2 === 0)
38
+ l.get(i / 2)
39
+ }
40
+
41
+ gc()
42
+
43
+ var end = process.memoryUsage()
44
+ t.equal(refs, startRefs, 'no leaky refs')
45
+
46
+ console.error('start: %j\n' +
47
+ 'end: %j', start, end);
48
+ t.pass();
49
+ t.end();
50
+ })
@@ -0,0 +1,27 @@
1
+ Copyright (c) Isaac Z. Schlueter ("Author")
2
+ All rights reserved.
3
+
4
+ The BSD License
5
+
6
+ Redistribution and use in source and binary forms, with or without
7
+ modification, are permitted provided that the following conditions
8
+ are met:
9
+
10
+ 1. Redistributions of source code must retain the above copyright
11
+ notice, this list of conditions and the following disclaimer.
12
+
13
+ 2. Redistributions in binary form must reproduce the above copyright
14
+ notice, this list of conditions and the following disclaimer in the
15
+ documentation and/or other materials provided with the distribution.
16
+
17
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
21
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,53 @@
1
+ # sigmund
2
+
3
+ Quick and dirty signatures for Objects.
4
+
5
+ This is like a much faster `deepEquals` comparison, which returns a
6
+ string key suitable for caches and the like.
7
+
8
+ ## Usage
9
+
10
+ ```javascript
11
+ function doSomething (someObj) {
12
+ var key = sigmund(someObj, maxDepth) // max depth defaults to 10
13
+ var cached = cache.get(key)
14
+ if (cached) return cached)
15
+
16
+ var result = expensiveCalculation(someObj)
17
+ cache.set(key, result)
18
+ return result
19
+ }
20
+ ```
21
+
22
+ The resulting key will be as unique and reproducible as calling
23
+ `JSON.stringify` or `util.inspect` on the object, but is much faster.
24
+ In order to achieve this speed, some differences are glossed over.
25
+ For example, the object `{0:'foo'}` will be treated identically to the
26
+ array `['foo']`.
27
+
28
+ Also, just as there is no way to summon the soul from the scribblings
29
+ of a cocain-addled psychoanalyst, there is no way to revive the object
30
+ from the signature string that sigmund gives you. In fact, it's
31
+ barely even readable.
32
+
33
+ As with `sys.inspect` and `JSON.stringify`, larger objects will
34
+ produce larger signature strings.
35
+
36
+ Because sigmund is a bit less strict than the more thorough
37
+ alternatives, the strings will be shorter, and also there is a
38
+ slightly higher chance for collisions. For example, these objects
39
+ have the same signature:
40
+
41
+ var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]}
42
+ var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']}
43
+
44
+ Like a good Freudian, sigmund is most effective when you already have
45
+ some understanding of what you're looking for. It can help you help
46
+ yourself, but you must be willing to do some work as well.
47
+
48
+ Cycles are handled, and cyclical objects are silently omitted (though
49
+ the key is included in the signature output.)
50
+
51
+ The second argument is the maximum depth, which defaults to 10,
52
+ because that is the maximum object traversal depth covered by most
53
+ insurance carriers.
@@ -0,0 +1,283 @@
1
+ // different ways to id objects
2
+ // use a req/res pair, since it's crazy deep and cyclical
3
+
4
+ // sparseFE10 and sigmund are usually pretty close, which is to be expected,
5
+ // since they are essentially the same algorithm, except that sigmund handles
6
+ // regular expression objects properly.
7
+
8
+
9
+ var http = require('http')
10
+ var util = require('util')
11
+ var sigmund = require('./sigmund.js')
12
+ var sreq, sres, creq, cres, test
13
+
14
+ http.createServer(function (q, s) {
15
+ sreq = q
16
+ sres = s
17
+ sres.end('ok')
18
+ this.close(function () { setTimeout(function () {
19
+ start()
20
+ }, 200) })
21
+ }).listen(1337, function () {
22
+ creq = http.get({ port: 1337 })
23
+ creq.on('response', function (s) { cres = s })
24
+ })
25
+
26
+ function start () {
27
+ test = [sreq, sres, creq, cres]
28
+ // test = sreq
29
+ // sreq.sres = sres
30
+ // sreq.creq = creq
31
+ // sreq.cres = cres
32
+
33
+ for (var i in exports.compare) {
34
+ console.log(i)
35
+ var hash = exports.compare[i]()
36
+ console.log(hash)
37
+ console.log(hash.length)
38
+ console.log('')
39
+ }
40
+
41
+ require('bench').runMain()
42
+ }
43
+
44
+ function customWs (obj, md, d) {
45
+ d = d || 0
46
+ var to = typeof obj
47
+ if (to === 'undefined' || to === 'function' || to === null) return ''
48
+ if (d > md || !obj || to !== 'object') return ('' + obj).replace(/[\n ]+/g, '')
49
+
50
+ if (Array.isArray(obj)) {
51
+ return obj.map(function (i, _, __) {
52
+ return customWs(i, md, d + 1)
53
+ }).reduce(function (a, b) { return a + b }, '')
54
+ }
55
+
56
+ var keys = Object.keys(obj)
57
+ return keys.map(function (k, _, __) {
58
+ return k + ':' + customWs(obj[k], md, d + 1)
59
+ }).reduce(function (a, b) { return a + b }, '')
60
+ }
61
+
62
+ function custom (obj, md, d) {
63
+ d = d || 0
64
+ var to = typeof obj
65
+ if (to === 'undefined' || to === 'function' || to === null) return ''
66
+ if (d > md || !obj || to !== 'object') return '' + obj
67
+
68
+ if (Array.isArray(obj)) {
69
+ return obj.map(function (i, _, __) {
70
+ return custom(i, md, d + 1)
71
+ }).reduce(function (a, b) { return a + b }, '')
72
+ }
73
+
74
+ var keys = Object.keys(obj)
75
+ return keys.map(function (k, _, __) {
76
+ return k + ':' + custom(obj[k], md, d + 1)
77
+ }).reduce(function (a, b) { return a + b }, '')
78
+ }
79
+
80
+ function sparseFE2 (obj, maxDepth) {
81
+ var seen = []
82
+ var soFar = ''
83
+ function ch (v, depth) {
84
+ if (depth > maxDepth) return
85
+ if (typeof v === 'function' || typeof v === 'undefined') return
86
+ if (typeof v !== 'object' || !v) {
87
+ soFar += v
88
+ return
89
+ }
90
+ if (seen.indexOf(v) !== -1 || depth === maxDepth) return
91
+ seen.push(v)
92
+ soFar += '{'
93
+ Object.keys(v).forEach(function (k, _, __) {
94
+ // pseudo-private values. skip those.
95
+ if (k.charAt(0) === '_') return
96
+ var to = typeof v[k]
97
+ if (to === 'function' || to === 'undefined') return
98
+ soFar += k + ':'
99
+ ch(v[k], depth + 1)
100
+ })
101
+ soFar += '}'
102
+ }
103
+ ch(obj, 0)
104
+ return soFar
105
+ }
106
+
107
+ function sparseFE (obj, maxDepth) {
108
+ var seen = []
109
+ var soFar = ''
110
+ function ch (v, depth) {
111
+ if (depth > maxDepth) return
112
+ if (typeof v === 'function' || typeof v === 'undefined') return
113
+ if (typeof v !== 'object' || !v) {
114
+ soFar += v
115
+ return
116
+ }
117
+ if (seen.indexOf(v) !== -1 || depth === maxDepth) return
118
+ seen.push(v)
119
+ soFar += '{'
120
+ Object.keys(v).forEach(function (k, _, __) {
121
+ // pseudo-private values. skip those.
122
+ if (k.charAt(0) === '_') return
123
+ var to = typeof v[k]
124
+ if (to === 'function' || to === 'undefined') return
125
+ soFar += k
126
+ ch(v[k], depth + 1)
127
+ })
128
+ }
129
+ ch(obj, 0)
130
+ return soFar
131
+ }
132
+
133
+ function sparse (obj, maxDepth) {
134
+ var seen = []
135
+ var soFar = ''
136
+ function ch (v, depth) {
137
+ if (depth > maxDepth) return
138
+ if (typeof v === 'function' || typeof v === 'undefined') return
139
+ if (typeof v !== 'object' || !v) {
140
+ soFar += v
141
+ return
142
+ }
143
+ if (seen.indexOf(v) !== -1 || depth === maxDepth) return
144
+ seen.push(v)
145
+ soFar += '{'
146
+ for (var k in v) {
147
+ // pseudo-private values. skip those.
148
+ if (k.charAt(0) === '_') continue
149
+ var to = typeof v[k]
150
+ if (to === 'function' || to === 'undefined') continue
151
+ soFar += k
152
+ ch(v[k], depth + 1)
153
+ }
154
+ }
155
+ ch(obj, 0)
156
+ return soFar
157
+ }
158
+
159
+ function noCommas (obj, maxDepth) {
160
+ var seen = []
161
+ var soFar = ''
162
+ function ch (v, depth) {
163
+ if (depth > maxDepth) return
164
+ if (typeof v === 'function' || typeof v === 'undefined') return
165
+ if (typeof v !== 'object' || !v) {
166
+ soFar += v
167
+ return
168
+ }
169
+ if (seen.indexOf(v) !== -1 || depth === maxDepth) return
170
+ seen.push(v)
171
+ soFar += '{'
172
+ for (var k in v) {
173
+ // pseudo-private values. skip those.
174
+ if (k.charAt(0) === '_') continue
175
+ var to = typeof v[k]
176
+ if (to === 'function' || to === 'undefined') continue
177
+ soFar += k + ':'
178
+ ch(v[k], depth + 1)
179
+ }
180
+ soFar += '}'
181
+ }
182
+ ch(obj, 0)
183
+ return soFar
184
+ }
185
+
186
+
187
+ function flatten (obj, maxDepth) {
188
+ var seen = []
189
+ var soFar = ''
190
+ function ch (v, depth) {
191
+ if (depth > maxDepth) return
192
+ if (typeof v === 'function' || typeof v === 'undefined') return
193
+ if (typeof v !== 'object' || !v) {
194
+ soFar += v
195
+ return
196
+ }
197
+ if (seen.indexOf(v) !== -1 || depth === maxDepth) return
198
+ seen.push(v)
199
+ soFar += '{'
200
+ for (var k in v) {
201
+ // pseudo-private values. skip those.
202
+ if (k.charAt(0) === '_') continue
203
+ var to = typeof v[k]
204
+ if (to === 'function' || to === 'undefined') continue
205
+ soFar += k + ':'
206
+ ch(v[k], depth + 1)
207
+ soFar += ','
208
+ }
209
+ soFar += '}'
210
+ }
211
+ ch(obj, 0)
212
+ return soFar
213
+ }
214
+
215
+ exports.compare =
216
+ {
217
+ // 'custom 2': function () {
218
+ // return custom(test, 2, 0)
219
+ // },
220
+ // 'customWs 2': function () {
221
+ // return customWs(test, 2, 0)
222
+ // },
223
+ 'JSON.stringify (guarded)': function () {
224
+ var seen = []
225
+ return JSON.stringify(test, function (k, v) {
226
+ if (typeof v !== 'object' || !v) return v
227
+ if (seen.indexOf(v) !== -1) return undefined
228
+ seen.push(v)
229
+ return v
230
+ })
231
+ },
232
+
233
+ 'flatten 10': function () {
234
+ return flatten(test, 10)
235
+ },
236
+
237
+ // 'flattenFE 10': function () {
238
+ // return flattenFE(test, 10)
239
+ // },
240
+
241
+ 'noCommas 10': function () {
242
+ return noCommas(test, 10)
243
+ },
244
+
245
+ 'sparse 10': function () {
246
+ return sparse(test, 10)
247
+ },
248
+
249
+ 'sparseFE 10': function () {
250
+ return sparseFE(test, 10)
251
+ },
252
+
253
+ 'sparseFE2 10': function () {
254
+ return sparseFE2(test, 10)
255
+ },
256
+
257
+ sigmund: function() {
258
+ return sigmund(test, 10)
259
+ },
260
+
261
+
262
+ // 'util.inspect 1': function () {
263
+ // return util.inspect(test, false, 1, false)
264
+ // },
265
+ // 'util.inspect undefined': function () {
266
+ // util.inspect(test)
267
+ // },
268
+ // 'util.inspect 2': function () {
269
+ // util.inspect(test, false, 2, false)
270
+ // },
271
+ // 'util.inspect 3': function () {
272
+ // util.inspect(test, false, 3, false)
273
+ // },
274
+ // 'util.inspect 4': function () {
275
+ // util.inspect(test, false, 4, false)
276
+ // },
277
+ // 'util.inspect Infinity': function () {
278
+ // util.inspect(test, false, Infinity, false)
279
+ // }
280
+ }
281
+
282
+ /** results
283
+ **/