test_server 0.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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