local_pac 0.6.3 → 0.7.0

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 (587) hide show
  1. data/.bowerrc +4 -0
  2. data/.gitignore +1 -0
  3. data/Gemfile.lock +32 -30
  4. data/app/assets/javascripts/application.js +21 -5
  5. data/app/assets/stylesheets/application.css.scss +111 -10
  6. data/app/assets/stylesheets/buttons.scss +81 -0
  7. data/app/controllers/application_controller.rb +51 -15
  8. data/app/controllers/assets_controller.rb +2 -1
  9. data/app/controllers/git_hook_controller.rb +29 -39
  10. data/app/controllers/lookup_controller.rb +41 -6
  11. data/app/locales/en.yml +30 -5
  12. data/app/views/application.haml +12 -1
  13. data/app/views/form.haml +23 -5
  14. data/bin/local_pac +0 -1
  15. data/bower.json +9 -0
  16. data/lib/local_pac/actions/create_file.rb +1 -1
  17. data/lib/local_pac/actions/create_output.rb +1 -1
  18. data/lib/local_pac/actions/handle_error.rb +12 -1
  19. data/lib/local_pac/config.rb +1 -1
  20. data/lib/local_pac/error_handler.rb +54 -7
  21. data/lib/local_pac/error_messages.rb +132 -0
  22. data/lib/local_pac/exceptions.rb +33 -12
  23. data/lib/local_pac/main.rb +11 -0
  24. data/lib/local_pac/pac_file_validator.rb +10 -1
  25. data/lib/local_pac/proxy_pac/pac_engine.rb +9 -6
  26. data/lib/local_pac/proxy_pac/pac_parser.rb +3 -1
  27. data/lib/local_pac/version.rb +1 -1
  28. data/lib/local_pac.rb +4 -2
  29. data/local_pac.gemspec +8 -8
  30. data/script/acceptance_test +0 -0
  31. data/script/bootstrap +59 -1
  32. data/spec/actions/handle_error_spec.rb +45 -0
  33. data/spec/error_handler_spec.rb +89 -8
  34. data/spec/features/check_git_push_spec.rb +2 -2
  35. data/spec/features/lookup_proxy_spec.rb +63 -1
  36. data/spec/pac_file_validator_spec.rb +1 -1
  37. data/spec/proxy_pac/pac_engine_spec.rb +20 -0
  38. data/spec/proxy_pac/pac_parser_spec.rb +1 -1
  39. data/spec/support/helper_features.rb +12 -4
  40. data/spec/support/reporting.rb +5 -1
  41. data/spec/support/rspec.rb +0 -3
  42. data/vendor/assets/components/.keep +0 -0
  43. data/vendor/assets/components/bootstrap/Gruntfile.js +421 -0
  44. data/vendor/assets/components/bootstrap/LICENSE +21 -0
  45. data/vendor/assets/components/bootstrap/README.md +173 -0
  46. data/vendor/assets/components/bootstrap/bower.json +24 -0
  47. data/vendor/assets/components/bootstrap/dist/css/bootstrap-theme.css +347 -0
  48. data/vendor/assets/components/bootstrap/dist/css/bootstrap-theme.css.map +1 -0
  49. data/vendor/assets/components/bootstrap/dist/css/bootstrap-theme.min.css +7 -0
  50. data/vendor/assets/components/bootstrap/dist/css/bootstrap.css +5785 -0
  51. data/vendor/assets/components/bootstrap/dist/css/bootstrap.css.map +1 -0
  52. data/vendor/assets/components/bootstrap/dist/css/bootstrap.min.css +7 -0
  53. data/vendor/assets/components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot +0 -0
  54. data/vendor/assets/components/bootstrap/dist/fonts/glyphicons-halflings-regular.svg +229 -0
  55. data/vendor/assets/components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
  56. data/vendor/assets/components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff +0 -0
  57. data/vendor/assets/components/bootstrap/dist/js/bootstrap.js +1951 -0
  58. data/vendor/assets/components/bootstrap/dist/js/bootstrap.min.js +6 -0
  59. data/vendor/assets/components/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
  60. data/vendor/assets/components/bootstrap/fonts/glyphicons-halflings-regular.svg +229 -0
  61. data/vendor/assets/components/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
  62. data/vendor/assets/components/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
  63. data/vendor/assets/components/bootstrap/grunt/bs-glyphicons-data-generator.js +34 -0
  64. data/vendor/assets/components/bootstrap/grunt/bs-lessdoc-parser.js +236 -0
  65. data/vendor/assets/components/bootstrap/grunt/bs-raw-files-generator.js +31 -0
  66. data/vendor/assets/components/bootstrap/grunt/shrinkwrap.js +28 -0
  67. data/vendor/assets/components/bootstrap/js/affix.js +137 -0
  68. data/vendor/assets/components/bootstrap/js/alert.js +88 -0
  69. data/vendor/assets/components/bootstrap/js/button.js +107 -0
  70. data/vendor/assets/components/bootstrap/js/carousel.js +205 -0
  71. data/vendor/assets/components/bootstrap/js/collapse.js +170 -0
  72. data/vendor/assets/components/bootstrap/js/dropdown.js +147 -0
  73. data/vendor/assets/components/bootstrap/js/modal.js +243 -0
  74. data/vendor/assets/components/bootstrap/js/popover.js +110 -0
  75. data/vendor/assets/components/bootstrap/js/scrollspy.js +153 -0
  76. data/vendor/assets/components/bootstrap/js/tab.js +125 -0
  77. data/vendor/assets/components/bootstrap/js/tooltip.js +399 -0
  78. data/vendor/assets/components/bootstrap/js/transition.js +48 -0
  79. data/vendor/assets/components/bootstrap/less/alerts.less +67 -0
  80. data/vendor/assets/components/bootstrap/less/badges.less +55 -0
  81. data/vendor/assets/components/bootstrap/less/bootstrap.less +49 -0
  82. data/vendor/assets/components/bootstrap/less/breadcrumbs.less +26 -0
  83. data/vendor/assets/components/bootstrap/less/button-groups.less +226 -0
  84. data/vendor/assets/components/bootstrap/less/buttons.less +159 -0
  85. data/vendor/assets/components/bootstrap/less/carousel.less +232 -0
  86. data/vendor/assets/components/bootstrap/less/close.less +33 -0
  87. data/vendor/assets/components/bootstrap/less/code.less +63 -0
  88. data/vendor/assets/components/bootstrap/less/component-animations.less +29 -0
  89. data/vendor/assets/components/bootstrap/less/dropdowns.less +213 -0
  90. data/vendor/assets/components/bootstrap/less/forms.less +438 -0
  91. data/vendor/assets/components/bootstrap/less/glyphicons.less +233 -0
  92. data/vendor/assets/components/bootstrap/less/grid.less +84 -0
  93. data/vendor/assets/components/bootstrap/less/input-groups.less +162 -0
  94. data/vendor/assets/components/bootstrap/less/jumbotron.less +44 -0
  95. data/vendor/assets/components/bootstrap/less/labels.less +64 -0
  96. data/vendor/assets/components/bootstrap/less/list-group.less +110 -0
  97. data/vendor/assets/components/bootstrap/less/media.less +56 -0
  98. data/vendor/assets/components/bootstrap/less/mixins.less +929 -0
  99. data/vendor/assets/components/bootstrap/less/modals.less +139 -0
  100. data/vendor/assets/components/bootstrap/less/navbar.less +616 -0
  101. data/vendor/assets/components/bootstrap/less/navs.less +242 -0
  102. data/vendor/assets/components/bootstrap/less/normalize.less +423 -0
  103. data/vendor/assets/components/bootstrap/less/pager.less +55 -0
  104. data/vendor/assets/components/bootstrap/less/pagination.less +88 -0
  105. data/vendor/assets/components/bootstrap/less/panels.less +241 -0
  106. data/vendor/assets/components/bootstrap/less/popovers.less +133 -0
  107. data/vendor/assets/components/bootstrap/less/print.less +101 -0
  108. data/vendor/assets/components/bootstrap/less/progress-bars.less +80 -0
  109. data/vendor/assets/components/bootstrap/less/responsive-utilities.less +92 -0
  110. data/vendor/assets/components/bootstrap/less/scaffolding.less +134 -0
  111. data/vendor/assets/components/bootstrap/less/tables.less +233 -0
  112. data/vendor/assets/components/bootstrap/less/theme.less +247 -0
  113. data/vendor/assets/components/bootstrap/less/thumbnails.less +36 -0
  114. data/vendor/assets/components/bootstrap/less/tooltip.less +95 -0
  115. data/vendor/assets/components/bootstrap/less/type.less +293 -0
  116. data/vendor/assets/components/bootstrap/less/utilities.less +56 -0
  117. data/vendor/assets/components/bootstrap/less/variables.less +829 -0
  118. data/vendor/assets/components/bootstrap/less/wells.less +29 -0
  119. data/vendor/assets/components/bootstrap/package.json +70 -0
  120. data/vendor/assets/components/bootstrap/test-infra/README.md +100 -0
  121. data/vendor/assets/components/bootstrap/test-infra/npm-shrinkwrap.canonical.json +1 -0
  122. data/vendor/assets/components/bootstrap/test-infra/requirements.txt +1 -0
  123. data/vendor/assets/components/bootstrap/test-infra/s3_cache.py +107 -0
  124. data/vendor/assets/components/bootstrap/test-infra/sauce_browsers.yml +83 -0
  125. data/vendor/assets/components/bootstrap/test-infra/uncached-npm-install.sh +4 -0
  126. data/vendor/assets/components/bootstrap-sass/CNAME +1 -0
  127. data/vendor/assets/components/bootstrap-sass/CONTRIBUTING.md +61 -0
  128. data/vendor/assets/components/bootstrap-sass/DOCS-LICENSE +319 -0
  129. data/vendor/assets/components/bootstrap-sass/Gemfile +5 -0
  130. data/vendor/assets/components/bootstrap-sass/Gemfile.lock +14 -0
  131. data/vendor/assets/components/bootstrap-sass/Gruntfile.js +244 -0
  132. data/vendor/assets/components/bootstrap-sass/LICENSE +176 -0
  133. data/vendor/assets/components/bootstrap-sass/LICENSE-MIT +21 -0
  134. data/vendor/assets/components/bootstrap-sass/README.md +277 -0
  135. data/vendor/assets/components/bootstrap-sass/Rakefile +44 -0
  136. data/vendor/assets/components/bootstrap-sass/_config.yml +25 -0
  137. data/vendor/assets/components/bootstrap-sass/_includes/ads.html +1 -0
  138. data/vendor/assets/components/bootstrap-sass/_includes/footer.html +34 -0
  139. data/vendor/assets/components/bootstrap-sass/_includes/header.html +42 -0
  140. data/vendor/assets/components/bootstrap-sass/_includes/nav-about.html +12 -0
  141. data/vendor/assets/components/bootstrap-sass/_includes/nav-components.html +137 -0
  142. data/vendor/assets/components/bootstrap-sass/_includes/nav-css.html +99 -0
  143. data/vendor/assets/components/bootstrap-sass/_includes/nav-customize.html +40 -0
  144. data/vendor/assets/components/bootstrap-sass/_includes/nav-getting-started.html +44 -0
  145. data/vendor/assets/components/bootstrap-sass/_includes/nav-javascript.html +88 -0
  146. data/vendor/assets/components/bootstrap-sass/_includes/nav-main.html +37 -0
  147. data/vendor/assets/components/bootstrap-sass/_includes/old-bs-docs.html +8 -0
  148. data/vendor/assets/components/bootstrap-sass/_includes/social-buttons.html +16 -0
  149. data/vendor/assets/components/bootstrap-sass/_layouts/default.html +79 -0
  150. data/vendor/assets/components/bootstrap-sass/_layouts/home.html +47 -0
  151. data/vendor/assets/components/bootstrap-sass/about.html +93 -0
  152. data/vendor/assets/components/bootstrap-sass/bower.json +11 -0
  153. data/vendor/assets/components/bootstrap-sass/browserstack.json +37 -0
  154. data/vendor/assets/components/bootstrap-sass/components.html +3689 -0
  155. data/vendor/assets/components/bootstrap-sass/composer.json +28 -0
  156. data/vendor/assets/components/bootstrap-sass/css.html +2674 -0
  157. data/vendor/assets/components/bootstrap-sass/customize.html +1715 -0
  158. data/vendor/assets/components/bootstrap-sass/dist/css/bootstrap-theme.css +427 -0
  159. data/vendor/assets/components/bootstrap-sass/dist/css/bootstrap-theme.min.css +1 -0
  160. data/vendor/assets/components/bootstrap-sass/dist/css/bootstrap.css +6350 -0
  161. data/vendor/assets/components/bootstrap-sass/dist/css/bootstrap.min.css +1 -0
  162. data/vendor/assets/components/bootstrap-sass/dist/fonts/glyphicons-halflings-regular.eot +0 -0
  163. data/vendor/assets/components/bootstrap-sass/dist/fonts/glyphicons-halflings-regular.svg +229 -0
  164. data/vendor/assets/components/bootstrap-sass/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
  165. data/vendor/assets/components/bootstrap-sass/dist/fonts/glyphicons-halflings-regular.woff +0 -0
  166. data/vendor/assets/components/bootstrap-sass/dist/js/bootstrap.js +2002 -0
  167. data/vendor/assets/components/bootstrap-sass/dist/js/bootstrap.min.js +9 -0
  168. data/vendor/assets/components/bootstrap-sass/docs-assets/css/docs.css +1195 -0
  169. data/vendor/assets/components/bootstrap-sass/docs-assets/css/pygments-manni.css +66 -0
  170. data/vendor/assets/components/bootstrap-sass/docs-assets/ico/apple-touch-icon-144-precomposed.png +0 -0
  171. data/vendor/assets/components/bootstrap-sass/docs-assets/ico/favicon.png +0 -0
  172. data/vendor/assets/components/bootstrap-sass/docs-assets/js/application.js +103 -0
  173. data/vendor/assets/components/bootstrap-sass/docs-assets/js/customizer.js +332 -0
  174. data/vendor/assets/components/bootstrap-sass/docs-assets/js/filesaver.js +169 -0
  175. data/vendor/assets/components/bootstrap-sass/docs-assets/js/holder.js +404 -0
  176. data/vendor/assets/components/bootstrap-sass/docs-assets/js/ie8-responsive-file-warning.js +12 -0
  177. data/vendor/assets/components/bootstrap-sass/docs-assets/js/jszip.js +1467 -0
  178. data/vendor/assets/components/bootstrap-sass/docs-assets/js/less.js +9 -0
  179. data/vendor/assets/components/bootstrap-sass/docs-assets/js/raw-files.js +3 -0
  180. data/vendor/assets/components/bootstrap-sass/docs-assets/js/uglify.js +14 -0
  181. data/vendor/assets/components/bootstrap-sass/examples/carousel/carousel.css +148 -0
  182. data/vendor/assets/components/bootstrap-sass/examples/carousel/index.html +206 -0
  183. data/vendor/assets/components/bootstrap-sass/examples/grid/grid.css +28 -0
  184. data/vendor/assets/components/bootstrap-sass/examples/grid/index.html +148 -0
  185. data/vendor/assets/components/bootstrap-sass/examples/jumbotron/index.html +99 -0
  186. data/vendor/assets/components/bootstrap-sass/examples/jumbotron/jumbotron.css +5 -0
  187. data/vendor/assets/components/bootstrap-sass/examples/jumbotron-narrow/index.html +82 -0
  188. data/vendor/assets/components/bootstrap-sass/examples/jumbotron-narrow/jumbotron-narrow.css +79 -0
  189. data/vendor/assets/components/bootstrap-sass/examples/justified-nav/index.html +83 -0
  190. data/vendor/assets/components/bootstrap-sass/examples/justified-nav/justified-nav.css +88 -0
  191. data/vendor/assets/components/bootstrap-sass/examples/navbar/index.html +88 -0
  192. data/vendor/assets/components/bootstrap-sass/examples/navbar/navbar.css +8 -0
  193. data/vendor/assets/components/bootstrap-sass/examples/navbar-fixed-top/index.html +91 -0
  194. data/vendor/assets/components/bootstrap-sass/examples/navbar-fixed-top/navbar-fixed-top.css +4 -0
  195. data/vendor/assets/components/bootstrap-sass/examples/navbar-static-top/index.html +92 -0
  196. data/vendor/assets/components/bootstrap-sass/examples/navbar-static-top/navbar-static-top.css +7 -0
  197. data/vendor/assets/components/bootstrap-sass/examples/non-responsive/index.html +101 -0
  198. data/vendor/assets/components/bootstrap-sass/examples/non-responsive/non-responsive.css +116 -0
  199. data/vendor/assets/components/bootstrap-sass/examples/offcanvas/index.html +130 -0
  200. data/vendor/assets/components/bootstrap-sass/examples/offcanvas/offcanvas.css +50 -0
  201. data/vendor/assets/components/bootstrap-sass/examples/offcanvas/offcanvas.js +5 -0
  202. data/vendor/assets/components/bootstrap-sass/examples/screenshots/carousel.jpg +0 -0
  203. data/vendor/assets/components/bootstrap-sass/examples/screenshots/grid.jpg +0 -0
  204. data/vendor/assets/components/bootstrap-sass/examples/screenshots/jumbotron-narrow.jpg +0 -0
  205. data/vendor/assets/components/bootstrap-sass/examples/screenshots/jumbotron.jpg +0 -0
  206. data/vendor/assets/components/bootstrap-sass/examples/screenshots/justified-nav.jpg +0 -0
  207. data/vendor/assets/components/bootstrap-sass/examples/screenshots/navbar-fixed.jpg +0 -0
  208. data/vendor/assets/components/bootstrap-sass/examples/screenshots/navbar-static.jpg +0 -0
  209. data/vendor/assets/components/bootstrap-sass/examples/screenshots/navbar.jpg +0 -0
  210. data/vendor/assets/components/bootstrap-sass/examples/screenshots/non-responsive.jpg +0 -0
  211. data/vendor/assets/components/bootstrap-sass/examples/screenshots/offcanvas.jpg +0 -0
  212. data/vendor/assets/components/bootstrap-sass/examples/screenshots/sign-in.jpg +0 -0
  213. data/vendor/assets/components/bootstrap-sass/examples/screenshots/starter-template.jpg +0 -0
  214. data/vendor/assets/components/bootstrap-sass/examples/screenshots/sticky-footer-navbar.jpg +0 -0
  215. data/vendor/assets/components/bootstrap-sass/examples/screenshots/sticky-footer.jpg +0 -0
  216. data/vendor/assets/components/bootstrap-sass/examples/screenshots/theme.jpg +0 -0
  217. data/vendor/assets/components/bootstrap-sass/examples/signin/index.html +50 -0
  218. data/vendor/assets/components/bootstrap-sass/examples/signin/signin.css +40 -0
  219. data/vendor/assets/components/bootstrap-sass/examples/starter-template/index.html +68 -0
  220. data/vendor/assets/components/bootstrap-sass/examples/starter-template/starter-template.css +7 -0
  221. data/vendor/assets/components/bootstrap-sass/examples/sticky-footer/index.html +55 -0
  222. data/vendor/assets/components/bootstrap-sass/examples/sticky-footer/sticky-footer.css +38 -0
  223. data/vendor/assets/components/bootstrap-sass/examples/sticky-footer-navbar/index.html +91 -0
  224. data/vendor/assets/components/bootstrap-sass/examples/sticky-footer-navbar/sticky-footer-navbar.css +45 -0
  225. data/vendor/assets/components/bootstrap-sass/examples/theme/index.html +384 -0
  226. data/vendor/assets/components/bootstrap-sass/examples/theme/theme.css +14 -0
  227. data/vendor/assets/components/bootstrap-sass/fonts/glyphicons-halflings-regular.eot +0 -0
  228. data/vendor/assets/components/bootstrap-sass/fonts/glyphicons-halflings-regular.svg +229 -0
  229. data/vendor/assets/components/bootstrap-sass/fonts/glyphicons-halflings-regular.ttf +0 -0
  230. data/vendor/assets/components/bootstrap-sass/fonts/glyphicons-halflings-regular.woff +0 -0
  231. data/vendor/assets/components/bootstrap-sass/getting-started.html +1021 -0
  232. data/vendor/assets/components/bootstrap-sass/index.html +16 -0
  233. data/vendor/assets/components/bootstrap-sass/javascript.html +1983 -0
  234. data/vendor/assets/components/bootstrap-sass/js/affix.js +126 -0
  235. data/vendor/assets/components/bootstrap-sass/js/alert.js +98 -0
  236. data/vendor/assets/components/bootstrap-sass/js/button.js +109 -0
  237. data/vendor/assets/components/bootstrap-sass/js/carousel.js +217 -0
  238. data/vendor/assets/components/bootstrap-sass/js/collapse.js +179 -0
  239. data/vendor/assets/components/bootstrap-sass/js/dropdown.js +154 -0
  240. data/vendor/assets/components/bootstrap-sass/js/modal.js +246 -0
  241. data/vendor/assets/components/bootstrap-sass/js/popover.js +117 -0
  242. data/vendor/assets/components/bootstrap-sass/js/scrollspy.js +158 -0
  243. data/vendor/assets/components/bootstrap-sass/js/tab.js +135 -0
  244. data/vendor/assets/components/bootstrap-sass/js/tests/index.html +52 -0
  245. data/vendor/assets/components/bootstrap-sass/js/tests/unit/affix.js +25 -0
  246. data/vendor/assets/components/bootstrap-sass/js/tests/unit/alert.js +62 -0
  247. data/vendor/assets/components/bootstrap-sass/js/tests/unit/button.js +116 -0
  248. data/vendor/assets/components/bootstrap-sass/js/tests/unit/carousel.js +87 -0
  249. data/vendor/assets/components/bootstrap-sass/js/tests/unit/collapse.js +164 -0
  250. data/vendor/assets/components/bootstrap-sass/js/tests/unit/dropdown.js +219 -0
  251. data/vendor/assets/components/bootstrap-sass/js/tests/unit/modal.js +196 -0
  252. data/vendor/assets/components/bootstrap-sass/js/tests/unit/phantom.js +69 -0
  253. data/vendor/assets/components/bootstrap-sass/js/tests/unit/popover.js +133 -0
  254. data/vendor/assets/components/bootstrap-sass/js/tests/unit/scrollspy.js +37 -0
  255. data/vendor/assets/components/bootstrap-sass/js/tests/unit/tab.js +86 -0
  256. data/vendor/assets/components/bootstrap-sass/js/tests/unit/tooltip.js +437 -0
  257. data/vendor/assets/components/bootstrap-sass/js/tests/unit/transition.js +13 -0
  258. data/vendor/assets/components/bootstrap-sass/js/tests/vendor/jquery.js +6 -0
  259. data/vendor/assets/components/bootstrap-sass/js/tests/vendor/qunit.css +232 -0
  260. data/vendor/assets/components/bootstrap-sass/js/tests/vendor/qunit.js +1510 -0
  261. data/vendor/assets/components/bootstrap-sass/js/tooltip.js +386 -0
  262. data/vendor/assets/components/bootstrap-sass/js/transition.js +56 -0
  263. data/vendor/assets/components/bootstrap-sass/lib/_alerts.scss +67 -0
  264. data/vendor/assets/components/bootstrap-sass/lib/_badges.scss +51 -0
  265. data/vendor/assets/components/bootstrap-sass/lib/_breadcrumbs.scss +23 -0
  266. data/vendor/assets/components/bootstrap-sass/lib/_button-groups.scss +253 -0
  267. data/vendor/assets/components/bootstrap-sass/lib/_buttons.scss +158 -0
  268. data/vendor/assets/components/bootstrap-sass/lib/_carousel.scss +231 -0
  269. data/vendor/assets/components/bootstrap-sass/lib/_close.scss +35 -0
  270. data/vendor/assets/components/bootstrap-sass/lib/_code.scss +53 -0
  271. data/vendor/assets/components/bootstrap-sass/lib/_component-animations.scss +29 -0
  272. data/vendor/assets/components/bootstrap-sass/lib/_dropdowns.scss +193 -0
  273. data/vendor/assets/components/bootstrap-sass/lib/_forms.scss +363 -0
  274. data/vendor/assets/components/bootstrap-sass/lib/_glyphicons.scss +237 -0
  275. data/vendor/assets/components/bootstrap-sass/lib/_grid.scss +93 -0
  276. data/vendor/assets/components/bootstrap-sass/lib/_input-groups.scss +136 -0
  277. data/vendor/assets/components/bootstrap-sass/lib/_jumbotron.scss +40 -0
  278. data/vendor/assets/components/bootstrap-sass/lib/_labels.scss +58 -0
  279. data/vendor/assets/components/bootstrap-sass/lib/_list-group.scss +88 -0
  280. data/vendor/assets/components/bootstrap-sass/lib/_media.scss +56 -0
  281. data/vendor/assets/components/bootstrap-sass/lib/_mixins.scss +861 -0
  282. data/vendor/assets/components/bootstrap-sass/lib/_modals.scss +132 -0
  283. data/vendor/assets/components/bootstrap-sass/lib/_navbar.scss +628 -0
  284. data/vendor/assets/components/bootstrap-sass/lib/_navs.scss +262 -0
  285. data/vendor/assets/components/bootstrap-sass/lib/_normalize.scss +406 -0
  286. data/vendor/assets/components/bootstrap-sass/lib/_pager.scss +55 -0
  287. data/vendor/assets/components/bootstrap-sass/lib/_pagination.scss +85 -0
  288. data/vendor/assets/components/bootstrap-sass/lib/_panels.scss +172 -0
  289. data/vendor/assets/components/bootstrap-sass/lib/_popovers.scss +133 -0
  290. data/vendor/assets/components/bootstrap-sass/lib/_print.scss +105 -0
  291. data/vendor/assets/components/bootstrap-sass/lib/_progress-bars.scss +92 -0
  292. data/vendor/assets/components/bootstrap-sass/lib/_responsive-utilities.scss +198 -0
  293. data/vendor/assets/components/bootstrap-sass/lib/_scaffolding.scss +119 -0
  294. data/vendor/assets/components/bootstrap-sass/lib/_tables.scss +244 -0
  295. data/vendor/assets/components/bootstrap-sass/lib/_theme.scss +247 -0
  296. data/vendor/assets/components/bootstrap-sass/lib/_thumbnails.scss +32 -0
  297. data/vendor/assets/components/bootstrap-sass/lib/_tooltip.scss +95 -0
  298. data/vendor/assets/components/bootstrap-sass/lib/_type.scss +279 -0
  299. data/vendor/assets/components/bootstrap-sass/lib/_utilities.scss +56 -0
  300. data/vendor/assets/components/bootstrap-sass/lib/_variables.scss +637 -0
  301. data/vendor/assets/components/bootstrap-sass/lib/_wells.scss +29 -0
  302. data/vendor/assets/components/bootstrap-sass/lib/bootstrap.scss +49 -0
  303. data/vendor/assets/components/bootstrap-sass/package.json +40 -0
  304. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/CONTRIBUTING.md +12 -0
  305. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/LICENSE +201 -0
  306. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/Makefile +22 -0
  307. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/README.md +144 -0
  308. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/bower.json +35 -0
  309. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.css +174 -0
  310. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.min.css +8 -0
  311. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js +28 -0
  312. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/component.json +10 -0
  313. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/package.json +24 -0
  314. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/bootstrap-datetimepicker.js +1089 -0
  315. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.ar-ma.js +56 -0
  316. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.ar.js +56 -0
  317. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.bg.js +86 -0
  318. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.br.js +107 -0
  319. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.bs.js +139 -0
  320. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.ca.js +66 -0
  321. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.cs.js +155 -0
  322. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.cv.js +59 -0
  323. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.da.js +56 -0
  324. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.de.js +71 -0
  325. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.el.js +79 -0
  326. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.en-au.js +62 -0
  327. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.en-ca.js +59 -0
  328. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.en-gb.js +63 -0
  329. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.eo.js +65 -0
  330. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.es.js +66 -0
  331. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.et.js +60 -0
  332. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.eu.js +60 -0
  333. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.fa.js +97 -0
  334. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.fi.js +103 -0
  335. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.fr-ca.js +54 -0
  336. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.fr.js +58 -0
  337. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.gl.js +71 -0
  338. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.he.js +77 -0
  339. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.hi.js +105 -0
  340. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.hr.js +140 -0
  341. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.hu.js +98 -0
  342. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.id.js +67 -0
  343. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.is.js +124 -0
  344. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.it.js +59 -0
  345. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.ja.js +58 -0
  346. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.ka.js +108 -0
  347. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.ko.js +56 -0
  348. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.lt.js +118 -0
  349. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.lv.js +77 -0
  350. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.ml.js +64 -0
  351. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.mr.js +104 -0
  352. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.ms-my.js +66 -0
  353. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.nb.js +57 -0
  354. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.ne.js +105 -0
  355. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.nl.js +67 -0
  356. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.nn.js +56 -0
  357. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.pl.js +98 -0
  358. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.pt-BR.js +56 -0
  359. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.pt.js +60 -0
  360. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.ro.js +56 -0
  361. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.ru.js +163 -0
  362. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.sk.js +156 -0
  363. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.sl.js +144 -0
  364. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.sq.js +57 -0
  365. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.sv.js +63 -0
  366. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.th.js +58 -0
  367. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.tr.js +93 -0
  368. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.tzm-la.js +55 -0
  369. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.tzm.js +55 -0
  370. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.uk.js +157 -0
  371. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.uz.js +55 -0
  372. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.vn.js +62 -0
  373. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.zh-CN.js +108 -0
  374. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/js/locales/bootstrap-datetimepicker.zh-TW.js +84 -0
  375. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/less/bootstrap-datetimepicker-build.less +5 -0
  376. data/vendor/assets/components/eonasdan-bootstrap-datetimepicker/src/less/bootstrap-datetimepicker.less +246 -0
  377. data/vendor/assets/components/jquery/MIT-LICENSE.txt +21 -0
  378. data/vendor/assets/components/jquery/bower.json +27 -0
  379. data/vendor/assets/components/jquery/dist/jquery.js +9111 -0
  380. data/{app/assets/javascripts/jquery-min.js → vendor/assets/components/jquery/dist/jquery.min.js} +1 -0
  381. data/vendor/assets/components/jquery/dist/jquery.min.map +1 -0
  382. data/vendor/assets/components/jquery/src/ajax/jsonp.js +89 -0
  383. data/vendor/assets/components/jquery/src/ajax/load.js +75 -0
  384. data/vendor/assets/components/jquery/src/ajax/parseJSON.js +13 -0
  385. data/vendor/assets/components/jquery/src/ajax/parseXML.js +28 -0
  386. data/vendor/assets/components/jquery/src/ajax/script.js +64 -0
  387. data/vendor/assets/components/jquery/src/ajax/var/nonce.js +5 -0
  388. data/vendor/assets/components/jquery/src/ajax/var/rquery.js +3 -0
  389. data/vendor/assets/components/jquery/src/ajax/xhr.js +130 -0
  390. data/vendor/assets/components/jquery/src/ajax.js +806 -0
  391. data/vendor/assets/components/jquery/src/attributes/attr.js +143 -0
  392. data/vendor/assets/components/jquery/src/attributes/classes.js +158 -0
  393. data/vendor/assets/components/jquery/src/attributes/prop.js +96 -0
  394. data/vendor/assets/components/jquery/src/attributes/support.js +35 -0
  395. data/vendor/assets/components/jquery/src/attributes/val.js +153 -0
  396. data/vendor/assets/components/jquery/src/attributes.js +11 -0
  397. data/vendor/assets/components/jquery/src/callbacks.js +205 -0
  398. data/vendor/assets/components/jquery/src/core/access.js +60 -0
  399. data/vendor/assets/components/jquery/src/core/init.js +123 -0
  400. data/vendor/assets/components/jquery/src/core/parseHTML.js +39 -0
  401. data/vendor/assets/components/jquery/src/core/ready.js +96 -0
  402. data/vendor/assets/components/jquery/src/core/var/rsingleTag.js +4 -0
  403. data/vendor/assets/components/jquery/src/core.js +500 -0
  404. data/vendor/assets/components/jquery/src/css/addGetHookIf.js +24 -0
  405. data/vendor/assets/components/jquery/src/css/curCSS.js +57 -0
  406. data/vendor/assets/components/jquery/src/css/defaultDisplay.js +69 -0
  407. data/vendor/assets/components/jquery/src/css/hiddenVisibleSelectors.js +15 -0
  408. data/vendor/assets/components/jquery/src/css/support.js +83 -0
  409. data/vendor/assets/components/jquery/src/css/swap.js +28 -0
  410. data/vendor/assets/components/jquery/src/css/var/cssExpand.js +3 -0
  411. data/vendor/assets/components/jquery/src/css/var/getStyles.js +5 -0
  412. data/vendor/assets/components/jquery/src/css/var/isHidden.js +13 -0
  413. data/vendor/assets/components/jquery/src/css/var/rmargin.js +3 -0
  414. data/vendor/assets/components/jquery/src/css/var/rnumnonpx.js +5 -0
  415. data/vendor/assets/components/jquery/src/css.js +455 -0
  416. data/vendor/assets/components/jquery/src/data/Data.js +181 -0
  417. data/vendor/assets/components/jquery/src/data/accepts.js +20 -0
  418. data/vendor/assets/components/jquery/src/data/var/data_priv.js +5 -0
  419. data/vendor/assets/components/jquery/src/data/var/data_user.js +5 -0
  420. data/vendor/assets/components/jquery/src/data.js +175 -0
  421. data/vendor/assets/components/jquery/src/deferred.js +149 -0
  422. data/vendor/assets/components/jquery/src/deprecated.js +13 -0
  423. data/vendor/assets/components/jquery/src/dimensions.js +50 -0
  424. data/vendor/assets/components/jquery/src/effects/Tween.js +114 -0
  425. data/vendor/assets/components/jquery/src/effects/animatedSelector.js +13 -0
  426. data/vendor/assets/components/jquery/src/effects.js +642 -0
  427. data/vendor/assets/components/jquery/src/event/alias.js +39 -0
  428. data/vendor/assets/components/jquery/src/event/support.js +9 -0
  429. data/vendor/assets/components/jquery/src/event.js +859 -0
  430. data/vendor/assets/components/jquery/src/exports/amd.js +18 -0
  431. data/vendor/assets/components/jquery/src/exports/global.js +32 -0
  432. data/vendor/assets/components/jquery/src/intro.js +44 -0
  433. data/vendor/assets/components/jquery/src/jquery.js +36 -0
  434. data/vendor/assets/components/jquery/src/manipulation/_evalUrl.js +18 -0
  435. data/vendor/assets/components/jquery/src/manipulation/support.js +24 -0
  436. data/vendor/assets/components/jquery/src/manipulation/var/rcheckableType.js +3 -0
  437. data/vendor/assets/components/jquery/src/manipulation.js +583 -0
  438. data/vendor/assets/components/jquery/src/offset.js +204 -0
  439. data/vendor/assets/components/jquery/src/outro.js +1 -0
  440. data/vendor/assets/components/jquery/src/queue/delay.js +22 -0
  441. data/vendor/assets/components/jquery/src/queue.js +142 -0
  442. data/vendor/assets/components/jquery/src/selector-native.js +171 -0
  443. data/vendor/assets/components/jquery/src/selector-sizzle.js +14 -0
  444. data/vendor/assets/components/jquery/src/selector.js +1 -0
  445. data/vendor/assets/components/jquery/src/serialize.js +111 -0
  446. data/vendor/assets/components/jquery/src/sizzle/dist/sizzle.js +2015 -0
  447. data/vendor/assets/components/jquery/src/sizzle/dist/sizzle.min.js +3 -0
  448. data/vendor/assets/components/jquery/src/sizzle/dist/sizzle.min.map +1 -0
  449. data/vendor/assets/components/jquery/src/traversing/findFilter.js +100 -0
  450. data/vendor/assets/components/jquery/src/traversing/var/rneedsContext.js +6 -0
  451. data/vendor/assets/components/jquery/src/traversing.js +200 -0
  452. data/vendor/assets/components/jquery/src/var/arr.js +3 -0
  453. data/vendor/assets/components/jquery/src/var/class2type.js +4 -0
  454. data/vendor/assets/components/jquery/src/var/concat.js +5 -0
  455. data/vendor/assets/components/jquery/src/var/hasOwn.js +5 -0
  456. data/vendor/assets/components/jquery/src/var/indexOf.js +5 -0
  457. data/vendor/assets/components/jquery/src/var/pnum.js +3 -0
  458. data/vendor/assets/components/jquery/src/var/push.js +5 -0
  459. data/vendor/assets/components/jquery/src/var/rnotwhite.js +3 -0
  460. data/vendor/assets/components/jquery/src/var/slice.js +5 -0
  461. data/vendor/assets/components/jquery/src/var/strundefined.js +3 -0
  462. data/vendor/assets/components/jquery/src/var/support.js +4 -0
  463. data/vendor/assets/components/jquery/src/var/toString.js +5 -0
  464. data/vendor/assets/components/jquery/src/var/trim.js +3 -0
  465. data/vendor/assets/components/jquery/src/wrap.js +78 -0
  466. data/vendor/assets/components/moment/LICENSE +22 -0
  467. data/vendor/assets/components/moment/bower.json +20 -0
  468. data/vendor/assets/components/moment/lang/ar-ma.js +56 -0
  469. data/vendor/assets/components/moment/lang/ar.js +56 -0
  470. data/vendor/assets/components/moment/lang/bg.js +86 -0
  471. data/vendor/assets/components/moment/lang/br.js +107 -0
  472. data/vendor/assets/components/moment/lang/bs.js +139 -0
  473. data/vendor/assets/components/moment/lang/ca.js +66 -0
  474. data/vendor/assets/components/moment/lang/cs.js +155 -0
  475. data/vendor/assets/components/moment/lang/cv.js +59 -0
  476. data/vendor/assets/components/moment/lang/cy.js +77 -0
  477. data/vendor/assets/components/moment/lang/da.js +56 -0
  478. data/vendor/assets/components/moment/lang/de.js +71 -0
  479. data/vendor/assets/components/moment/lang/el.js +79 -0
  480. data/vendor/assets/components/moment/lang/en-au.js +62 -0
  481. data/vendor/assets/components/moment/lang/en-ca.js +59 -0
  482. data/vendor/assets/components/moment/lang/en-gb.js +63 -0
  483. data/vendor/assets/components/moment/lang/eo.js +65 -0
  484. data/vendor/assets/components/moment/lang/es.js +66 -0
  485. data/vendor/assets/components/moment/lang/et.js +76 -0
  486. data/vendor/assets/components/moment/lang/eu.js +60 -0
  487. data/vendor/assets/components/moment/lang/fa.js +97 -0
  488. data/vendor/assets/components/moment/lang/fi.js +103 -0
  489. data/vendor/assets/components/moment/lang/fo.js +56 -0
  490. data/vendor/assets/components/moment/lang/fr-ca.js +54 -0
  491. data/vendor/assets/components/moment/lang/fr.js +58 -0
  492. data/vendor/assets/components/moment/lang/gl.js +71 -0
  493. data/vendor/assets/components/moment/lang/he.js +77 -0
  494. data/vendor/assets/components/moment/lang/hi.js +105 -0
  495. data/vendor/assets/components/moment/lang/hr.js +140 -0
  496. data/vendor/assets/components/moment/lang/hu.js +98 -0
  497. data/vendor/assets/components/moment/lang/hy-am.js +113 -0
  498. data/vendor/assets/components/moment/lang/id.js +67 -0
  499. data/vendor/assets/components/moment/lang/is.js +124 -0
  500. data/vendor/assets/components/moment/lang/it.js +59 -0
  501. data/vendor/assets/components/moment/lang/ja.js +58 -0
  502. data/vendor/assets/components/moment/lang/ka.js +108 -0
  503. data/vendor/assets/components/moment/lang/ko.js +63 -0
  504. data/vendor/assets/components/moment/lang/lb.js +160 -0
  505. data/vendor/assets/components/moment/lang/lt.js +118 -0
  506. data/vendor/assets/components/moment/lang/lv.js +77 -0
  507. data/vendor/assets/components/moment/lang/mk.js +86 -0
  508. data/vendor/assets/components/moment/lang/ml.js +64 -0
  509. data/vendor/assets/components/moment/lang/mr.js +104 -0
  510. data/vendor/assets/components/moment/lang/ms-my.js +66 -0
  511. data/vendor/assets/components/moment/lang/nb.js +57 -0
  512. data/vendor/assets/components/moment/lang/ne.js +105 -0
  513. data/vendor/assets/components/moment/lang/nl.js +67 -0
  514. data/vendor/assets/components/moment/lang/nn.js +56 -0
  515. data/vendor/assets/components/moment/lang/pl.js +98 -0
  516. data/vendor/assets/components/moment/lang/pt-br.js +56 -0
  517. data/vendor/assets/components/moment/lang/pt.js +60 -0
  518. data/vendor/assets/components/moment/lang/ro.js +72 -0
  519. data/vendor/assets/components/moment/lang/rs.js +139 -0
  520. data/vendor/assets/components/moment/lang/ru.js +163 -0
  521. data/vendor/assets/components/moment/lang/sk.js +156 -0
  522. data/vendor/assets/components/moment/lang/sl.js +144 -0
  523. data/vendor/assets/components/moment/lang/sq.js +57 -0
  524. data/vendor/assets/components/moment/lang/sv.js +63 -0
  525. data/vendor/assets/components/moment/lang/ta.js +112 -0
  526. data/vendor/assets/components/moment/lang/th.js +58 -0
  527. data/vendor/assets/components/moment/lang/tl-ph.js +58 -0
  528. data/vendor/assets/components/moment/lang/tr.js +93 -0
  529. data/vendor/assets/components/moment/lang/tzm-la.js +55 -0
  530. data/vendor/assets/components/moment/lang/tzm.js +55 -0
  531. data/vendor/assets/components/moment/lang/uk.js +157 -0
  532. data/vendor/assets/components/moment/lang/uz.js +55 -0
  533. data/vendor/assets/components/moment/lang/vn.js +62 -0
  534. data/vendor/assets/components/moment/lang/zh-cn.js +108 -0
  535. data/vendor/assets/components/moment/lang/zh-tw.js +84 -0
  536. data/vendor/assets/components/moment/min/langs.js +5841 -0
  537. data/vendor/assets/components/moment/min/langs.min.js +3 -0
  538. data/vendor/assets/components/moment/min/moment-with-langs.js +7768 -0
  539. data/vendor/assets/components/moment/min/moment-with-langs.min.js +9 -0
  540. data/vendor/assets/components/moment/min/moment.min.js +6 -0
  541. data/vendor/assets/components/moment/moment.js +2400 -0
  542. data/vendor/assets/components/moment/readme.md +349 -0
  543. data/{app → vendor}/assets/fonts/open-sans/Apache License Version 2.txt +0 -0
  544. data/{app → vendor}/assets/fonts/open-sans/OpenSans-Bold-webfont.eot +0 -0
  545. data/{app → vendor}/assets/fonts/open-sans/OpenSans-Bold-webfont.svg +0 -0
  546. data/{app → vendor}/assets/fonts/open-sans/OpenSans-Bold-webfont.ttf +0 -0
  547. data/{app → vendor}/assets/fonts/open-sans/OpenSans-Bold-webfont.woff +0 -0
  548. data/{app → vendor}/assets/fonts/open-sans/OpenSans-BoldItalic-webfont.eot +0 -0
  549. data/{app → vendor}/assets/fonts/open-sans/OpenSans-BoldItalic-webfont.svg +0 -0
  550. data/{app → vendor}/assets/fonts/open-sans/OpenSans-BoldItalic-webfont.ttf +0 -0
  551. data/{app → vendor}/assets/fonts/open-sans/OpenSans-BoldItalic-webfont.woff +0 -0
  552. data/{app → vendor}/assets/fonts/open-sans/OpenSans-ExtraBold-webfont.eot +0 -0
  553. data/{app → vendor}/assets/fonts/open-sans/OpenSans-ExtraBold-webfont.svg +0 -0
  554. data/{app → vendor}/assets/fonts/open-sans/OpenSans-ExtraBold-webfont.ttf +0 -0
  555. data/{app → vendor}/assets/fonts/open-sans/OpenSans-ExtraBold-webfont.woff +0 -0
  556. data/{app → vendor}/assets/fonts/open-sans/OpenSans-ExtraBoldItalic-webfont.eot +0 -0
  557. data/{app → vendor}/assets/fonts/open-sans/OpenSans-ExtraBoldItalic-webfont.svg +0 -0
  558. data/{app → vendor}/assets/fonts/open-sans/OpenSans-ExtraBoldItalic-webfont.ttf +0 -0
  559. data/{app → vendor}/assets/fonts/open-sans/OpenSans-ExtraBoldItalic-webfont.woff +0 -0
  560. data/{app → vendor}/assets/fonts/open-sans/OpenSans-Italic-webfont.eot +0 -0
  561. data/{app → vendor}/assets/fonts/open-sans/OpenSans-Italic-webfont.svg +0 -0
  562. data/{app → vendor}/assets/fonts/open-sans/OpenSans-Italic-webfont.ttf +0 -0
  563. data/{app → vendor}/assets/fonts/open-sans/OpenSans-Italic-webfont.woff +0 -0
  564. data/{app → vendor}/assets/fonts/open-sans/OpenSans-Light-webfont.eot +0 -0
  565. data/{app → vendor}/assets/fonts/open-sans/OpenSans-Light-webfont.svg +0 -0
  566. data/{app → vendor}/assets/fonts/open-sans/OpenSans-Light-webfont.ttf +0 -0
  567. data/{app → vendor}/assets/fonts/open-sans/OpenSans-Light-webfont.woff +0 -0
  568. data/{app → vendor}/assets/fonts/open-sans/OpenSans-LightItalic-webfont.eot +0 -0
  569. data/{app → vendor}/assets/fonts/open-sans/OpenSans-LightItalic-webfont.svg +0 -0
  570. data/{app → vendor}/assets/fonts/open-sans/OpenSans-LightItalic-webfont.ttf +0 -0
  571. data/{app → vendor}/assets/fonts/open-sans/OpenSans-LightItalic-webfont.woff +0 -0
  572. data/{app → vendor}/assets/fonts/open-sans/OpenSans-Regular-webfont.eot +0 -0
  573. data/{app → vendor}/assets/fonts/open-sans/OpenSans-Regular-webfont.svg +0 -0
  574. data/{app → vendor}/assets/fonts/open-sans/OpenSans-Regular-webfont.ttf +0 -0
  575. data/{app → vendor}/assets/fonts/open-sans/OpenSans-Regular-webfont.woff +0 -0
  576. data/{app → vendor}/assets/fonts/open-sans/OpenSans-Semibold-webfont.eot +0 -0
  577. data/{app → vendor}/assets/fonts/open-sans/OpenSans-Semibold-webfont.svg +0 -0
  578. data/{app → vendor}/assets/fonts/open-sans/OpenSans-Semibold-webfont.ttf +0 -0
  579. data/{app → vendor}/assets/fonts/open-sans/OpenSans-Semibold-webfont.woff +0 -0
  580. data/{app → vendor}/assets/fonts/open-sans/OpenSans-SemiboldItalic-webfont.eot +0 -0
  581. data/{app → vendor}/assets/fonts/open-sans/OpenSans-SemiboldItalic-webfont.svg +0 -0
  582. data/{app → vendor}/assets/fonts/open-sans/OpenSans-SemiboldItalic-webfont.ttf +0 -0
  583. data/{app → vendor}/assets/fonts/open-sans/OpenSans-SemiboldItalic-webfont.woff +0 -0
  584. data/{app → vendor}/assets/stylesheets/open-sans.css.scss +0 -0
  585. metadata +556 -49
  586. data/lib/local_pac/runner.rb +0 -29
  587. data/spec/runner_spec.rb +0 -42
@@ -2,34 +2,69 @@ module LocalPac
2
2
  module App
3
3
  class LookupController < ApplicationController
4
4
 
5
+ helpers Sinatra::Param
6
+
5
7
  get '/' do
6
8
  redirect to('/proxy.pac')
7
9
  end
8
10
 
9
11
  get '/:name' do
10
12
  file = local_storage.find(params[:name].to_s)
11
- fail Sinatra::NotFound, params[:name].to_s if file.nil?
13
+ fail Sinatra::NotFound, name: params[:name].to_s if file.nil?
14
+
15
+ @client_ip = IPAddr.new(remote_addr).to_s
16
+ @time = Time.now.strftime "%Y-%m-%d %H:%M:%S"
12
17
 
13
18
  haml :lookup, layout: :application
14
19
  end
15
20
 
16
21
  post '/:name' do
17
- @file = local_storage.find(params[:name].to_s)
18
- @uri = Addressable::URI.heuristic_parse(params[:url].to_s)
22
+ param :name, String, required: true
23
+ param :url, String, required: true
24
+ param :client_ip, String
25
+ param :time, String
19
26
 
27
+ parse_env = {}
20
28
 
21
- fail Sinatra::NotFound, params[:name].to_s if @file.nil?
29
+ @file = local_storage.find(params[:name])
30
+ @uri = Addressable::URI.heuristic_parse(params[:url])
22
31
 
23
- parser = LocalPac::ProxyPac::PacParser.new(file: @file)
32
+ fail Sinatra::NotFound, name: params[:name].to_s if @file.nil?
33
+ fail Exceptions::GivenUrlInvalid, JSON.dump(url: params[:url]) if @uri.host.blank?
34
+
35
+ begin
36
+ parse_env[:time] = @time = Time.parse(params[:time]).to_s unless params[:time].blank?
37
+ rescue ArgumentError
38
+ raise Exceptions::GivenTimeInvalid, JSON.dump(time: params[:time])
39
+ end
40
+
41
+ begin
42
+ parse_env[:client_ip] = @client_ip = IPAddr.new(params[:client_ip]).to_s unless params[:client_ip].blank?
43
+ rescue ArgumentError
44
+ raise Exceptions::GivenClientIpInvalid, JSON.dump(client_ip: params[:client_ip])
45
+ end
46
+
47
+
48
+ parser = LocalPac::ProxyPac::PacParser.new(file: @file, environment: parse_env)
24
49
 
25
50
  begin
26
51
  @result = parser.find(@uri)
27
52
  rescue Exceptions::PacFileInvalid
28
- fail I18n.t('errors.invalid_proxy_pac', name: params[:name] )
53
+ raise Exceptions::PacFileInvalid, name: params[:name]
29
54
  end
30
55
 
31
56
  haml :lookup_result, layout: :application
32
57
  end
58
+
59
+ helpers do
60
+ def remote_addr
61
+ return '127.0.0.1' if env['REMOTE_ADDR'] == ''
62
+ return env['REMOTE_ADDR'] if env['REMOTE_ADDR']
63
+
64
+ '127.0.0.1'
65
+ end
66
+ end
67
+
33
68
  end
34
69
  end
35
70
  end
data/app/locales/en.yml CHANGED
@@ -19,15 +19,30 @@ en:
19
19
  invalid_url:
20
20
  summary: Invalid URL...
21
21
  details: Sorry, but your request is invalid. The URL "%{url}" is not a correct one. Allowed are URLs like "http://www.example.org" or "www.example.org".
22
+ invalid_client_ip:
23
+ summary: Invalid Client IP...
24
+ details: Sorry, but your request is invalid. The client ip address "%{client_ip}" is not a correct one. Allowed are IPs like "10.0.0.1".
25
+ invalid_time:
26
+ summary: Invalid Time...
27
+ details: Sorry, but your request is invalid. The time "%{time}" is not a correct one. Allowed are IPs like "10.0.0.1".
22
28
  default:
23
29
  summary: Unexpected Error...
24
- details: Sorry, but I cannot full your request. Please ask your administrator for support.
30
+ details: Sorry, but I cannot fullfill your request. An unexpected error occured. Please ask your administrator for support.
25
31
  invalid_parameter:
26
32
  summary: Invalid Parameter...
27
33
  details: Sorry, but your request is invalid. The parameter "%{parameter}" is unknown or the format given cannot be accepted.
28
- invalid_pac_file:
29
- summary: Invalid PAC-file...
34
+ invalid_pushed_pac_file:
35
+ summary: Invalid pushed PAC-file...
30
36
  details: Sorry, but your push request is invalid. The pac-file "%{name}" is invalid.
37
+ internal_error:
38
+ summary: Internal error...
39
+ details: 'Sorry, but I cannot fullfill your request. An internal error occured: "%{message}". Please notify the author of the software about the problem.'
40
+ user_error:
41
+ summary: User Error...
42
+ details: Sorry, but I cannot fullfill your request. An error occured. There should be a better error message displayed here. Please notify the author of the software about the problem.
43
+ unreadable_config_file:
44
+ summary: Unreadable config file...
45
+ details: 'Sorry, but I cannot fullfill your request. The config file "%{file}" given could not be read: "%{message}".'
31
46
  models:
32
47
  data:
33
48
  request_type: Request Type
@@ -38,8 +53,12 @@ en:
38
53
  buttons:
39
54
  search: Search
40
55
  reset: Clear
56
+ more: More Fields
41
57
  title: Lookup URLs in proxy.pac-files...
58
+ root:
59
+ link: Home
42
60
  lookup:
61
+ link: Lookup
43
62
  headline: Lookup
44
63
  lookup_result:
45
64
  subtitle: You asked me to look up "%{url}" for you.
@@ -48,6 +67,12 @@ en:
48
67
  styled: Styled Output
49
68
  verbatim: Verbatim Output
50
69
  form:
51
- search_field:
70
+ url:
52
71
  label: URL
53
- placeholder: Please enter fully quallified url here, e.g. "http://www.example.org"...
72
+ placeholder: "http://www.example.org"
73
+ time:
74
+ label: Time
75
+ placeholder: "2014-01-01 12:00:00"
76
+ client_ip:
77
+ label: Client IP Address
78
+ placeholder: "127.0.0.1"
@@ -3,8 +3,19 @@
3
3
  %head
4
4
  %meta{:charset => "utf-8"}
5
5
  %link{ rel: 'stylesheet', href: stylesheet_path('application.css') }
6
- %script{ type: 'text/javascript', src: javascript_path('application.js') }
7
6
  %title= t('views.application.title')
8
7
  %body
8
+ .lp_page_header
9
+ %nav.lp_top_navigation
10
+ %ul.nav.navbar-nav
11
+ %li
12
+ %a{href: '/'}
13
+ = t('views.root.link')
14
+ %li.active
15
+ %a{href: '/v1/lookup/'}
16
+ = t('views.lookup.link')
9
17
  .lp_container
10
18
  = yield
19
+ .lp_page_footer
20
+ %nav.lp_bottom_navigation
21
+ %script{ type: 'text/javascript', src: javascript_path('application.js') }
data/app/views/form.haml CHANGED
@@ -1,11 +1,29 @@
1
1
  %form#search.lp_form{ role: 'form', method: 'post'}
2
- .lp_form_controls
3
- .lp_search_group
4
- %label.sr-only{for: 'url'}
5
- = t('views.lookup_result.form.search_field.label')
6
- %input#url.lp_field_search{name: 'url', placeholder: t('views.lookup_result.form.search_field.placeholder'), autofocus: true, value: @uri }
2
+ .lp_search_group
3
+ .lp_form_group
4
+ %label{for: 'url'}
5
+ = t('views.lookup_result.form.url.label')
6
+ %input#url.lp_field_url{name: 'url', placeholder: t('views.lookup_result.form.url.placeholder'), autofocus: true, value: @uri, 'data-toggle' => 'tooltip', 'data-placement' => 'left', title: 'Please enter a valid url here.' }
7
+
8
+ %a.lp_show_fields{ href: '#' }
9
+ %span.lp_button_show_fields_open
10
+ %span.lp_button_show_fields_close
11
+ = t('views.application.buttons.more')
7
12
  .lp_buttons
8
13
  %button.lp_button_search{type: 'submit', value: t('views.application.buttons.search')}
9
14
  = t('views.application.buttons.search')
10
15
  %a#reset.lp_button_reset{href: '#'}
11
16
  = t('views.application.buttons.reset')
17
+ .lp_fields_close
18
+ .lp_fields_open
19
+ .lp_form_group
20
+ %label{for: 'name'}
21
+ = t('views.lookup_result.form.client_ip.label')
22
+ %input#client_ip.lp_field_client_ip{name: 'client_ip', placeholder: t('views.lookup_result.form.client_ip.placeholder'), value: @client_ip, 'data-toggle' => 'tooltip', 'data-placement' => 'left', title: 'Please enter a valid ip address here.' }
23
+ .form-group
24
+ %label{for: 'time'}
25
+ = t('views.lookup_result.form.time.label')
26
+ #datetimepicker.input-group.date.lp_time_group
27
+ %input#time.lp_field_time{name: 'time', placeholder: t('views.lookup_result.form.time.placeholder'), value: @time, 'data-format' => 'YYYY-MM-DD HH:mm:ss', 'data-toggle' => 'tooltip', 'data-placement' => 'left', title: 'Please enter a valid point in time here.' }
28
+ %span.input-group-addon
29
+ %span.lp_button_datetimepicker
data/bin/local_pac CHANGED
@@ -3,7 +3,6 @@
3
3
  $LOAD_PATH << ::File.expand_path('../../lib', __FILE__)
4
4
  require 'local_pac'
5
5
 
6
-
7
6
  begin
8
7
  LocalPac::Cli::Main.start
9
8
  rescue StandardError => e
data/bower.json ADDED
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "local_pac",
3
+ "dependencies": {
4
+ "bootstrap-sass": "~3.0.2",
5
+ "jquery": "~2.1.0",
6
+ "moment": "~2.5.1",
7
+ "eonasdan-bootstrap-datetimepicker": "latest"
8
+ }
9
+ }
@@ -44,7 +44,7 @@ module LocalPac
44
44
 
45
45
  local_destination
46
46
  rescue Errno::ENOENT
47
- fail Exceptions::ErbTemplateIsUnknown, "Unknown erb template \"#{template_path}\"."
47
+ fail Exceptions::ErbTemplateIsUnknown, JSON.dump(message: "Unknown erb template \"#{template_path}\".")
48
48
  end
49
49
 
50
50
  def need_to_run?
@@ -29,7 +29,7 @@ module LocalPac
29
29
  generator = engine.new(local_data)
30
30
  generator.compile(template, local_destination)
31
31
  rescue Errno::ENOENT
32
- fail Exceptions::ErbTemplateIsUnknown, "Unknown erb template \"#{template_path}\"."
32
+ fail Exceptions::ErbTemplateIsUnknown, JSON.dump(message: "Unknown erb template \"#{template_path}\".")
33
33
  end
34
34
  end
35
35
  end
@@ -19,7 +19,18 @@ module LocalPac
19
19
  handler = handler_klass.find exception
20
20
  handler.original_message = original_message
21
21
 
22
- handler.run
22
+ handler.execute(parsed_message)
23
+ end
24
+
25
+ private
26
+
27
+ def parsed_message
28
+ result = JSON.parse(original_message)
29
+ return {} unless result.kind_of? Hash
30
+
31
+ result
32
+ rescue JSON::ParserError
33
+ {}
23
34
  end
24
35
  end
25
36
  end
@@ -50,7 +50,7 @@ module LocalPac
50
50
  end
51
51
  end
52
52
  rescue StandardError => e
53
- fail Exceptions::ConfigFileNotReadable, "Sorry, but there was a problem reading the config file: #{e.message}."
53
+ fail Exceptions::ConfigFileNotReadable, JSON.dump(message: e.message, file: file)
54
54
  end
55
55
 
56
56
  def lock
@@ -11,7 +11,7 @@ module LocalPac
11
11
 
12
12
  private
13
13
 
14
- attr_reader :message, :exit_code
14
+ attr_reader :details_i18n, :summary_i18n, :exit_code
15
15
 
16
16
  public
17
17
 
@@ -19,9 +19,10 @@ module LocalPac
19
19
  attr_accessor :original_message
20
20
 
21
21
  def initialize(options = {})
22
- @exception = options.fetch(:exception)
23
- @message = options.fetch(:message)
24
- @exit_code = options.fetch(:exit_code)
22
+ @exception = options.fetch(:exception)
23
+ @details_i18n = options.fetch(:details)
24
+ @summary_i18n = options.fetch(:summary)
25
+ @exit_code = options.fetch(:exit_code)
25
26
  rescue KeyError => e
26
27
  raise ArgumentError, e.message
27
28
  end
@@ -44,17 +45,63 @@ module LocalPac
44
45
  mutex.synchronize do
45
46
  @default_handler ||= new(
46
47
  exception: StandardError,
47
- message: 'Sorry, but I cannot fullfil your request. An unexpected error occured.',
48
+ details: 'errors.default.details',
49
+ summary: 'errors.default.summary',
48
50
  exit_code: 99,
49
51
  )
50
52
  end
51
53
  end
52
54
  end
53
55
 
54
- def run
55
- LocalPac.ui_logger.fatal message
56
+ def details(format = :plain)
57
+ case format
58
+ when :plain
59
+ @details
60
+ when :html
61
+ Rack::Utils.escape_html(@details)
62
+ else
63
+ @details
64
+ end
65
+ end
66
+
67
+ def summary(format = :plain)
68
+ case format
69
+ when :plain
70
+ @summary
71
+ when :html
72
+ Rack::Utils.escape_html(@summary)
73
+ else
74
+ @summary
75
+ end
76
+ end
77
+
78
+ def use(data)
79
+ data = JSON.parse(data).symbolize_keys if data.kind_of? String
80
+
81
+ @details = I18n.t(details_i18n, data)
82
+ @summary = I18n.t(summary_i18n, data)
83
+ end
84
+
85
+ def execute(data = {})
86
+ use(data)
87
+
88
+ LocalPac.ui_logger.fatal details
56
89
  LocalPac.ui_logger.debug original_message if original_message
57
90
  Kernel.exit exit_code
58
91
  end
92
+
93
+ def to_json
94
+ ErrorHandler.mutex.synchronize do
95
+ @details ||= I18n.t(details_i18n)
96
+ @summary ||= I18n.t(summary_i18n)
97
+ end
98
+
99
+ JSON.dump(
100
+ error_summary: summary,
101
+ error_details: details,
102
+ result: :failure,
103
+ )
104
+ end
105
+
59
106
  end
60
107
  end
@@ -0,0 +1,132 @@
1
+ # encoding: utf-8
2
+ module LocalPac
3
+ module ErrorMessages
4
+
5
+ ErrorHandler.create(
6
+ exception: StandardError,
7
+ summary: 'errors.default.summary',
8
+ details: 'errors.default.details',
9
+ exit_code: 99,
10
+ )
11
+
12
+ ErrorHandler.create(
13
+ exception: Exceptions::ApiKeyInvalid,
14
+ details: 'errors.invalid_api_key.details',
15
+ summary: 'errors.invalid_api_key.summary',
16
+ exit_code: 2,
17
+ )
18
+
19
+ ErrorHandler.create(
20
+ exception: Exceptions::PacFileInvalid,
21
+ details: 'errors.invalid_pushed_pac_file.details',
22
+ summary: 'errors.invalid_pushed_pac_file.summary',
23
+ exit_code: 3,
24
+ )
25
+
26
+ ErrorHandler.create(
27
+ exception: Sinatra::Param::InvalidParameterError,
28
+ details: 'errors.invalid_parameter.details',
29
+ summary: 'errors.invalid_parameter.summary',
30
+ exit_code: 4,
31
+ )
32
+
33
+ ErrorHandler.create(
34
+ exception: Exceptions::PidFileDoesNotExist,
35
+ details: 'errors.invalid_proxy_pac.details',
36
+ summary: 'errors.invalid_proxy_pac.summary',
37
+ exit_code: 5,
38
+ )
39
+
40
+ ErrorHandler.create(
41
+ exception: Exceptions::GivenUrlInvalid,
42
+ details: 'errors.invalid_url.details',
43
+ summary: 'errors.invalid_url.summary',
44
+ exit_code: 6,
45
+ )
46
+
47
+ ErrorHandler.create(
48
+ exception: Exceptions::ReloadOfLocalStorageFailed,
49
+ details: 'errors.reload_of_local_storage_failed.details',
50
+ summary: 'errors.reload_of_local_storage_failed.summary',
51
+ exit_code: 7,
52
+ )
53
+
54
+ ErrorHandler.create(
55
+ exception: Exceptions::GitHookUnknown,
56
+ details: 'errors.unknown_git_hook.details',
57
+ summary: 'errors.unknown_git_hook.summary',
58
+ exit_code: 8,
59
+ )
60
+
61
+ ErrorHandler.create(
62
+ exception: Exceptions::PacFileUnknown,
63
+ details: 'errors.unknown_proxy_pac.details',
64
+ summary: 'errors.unknown_proxy_pac.summary',
65
+ exit_code: 9,
66
+ )
67
+
68
+ ErrorHandler.create(
69
+ exception: Exceptions::InternalError,
70
+ details: 'errors.internal_error.details',
71
+ summary: 'errors.internal_error.summary',
72
+ exit_code: 10,
73
+ )
74
+
75
+ ErrorHandler.create(
76
+ exception: Exceptions::ServerListenStatementInvalid,
77
+ details: 'errors.invalid_listen_statement.details',
78
+ summary: 'errors.invalid_listen_statement.summary',
79
+ exit_code: 11,
80
+ )
81
+
82
+ ErrorHandler.create(
83
+ exception: Exceptions::RepositoryDoesNotExist,
84
+ details: 'errors.missing_git_repository.details',
85
+ summary: 'errors.missing_git_repository.summary',
86
+ exit_code: 12,
87
+ )
88
+
89
+ ErrorHandler.create(
90
+ exception: Exceptions::CommitDoesNotExist,
91
+ details: 'errors.missing_git_commit.details',
92
+ summary: 'errors.missing_git_commit.summary',
93
+ exit_code: 13,
94
+ )
95
+
96
+ ErrorHandler.create(
97
+ exception: Exceptions::ConfigFileNotReadable,
98
+ details: 'errors.unreadable_config_file.details',
99
+ summary: 'errors.unreadable_config_file.summary',
100
+ exit_code: 14,
101
+ )
102
+
103
+ ErrorHandler.create(
104
+ exception: Exceptions::UserError,
105
+ details: 'errors.user_error.details',
106
+ summary: 'errors.user_error.summary',
107
+ exit_code: 15,
108
+ )
109
+
110
+ ErrorHandler.create(
111
+ exception: Exceptions::GivenTimeInvalid,
112
+ details: 'errors.invalid_time.details',
113
+ summary: 'errors.invalid_time.summary',
114
+ exit_code: 16,
115
+ )
116
+
117
+ ErrorHandler.create(
118
+ exception: Exceptions::GivenClientIpInvalid,
119
+ details: 'errors.invalid_client_ip.details',
120
+ summary: 'errors.invalid_client_ip.summary',
121
+ exit_code: 17,
122
+ )
123
+
124
+ #ErrorHandler.create(
125
+ # exception:
126
+ # summary:
127
+ # details:
128
+ # exit_code:
129
+ #)
130
+
131
+ end
132
+ end
@@ -1,39 +1,60 @@
1
1
  module LocalPac
2
2
  module Exceptions
3
+ # raised if an internal error occured
4
+ class InternalError < StandardError; end
5
+
6
+ # raised if an error is occured which should be visible by the user
7
+ class UserError < StandardError; end
8
+
3
9
  # raise if there are template syntax errrors
4
- class ErbTemplateHasSyntaxErrors < StandardError; end
10
+ class ErbTemplateHasSyntaxErrors < InternalError; end
5
11
 
6
12
  # raised if Template does not exist
7
- class ErbTemplateIsUnknown < StandardError; end
13
+ class ErbTemplateIsUnknown < InternalError; end
8
14
 
9
15
  # raised if Template does not exist
10
- class ConfigFileNotReadable < StandardError; end
16
+ class ConfigFileNotReadable < UserError; end
11
17
 
12
18
  # raised if listen statement is invalid
13
- class ServerListenStatementInvalid < StandardError; end
19
+ class ServerListenStatementInvalid < UserError; end
14
20
 
15
21
  # raised if reload of local storage failed
16
- class ReloadOfLocalStorageFailed < StandardError; end
22
+ class ReloadOfLocalStorageFailed < UserError; end
17
23
 
18
24
  # raised if entered url is invalid
19
- class URLToSearchForInvalid < StandardError; end
25
+ class URLToSearchForInvalid < UserError; end
26
+
27
+ # raised if git hook cannot be found
28
+ class GitHookUnknown < UserError; end
29
+
30
+ # raised if pac file cannot be found
31
+ class PacFileUnknown < UserError; end
20
32
 
21
33
  # raised if pac file is invalid
22
- class PacFileInvalid < StandardError; end
34
+ class PacFileInvalid < UserError; end
23
35
 
24
36
  # raised if api key is invalid
25
- class ApiKeyInvalid < StandardError; end
37
+ class ApiKeyInvalid < UserError; end
26
38
 
27
39
  # raised if request is invalid
28
- class GivenUrlInvalid < StandardError; end
40
+ class GivenUrlInvalid < UserError; end
41
+
42
+ # raised if request is invalid
43
+ class GivenTimeInvalid < UserError; end
44
+
45
+ # raised if request is invalid
46
+ class GivenClientIpInvalid < UserError; end
29
47
 
30
48
  # raised if pid file does not exist
31
- class PidFileDoesNotExist < StandardError; end
49
+ class PidFileDoesNotExist < UserError; end
32
50
 
33
51
  # raised if repository does not exist
34
- class RepositoryDoesNotExist < StandardError; end
52
+ class RepositoryDoesNotExist < UserError; end
35
53
 
36
54
  # raised if commit does not exist
37
- class CommitDoesNotExist < StandardError; end
55
+ class CommitDoesNotExist < InternalError; end
56
+
57
+ # raised if variable cannot be looked up
58
+ class VariableUnknown < InternalError; end
38
59
  end
39
60
  end
@@ -18,5 +18,16 @@ module LocalPac
18
18
  def error_id
19
19
  SecureRandom.hex
20
20
  end
21
+
22
+ def root_path
23
+ ::File.expand_path('../../..', __FILE__)
24
+ end
21
25
  end
26
+
27
+ I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
28
+ I18n.load_path = Dir[::File.join(LocalPac.root_path, 'app', 'locales', '*.yml')]
29
+ I18n.backend.load_translations
30
+
31
+ I18n.enforce_available_locales = true
22
32
  end
33
+
@@ -1,6 +1,15 @@
1
1
  # encoding: utf-8
2
2
  module LocalPac
3
3
  class PacFileValidator
4
+ private
5
+
6
+ attr_reader :pac_engine
7
+
8
+ public
9
+
10
+ def initialize(pac_engine = ProxyPacRb::Parser)
11
+ @pac_engine = pac_engine
12
+ end
4
13
 
5
14
  def valid?(file)
6
15
  validate(file)
@@ -21,7 +30,7 @@ module LocalPac
21
30
  private
22
31
 
23
32
  def validate(file)
24
- pac = PAC.source(file.content)
33
+ pac = pac_engine.new.source(file.content)
25
34
  pac.find('http://www.example.com')
26
35
  end
27
36
  end
@@ -4,21 +4,24 @@ module LocalPac
4
4
  class PACEngine
5
5
  private
6
6
 
7
- attr_reader :engine, :file
7
+ attr_reader :engine, :file, :environment, :environment_engine
8
8
 
9
9
  public
10
10
 
11
11
  def initialize(options = {})
12
- @file = options.fetch(:file)
13
- @engine = PAC
12
+ @file = options.fetch(:file)
13
+ @environment = options.fetch(:environment, {})
14
+
15
+ @engine = ProxyPacRb::Parser
16
+ @environment_engine = ProxyPacRb::Environment
14
17
  rescue KeyError
15
- fail ArgumentError, ":file-option is missing"
18
+ fail ArgumentError, ":file-argument is missing"
16
19
  end
17
20
 
18
21
  def find(uri)
19
- e = engine.source(file.content)
22
+ e = engine.new(environment_engine.new(environment)).source(file.content)
20
23
  e.find(uri)
21
- rescue V8::Error, PAC::ProgramError => err
24
+ rescue V8::Error, ProxyPacRb::Exceptions::ProgramError => err
22
25
  error_id = LocalPac.error_id
23
26
  LocalPac.ui_logger.fatal "Error id \"#{error_id}\": An V8::Error occured. This can happen if compiling a proxy.pac fails. The V8::Error-message was: #{err.message}."
24
27
  fail Exceptions::PacFileInvalid, error_id
@@ -10,8 +10,10 @@ module LocalPac
10
10
  public
11
11
 
12
12
  def initialize(options = {})
13
+ environment = options.fetch(:environment, {})
14
+
13
15
  @file = options.fetch(:file)
14
- @engine = options.fetch(:engine, PACEngine.new(file: @file))
16
+ @engine = options.fetch(:engine, PACEngine.new(file: @file, environment: environment))
15
17
  @result_generator = options.fetch(:result_generator, PacResult)
16
18
  @stylist = options.fetch(:stylist, PacResultHtmlStylist.new)
17
19
  rescue KeyError => e
@@ -1,4 +1,4 @@
1
1
  #main LocalPac
2
2
  module LocalPac
3
- VERSION = '0.6.3'
3
+ VERSION = '0.7.0'
4
4
  end