test_server 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (420) hide show
  1. data/.bowerrc +4 -0
  2. data/.gitignore +19 -0
  3. data/.rdebugrc +7 -0
  4. data/.rspec +3 -0
  5. data/.simplecov +8 -0
  6. data/.travis.yml +8 -0
  7. data/.yardopts +5 -0
  8. data/Gemfile +55 -0
  9. data/LICENSE.md +22 -0
  10. data/README.md +29 -0
  11. data/Rakefile +107 -0
  12. data/app/assets/javascripts/application.js +65 -0
  13. data/app/assets/stylesheets/application.scss +150 -0
  14. data/app/controllers/application_controller.rb +71 -0
  15. data/app/controllers/assets_controller.rb +72 -0
  16. data/app/controllers/javascript_controller.rb +31 -0
  17. data/app/controllers/streaming_controller.rb +52 -0
  18. data/app/controllers/string_controller.rb +51 -0
  19. data/app/views/application.haml +19 -0
  20. data/app/views/xhr/show.haml +38 -0
  21. data/bin/test_server +10 -0
  22. data/bower.json +8 -0
  23. data/config.ru +51 -0
  24. data/files/config.yaml +1 -0
  25. data/files/example-config.erb +12 -0
  26. data/lib/test_server/access_logger.rb +13 -0
  27. data/lib/test_server/actions/create_directory.rb +33 -0
  28. data/lib/test_server/actions/create_file.rb +55 -0
  29. data/lib/test_server/actions/create_output.rb +36 -0
  30. data/lib/test_server/actions/handle_error.rb +39 -0
  31. data/lib/test_server/actions/initialize_application.rb +56 -0
  32. data/lib/test_server/actions/reload_configuration.rb +21 -0
  33. data/lib/test_server/actions/send_signal.rb +32 -0
  34. data/lib/test_server/cli/helper.rb +12 -0
  35. data/lib/test_server/cli/main.rb +105 -0
  36. data/lib/test_server/cli/reload.rb +40 -0
  37. data/lib/test_server/config.rb +107 -0
  38. data/lib/test_server/data.rb +23 -0
  39. data/lib/test_server/encoder.rb +39 -0
  40. data/lib/test_server/encoders/base64.rb +14 -0
  41. data/lib/test_server/encoders/base64_strict.rb +14 -0
  42. data/lib/test_server/encoders/gzip.rb +14 -0
  43. data/lib/test_server/encoders/null.rb +14 -0
  44. data/lib/test_server/erb_generator.rb +35 -0
  45. data/lib/test_server/error_handler.rb +109 -0
  46. data/lib/test_server/error_messages.rb +67 -0
  47. data/lib/test_server/exceptions.rb +39 -0
  48. data/lib/test_server/locales/en.yml +72 -0
  49. data/lib/test_server/main.rb +31 -0
  50. data/lib/test_server/null_access_logger.rb +6 -0
  51. data/lib/test_server/process_environment.rb +23 -0
  52. data/lib/test_server/server.rb +19 -0
  53. data/lib/test_server/server_commands/puma.rb +37 -0
  54. data/lib/test_server/server_commands/rackup.rb +44 -0
  55. data/lib/test_server/template_file.rb +19 -0
  56. data/lib/test_server/template_repository.rb +22 -0
  57. data/lib/test_server/ui_logger.rb +37 -0
  58. data/lib/test_server/version.rb +4 -0
  59. data/lib/test_server/web_helper.rb +66 -0
  60. data/lib/test_server.rb +78 -0
  61. data/share/archlinux/Makefile +7 -0
  62. data/share/archlinux/PKGBUILD.sh.erb +110 -0
  63. data/share/archlinux/config.yaml.erb +10 -0
  64. data/share/archlinux/defaults.sh.erb +3 -0
  65. data/share/archlinux/startup.sh.erb +9 -0
  66. data/share/archlinux/test_server.install +65 -0
  67. data/share/archlinux/tmpfiles.conf.erb +2 -0
  68. data/share/systemd/test_server.service +9 -0
  69. data/share/systemd/test_server.service.erb +11 -0
  70. data/share/systemd/test_server.socket +10 -0
  71. data/spec/encoder_spec.rb +50 -0
  72. data/spec/encoders/base64_spec.rb +18 -0
  73. data/spec/encoders/base64_strict_spec.rb +18 -0
  74. data/spec/encoders/gzip_spec.rb +18 -0
  75. data/spec/encoders/null_spec.rb +18 -0
  76. data/spec/error_handler_spec.rb +155 -0
  77. data/spec/features/fetch_data_via_javascript_spec.rb +19 -0
  78. data/spec/features/fetch_test_data_plain_spec.rb +109 -0
  79. data/spec/features/fetch_test_data_via_streaming_spec.rb +53 -0
  80. data/spec/features/helper_spec.rb +125 -0
  81. data/spec/process_environment_spec.rb +44 -0
  82. data/spec/spec_helper.rb +20 -0
  83. data/spec/support/capybara.rb +16 -0
  84. data/spec/support/debugging.rb +3 -0
  85. data/spec/support/encoding.rb +1 -0
  86. data/spec/support/environment.rb +33 -0
  87. data/spec/support/example.rb +16 -0
  88. data/spec/support/filesystem.rb +19 -0
  89. data/spec/support/html.rb +20 -0
  90. data/spec/support/matcher.rb +17 -0
  91. data/spec/support/pretty_print.xsl +46 -0
  92. data/spec/support/reporting.rb +8 -0
  93. data/spec/support/rspec.rb +5 -0
  94. data/spec/support/string.rb +2 -0
  95. data/spec/support/timeout.rb +18 -0
  96. data/test_server.gemspec +40 -0
  97. data/vendor/assets/components/bootstrap-sass/.bower.json +25 -0
  98. data/vendor/assets/components/bootstrap-sass/CNAME +1 -0
  99. data/vendor/assets/components/bootstrap-sass/CONTRIBUTING.md +61 -0
  100. data/vendor/assets/components/bootstrap-sass/DOCS-LICENSE +319 -0
  101. data/vendor/assets/components/bootstrap-sass/Gemfile +5 -0
  102. data/vendor/assets/components/bootstrap-sass/Gruntfile.js +244 -0
  103. data/vendor/assets/components/bootstrap-sass/LICENSE +176 -0
  104. data/vendor/assets/components/bootstrap-sass/LICENSE-MIT +21 -0
  105. data/vendor/assets/components/bootstrap-sass/README.md +277 -0
  106. data/vendor/assets/components/bootstrap-sass/Rakefile +44 -0
  107. data/vendor/assets/components/bootstrap-sass/_config.yml +25 -0
  108. data/vendor/assets/components/bootstrap-sass/_includes/ads.html +1 -0
  109. data/vendor/assets/components/bootstrap-sass/_includes/footer.html +34 -0
  110. data/vendor/assets/components/bootstrap-sass/_includes/header.html +42 -0
  111. data/vendor/assets/components/bootstrap-sass/_includes/nav-about.html +12 -0
  112. data/vendor/assets/components/bootstrap-sass/_includes/nav-components.html +137 -0
  113. data/vendor/assets/components/bootstrap-sass/_includes/nav-css.html +99 -0
  114. data/vendor/assets/components/bootstrap-sass/_includes/nav-customize.html +40 -0
  115. data/vendor/assets/components/bootstrap-sass/_includes/nav-getting-started.html +44 -0
  116. data/vendor/assets/components/bootstrap-sass/_includes/nav-javascript.html +88 -0
  117. data/vendor/assets/components/bootstrap-sass/_includes/nav-main.html +37 -0
  118. data/vendor/assets/components/bootstrap-sass/_includes/old-bs-docs.html +8 -0
  119. data/vendor/assets/components/bootstrap-sass/_includes/social-buttons.html +16 -0
  120. data/vendor/assets/components/bootstrap-sass/_layouts/default.html +79 -0
  121. data/vendor/assets/components/bootstrap-sass/_layouts/home.html +47 -0
  122. data/vendor/assets/components/bootstrap-sass/about.html +93 -0
  123. data/vendor/assets/components/bootstrap-sass/bower.json +11 -0
  124. data/vendor/assets/components/bootstrap-sass/browserstack.json +37 -0
  125. data/vendor/assets/components/bootstrap-sass/components.html +3689 -0
  126. data/vendor/assets/components/bootstrap-sass/composer.json +28 -0
  127. data/vendor/assets/components/bootstrap-sass/css.html +2674 -0
  128. data/vendor/assets/components/bootstrap-sass/customize.html +1715 -0
  129. data/vendor/assets/components/bootstrap-sass/dist/css/bootstrap-theme.css +427 -0
  130. data/vendor/assets/components/bootstrap-sass/dist/css/bootstrap-theme.min.css +1 -0
  131. data/vendor/assets/components/bootstrap-sass/dist/css/bootstrap.css +6350 -0
  132. data/vendor/assets/components/bootstrap-sass/dist/css/bootstrap.min.css +1 -0
  133. data/vendor/assets/components/bootstrap-sass/dist/fonts/glyphicons-halflings-regular.eot +0 -0
  134. data/vendor/assets/components/bootstrap-sass/dist/fonts/glyphicons-halflings-regular.svg +229 -0
  135. data/vendor/assets/components/bootstrap-sass/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
  136. data/vendor/assets/components/bootstrap-sass/dist/fonts/glyphicons-halflings-regular.woff +0 -0
  137. data/vendor/assets/components/bootstrap-sass/dist/js/bootstrap.js +2002 -0
  138. data/vendor/assets/components/bootstrap-sass/dist/js/bootstrap.min.js +9 -0
  139. data/vendor/assets/components/bootstrap-sass/docs-assets/css/docs.css +1195 -0
  140. data/vendor/assets/components/bootstrap-sass/docs-assets/css/pygments-manni.css +66 -0
  141. data/vendor/assets/components/bootstrap-sass/docs-assets/ico/apple-touch-icon-144-precomposed.png +0 -0
  142. data/vendor/assets/components/bootstrap-sass/docs-assets/ico/favicon.png +0 -0
  143. data/vendor/assets/components/bootstrap-sass/docs-assets/js/application.js +103 -0
  144. data/vendor/assets/components/bootstrap-sass/docs-assets/js/customizer.js +332 -0
  145. data/vendor/assets/components/bootstrap-sass/docs-assets/js/filesaver.js +169 -0
  146. data/vendor/assets/components/bootstrap-sass/docs-assets/js/holder.js +404 -0
  147. data/vendor/assets/components/bootstrap-sass/docs-assets/js/ie8-responsive-file-warning.js +12 -0
  148. data/vendor/assets/components/bootstrap-sass/docs-assets/js/jszip.js +1467 -0
  149. data/vendor/assets/components/bootstrap-sass/docs-assets/js/less.js +9 -0
  150. data/vendor/assets/components/bootstrap-sass/docs-assets/js/raw-files.js +3 -0
  151. data/vendor/assets/components/bootstrap-sass/docs-assets/js/uglify.js +14 -0
  152. data/vendor/assets/components/bootstrap-sass/examples/carousel/carousel.css +148 -0
  153. data/vendor/assets/components/bootstrap-sass/examples/carousel/index.html +206 -0
  154. data/vendor/assets/components/bootstrap-sass/examples/grid/grid.css +28 -0
  155. data/vendor/assets/components/bootstrap-sass/examples/grid/index.html +148 -0
  156. data/vendor/assets/components/bootstrap-sass/examples/jumbotron/index.html +99 -0
  157. data/vendor/assets/components/bootstrap-sass/examples/jumbotron/jumbotron.css +5 -0
  158. data/vendor/assets/components/bootstrap-sass/examples/jumbotron-narrow/index.html +82 -0
  159. data/vendor/assets/components/bootstrap-sass/examples/jumbotron-narrow/jumbotron-narrow.css +79 -0
  160. data/vendor/assets/components/bootstrap-sass/examples/justified-nav/index.html +83 -0
  161. data/vendor/assets/components/bootstrap-sass/examples/justified-nav/justified-nav.css +88 -0
  162. data/vendor/assets/components/bootstrap-sass/examples/navbar/index.html +88 -0
  163. data/vendor/assets/components/bootstrap-sass/examples/navbar/navbar.css +8 -0
  164. data/vendor/assets/components/bootstrap-sass/examples/navbar-fixed-top/index.html +91 -0
  165. data/vendor/assets/components/bootstrap-sass/examples/navbar-fixed-top/navbar-fixed-top.css +4 -0
  166. data/vendor/assets/components/bootstrap-sass/examples/navbar-static-top/index.html +92 -0
  167. data/vendor/assets/components/bootstrap-sass/examples/navbar-static-top/navbar-static-top.css +7 -0
  168. data/vendor/assets/components/bootstrap-sass/examples/non-responsive/index.html +101 -0
  169. data/vendor/assets/components/bootstrap-sass/examples/non-responsive/non-responsive.css +116 -0
  170. data/vendor/assets/components/bootstrap-sass/examples/offcanvas/index.html +130 -0
  171. data/vendor/assets/components/bootstrap-sass/examples/offcanvas/offcanvas.css +50 -0
  172. data/vendor/assets/components/bootstrap-sass/examples/offcanvas/offcanvas.js +5 -0
  173. data/vendor/assets/components/bootstrap-sass/examples/screenshots/carousel.jpg +0 -0
  174. data/vendor/assets/components/bootstrap-sass/examples/screenshots/grid.jpg +0 -0
  175. data/vendor/assets/components/bootstrap-sass/examples/screenshots/jumbotron-narrow.jpg +0 -0
  176. data/vendor/assets/components/bootstrap-sass/examples/screenshots/jumbotron.jpg +0 -0
  177. data/vendor/assets/components/bootstrap-sass/examples/screenshots/justified-nav.jpg +0 -0
  178. data/vendor/assets/components/bootstrap-sass/examples/screenshots/navbar-fixed.jpg +0 -0
  179. data/vendor/assets/components/bootstrap-sass/examples/screenshots/navbar-static.jpg +0 -0
  180. data/vendor/assets/components/bootstrap-sass/examples/screenshots/navbar.jpg +0 -0
  181. data/vendor/assets/components/bootstrap-sass/examples/screenshots/non-responsive.jpg +0 -0
  182. data/vendor/assets/components/bootstrap-sass/examples/screenshots/offcanvas.jpg +0 -0
  183. data/vendor/assets/components/bootstrap-sass/examples/screenshots/sign-in.jpg +0 -0
  184. data/vendor/assets/components/bootstrap-sass/examples/screenshots/starter-template.jpg +0 -0
  185. data/vendor/assets/components/bootstrap-sass/examples/screenshots/sticky-footer-navbar.jpg +0 -0
  186. data/vendor/assets/components/bootstrap-sass/examples/screenshots/sticky-footer.jpg +0 -0
  187. data/vendor/assets/components/bootstrap-sass/examples/screenshots/theme.jpg +0 -0
  188. data/vendor/assets/components/bootstrap-sass/examples/signin/index.html +50 -0
  189. data/vendor/assets/components/bootstrap-sass/examples/signin/signin.css +40 -0
  190. data/vendor/assets/components/bootstrap-sass/examples/starter-template/index.html +68 -0
  191. data/vendor/assets/components/bootstrap-sass/examples/starter-template/starter-template.css +7 -0
  192. data/vendor/assets/components/bootstrap-sass/examples/sticky-footer/index.html +55 -0
  193. data/vendor/assets/components/bootstrap-sass/examples/sticky-footer/sticky-footer.css +38 -0
  194. data/vendor/assets/components/bootstrap-sass/examples/sticky-footer-navbar/index.html +91 -0
  195. data/vendor/assets/components/bootstrap-sass/examples/sticky-footer-navbar/sticky-footer-navbar.css +45 -0
  196. data/vendor/assets/components/bootstrap-sass/examples/theme/index.html +384 -0
  197. data/vendor/assets/components/bootstrap-sass/examples/theme/theme.css +14 -0
  198. data/vendor/assets/components/bootstrap-sass/fonts/glyphicons-halflings-regular.eot +0 -0
  199. data/vendor/assets/components/bootstrap-sass/fonts/glyphicons-halflings-regular.svg +229 -0
  200. data/vendor/assets/components/bootstrap-sass/fonts/glyphicons-halflings-regular.ttf +0 -0
  201. data/vendor/assets/components/bootstrap-sass/fonts/glyphicons-halflings-regular.woff +0 -0
  202. data/vendor/assets/components/bootstrap-sass/getting-started.html +1021 -0
  203. data/vendor/assets/components/bootstrap-sass/index.html +16 -0
  204. data/vendor/assets/components/bootstrap-sass/javascript.html +1983 -0
  205. data/vendor/assets/components/bootstrap-sass/js/affix.js +126 -0
  206. data/vendor/assets/components/bootstrap-sass/js/alert.js +98 -0
  207. data/vendor/assets/components/bootstrap-sass/js/button.js +109 -0
  208. data/vendor/assets/components/bootstrap-sass/js/carousel.js +217 -0
  209. data/vendor/assets/components/bootstrap-sass/js/collapse.js +179 -0
  210. data/vendor/assets/components/bootstrap-sass/js/dropdown.js +154 -0
  211. data/vendor/assets/components/bootstrap-sass/js/modal.js +246 -0
  212. data/vendor/assets/components/bootstrap-sass/js/popover.js +117 -0
  213. data/vendor/assets/components/bootstrap-sass/js/scrollspy.js +158 -0
  214. data/vendor/assets/components/bootstrap-sass/js/tab.js +135 -0
  215. data/vendor/assets/components/bootstrap-sass/js/tests/index.html +52 -0
  216. data/vendor/assets/components/bootstrap-sass/js/tests/unit/affix.js +25 -0
  217. data/vendor/assets/components/bootstrap-sass/js/tests/unit/alert.js +62 -0
  218. data/vendor/assets/components/bootstrap-sass/js/tests/unit/button.js +116 -0
  219. data/vendor/assets/components/bootstrap-sass/js/tests/unit/carousel.js +87 -0
  220. data/vendor/assets/components/bootstrap-sass/js/tests/unit/collapse.js +164 -0
  221. data/vendor/assets/components/bootstrap-sass/js/tests/unit/dropdown.js +219 -0
  222. data/vendor/assets/components/bootstrap-sass/js/tests/unit/modal.js +196 -0
  223. data/vendor/assets/components/bootstrap-sass/js/tests/unit/phantom.js +69 -0
  224. data/vendor/assets/components/bootstrap-sass/js/tests/unit/popover.js +133 -0
  225. data/vendor/assets/components/bootstrap-sass/js/tests/unit/scrollspy.js +37 -0
  226. data/vendor/assets/components/bootstrap-sass/js/tests/unit/tab.js +86 -0
  227. data/vendor/assets/components/bootstrap-sass/js/tests/unit/tooltip.js +437 -0
  228. data/vendor/assets/components/bootstrap-sass/js/tests/unit/transition.js +13 -0
  229. data/vendor/assets/components/bootstrap-sass/js/tests/vendor/jquery.js +6 -0
  230. data/vendor/assets/components/bootstrap-sass/js/tests/vendor/qunit.css +232 -0
  231. data/vendor/assets/components/bootstrap-sass/js/tests/vendor/qunit.js +1510 -0
  232. data/vendor/assets/components/bootstrap-sass/js/tooltip.js +386 -0
  233. data/vendor/assets/components/bootstrap-sass/js/transition.js +56 -0
  234. data/vendor/assets/components/bootstrap-sass/lib/_alerts.scss +67 -0
  235. data/vendor/assets/components/bootstrap-sass/lib/_badges.scss +51 -0
  236. data/vendor/assets/components/bootstrap-sass/lib/_breadcrumbs.scss +23 -0
  237. data/vendor/assets/components/bootstrap-sass/lib/_button-groups.scss +253 -0
  238. data/vendor/assets/components/bootstrap-sass/lib/_buttons.scss +158 -0
  239. data/vendor/assets/components/bootstrap-sass/lib/_carousel.scss +231 -0
  240. data/vendor/assets/components/bootstrap-sass/lib/_close.scss +35 -0
  241. data/vendor/assets/components/bootstrap-sass/lib/_code.scss +53 -0
  242. data/vendor/assets/components/bootstrap-sass/lib/_component-animations.scss +29 -0
  243. data/vendor/assets/components/bootstrap-sass/lib/_dropdowns.scss +193 -0
  244. data/vendor/assets/components/bootstrap-sass/lib/_forms.scss +363 -0
  245. data/vendor/assets/components/bootstrap-sass/lib/_glyphicons.scss +237 -0
  246. data/vendor/assets/components/bootstrap-sass/lib/_grid.scss +93 -0
  247. data/vendor/assets/components/bootstrap-sass/lib/_input-groups.scss +136 -0
  248. data/vendor/assets/components/bootstrap-sass/lib/_jumbotron.scss +40 -0
  249. data/vendor/assets/components/bootstrap-sass/lib/_labels.scss +58 -0
  250. data/vendor/assets/components/bootstrap-sass/lib/_list-group.scss +88 -0
  251. data/vendor/assets/components/bootstrap-sass/lib/_media.scss +56 -0
  252. data/vendor/assets/components/bootstrap-sass/lib/_mixins.scss +861 -0
  253. data/vendor/assets/components/bootstrap-sass/lib/_modals.scss +132 -0
  254. data/vendor/assets/components/bootstrap-sass/lib/_navbar.scss +628 -0
  255. data/vendor/assets/components/bootstrap-sass/lib/_navs.scss +262 -0
  256. data/vendor/assets/components/bootstrap-sass/lib/_normalize.scss +406 -0
  257. data/vendor/assets/components/bootstrap-sass/lib/_pager.scss +55 -0
  258. data/vendor/assets/components/bootstrap-sass/lib/_pagination.scss +85 -0
  259. data/vendor/assets/components/bootstrap-sass/lib/_panels.scss +172 -0
  260. data/vendor/assets/components/bootstrap-sass/lib/_popovers.scss +133 -0
  261. data/vendor/assets/components/bootstrap-sass/lib/_print.scss +105 -0
  262. data/vendor/assets/components/bootstrap-sass/lib/_progress-bars.scss +92 -0
  263. data/vendor/assets/components/bootstrap-sass/lib/_responsive-utilities.scss +198 -0
  264. data/vendor/assets/components/bootstrap-sass/lib/_scaffolding.scss +119 -0
  265. data/vendor/assets/components/bootstrap-sass/lib/_tables.scss +244 -0
  266. data/vendor/assets/components/bootstrap-sass/lib/_theme.scss +247 -0
  267. data/vendor/assets/components/bootstrap-sass/lib/_thumbnails.scss +32 -0
  268. data/vendor/assets/components/bootstrap-sass/lib/_tooltip.scss +95 -0
  269. data/vendor/assets/components/bootstrap-sass/lib/_type.scss +279 -0
  270. data/vendor/assets/components/bootstrap-sass/lib/_utilities.scss +56 -0
  271. data/vendor/assets/components/bootstrap-sass/lib/_variables.scss +637 -0
  272. data/vendor/assets/components/bootstrap-sass/lib/_wells.scss +29 -0
  273. data/vendor/assets/components/bootstrap-sass/lib/bootstrap.scss +49 -0
  274. data/vendor/assets/components/bootstrap-sass/package.json +40 -0
  275. data/vendor/assets/components/jquery/.bower.json +37 -0
  276. data/vendor/assets/components/jquery/MIT-LICENSE.txt +21 -0
  277. data/vendor/assets/components/jquery/bower.json +27 -0
  278. data/vendor/assets/components/jquery/dist/jquery.js +9174 -0
  279. data/vendor/assets/components/jquery/dist/jquery.min.js +5 -0
  280. data/vendor/assets/components/jquery/dist/jquery.min.map +1 -0
  281. data/vendor/assets/components/jquery/src/ajax/jsonp.js +89 -0
  282. data/vendor/assets/components/jquery/src/ajax/load.js +75 -0
  283. data/vendor/assets/components/jquery/src/ajax/parseJSON.js +13 -0
  284. data/vendor/assets/components/jquery/src/ajax/parseXML.js +28 -0
  285. data/vendor/assets/components/jquery/src/ajax/script.js +64 -0
  286. data/vendor/assets/components/jquery/src/ajax/var/nonce.js +5 -0
  287. data/vendor/assets/components/jquery/src/ajax/var/rquery.js +3 -0
  288. data/vendor/assets/components/jquery/src/ajax/xhr.js +135 -0
  289. data/vendor/assets/components/jquery/src/ajax.js +806 -0
  290. data/vendor/assets/components/jquery/src/attributes/attr.js +143 -0
  291. data/vendor/assets/components/jquery/src/attributes/classes.js +158 -0
  292. data/vendor/assets/components/jquery/src/attributes/prop.js +96 -0
  293. data/vendor/assets/components/jquery/src/attributes/support.js +35 -0
  294. data/vendor/assets/components/jquery/src/attributes/val.js +163 -0
  295. data/vendor/assets/components/jquery/src/attributes.js +11 -0
  296. data/vendor/assets/components/jquery/src/callbacks.js +205 -0
  297. data/vendor/assets/components/jquery/src/core/access.js +60 -0
  298. data/vendor/assets/components/jquery/src/core/init.js +123 -0
  299. data/vendor/assets/components/jquery/src/core/parseHTML.js +39 -0
  300. data/vendor/assets/components/jquery/src/core/ready.js +97 -0
  301. data/vendor/assets/components/jquery/src/core/var/rsingleTag.js +4 -0
  302. data/vendor/assets/components/jquery/src/core.js +498 -0
  303. data/vendor/assets/components/jquery/src/css/addGetHookIf.js +24 -0
  304. data/vendor/assets/components/jquery/src/css/curCSS.js +57 -0
  305. data/vendor/assets/components/jquery/src/css/defaultDisplay.js +70 -0
  306. data/vendor/assets/components/jquery/src/css/hiddenVisibleSelectors.js +15 -0
  307. data/vendor/assets/components/jquery/src/css/support.js +91 -0
  308. data/vendor/assets/components/jquery/src/css/swap.js +28 -0
  309. data/vendor/assets/components/jquery/src/css/var/cssExpand.js +3 -0
  310. data/vendor/assets/components/jquery/src/css/var/getStyles.js +5 -0
  311. data/vendor/assets/components/jquery/src/css/var/isHidden.js +13 -0
  312. data/vendor/assets/components/jquery/src/css/var/rmargin.js +3 -0
  313. data/vendor/assets/components/jquery/src/css/var/rnumnonpx.js +5 -0
  314. data/vendor/assets/components/jquery/src/css.js +451 -0
  315. data/vendor/assets/components/jquery/src/data/Data.js +181 -0
  316. data/vendor/assets/components/jquery/src/data/accepts.js +20 -0
  317. data/vendor/assets/components/jquery/src/data/var/data_priv.js +5 -0
  318. data/vendor/assets/components/jquery/src/data/var/data_user.js +5 -0
  319. data/vendor/assets/components/jquery/src/data.js +175 -0
  320. data/vendor/assets/components/jquery/src/deferred.js +149 -0
  321. data/vendor/assets/components/jquery/src/deprecated.js +13 -0
  322. data/vendor/assets/components/jquery/src/dimensions.js +50 -0
  323. data/vendor/assets/components/jquery/src/effects/Tween.js +114 -0
  324. data/vendor/assets/components/jquery/src/effects/animatedSelector.js +13 -0
  325. data/vendor/assets/components/jquery/src/effects.js +647 -0
  326. data/vendor/assets/components/jquery/src/event/alias.js +39 -0
  327. data/vendor/assets/components/jquery/src/event/support.js +9 -0
  328. data/vendor/assets/components/jquery/src/event.js +868 -0
  329. data/vendor/assets/components/jquery/src/exports/amd.js +24 -0
  330. data/vendor/assets/components/jquery/src/exports/global.js +32 -0
  331. data/vendor/assets/components/jquery/src/intro.js +44 -0
  332. data/vendor/assets/components/jquery/src/jquery.js +36 -0
  333. data/vendor/assets/components/jquery/src/manipulation/_evalUrl.js +18 -0
  334. data/vendor/assets/components/jquery/src/manipulation/support.js +31 -0
  335. data/vendor/assets/components/jquery/src/manipulation/var/rcheckableType.js +3 -0
  336. data/vendor/assets/components/jquery/src/manipulation.js +582 -0
  337. data/vendor/assets/components/jquery/src/offset.js +204 -0
  338. data/vendor/assets/components/jquery/src/outro.js +1 -0
  339. data/vendor/assets/components/jquery/src/queue/delay.js +22 -0
  340. data/vendor/assets/components/jquery/src/queue.js +142 -0
  341. data/vendor/assets/components/jquery/src/selector-native.js +172 -0
  342. data/vendor/assets/components/jquery/src/selector-sizzle.js +14 -0
  343. data/vendor/assets/components/jquery/src/selector.js +1 -0
  344. data/vendor/assets/components/jquery/src/serialize.js +111 -0
  345. data/vendor/assets/components/jquery/src/sizzle/dist/sizzle.js +2034 -0
  346. data/vendor/assets/components/jquery/src/sizzle/dist/sizzle.min.js +3 -0
  347. data/vendor/assets/components/jquery/src/sizzle/dist/sizzle.min.map +1 -0
  348. data/vendor/assets/components/jquery/src/traversing/findFilter.js +100 -0
  349. data/vendor/assets/components/jquery/src/traversing/var/rneedsContext.js +6 -0
  350. data/vendor/assets/components/jquery/src/traversing.js +200 -0
  351. data/vendor/assets/components/jquery/src/var/arr.js +3 -0
  352. data/vendor/assets/components/jquery/src/var/class2type.js +4 -0
  353. data/vendor/assets/components/jquery/src/var/concat.js +5 -0
  354. data/vendor/assets/components/jquery/src/var/hasOwn.js +5 -0
  355. data/vendor/assets/components/jquery/src/var/indexOf.js +5 -0
  356. data/vendor/assets/components/jquery/src/var/pnum.js +3 -0
  357. data/vendor/assets/components/jquery/src/var/push.js +5 -0
  358. data/vendor/assets/components/jquery/src/var/rnotwhite.js +3 -0
  359. data/vendor/assets/components/jquery/src/var/slice.js +5 -0
  360. data/vendor/assets/components/jquery/src/var/strundefined.js +3 -0
  361. data/vendor/assets/components/jquery/src/var/support.js +4 -0
  362. data/vendor/assets/components/jquery/src/var/toString.js +5 -0
  363. data/vendor/assets/components/jquery/src/wrap.js +78 -0
  364. data/vendor/assets/components/open-sans/.bower.json +36 -0
  365. data/vendor/assets/components/open-sans/bower.json +27 -0
  366. data/vendor/assets/components/open-sans/css/open-sans.css +91 -0
  367. data/vendor/assets/components/open-sans/css/open-sans.min.css +1 -0
  368. data/vendor/assets/components/open-sans/fonts/bold/opensans-bold-webfont.eot +0 -0
  369. data/vendor/assets/components/open-sans/fonts/bold/opensans-bold-webfont.svg +958 -0
  370. data/vendor/assets/components/open-sans/fonts/bold/opensans-bold-webfont.ttf +0 -0
  371. data/vendor/assets/components/open-sans/fonts/bold/opensans-bold-webfont.woff +0 -0
  372. data/vendor/assets/components/open-sans/fonts/bold-italic/opensans-bold-italic-webfont.eot +0 -0
  373. data/vendor/assets/components/open-sans/fonts/bold-italic/opensans-bold-italic-webfont.svg +958 -0
  374. data/vendor/assets/components/open-sans/fonts/bold-italic/opensans-bold-italic-webfont.ttf +0 -0
  375. data/vendor/assets/components/open-sans/fonts/bold-italic/opensans-bold-italic-webfont.woff +0 -0
  376. data/vendor/assets/components/open-sans/fonts/extrabold/opensans-extrabold-webfont.eot +0 -0
  377. data/vendor/assets/components/open-sans/fonts/extrabold/opensans-extrabold-webfont.svg +958 -0
  378. data/vendor/assets/components/open-sans/fonts/extrabold/opensans-extrabold-webfont.ttf +0 -0
  379. data/vendor/assets/components/open-sans/fonts/extrabold/opensans-extrabold-webfont.woff +0 -0
  380. data/vendor/assets/components/open-sans/fonts/extrabold-italic/opensans-extrabold-italic-webfont.eot +0 -0
  381. data/vendor/assets/components/open-sans/fonts/extrabold-italic/opensans-extrabold-italic-webfont.svg +958 -0
  382. data/vendor/assets/components/open-sans/fonts/extrabold-italic/opensans-extrabold-italic-webfont.ttf +0 -0
  383. data/vendor/assets/components/open-sans/fonts/extrabold-italic/opensans-extrabold-italic-webfont.woff +0 -0
  384. data/vendor/assets/components/open-sans/fonts/italic/opensans-italic-webfont.eot +0 -0
  385. data/vendor/assets/components/open-sans/fonts/italic/opensans-italic-webfont.svg +958 -0
  386. data/vendor/assets/components/open-sans/fonts/italic/opensans-italic-webfont.ttf +0 -0
  387. data/vendor/assets/components/open-sans/fonts/italic/opensans-italic-webfont.woff +0 -0
  388. data/vendor/assets/components/open-sans/fonts/light/opensans-light-webfont.eot +0 -0
  389. data/vendor/assets/components/open-sans/fonts/light/opensans-light-webfont.svg +958 -0
  390. data/vendor/assets/components/open-sans/fonts/light/opensans-light-webfont.ttf +0 -0
  391. data/vendor/assets/components/open-sans/fonts/light/opensans-light-webfont.woff +0 -0
  392. data/vendor/assets/components/open-sans/fonts/light-italic/opensans-light-italic-webfont.eot +0 -0
  393. data/vendor/assets/components/open-sans/fonts/light-italic/opensans-light-italic-webfont.svg +958 -0
  394. data/vendor/assets/components/open-sans/fonts/light-italic/opensans-light-italic-webfont.ttf +0 -0
  395. data/vendor/assets/components/open-sans/fonts/light-italic/opensans-light-italic-webfont.woff +0 -0
  396. data/vendor/assets/components/open-sans/fonts/regular/opensans-regular-webfont.eot +0 -0
  397. data/vendor/assets/components/open-sans/fonts/regular/opensans-regular-webfont.svg +958 -0
  398. data/vendor/assets/components/open-sans/fonts/regular/opensans-regular-webfont.ttf +0 -0
  399. data/vendor/assets/components/open-sans/fonts/regular/opensans-regular-webfont.woff +0 -0
  400. data/vendor/assets/components/open-sans/fonts/semibold/opensans-semibold-webfont.eot +0 -0
  401. data/vendor/assets/components/open-sans/fonts/semibold/opensans-semibold-webfont.svg +958 -0
  402. data/vendor/assets/components/open-sans/fonts/semibold/opensans-semibold-webfont.ttf +0 -0
  403. data/vendor/assets/components/open-sans/fonts/semibold/opensans-semibold-webfont.woff +0 -0
  404. data/vendor/assets/components/open-sans/fonts/semibold-italic/opensans-semibold-italic-webfont.eot +0 -0
  405. data/vendor/assets/components/open-sans/fonts/semibold-italic/opensans-semibold-italic-webfont.svg +958 -0
  406. data/vendor/assets/components/open-sans/fonts/semibold-italic/opensans-semibold-italic-webfont.ttf +0 -0
  407. data/vendor/assets/components/open-sans/fonts/semibold-italic/opensans-semibold-italic-webfont.woff +0 -0
  408. data/vendor/assets/components/open-sans/scss/_base.scss +19 -0
  409. data/vendor/assets/components/open-sans/scss/_bold-italic.scss +8 -0
  410. data/vendor/assets/components/open-sans/scss/_bold.scss +4 -0
  411. data/vendor/assets/components/open-sans/scss/_extrabold-italic.scss +8 -0
  412. data/vendor/assets/components/open-sans/scss/_extrabold.scss +4 -0
  413. data/vendor/assets/components/open-sans/scss/_italic.scss +8 -0
  414. data/vendor/assets/components/open-sans/scss/_light-italic.scss +8 -0
  415. data/vendor/assets/components/open-sans/scss/_light.scss +4 -0
  416. data/vendor/assets/components/open-sans/scss/_regular.scss +4 -0
  417. data/vendor/assets/components/open-sans/scss/_semibold-italic.scss +8 -0
  418. data/vendor/assets/components/open-sans/scss/_semibold.scss +4 -0
  419. data/vendor/assets/components/open-sans/scss/open-sans.scss +15 -0
  420. metadata +795 -0
@@ -0,0 +1,52 @@
1
+ # encoding: utf-8
2
+ module TestServer
3
+ module App
4
+ class StreamingController < ApplicationController
5
+ helpers Sinatra::Streaming
6
+
7
+ before do
8
+ param :base64, Boolean, default: false
9
+ end
10
+
11
+ helpers do
12
+ def stream_data(&block)
13
+ content_type :stream
14
+ cache_control :no_cache, :must_revalidate
15
+
16
+ stream(&block)
17
+ end
18
+ end
19
+
20
+ configure do
21
+ mime_type :stream, 'text/plain'
22
+ end
23
+
24
+ get '/' do
25
+ redirect to('/default/')
26
+ end
27
+
28
+ get '/default/?:count?' do
29
+ param :count, Integer, default: 10
30
+
31
+ count = params[:count]
32
+
33
+ stream_data do |out|
34
+ out << encode { "Data #{count} times repeated" }
35
+
36
+ count.times do |n|
37
+ out << encode { "#{n + 1}: data" }
38
+ sleep 1
39
+ end
40
+ end
41
+ end
42
+
43
+ get '/eicar/' do
44
+ stream_data do |out|
45
+ generate_eicar.each do |c|
46
+ out << encode { c }
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,51 @@
1
+ # encoding: utf-8
2
+ module TestServer
3
+ module App
4
+ class StringController < ApplicationController
5
+
6
+ before do
7
+ param :no_cache, Boolean, default: false
8
+ param :must_revalidate, Boolean, default: false
9
+ param :max_age, Integer
10
+ param :base64, Boolean, default: false
11
+
12
+ configure_caching(params)
13
+ end
14
+
15
+ get '/' do
16
+ redirect to('/default/')
17
+ end
18
+
19
+ get '/default/?:count?' do
20
+ param :count, Integer, default: 1
21
+
22
+ encode do
23
+ generate_string(params[:count])
24
+ end
25
+ end
26
+
27
+ get '/eicar/' do
28
+ encode do
29
+ generate_eicar.join
30
+ end
31
+ end
32
+
33
+ get '/sleep/?:count?' do
34
+ param :count, Integer, default: 120
35
+ sleep params[:count]
36
+
37
+ encode do
38
+ generate_string(1)
39
+ end
40
+ end
41
+
42
+ get '/random/?:count?' do
43
+ param :count, Integer, default: 10
44
+
45
+ encode do
46
+ generate_random_string(params[:count])
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,19 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %meta{ charset: 'utf-8'}
5
+ %link{ rel: 'stylesheet', href: stylesheet_path('application.css') }
6
+ %title= @title || t('views.application.title')
7
+ %body
8
+ .ts-page-header
9
+ %nav.ts-top-navigation
10
+ %ul.nav.navbar-nav
11
+ %li
12
+ %a{href: '/'}
13
+ = t('views.root.link')
14
+ %li.active
15
+ %a{href: '/v1/test/'}
16
+ = t('views.test.link')
17
+ .ts-container
18
+ = yield
19
+ %script{ type: 'text/javascript', src: javascript_path('application.js') }
@@ -0,0 +1,38 @@
1
+ %form#form.ts-form{ name: 'form', action: '', role: :form }
2
+ .ts-form-group
3
+ %label{ for: :count}
4
+ = t('views.javascript.xhr.fields.count')
5
+ %input#count.ts-field-count{ type: :number, name: :count, value: @count }
6
+ .ts-form-group
7
+ %label{ for: :timeout}
8
+ = t('views.javascript.xhr.fields.timeout')
9
+ %input#timeout.ts-field-timeout{ type: :number, name: :timeout, value: @timeout }
10
+ .ts-form-group
11
+ %label{ for: :url}
12
+ = t('views.javascript.xhr.fields.url')
13
+ %input#url.ts-field-url{ type: :url, name: :url, value: @url }
14
+ %button#submit.ts-button-submit{type: 'submit', value: t('views.application.buttons.submit'), 'data-toggle' => 'modal', 'data-target' => '#notification'}
15
+ = t('views.application.buttons.submit')
16
+ %a#reset.ts-button-reset{href: '#'}
17
+ = t('views.application.buttons.reset')
18
+
19
+ %table#result.ts-result-table
20
+ %th= t('views.javascript.xhr.result_table.url')
21
+ %th= t('views.javascript.xhr.result_table.timeout')
22
+ %th= t('views.javascript.xhr.result_table.runtime')
23
+ %th= t('views.javascript.xhr.result_table.status')
24
+
25
+ .modal#notification{ role: 'dialog' , tabindex: '-1'}
26
+ .modal-dialog
27
+ .modal-content
28
+ .modal-header
29
+ %button.ts-button-close-headline{ type: 'button', 'data-dismiss' => 'modal', 'aria-hidden' => 'true'}
30
+ &times;
31
+ %h4
32
+ = t('views.dialogs.notification.title')
33
+ .modal-body
34
+ %p.ts-text-centered
35
+ = t('views.javascript.xhr.notification.text')
36
+ .modal-footer
37
+ %button.ts-button-close{ type: 'button', 'data-dismiss' => 'modal' }
38
+ = t('views.application.buttons.close')
data/bin/test_server ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ $LOAD_PATH << ::File.expand_path('../../lib', __FILE__)
4
+ require 'test_server'
5
+
6
+ begin
7
+ TestServer::Cli::Main.start
8
+ rescue StandardError => e
9
+ TestServer::Actions::HandleError.new(e).run
10
+ end
data/bower.json ADDED
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "test_server",
3
+ "dependencies": {
4
+ "bootstrap-sass": "~3.0.2",
5
+ "jquery": "~2.1.0",
6
+ "open-sans": "latest"
7
+ }
8
+ }
data/config.ru ADDED
@@ -0,0 +1,51 @@
1
+ $LOAD_PATH <<::File.expand_path('../lib/', __FILE__)
2
+
3
+ require 'sass'
4
+ require 'test_server'
5
+ #require 'bundler'
6
+
7
+ #if %w{ development test }.include? ENV['RACK_ENV']
8
+ # Bundler.require :default, :test, :development
9
+ #else
10
+ # Bundler.require :default
11
+ #end
12
+
13
+ TestServer.config.debug_mode = true if ENV['DEBUG']
14
+ TestServer.config.log_level = ENV['LOG_LEVEL'] if ENV['LOG_LEVEL']
15
+ TestServer.config.access_log = ENV['ACCESS_LOG'] if ENV['ACCESS_LOG']
16
+
17
+ TestServer.ui_logger.level = TestServer.config.log_level
18
+
19
+ require File.expand_path('../app/controllers/application_controller.rb', __FILE__)
20
+ Dir.glob(::File.expand_path('../app/controllers/*.rb', __FILE__)).each { |f| require f }
21
+
22
+
23
+ trap TestServer.config.reload_config_signal do
24
+ begin
25
+ TestServer.ui_logger.warn 'Reload of configuration requested'
26
+ TestServer::Actions::ReloadConfiguration.new.run
27
+ TestServer.ui_logger.info 'Reload of configuration successful'
28
+ rescue Exceptions::ReloadOfConfigurationFailed => e
29
+ TestServer.ui_logger.fatal "Reload of configuration failed: #{e.message}"
30
+ end
31
+ end
32
+
33
+ #map '/v1/testrating/' do
34
+ # run TestServer::App::TestRatingController
35
+ #end
36
+
37
+ map '/v1/test/streaming' do
38
+ run TestServer::App::StreamingController
39
+ end
40
+
41
+ map '/v1/test/string' do
42
+ run TestServer::App::StringController
43
+ end
44
+
45
+ map '/v1/test/javascript' do
46
+ run TestServer::App::JavascriptController
47
+ end
48
+
49
+ map TestServer::App::AssetsController.assets_prefix do
50
+ run TestServer::App::AssetsController.assets
51
+ end
data/files/config.yaml ADDED
@@ -0,0 +1 @@
1
+ ---
@@ -0,0 +1,12 @@
1
+ ---
2
+ # You might want to copy the following output to one of the allowed config
3
+ # file paths - in the given order. But be aware that at
4
+ # <%= lookup('config_file') -%>, there might be a
5
+ # config file created during initialization.
6
+ <% Array(lookup('allowed_config_file_paths')).each do |p| -%>
7
+ # * <%= p %>
8
+ <% end -%>
9
+
10
+ <% TestServer::Config.options.delete_if { |o| [:expand_path, :gem_path].include? o }.each do |o| -%>
11
+ :<%= o %>: <%= lookup(o) %>
12
+ <% end -%>
@@ -0,0 +1,13 @@
1
+ module TestServer
2
+ class AccessLogger
3
+ def initialize(path)
4
+ @logger = ::Logger.new(::File.expand_path(path))
5
+ rescue Errno::ENOENT
6
+ raise Exceptions::AccessLogPathInvalid, JSON.dump(file: path, directory: ::File.dirname(path) )
7
+ end
8
+
9
+ def write(*args, &block)
10
+ @logger.<<(*args, &block)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,33 @@
1
+ # encoding: utf-8
2
+ module TestServer
3
+ module Actions
4
+ class CreateDirectory
5
+ private
6
+
7
+ attr_reader :fs_engine, :path, :options
8
+
9
+ public
10
+
11
+ def initialize(path, options = {}, fs_engine = FileUtils)
12
+ @path =::File.expand_path(path)
13
+ @options = options
14
+ @fs_engine = fs_engine
15
+ end
16
+
17
+ def run
18
+ if need_to_run? || options[:force] == true
19
+ TestServer.ui_logger.warn "Creating directory \"#{path}\"."
20
+ fs_engine.mkdir_p(path)
21
+ else
22
+ TestServer.ui_logger.warn "Directory \"#{path}\" already exists. Do not create it again!."
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ def need_to_run?
29
+ !::File.exists?(path)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,55 @@
1
+ # encoding: utf-8
2
+ module TestServer
3
+ module Actions
4
+ class CreateFile
5
+ private
6
+
7
+ attr_reader :name, :destination, :data, :options, :engine, :repository
8
+
9
+ public
10
+
11
+ def initialize(name, destination, data, options = {}, engine = ErbGenerator, repository = TemplateRepository.new)
12
+ @name = name
13
+ @destination =::File.expand_path(destination)
14
+ @data = data
15
+ @options = options
16
+ @engine = engine
17
+ @repository = repository
18
+ end
19
+
20
+ def run
21
+ if need_to_run? || options[:force] == true
22
+ TestServer.ui_logger.warn "Creating file \"#{destination}\"."
23
+
24
+ create_directories if options[:create_directories] == true
25
+
26
+ file = template(name, ::File.new(destination, 'w'), data)
27
+ FileUtils.chmod('+x', file) if options[:executable] == true
28
+ else
29
+ TestServer.ui_logger.warn "File \"#{destination}\" already exists. Do not create it again!."
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def create_directories
36
+ FileUtils.mkdir_p(::File.dirname(destination))
37
+ end
38
+
39
+ def template(local_name, local_destination, local_data)
40
+ template = repository.find(local_name)
41
+
42
+ generator = engine.new(local_data)
43
+ generator.compile(template, local_destination)
44
+
45
+ local_destination
46
+ rescue Errno::ENOENT
47
+ fail Exceptions::ErbTemplateIsUnknown, JSON.dump(message: "Unknown erb template \"#{template_path}\".")
48
+ end
49
+
50
+ def need_to_run?
51
+ !::File.exists?(destination)
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,36 @@
1
+ # encoding: utf-8
2
+ module TestServer
3
+ module Actions
4
+ class CreateOutput
5
+ private
6
+
7
+ attr_reader :name, :output, :engine, :repository, :data
8
+
9
+ public
10
+
11
+ def initialize(name, output, data, engine = ErbGenerator, repository = TemplateRepository.new)
12
+ @name = name
13
+ @output = output
14
+ @data = data
15
+ @engine = engine
16
+ @repository = repository
17
+ end
18
+
19
+ def run
20
+ TestServer.ui_logger.info "Creating example configuration:"
21
+ template(name, output, data)
22
+ end
23
+
24
+ private
25
+
26
+ def template(local_name, local_destination, local_data)
27
+ template = repository.find(local_name)
28
+
29
+ generator = engine.new(local_data)
30
+ generator.compile(template, local_destination)
31
+ rescue Errno::ENOENT
32
+ fail Exceptions::ErbTemplateIsUnknown, JSON.dump(message: "Unknown erb template \"#{template_path}\".")
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,39 @@
1
+ # encoding: utf-8
2
+ module TestServer
3
+ module Actions
4
+ class HandleError
5
+
6
+ private
7
+
8
+ attr_reader :exception, :original_message, :handler_klass, :backtrace
9
+
10
+ public
11
+
12
+ def initialize(exception, handler_klass = ErrorHandler)
13
+ @exception = exception.class
14
+ @original_message = exception.message
15
+ @backtrace = exception.backtrace
16
+ @handler_klass = handler_klass
17
+ end
18
+
19
+ def run
20
+ handler = handler_klass.find exception
21
+ handler.original_message = original_message
22
+ handler.backtrace = backtrace
23
+
24
+ handler.execute(parsed_message)
25
+ end
26
+
27
+ private
28
+
29
+ def parsed_message
30
+ result = JSON.parse(original_message)
31
+ return {} unless result.kind_of? Hash
32
+
33
+ result
34
+ rescue JSON::ParserError
35
+ {}
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,56 @@
1
+ module TestServer
2
+ module Actions
3
+ class InitializeApplication
4
+
5
+ private
6
+
7
+ attr_reader :config, :options
8
+
9
+ public
10
+
11
+ def initialize(options = {}, config = TestServer.config)
12
+ @options = options
13
+ @config = config
14
+ end
15
+
16
+ def run
17
+ create_pid_directory if options[:create_pid_directory]
18
+ create_log_directory if options[:create_log_directory]
19
+ create_sass_cache if options[:create_sass_cache]
20
+ create_local_storage if options[:create_local_storage]
21
+ create_pre_receive_hook if options[:create_pre_receive_hook]
22
+ create_config_file if options[:create_config_file]
23
+ pre_seed if options[:pre_seed]
24
+
25
+ show_example_config
26
+ end
27
+
28
+ private
29
+
30
+ def create_pid_directory
31
+ TestServer.ui_logger.info "Creating pid directory: #{::File.dirname(config.pid_file)}"
32
+ Actions::CreateDirectory.new(::File.dirname(config.pid_file), force: options[:force]).run
33
+ end
34
+
35
+ def create_log_directory
36
+ TestServer.ui_logger.info "Creating log directory: #{::File.dirname(config.access_log)}"
37
+ Actions::CreateDirectory.new(::File.dirname(config.access_log), force: options[:force]).run
38
+ end
39
+
40
+ def create_sass_cache
41
+ TestServer.ui_logger.info "Creating sass cache #{config.sass_cache}"
42
+ Actions::CreateDirectory.new(config.sass_cache, force: options[:force]).run
43
+ end
44
+
45
+ def create_config_file
46
+ TestServer.ui_logger.info "Creating config file at \"#{config.config_file}\"."
47
+ Actions::CreateFile.new(:'example-config', config.config_file, TestServer::Data.new(config), force: options[:force], create_directories: true).run
48
+ end
49
+
50
+ def show_example_config
51
+ TestServer.ui_logger.info "Showing the configuration of local_pac on your system."
52
+ Actions::CreateOutput.new(:'example-config', $stdout, Data.new(config)).run
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+ module TestServer
3
+ module Actions
4
+ class ReloadConfiguration
5
+
6
+ private
7
+
8
+ attr_reader :config
9
+
10
+ public
11
+
12
+ def initialize(config = Config.new)
13
+ @config = config
14
+ end
15
+
16
+ def run
17
+ TestServer.config = config
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,32 @@
1
+ # encoding: utf-8
2
+ module TestServer
3
+ module Actions
4
+ class SendSignal
5
+ private
6
+
7
+ attr_reader :signal, :pid_file, :signalizer
8
+
9
+ public
10
+
11
+ def initialize(signal, pid_file = TestServer.config.pid_file, signalizer = Process)
12
+ @signal = signal
13
+ @pid_file = pid_file
14
+ @signalizer = signalizer
15
+ end
16
+
17
+ def run
18
+ signalizer.kill signal, pid
19
+ rescue Exceptions::PidFileDoesNotExist
20
+ TestServer.ui_logger.error "Pid-file \"#{pid_file}\" does not exist. I'm not able to send daemon signal \"#{signal}\"."
21
+ end
22
+
23
+ private
24
+
25
+ def pid
26
+ ::File.read(pid_file).to_i
27
+ rescue Errno::ENOENT => e
28
+ raise Exceptions::PidFileDoesNotExist, e.message
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,12 @@
1
+ # encoding: utf-8
2
+ module TestServer
3
+ module Cli
4
+ module Helper
5
+ def pid(config = TestServer.config)
6
+ ::File.read(config.pid_file).chomp
7
+ rescue Errno::ENOENT
8
+ 'Stale PID-file'
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,105 @@
1
+ # encoding: utf-8
2
+ module TestServer
3
+ module Cli
4
+ class Main < Thor
5
+ class_option :config_file, type: :string, desc: 'Config file'
6
+ class_option :log_level, default: 'info', type: :string, desc: 'Log level for ui logging'
7
+ class_option :debug_mode, type: :boolean, desc: 'Run application in debug mode'
8
+
9
+ desc 'serve', 'Serve pacfiles'
10
+ option :access_log, type: :string, desc: 'File to write access log to'
11
+ option :listen, type: :string, desc: 'Listen for requests'
12
+ option :environment, type: :string, desc: 'Rack environment for application'
13
+ option :worker_count, type: :numeric, desc: 'Count of workers'
14
+ option :with, type: :string, default: 'puma', desc: 'Server used to serve proxy pac'
15
+ def serve
16
+ TestServer.config = TestServer::Config.new(options[:config_file]) if options[:config_file]
17
+ TestServer.config.access_log = options[:access_log] if options[:access_log]
18
+ TestServer.config.log_level = options[:log_level] if options[:log_level]
19
+ TestServer.config.debug_mode = options[:debug_mode] if options[:debug_mode]
20
+ TestServer.config.environment = options[:environment] if options[:environment]
21
+ TestServer.config.worker_count = options[:worker_count] if options[:worker_count]
22
+ TestServer.config.listen = options[:listen] if options[:listen]
23
+ TestServer.config.lock
24
+
25
+ TestServer.ui_logger.level = TestServer.config.log_level
26
+ TestServer.enable_debug_mode if TestServer.config.debug_mode
27
+
28
+ TestServer.ui_logger.debug('Options: ' + options.to_s)
29
+ TestServer.ui_logger.debug("Config:\n" + TestServer.config.to_s)
30
+
31
+ command_klass = case options[:with].to_sym
32
+ when :puma
33
+ ServerCommands::Puma
34
+ when :rackup
35
+ ServerCommands::Rackup
36
+ else
37
+ ServerCommands::Rackup
38
+ end
39
+
40
+ command = command_klass.new(
41
+ listen: TestServer.config.listen,
42
+ environment: TestServer.config.environment,
43
+ worker_count: TestServer.config.worker_count,
44
+ )
45
+
46
+ ENV['DEBUG'] = TestServer.config.debug_mode.to_s if TestServer.config.debug_mode
47
+ ENV['ACCESS_LOG'] = TestServer.config.access_log.to_s if TestServer.config.access_log
48
+ ENV['LOG_LEVEL'] = TestServer.config.log_level.to_s if TestServer.config.log_level
49
+
50
+ Server.new(command).start
51
+ end
52
+
53
+ desc 'init', 'Create files/directories to use local_pac in dir or $PWD'
54
+ option :force, type: :boolean, default: false, desc: 'Overwrite existing files?'
55
+ option :pre_seed, type: :boolean, default: false, desc: 'Add some example files to git repository'
56
+ option :config_file, type: :string, desc: 'Path to config file'
57
+
58
+ option :pid_file, type: :string, desc: 'Path to pid file'
59
+ option :access_log, type: :string, desc: 'Path to access log'
60
+ option :sass_cache, type: :string, desc: 'Path to sass cache'
61
+ option :reload_config_signal, type: :string, desc: 'Signal to reload config'
62
+ option :listen, type: :string, desc: 'Listen statement for rack server'
63
+ option :environment, type: :string, desc: 'Default environment for rack server'
64
+
65
+ option :create_pid_directory, type: :boolean, desc: 'Create pid directory', default: true
66
+ option :create_log_directory, type: :boolean, desc: 'Create log directory', default: true
67
+ option :create_sass_cache, type: :boolean, desc: 'Create sass cache directory', default: true
68
+ option :create_config_file, type: :boolean, desc: 'Create config_directory', default: true
69
+ def init
70
+ TestServer.config = TestServer::Config.new(options[:config_file]) if options[:config_file]
71
+
72
+ TestServer.config.log_level = options[:log_level] if options[:log_level]
73
+ TestServer.config.debug_mode = options[:debug_mode] if options[:debug_mode]
74
+ TestServer.config.pid_file = options[:pid_file] if options[:pid_file]
75
+ TestServer.config.access_log = options[:access_log] if options[:access_log]
76
+ TestServer.config.sass_cache = options[:sass_cache] if options[:sass_cache]
77
+ TestServer.config.reload_config_signal = options[:reload_config_signal] if options[:reload_config_signal]
78
+ TestServer.config.log_level = options[:log_level] if options[:log_level]
79
+ TestServer.config.listen = options[:listen] if options[:listen]
80
+ TestServer.config.environment = options[:environment] if options[:environment]
81
+
82
+ TestServer.config.lock
83
+
84
+ TestServer.ui_logger.level = TestServer.config.log_level
85
+ TestServer.enable_debug_mode if TestServer.config.debug_mode
86
+
87
+ TestServer.ui_logger.debug('Options: ' + options.to_s)
88
+ TestServer.ui_logger.debug("Config:\n" + TestServer.config.to_s)
89
+
90
+ Actions::InitializeApplication.new(
91
+ force: options[:force],
92
+ pre_seed: options[:pre_seed],
93
+ create_pid_directory: options[:create_pid_directory],
94
+ create_log_directory: options[:create_log_directory],
95
+ create_sass_cache: options[:create_sass_cache],
96
+ create_config_file: options[:create_config_file],
97
+ ).run
98
+ end
99
+
100
+ desc 'reload', 'Reload configuration, local storage etc.'
101
+ option :pid_file, type: :string, desc: 'Pid file of daemon'
102
+ subcommand 'reload', TestServer::Cli::Reload
103
+ end
104
+ end
105
+ end