rdb 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (331) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -0
  3. data/Gemfile +3 -0
  4. data/LICENSE +21 -0
  5. data/README.md +9 -0
  6. data/Rakefile +93 -0
  7. data/TODO.txt +44 -0
  8. data/bin/rdb +8 -0
  9. data/lib/rdb.rb +5 -0
  10. data/lib/rdb/attach.rb +10 -0
  11. data/lib/rdb/debugger.rb +297 -0
  12. data/lib/rdb/inspector.rb +42 -0
  13. data/lib/rdb/messaging.rb +287 -0
  14. data/lib/rdb/version.rb +3 -0
  15. data/lib/rdb/web/public/css/editor.css +29 -0
  16. data/lib/rdb/web/public/css/lato.css +16 -0
  17. data/lib/rdb/web/public/css/ng-table.min.css +3 -0
  18. data/lib/rdb/web/public/css/style.css +156 -0
  19. data/lib/rdb/web/public/font/Lato.woff2 +0 -0
  20. data/lib/rdb/web/public/img/breakpoint-light.png +0 -0
  21. data/lib/rdb/web/public/img/breakpoint-live-command-light.png +0 -0
  22. data/lib/rdb/web/public/img/breakpoint-live-command.png +0 -0
  23. data/lib/rdb/web/public/img/breakpoint.png +0 -0
  24. data/lib/rdb/web/public/img/favicon.ico +0 -0
  25. data/lib/rdb/web/public/img/favicon.png +0 -0
  26. data/lib/rdb/web/public/img/live-command.png +0 -0
  27. data/lib/rdb/web/public/img/settings.png +0 -0
  28. data/lib/rdb/web/public/js/ace/ace.js +11 -0
  29. data/lib/rdb/web/public/js/ace/ext-beautify.js +5 -0
  30. data/lib/rdb/web/public/js/ace/ext-chromevox.js +5 -0
  31. data/lib/rdb/web/public/js/ace/ext-elastic_tabstops_lite.js +5 -0
  32. data/lib/rdb/web/public/js/ace/ext-emmet.js +5 -0
  33. data/lib/rdb/web/public/js/ace/ext-error_marker.js +5 -0
  34. data/lib/rdb/web/public/js/ace/ext-keybinding_menu.js +5 -0
  35. data/lib/rdb/web/public/js/ace/ext-language_tools.js +5 -0
  36. data/lib/rdb/web/public/js/ace/ext-linking.js +5 -0
  37. data/lib/rdb/web/public/js/ace/ext-modelist.js +5 -0
  38. data/lib/rdb/web/public/js/ace/ext-old_ie.js +5 -0
  39. data/lib/rdb/web/public/js/ace/ext-searchbox.js +5 -0
  40. data/lib/rdb/web/public/js/ace/ext-settings_menu.js +5 -0
  41. data/lib/rdb/web/public/js/ace/ext-spellcheck.js +5 -0
  42. data/lib/rdb/web/public/js/ace/ext-split.js +5 -0
  43. data/lib/rdb/web/public/js/ace/ext-static_highlight.js +5 -0
  44. data/lib/rdb/web/public/js/ace/ext-statusbar.js +5 -0
  45. data/lib/rdb/web/public/js/ace/ext-textarea.js +5 -0
  46. data/lib/rdb/web/public/js/ace/ext-themelist.js +5 -0
  47. data/lib/rdb/web/public/js/ace/ext-whitespace.js +5 -0
  48. data/lib/rdb/web/public/js/ace/keybinding-emacs.js +1 -0
  49. data/lib/rdb/web/public/js/ace/keybinding-vim.js +1 -0
  50. data/lib/rdb/web/public/js/ace/mode-abap.js +1 -0
  51. data/lib/rdb/web/public/js/ace/mode-actionscript.js +1 -0
  52. data/lib/rdb/web/public/js/ace/mode-ada.js +1 -0
  53. data/lib/rdb/web/public/js/ace/mode-apache_conf.js +1 -0
  54. data/lib/rdb/web/public/js/ace/mode-applescript.js +1 -0
  55. data/lib/rdb/web/public/js/ace/mode-asciidoc.js +1 -0
  56. data/lib/rdb/web/public/js/ace/mode-assembly_x86.js +1 -0
  57. data/lib/rdb/web/public/js/ace/mode-autohotkey.js +1 -0
  58. data/lib/rdb/web/public/js/ace/mode-batchfile.js +1 -0
  59. data/lib/rdb/web/public/js/ace/mode-c9search.js +1 -0
  60. data/lib/rdb/web/public/js/ace/mode-c_cpp.js +1 -0
  61. data/lib/rdb/web/public/js/ace/mode-cirru.js +1 -0
  62. data/lib/rdb/web/public/js/ace/mode-clojure.js +1 -0
  63. data/lib/rdb/web/public/js/ace/mode-cobol.js +1 -0
  64. data/lib/rdb/web/public/js/ace/mode-coffee.js +1 -0
  65. data/lib/rdb/web/public/js/ace/mode-coldfusion.js +1 -0
  66. data/lib/rdb/web/public/js/ace/mode-csharp.js +1 -0
  67. data/lib/rdb/web/public/js/ace/mode-css.js +1 -0
  68. data/lib/rdb/web/public/js/ace/mode-curly.js +1 -0
  69. data/lib/rdb/web/public/js/ace/mode-d.js +1 -0
  70. data/lib/rdb/web/public/js/ace/mode-dart.js +1 -0
  71. data/lib/rdb/web/public/js/ace/mode-diff.js +1 -0
  72. data/lib/rdb/web/public/js/ace/mode-django.js +1 -0
  73. data/lib/rdb/web/public/js/ace/mode-dockerfile.js +1 -0
  74. data/lib/rdb/web/public/js/ace/mode-dot.js +1 -0
  75. data/lib/rdb/web/public/js/ace/mode-eiffel.js +1 -0
  76. data/lib/rdb/web/public/js/ace/mode-ejs.js +1 -0
  77. data/lib/rdb/web/public/js/ace/mode-erlang.js +1 -0
  78. data/lib/rdb/web/public/js/ace/mode-forth.js +1 -0
  79. data/lib/rdb/web/public/js/ace/mode-ftl.js +1 -0
  80. data/lib/rdb/web/public/js/ace/mode-gcode.js +1 -0
  81. data/lib/rdb/web/public/js/ace/mode-gherkin.js +1 -0
  82. data/lib/rdb/web/public/js/ace/mode-gitignore.js +1 -0
  83. data/lib/rdb/web/public/js/ace/mode-glsl.js +1 -0
  84. data/lib/rdb/web/public/js/ace/mode-golang.js +1 -0
  85. data/lib/rdb/web/public/js/ace/mode-groovy.js +1 -0
  86. data/lib/rdb/web/public/js/ace/mode-haml.js +1 -0
  87. data/lib/rdb/web/public/js/ace/mode-handlebars.js +1 -0
  88. data/lib/rdb/web/public/js/ace/mode-haskell.js +1 -0
  89. data/lib/rdb/web/public/js/ace/mode-haxe.js +1 -0
  90. data/lib/rdb/web/public/js/ace/mode-html.js +1 -0
  91. data/lib/rdb/web/public/js/ace/mode-html_ruby.js +1 -0
  92. data/lib/rdb/web/public/js/ace/mode-ini.js +1 -0
  93. data/lib/rdb/web/public/js/ace/mode-jack.js +1 -0
  94. data/lib/rdb/web/public/js/ace/mode-jade.js +1 -0
  95. data/lib/rdb/web/public/js/ace/mode-java.js +1 -0
  96. data/lib/rdb/web/public/js/ace/mode-javascript.js +1 -0
  97. data/lib/rdb/web/public/js/ace/mode-json.js +1 -0
  98. data/lib/rdb/web/public/js/ace/mode-jsoniq.js +1 -0
  99. data/lib/rdb/web/public/js/ace/mode-jsp.js +1 -0
  100. data/lib/rdb/web/public/js/ace/mode-jsx.js +1 -0
  101. data/lib/rdb/web/public/js/ace/mode-julia.js +1 -0
  102. data/lib/rdb/web/public/js/ace/mode-latex.js +1 -0
  103. data/lib/rdb/web/public/js/ace/mode-less.js +1 -0
  104. data/lib/rdb/web/public/js/ace/mode-liquid.js +1 -0
  105. data/lib/rdb/web/public/js/ace/mode-lisp.js +1 -0
  106. data/lib/rdb/web/public/js/ace/mode-livescript.js +1 -0
  107. data/lib/rdb/web/public/js/ace/mode-logiql.js +1 -0
  108. data/lib/rdb/web/public/js/ace/mode-lsl.js +1 -0
  109. data/lib/rdb/web/public/js/ace/mode-lua.js +1 -0
  110. data/lib/rdb/web/public/js/ace/mode-luapage.js +1 -0
  111. data/lib/rdb/web/public/js/ace/mode-lucene.js +1 -0
  112. data/lib/rdb/web/public/js/ace/mode-makefile.js +1 -0
  113. data/lib/rdb/web/public/js/ace/mode-markdown.js +1 -0
  114. data/lib/rdb/web/public/js/ace/mode-matlab.js +1 -0
  115. data/lib/rdb/web/public/js/ace/mode-mel.js +1 -0
  116. data/lib/rdb/web/public/js/ace/mode-mushcode.js +1 -0
  117. data/lib/rdb/web/public/js/ace/mode-mysql.js +1 -0
  118. data/lib/rdb/web/public/js/ace/mode-nix.js +1 -0
  119. data/lib/rdb/web/public/js/ace/mode-objectivec.js +1 -0
  120. data/lib/rdb/web/public/js/ace/mode-ocaml.js +1 -0
  121. data/lib/rdb/web/public/js/ace/mode-pascal.js +1 -0
  122. data/lib/rdb/web/public/js/ace/mode-perl.js +1 -0
  123. data/lib/rdb/web/public/js/ace/mode-pgsql.js +1 -0
  124. data/lib/rdb/web/public/js/ace/mode-php.js +1 -0
  125. data/lib/rdb/web/public/js/ace/mode-plain_text.js +1 -0
  126. data/lib/rdb/web/public/js/ace/mode-powershell.js +1 -0
  127. data/lib/rdb/web/public/js/ace/mode-praat.js +1 -0
  128. data/lib/rdb/web/public/js/ace/mode-prolog.js +1 -0
  129. data/lib/rdb/web/public/js/ace/mode-properties.js +1 -0
  130. data/lib/rdb/web/public/js/ace/mode-protobuf.js +1 -0
  131. data/lib/rdb/web/public/js/ace/mode-python.js +1 -0
  132. data/lib/rdb/web/public/js/ace/mode-r.js +1 -0
  133. data/lib/rdb/web/public/js/ace/mode-rdoc.js +1 -0
  134. data/lib/rdb/web/public/js/ace/mode-rhtml.js +1 -0
  135. data/lib/rdb/web/public/js/ace/mode-ruby.js +1 -0
  136. data/lib/rdb/web/public/js/ace/mode-rust.js +1 -0
  137. data/lib/rdb/web/public/js/ace/mode-sass.js +1 -0
  138. data/lib/rdb/web/public/js/ace/mode-scad.js +1 -0
  139. data/lib/rdb/web/public/js/ace/mode-scala.js +1 -0
  140. data/lib/rdb/web/public/js/ace/mode-scheme.js +1 -0
  141. data/lib/rdb/web/public/js/ace/mode-scss.js +1 -0
  142. data/lib/rdb/web/public/js/ace/mode-sh.js +1 -0
  143. data/lib/rdb/web/public/js/ace/mode-sjs.js +1 -0
  144. data/lib/rdb/web/public/js/ace/mode-smarty.js +1 -0
  145. data/lib/rdb/web/public/js/ace/mode-snippets.js +1 -0
  146. data/lib/rdb/web/public/js/ace/mode-soy_template.js +1 -0
  147. data/lib/rdb/web/public/js/ace/mode-space.js +1 -0
  148. data/lib/rdb/web/public/js/ace/mode-sql.js +1 -0
  149. data/lib/rdb/web/public/js/ace/mode-stylus.js +1 -0
  150. data/lib/rdb/web/public/js/ace/mode-svg.js +1 -0
  151. data/lib/rdb/web/public/js/ace/mode-tcl.js +1 -0
  152. data/lib/rdb/web/public/js/ace/mode-tex.js +1 -0
  153. data/lib/rdb/web/public/js/ace/mode-text.js +0 -0
  154. data/lib/rdb/web/public/js/ace/mode-textile.js +1 -0
  155. data/lib/rdb/web/public/js/ace/mode-toml.js +1 -0
  156. data/lib/rdb/web/public/js/ace/mode-twig.js +1 -0
  157. data/lib/rdb/web/public/js/ace/mode-typescript.js +1 -0
  158. data/lib/rdb/web/public/js/ace/mode-vala.js +1 -0
  159. data/lib/rdb/web/public/js/ace/mode-vbscript.js +1 -0
  160. data/lib/rdb/web/public/js/ace/mode-velocity.js +1 -0
  161. data/lib/rdb/web/public/js/ace/mode-verilog.js +1 -0
  162. data/lib/rdb/web/public/js/ace/mode-vhdl.js +1 -0
  163. data/lib/rdb/web/public/js/ace/mode-xml.js +1 -0
  164. data/lib/rdb/web/public/js/ace/mode-xquery.js +1 -0
  165. data/lib/rdb/web/public/js/ace/mode-yaml.js +1 -0
  166. data/lib/rdb/web/public/js/ace/snippets/abap.js +1 -0
  167. data/lib/rdb/web/public/js/ace/snippets/actionscript.js +1 -0
  168. data/lib/rdb/web/public/js/ace/snippets/ada.js +1 -0
  169. data/lib/rdb/web/public/js/ace/snippets/apache_conf.js +1 -0
  170. data/lib/rdb/web/public/js/ace/snippets/applescript.js +1 -0
  171. data/lib/rdb/web/public/js/ace/snippets/asciidoc.js +1 -0
  172. data/lib/rdb/web/public/js/ace/snippets/assembly_x86.js +1 -0
  173. data/lib/rdb/web/public/js/ace/snippets/autohotkey.js +1 -0
  174. data/lib/rdb/web/public/js/ace/snippets/batchfile.js +1 -0
  175. data/lib/rdb/web/public/js/ace/snippets/c9search.js +1 -0
  176. data/lib/rdb/web/public/js/ace/snippets/c_cpp.js +1 -0
  177. data/lib/rdb/web/public/js/ace/snippets/cirru.js +1 -0
  178. data/lib/rdb/web/public/js/ace/snippets/clojure.js +1 -0
  179. data/lib/rdb/web/public/js/ace/snippets/cobol.js +1 -0
  180. data/lib/rdb/web/public/js/ace/snippets/coffee.js +1 -0
  181. data/lib/rdb/web/public/js/ace/snippets/coldfusion.js +1 -0
  182. data/lib/rdb/web/public/js/ace/snippets/csharp.js +1 -0
  183. data/lib/rdb/web/public/js/ace/snippets/css.js +1 -0
  184. data/lib/rdb/web/public/js/ace/snippets/curly.js +1 -0
  185. data/lib/rdb/web/public/js/ace/snippets/d.js +1 -0
  186. data/lib/rdb/web/public/js/ace/snippets/dart.js +1 -0
  187. data/lib/rdb/web/public/js/ace/snippets/diff.js +1 -0
  188. data/lib/rdb/web/public/js/ace/snippets/django.js +1 -0
  189. data/lib/rdb/web/public/js/ace/snippets/dockerfile.js +1 -0
  190. data/lib/rdb/web/public/js/ace/snippets/dot.js +1 -0
  191. data/lib/rdb/web/public/js/ace/snippets/eiffel.js +1 -0
  192. data/lib/rdb/web/public/js/ace/snippets/ejs.js +1 -0
  193. data/lib/rdb/web/public/js/ace/snippets/erlang.js +1 -0
  194. data/lib/rdb/web/public/js/ace/snippets/forth.js +1 -0
  195. data/lib/rdb/web/public/js/ace/snippets/ftl.js +1 -0
  196. data/lib/rdb/web/public/js/ace/snippets/gcode.js +1 -0
  197. data/lib/rdb/web/public/js/ace/snippets/gherkin.js +1 -0
  198. data/lib/rdb/web/public/js/ace/snippets/gitignore.js +1 -0
  199. data/lib/rdb/web/public/js/ace/snippets/glsl.js +1 -0
  200. data/lib/rdb/web/public/js/ace/snippets/golang.js +1 -0
  201. data/lib/rdb/web/public/js/ace/snippets/groovy.js +1 -0
  202. data/lib/rdb/web/public/js/ace/snippets/haml.js +1 -0
  203. data/lib/rdb/web/public/js/ace/snippets/handlebars.js +1 -0
  204. data/lib/rdb/web/public/js/ace/snippets/haskell.js +1 -0
  205. data/lib/rdb/web/public/js/ace/snippets/haxe.js +1 -0
  206. data/lib/rdb/web/public/js/ace/snippets/html.js +1 -0
  207. data/lib/rdb/web/public/js/ace/snippets/html_ruby.js +1 -0
  208. data/lib/rdb/web/public/js/ace/snippets/ini.js +1 -0
  209. data/lib/rdb/web/public/js/ace/snippets/jack.js +1 -0
  210. data/lib/rdb/web/public/js/ace/snippets/jade.js +1 -0
  211. data/lib/rdb/web/public/js/ace/snippets/java.js +1 -0
  212. data/lib/rdb/web/public/js/ace/snippets/javascript.js +1 -0
  213. data/lib/rdb/web/public/js/ace/snippets/json.js +1 -0
  214. data/lib/rdb/web/public/js/ace/snippets/jsoniq.js +1 -0
  215. data/lib/rdb/web/public/js/ace/snippets/jsp.js +1 -0
  216. data/lib/rdb/web/public/js/ace/snippets/jsx.js +1 -0
  217. data/lib/rdb/web/public/js/ace/snippets/julia.js +1 -0
  218. data/lib/rdb/web/public/js/ace/snippets/latex.js +1 -0
  219. data/lib/rdb/web/public/js/ace/snippets/less.js +1 -0
  220. data/lib/rdb/web/public/js/ace/snippets/liquid.js +1 -0
  221. data/lib/rdb/web/public/js/ace/snippets/lisp.js +1 -0
  222. data/lib/rdb/web/public/js/ace/snippets/livescript.js +1 -0
  223. data/lib/rdb/web/public/js/ace/snippets/logiql.js +1 -0
  224. data/lib/rdb/web/public/js/ace/snippets/lsl.js +1 -0
  225. data/lib/rdb/web/public/js/ace/snippets/lua.js +1 -0
  226. data/lib/rdb/web/public/js/ace/snippets/luapage.js +1 -0
  227. data/lib/rdb/web/public/js/ace/snippets/lucene.js +1 -0
  228. data/lib/rdb/web/public/js/ace/snippets/makefile.js +1 -0
  229. data/lib/rdb/web/public/js/ace/snippets/markdown.js +1 -0
  230. data/lib/rdb/web/public/js/ace/snippets/matlab.js +1 -0
  231. data/lib/rdb/web/public/js/ace/snippets/mel.js +1 -0
  232. data/lib/rdb/web/public/js/ace/snippets/mushcode.js +1 -0
  233. data/lib/rdb/web/public/js/ace/snippets/mysql.js +1 -0
  234. data/lib/rdb/web/public/js/ace/snippets/nix.js +1 -0
  235. data/lib/rdb/web/public/js/ace/snippets/objectivec.js +1 -0
  236. data/lib/rdb/web/public/js/ace/snippets/ocaml.js +1 -0
  237. data/lib/rdb/web/public/js/ace/snippets/pascal.js +1 -0
  238. data/lib/rdb/web/public/js/ace/snippets/perl.js +1 -0
  239. data/lib/rdb/web/public/js/ace/snippets/pgsql.js +1 -0
  240. data/lib/rdb/web/public/js/ace/snippets/php.js +1 -0
  241. data/lib/rdb/web/public/js/ace/snippets/plain_text.js +1 -0
  242. data/lib/rdb/web/public/js/ace/snippets/powershell.js +1 -0
  243. data/lib/rdb/web/public/js/ace/snippets/praat.js +1 -0
  244. data/lib/rdb/web/public/js/ace/snippets/prolog.js +1 -0
  245. data/lib/rdb/web/public/js/ace/snippets/properties.js +1 -0
  246. data/lib/rdb/web/public/js/ace/snippets/protobuf.js +1 -0
  247. data/lib/rdb/web/public/js/ace/snippets/python.js +1 -0
  248. data/lib/rdb/web/public/js/ace/snippets/r.js +1 -0
  249. data/lib/rdb/web/public/js/ace/snippets/rdoc.js +1 -0
  250. data/lib/rdb/web/public/js/ace/snippets/rhtml.js +1 -0
  251. data/lib/rdb/web/public/js/ace/snippets/ruby.js +1 -0
  252. data/lib/rdb/web/public/js/ace/snippets/rust.js +1 -0
  253. data/lib/rdb/web/public/js/ace/snippets/sass.js +1 -0
  254. data/lib/rdb/web/public/js/ace/snippets/scad.js +1 -0
  255. data/lib/rdb/web/public/js/ace/snippets/scala.js +1 -0
  256. data/lib/rdb/web/public/js/ace/snippets/scheme.js +1 -0
  257. data/lib/rdb/web/public/js/ace/snippets/scss.js +1 -0
  258. data/lib/rdb/web/public/js/ace/snippets/sh.js +1 -0
  259. data/lib/rdb/web/public/js/ace/snippets/sjs.js +1 -0
  260. data/lib/rdb/web/public/js/ace/snippets/smarty.js +1 -0
  261. data/lib/rdb/web/public/js/ace/snippets/snippets.js +1 -0
  262. data/lib/rdb/web/public/js/ace/snippets/soy_template.js +1 -0
  263. data/lib/rdb/web/public/js/ace/snippets/space.js +1 -0
  264. data/lib/rdb/web/public/js/ace/snippets/sql.js +1 -0
  265. data/lib/rdb/web/public/js/ace/snippets/stylus.js +1 -0
  266. data/lib/rdb/web/public/js/ace/snippets/svg.js +1 -0
  267. data/lib/rdb/web/public/js/ace/snippets/tcl.js +1 -0
  268. data/lib/rdb/web/public/js/ace/snippets/tex.js +1 -0
  269. data/lib/rdb/web/public/js/ace/snippets/text.js +1 -0
  270. data/lib/rdb/web/public/js/ace/snippets/textile.js +1 -0
  271. data/lib/rdb/web/public/js/ace/snippets/toml.js +1 -0
  272. data/lib/rdb/web/public/js/ace/snippets/twig.js +1 -0
  273. data/lib/rdb/web/public/js/ace/snippets/typescript.js +1 -0
  274. data/lib/rdb/web/public/js/ace/snippets/vala.js +1 -0
  275. data/lib/rdb/web/public/js/ace/snippets/vbscript.js +1 -0
  276. data/lib/rdb/web/public/js/ace/snippets/velocity.js +1 -0
  277. data/lib/rdb/web/public/js/ace/snippets/verilog.js +1 -0
  278. data/lib/rdb/web/public/js/ace/snippets/vhdl.js +1 -0
  279. data/lib/rdb/web/public/js/ace/snippets/xml.js +1 -0
  280. data/lib/rdb/web/public/js/ace/snippets/xquery.js +1 -0
  281. data/lib/rdb/web/public/js/ace/snippets/yaml.js +1 -0
  282. data/lib/rdb/web/public/js/ace/theme-ambiance.js +1 -0
  283. data/lib/rdb/web/public/js/ace/theme-chaos.js +1 -0
  284. data/lib/rdb/web/public/js/ace/theme-chrome.js +1 -0
  285. data/lib/rdb/web/public/js/ace/theme-clouds.js +1 -0
  286. data/lib/rdb/web/public/js/ace/theme-clouds_midnight.js +1 -0
  287. data/lib/rdb/web/public/js/ace/theme-cobalt.js +1 -0
  288. data/lib/rdb/web/public/js/ace/theme-crimson_editor.js +1 -0
  289. data/lib/rdb/web/public/js/ace/theme-dawn.js +1 -0
  290. data/lib/rdb/web/public/js/ace/theme-dreamweaver.js +1 -0
  291. data/lib/rdb/web/public/js/ace/theme-eclipse.js +1 -0
  292. data/lib/rdb/web/public/js/ace/theme-github.js +1 -0
  293. data/lib/rdb/web/public/js/ace/theme-idle_fingers.js +1 -0
  294. data/lib/rdb/web/public/js/ace/theme-katzenmilch.js +1 -0
  295. data/lib/rdb/web/public/js/ace/theme-kr.js +1 -0
  296. data/lib/rdb/web/public/js/ace/theme-kr_theme.js +1 -0
  297. data/lib/rdb/web/public/js/ace/theme-kuroir.js +1 -0
  298. data/lib/rdb/web/public/js/ace/theme-merbivore.js +1 -0
  299. data/lib/rdb/web/public/js/ace/theme-merbivore_soft.js +1 -0
  300. data/lib/rdb/web/public/js/ace/theme-mono_industrial.js +1 -0
  301. data/lib/rdb/web/public/js/ace/theme-monokai.js +1 -0
  302. data/lib/rdb/web/public/js/ace/theme-pastel_on_dark.js +1 -0
  303. data/lib/rdb/web/public/js/ace/theme-solarized_dark.js +1 -0
  304. data/lib/rdb/web/public/js/ace/theme-solarized_light.js +1 -0
  305. data/lib/rdb/web/public/js/ace/theme-terminal.js +1 -0
  306. data/lib/rdb/web/public/js/ace/theme-textmate.js +1 -0
  307. data/lib/rdb/web/public/js/ace/theme-tomorrow.js +1 -0
  308. data/lib/rdb/web/public/js/ace/theme-tomorrow_night.js +1 -0
  309. data/lib/rdb/web/public/js/ace/theme-tomorrow_night_blue.js +1 -0
  310. data/lib/rdb/web/public/js/ace/theme-tomorrow_night_bright.js +1 -0
  311. data/lib/rdb/web/public/js/ace/theme-tomorrow_night_eighties.js +1 -0
  312. data/lib/rdb/web/public/js/ace/theme-twilight.js +1 -0
  313. data/lib/rdb/web/public/js/ace/theme-vibrant_ink.js +1 -0
  314. data/lib/rdb/web/public/js/ace/theme-xcode.js +1 -0
  315. data/lib/rdb/web/public/js/ace/worker-coffee.js +1 -0
  316. data/lib/rdb/web/public/js/ace/worker-css.js +1 -0
  317. data/lib/rdb/web/public/js/ace/worker-html.js +1 -0
  318. data/lib/rdb/web/public/js/ace/worker-javascript.js +1 -0
  319. data/lib/rdb/web/public/js/ace/worker-json.js +1 -0
  320. data/lib/rdb/web/public/js/ace/worker-lua.js +1 -0
  321. data/lib/rdb/web/public/js/ace/worker-php.js +1 -0
  322. data/lib/rdb/web/public/js/ace/worker-xquery.js +1 -0
  323. data/lib/rdb/web/public/js/angular.min.js +202 -0
  324. data/lib/rdb/web/public/js/app.js +389 -0
  325. data/lib/rdb/web/public/js/ng-table.min.js +3 -0
  326. data/lib/rdb/web/server.rb +173 -0
  327. data/lib/rdb/web/views/index.erb +79 -0
  328. data/lib/web.rb +3 -0
  329. data/rdb.gemspec +26 -0
  330. data/test.rb +39 -0
  331. metadata +486 -0
@@ -0,0 +1,42 @@
1
+ require 'set'
2
+
3
+ class Inspector
4
+ def initialize
5
+ @seen_ids = Set.new
6
+ end
7
+
8
+ def self.inspect(obj)
9
+ Inspector.new.inspect(obj)
10
+ end
11
+
12
+ def inspect(obj)
13
+ if !@seen_ids.add?(obj.object_id)
14
+ return "(circular reference)"
15
+ end
16
+
17
+ # Range, Regex, Block, Proc, lambda, Thread, Set, ...
18
+ case obj
19
+ when Class
20
+ return { class: obj.class.name, content: obj.name }
21
+ when Fixnum, Float, TrueClass, FalseClass, NilClass, String, Symbol
22
+ return { class: obj.class.name, content: obj }
23
+ when Array
24
+ return { class: obj.class.name, content: obj.map { |x| inspect(x) } }
25
+ when Hash
26
+ inspected = []
27
+ obj.each do |k, v|
28
+ inspected << [inspect(k), inspect(v)]
29
+ end
30
+ return { class: obj.class.name, content: inspected }
31
+ end
32
+
33
+ vars = Hash[obj.instance_variables.map { |var|
34
+ [var, inspect(obj.instance_variable_get(var))]
35
+ }]
36
+
37
+ return {
38
+ class: obj.class.name,
39
+ content: vars
40
+ }
41
+ end
42
+ end
@@ -0,0 +1,287 @@
1
+ require 'cod'
2
+ require 'msgpack'
3
+ require 'thread'
4
+ require 'set'
5
+
6
+ module RemoteAnnotation
7
+ def self.extended(klass)
8
+ klass.instance_exec {
9
+ @remote = Set.new
10
+ @set_remote = false
11
+ }
12
+ end
13
+
14
+ def remote!
15
+ self.instance_exec {
16
+ @set_remote = true
17
+ }
18
+ end
19
+
20
+ def method_added(method)
21
+ self.instance_exec {
22
+ return if !@set_remote
23
+
24
+ @remote << method
25
+ @set_remote = false
26
+ }
27
+ end
28
+
29
+ def remote?(method)
30
+ self.instance_exec {
31
+ @remote.include? method
32
+ }
33
+ end
34
+ end
35
+
36
+ module Messaging
37
+ end
38
+
39
+ class Messaging::Server
40
+ def self.inherited(klass)
41
+ klass.send(:extend, RemoteAnnotation)
42
+ end
43
+
44
+ def initialize
45
+ @sockets = Set.new
46
+ @clients = {}
47
+ @clients_lock = Mutex.new
48
+ end
49
+
50
+ def listen(host, port)
51
+ channel = Cod.tcp_server("#{host}:#{port}")
52
+
53
+ loop do
54
+ begin
55
+ payload, client = channel.get_ext
56
+ rescue Errno::EWOULDBLOCK, Errno::EAGAIN, Errno::ECONNRESET
57
+ next
58
+ end
59
+
60
+ begin
61
+ message = Messaging::Message.unpack(payload)
62
+ # TODO: Hack.
63
+ socket = client.instance_eval { @connection.socket }
64
+ @clients_lock.synchronize {
65
+ if @sockets.add?(socket)
66
+ @clients[socket] = client
67
+ end
68
+ }
69
+
70
+ handle_message(client, message)
71
+ rescue => e
72
+ puts ">>> Error: #{e}\n#{e.backtrace}"
73
+ end
74
+ end
75
+ end
76
+
77
+ def broadcast
78
+ @broadcast ||= Class.new do
79
+ def initialize(server)
80
+ @server = server
81
+ end
82
+
83
+ def method_missing(symbol, *args, &block)
84
+ @server.instance_exec {
85
+ broadcast_message(symbol.to_s, args)
86
+ }
87
+ end
88
+ end.new(self)
89
+ end
90
+
91
+ private
92
+
93
+ def broadcast_message(message, *params)
94
+ payload = Messaging::Message.broadcast(message, params.first || {})
95
+ @clients_lock.synchronize {
96
+ @clients.reject! { |socket, client|
97
+ begin
98
+ client.put(payload)
99
+ false
100
+ rescue IOError, Errno::ECONNRESET
101
+ @sockets.delete(socket)
102
+ true
103
+ end
104
+ }
105
+ }
106
+ end
107
+
108
+ def handle_message(client, message)
109
+ id = message[:id]
110
+ command = message[:command]
111
+ params = message[:params]
112
+
113
+ if !self.class.remote?(command)
114
+ raise RuntimeError, "Method is not marked for remote execution: #{command}."
115
+ end
116
+
117
+ result = if params.empty?
118
+ self.send(command)
119
+ else
120
+ self.send(command, params)
121
+ end
122
+
123
+ client.put(Messaging::Message.result(id, result))
124
+ end
125
+ end
126
+
127
+ class Messaging::Client
128
+ def self.inherited(klass)
129
+ klass.send(:extend, RemoteAnnotation)
130
+ end
131
+
132
+ def initialize
133
+ @connected = false
134
+ @connected_mon = Monitor.new
135
+ @connected_wait = @connected_mon.new_cond
136
+
137
+ @result_id = 0
138
+ @result = {}
139
+ @result_mon = {}
140
+ @result_wait = {}
141
+ end
142
+
143
+ def connect_listen(host, port)
144
+ @channel = Cod.tcp("#{host}:#{port}")
145
+ set_connected
146
+
147
+ loop do
148
+ process_message
149
+ end
150
+ end
151
+
152
+ def method_missing(symbol, *args, &block)
153
+ send_message(symbol, args.first || {})
154
+ end
155
+
156
+ private
157
+
158
+ def send_message(command, params)
159
+ wait_connected
160
+
161
+ id = @result_id += 1
162
+ mon = @result_mon[id] ||= Monitor.new
163
+ wait = @result_wait[id] ||= mon.new_cond
164
+
165
+ payload = Messaging::Message.command(id, command, params)
166
+ @channel.put(payload)
167
+
168
+ mon.synchronize {
169
+ wait.wait
170
+ }
171
+
172
+ result = @result[id]
173
+ @result.delete(id)
174
+ @result_mon.delete(id)
175
+ @result_wait.delete(id)
176
+
177
+ return result
178
+ end
179
+
180
+ def wait_connected
181
+ if !@connected
182
+ @connected_mon.synchronize do
183
+ @connected_wait.wait_while { !@connected }
184
+ end
185
+ end
186
+ end
187
+
188
+ def set_connected
189
+ @connected = true
190
+ @connected_mon.synchronize {
191
+ @connected_wait.signal
192
+ }
193
+ end
194
+
195
+ def process_message
196
+ begin
197
+ payload = @channel.get
198
+ obj = Messaging::Message.unpack(payload)
199
+
200
+ case obj[:type]
201
+ when :result
202
+ handle_result(obj)
203
+ when :broadcast
204
+ handle_broadcast(obj)
205
+ end
206
+ rescue => e
207
+ puts ">>> Error: #{e}\n#{e.backtrace}"
208
+ end
209
+ end
210
+
211
+ def handle_result(message)
212
+ id = message[:id]
213
+ @result[id] = message[:result]
214
+ @result_mon[id].synchronize {
215
+ @result_wait[id].signal
216
+ }
217
+ end
218
+
219
+ def handle_broadcast(message)
220
+ method = message[:message]
221
+ params = message[:params]
222
+
223
+ if !self.class.remote?(method)
224
+ raise RuntimeError, "Method is not marked for remote execution: #{method}."
225
+ end
226
+
227
+ if params.empty?
228
+ self.send(method)
229
+ else
230
+ self.send(method, params)
231
+ end
232
+ end
233
+ end
234
+
235
+ class Messaging::Message
236
+ def self.command(id, command, params)
237
+ obj = {
238
+ type: :command,
239
+ id: id,
240
+ command: command,
241
+ params: params
242
+ }
243
+
244
+ MessagePack.pack(obj)
245
+ end
246
+
247
+ def self.result(id, result)
248
+ obj = {
249
+ type: :result,
250
+ id: id,
251
+ result: result
252
+ }
253
+
254
+ MessagePack.pack(obj)
255
+ end
256
+
257
+ def self.broadcast(message, params)
258
+ obj = {
259
+ type: :broadcast,
260
+ message: message,
261
+ params: params
262
+ }
263
+
264
+ MessagePack.pack(obj)
265
+ end
266
+
267
+ def self.unpack(payload)
268
+ obj = MessagePack.unpack(payload)
269
+ type = obj['type'].to_sym
270
+
271
+ id = obj['id']
272
+
273
+ params = nil
274
+ if obj['params']
275
+ params = Hash[obj['params'].map { |k, v| [k.to_sym, v] }]
276
+ end
277
+
278
+ case type
279
+ when :broadcast
280
+ { type: type, message: obj['message'].to_sym, params: params }
281
+ when :result
282
+ { type: type, id: id, result: obj['result'] }
283
+ when :command
284
+ { type: type, id: id, command: obj['command'].to_sym, params: params }
285
+ end
286
+ end
287
+ end
@@ -0,0 +1,3 @@
1
+ module Rdb
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,29 @@
1
+ .ace_active-line {
2
+ background: inherit !important;
3
+ }
4
+ .ace_gutter-cell {
5
+ cursor: pointer;
6
+ }
7
+ .ace_gutter-cell.ace_breakpoint {
8
+ background: #faa url('/img/breakpoint.png') no-repeat 3px 2px;
9
+ }
10
+ .ace_gutter-cell.ace_breakpoint:hover {
11
+ background-color: #f77;
12
+ }
13
+ .ace_gutter-cell:not(.ace_breakpoint):hover {
14
+ background: #fdd url('/img/breakpoint-light.png') no-repeat 3px 2px;
15
+ }
16
+ .ace_gutter-cell.live-command:not(.ace_breakpoint):hover {
17
+ background: #ccc url('/img/breakpoint-live-command-light.png') no-repeat 3px 2px;
18
+ }
19
+ .ace_content .live-command {
20
+ position: absolute;
21
+ background: rgb(255, 251, 109);
22
+ outline: 1px solid rgb(235, 231, 089);
23
+ }
24
+ .ace_gutter-cell.live-command {
25
+ background: #ccc url('/img/live-command.png') no-repeat 3px 2px;
26
+ }
27
+ .ace_gutter-cell.live-command.ace_breakpoint {
28
+ background: #ccc url('/img/breakpoint-live-command.png') no-repeat 3px 2px;
29
+ }
@@ -0,0 +1,16 @@
1
+ /* latin-ext */
2
+ @font-face {
3
+ font-family: 'Lato';
4
+ font-style: normal;
5
+ font-weight: 400;
6
+ src: local('Lato Regular'), local('Lato-Regular'), url(/font/Lato.woff2) format('woff2');
7
+ unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
8
+ }
9
+ /* latin */
10
+ @font-face {
11
+ font-family: 'Lato';
12
+ font-style: normal;
13
+ font-weight: 400;
14
+ src: local('Lato Regular'), local('Lato-Regular'), url(/font/Lato.woff2) format('woff2');
15
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
16
+ }
@@ -0,0 +1,3 @@
1
+ /*! ngTable v0.3.2 by Vitalii Savchuk(esvit666@gmail.com) - https://github.com/esvit/ng-table - New BSD License */
2
+
3
+ .ng-table th{text-align:center;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ng-table th.sortable{cursor:pointer}.ng-table th.sortable div{padding-right:18px;position:relative}.ng-table th.sortable div:after,.ng-table th.sortable div:before{content:"";border-width:0 4px 4px;border-style:solid;border-color:#000 transparent;visibility:visible;right:8px;top:50%;position:absolute;opacity:.3;margin-top:-4px}.ng-table th.sortable div:before{margin-top:2px;border-bottom:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000}.ng-table th.sortable div:hover:after,.ng-table th.sortable div:hover:before{opacity:1;visibility:visible}.ng-table th.sortable.sort-desc,.ng-table th.sortable.sort-asc{background-color:rgba(141,192,219,.25);text-shadow:0 1px 1px rgba(255,255,255,.75)}.ng-table th.sortable.sort-desc div:after,.ng-table th.sortable.sort-asc div:after{margin-top:-2px}.ng-table th.sortable.sort-desc div:before,.ng-table th.sortable.sort-asc div:before{visibility:hidden}.ng-table th.sortable.sort-asc div:after,.ng-table th.sortable.sort-asc div:hover:after{visibility:visible;filter:alpha(opacity=60);-khtml-opacity:.6;-moz-opacity:.6;opacity:.6}.ng-table th.sortable.sort-desc div:after{border-bottom:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000;visibility:visible;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:alpha(opacity=60);-khtml-opacity:.6;-moz-opacity:.6;opacity:.6}.ng-table th.filter .input-filter{margin:0;display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.ng-table+.pagination{margin-top:0}@media only screen and (max-width:800px){.ng-table-responsive{border-bottom:1px solid #999}.ng-table-responsive tr{border-top:1px solid #999;border-left:1px solid #999;border-right:1px solid #999}.ng-table-responsive td:before{position:absolute;padding:8px;left:0;top:0;width:50%;white-space:nowrap;text-align:left;font-weight:700}.ng-table-responsive thead tr th{text-align:left}.ng-table-responsive thead tr.ng-table-filters th{padding:0}.ng-table-responsive thead tr.ng-table-filters th form>div{padding:8px}.ng-table-responsive td{border:0;border-bottom:1px solid #eee;position:relative;padding-left:50%;white-space:normal;text-align:left}.ng-table-responsive td:before{content:attr(data-title-text)}.ng-table-responsive,.ng-table-responsive thead,.ng-table-responsive tbody,.ng-table-responsive th,.ng-table-responsive td,.ng-table-responsive tr{display:block}}
@@ -0,0 +1,156 @@
1
+ body {
2
+ font: 14pt Lato;
3
+ background: #f7f7f7;
4
+ margin: 0;
5
+ padding: 0;
6
+ min-height: 100vh;
7
+ height: 100vh;
8
+ display: -webkit-flex;
9
+ display: flex;
10
+ }
11
+ .source-container, .expr-container {
12
+ display: -webkit-flex;
13
+ display: flex;
14
+ flex-flow: column;
15
+ -webkit-flex: 1;
16
+ flex: 1;
17
+ }
18
+ #source-editor, #expr-editor {
19
+ -webkit-flex: 1;
20
+ flex: 1;
21
+ margin: 0;
22
+ font: 11pt Consolas, Monaco, "Courier New", monospace;
23
+ border: 1px solid #eee;
24
+ }
25
+ .windows {
26
+ display: -webkit-flex;
27
+ display: flex;
28
+ flex-flow: column;
29
+ -webkit-flex: 1;
30
+ flex: 1;
31
+ }
32
+ .environment {
33
+ -webkit-flex: 1;
34
+ flex: 1;
35
+ overflow: auto;
36
+ font: 11pt Consolas, Monaco, "Courier New", monospace;
37
+ background: #fff;
38
+ border: 1px solid #eee;
39
+ }
40
+ .environment .table th {
41
+ text-align: left;
42
+ font-weight: normal;
43
+ }
44
+ .environment .table th, .environment .table td {
45
+ border-bottom: 1px solid #eee;
46
+ }
47
+ .toolbar {
48
+ display: -webkit-flex;
49
+ display: flex;
50
+ background: #cc342d;
51
+ font-size: 0;
52
+ }
53
+ .toolbar .commands {
54
+ -webkit-flex: 1;
55
+ flex: 1;
56
+ }
57
+ .toolbar .settings {
58
+ width: 18px;
59
+ height: 18px;
60
+ align-self: center;
61
+ margin-right: 10px;
62
+ opacity: 0.9;
63
+ }
64
+ .toolbar .settings:hover {
65
+ opacity: 1.0;
66
+ cursor: pointer;
67
+ }
68
+ a.btn {
69
+ text-decoration: none;
70
+ }
71
+ .toolbar a.btn {
72
+ font-size: 12pt;
73
+ color: white;
74
+ margin: 0;
75
+ padding: 9px 10px 12px 10px;
76
+ display: inline-block;
77
+ width: 80px;
78
+ text-align: center;
79
+ vertical-align: middle;
80
+ }
81
+ .toolbar a.btn:hover {
82
+ background: #9b1c16;
83
+ }
84
+ .content-container {
85
+ display: -webkit-flex;
86
+ display: flex;
87
+ flex-flow: row;
88
+ overflow-x: hidden;
89
+ -webkit-flex: 1;
90
+ flex: 1;
91
+ }
92
+ .sidebar {
93
+ -webkit-flex: 0 0 200px;
94
+ flex: 0 0 200px;
95
+ padding-top: 20px;
96
+ }
97
+ .sidebar .group {
98
+ margin-bottom: 20px;
99
+ }
100
+ .sidebar .group h3 {
101
+ margin: 0;
102
+ padding: 3px 10px 6px 10px;
103
+ background: #eee;
104
+ font-size: 13pt;
105
+ font-weight: normal;
106
+ }
107
+ .sidebar .group .stat {
108
+ float: right;
109
+ font-size: smaller;
110
+ margin-top: 2px;
111
+ margin-right: 5px;
112
+ }
113
+ .sidebar ul {
114
+ list-style-type: none;
115
+ margin: 0;
116
+ padding: 0;
117
+ }
118
+ .sidebar ul .nav {
119
+ color: #333;
120
+ padding: 5px 10px;
121
+ text-decoration: none;
122
+ cursor: pointer;
123
+ display: block;
124
+ }
125
+ .sidebar ul .nav:hover {
126
+ background: #cc342d;
127
+ color: #fff;
128
+ }
129
+ .sidebar ul.threads, .sidebar ul.frames {
130
+ font-size: 12pt;
131
+ }
132
+ .frame .method {
133
+ display: block;
134
+ }
135
+ .frame .location {
136
+ color: #888;
137
+ font-size: smaller;
138
+ text-decoration: none;
139
+ }
140
+ .frame .nav:hover a.location {
141
+ color: #fff;
142
+ }
143
+ .frame a.location:hover {
144
+ text-decoration: underline;
145
+ }
146
+ .sidebar .active {
147
+ background: #ddd;
148
+ }
149
+ .main-container {
150
+ display: -webkit-flex;
151
+ display: flex;
152
+ flex-flow: column;
153
+ min-height: 100%;
154
+ -webkit-flex: 1;
155
+ flex: 1;
156
+ }