utopia 2.2.0 → 2.3.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 (290) hide show
  1. checksums.yaml +5 -5
  2. data/.codeclimate.yml +1 -0
  3. data/.travis.yml +3 -1
  4. data/Gemfile +2 -0
  5. data/README.md +2 -2
  6. data/Rakefile +19 -7
  7. data/docs/.nojekyll +0 -0
  8. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.apache.css +6 -0
  9. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.applescript.css +5 -0
  10. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.assembly.css +8 -0
  11. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.bash-script.css +6 -0
  12. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.bash.css +10 -0
  13. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.clang.css +3 -0
  14. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.css.css +14 -0
  15. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.diff.css +16 -0
  16. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.html.css +5 -0
  17. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.ocaml.css +3 -0
  18. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.protobuf.css +2 -0
  19. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.python.css +6 -0
  20. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.ruby.css +2 -0
  21. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.xml.css +18 -0
  22. data/docs/_components/jquery-syntax/base/jquery.syntax.core.css +62 -0
  23. data/docs/_components/jquery-syntax/base/jquery.syntax.editor.css +6 -0
  24. data/docs/_components/jquery-syntax/base/theme.js +1 -0
  25. data/docs/_components/jquery-syntax/bright/jquery.syntax.core.css +27 -0
  26. data/docs/_components/jquery-syntax/bright/theme.js +1 -0
  27. data/docs/_components/jquery-syntax/jquery.syntax.brush.apache.js +41 -0
  28. data/docs/_components/jquery-syntax/jquery.syntax.brush.applescript.js +57 -0
  29. data/docs/_components/jquery-syntax/jquery.syntax.brush.assembly.js +37 -0
  30. data/docs/_components/jquery-syntax/jquery.syntax.brush.bash-script.js +67 -0
  31. data/docs/_components/jquery-syntax/jquery.syntax.brush.bash.js +33 -0
  32. data/docs/_components/jquery-syntax/jquery.syntax.brush.basic.js +51 -0
  33. data/docs/_components/jquery-syntax/jquery.syntax.brush.clang.js +89 -0
  34. data/docs/_components/jquery-syntax/jquery.syntax.brush.csharp.js +47 -0
  35. data/docs/_components/jquery-syntax/jquery.syntax.brush.css.js +80 -0
  36. data/docs/_components/jquery-syntax/jquery.syntax.brush.diff.js +24 -0
  37. data/docs/_components/jquery-syntax/jquery.syntax.brush.go.js +47 -0
  38. data/docs/_components/jquery-syntax/jquery.syntax.brush.haskell.js +45 -0
  39. data/docs/_components/jquery-syntax/jquery.syntax.brush.html.js +66 -0
  40. data/docs/_components/jquery-syntax/jquery.syntax.brush.io.js +45 -0
  41. data/docs/_components/jquery-syntax/jquery.syntax.brush.java.js +45 -0
  42. data/docs/_components/jquery-syntax/jquery.syntax.brush.javascript.js +40 -0
  43. data/docs/_components/jquery-syntax/jquery.syntax.brush.kai.js +29 -0
  44. data/docs/_components/jquery-syntax/jquery.syntax.brush.lisp.js +34 -0
  45. data/docs/_components/jquery-syntax/jquery.syntax.brush.lua.js +44 -0
  46. data/docs/_components/jquery-syntax/jquery.syntax.brush.nginx.js +31 -0
  47. data/docs/_components/jquery-syntax/jquery.syntax.brush.ocaml.js +73 -0
  48. data/docs/_components/jquery-syntax/jquery.syntax.brush.ooc.js +46 -0
  49. data/docs/_components/jquery-syntax/jquery.syntax.brush.pascal.js +51 -0
  50. data/docs/_components/jquery-syntax/jquery.syntax.brush.perl5.js +52 -0
  51. data/docs/_components/jquery-syntax/jquery.syntax.brush.php-script.js +48 -0
  52. data/docs/_components/jquery-syntax/jquery.syntax.brush.php.js +15 -0
  53. data/docs/_components/jquery-syntax/jquery.syntax.brush.plain.js +10 -0
  54. data/docs/_components/jquery-syntax/jquery.syntax.brush.protobuf.js +43 -0
  55. data/docs/_components/jquery-syntax/jquery.syntax.brush.python.js +44 -0
  56. data/docs/_components/jquery-syntax/jquery.syntax.brush.ruby.js +77 -0
  57. data/docs/_components/jquery-syntax/jquery.syntax.brush.scala.js +44 -0
  58. data/docs/_components/jquery-syntax/jquery.syntax.brush.smalltalk.js +29 -0
  59. data/docs/_components/jquery-syntax/jquery.syntax.brush.sql.js +31 -0
  60. data/docs/_components/jquery-syntax/jquery.syntax.brush.super-collider.js +57 -0
  61. data/docs/_components/jquery-syntax/jquery.syntax.brush.swift.js +55 -0
  62. data/docs/_components/jquery-syntax/jquery.syntax.brush.trenni.js +35 -0
  63. data/docs/_components/jquery-syntax/jquery.syntax.brush.xml.js +50 -0
  64. data/docs/_components/jquery-syntax/jquery.syntax.brush.yaml.js +29 -0
  65. data/docs/_components/jquery-syntax/jquery.syntax.cache.js +65 -0
  66. data/docs/_components/jquery-syntax/jquery.syntax.core.js +1098 -0
  67. data/docs/_components/jquery-syntax/jquery.syntax.editor.js +291 -0
  68. data/docs/_components/jquery-syntax/jquery.syntax.js +258 -0
  69. data/docs/_components/jquery-syntax/jquery.syntax.min.js +13 -0
  70. data/docs/_components/jquery-syntax/paper/jquery.syntax.core.css +31 -0
  71. data/docs/_components/jquery-syntax/paper/theme.js +1 -0
  72. data/docs/_components/jquery/core.js +482 -0
  73. data/docs/_components/jquery/jquery.js +10220 -0
  74. data/docs/_components/jquery/jquery.min.js +4 -0
  75. data/docs/_components/jquery/jquery.min.map +1 -0
  76. data/docs/_components/jquery/jquery.slim.js +8107 -0
  77. data/docs/_components/jquery/jquery.slim.min.js +4 -0
  78. data/docs/_components/jquery/jquery.slim.min.map +1 -0
  79. data/docs/_static/icon.png +0 -0
  80. data/docs/_static/site.css +205 -0
  81. data/docs/_static/utopia-background.svg +1 -0
  82. data/docs/_static/utopia.svg +1 -0
  83. data/docs/code/Utopia.html +511 -0
  84. data/docs/code/Utopia/Basename.html +654 -0
  85. data/docs/code/Utopia/Bootstrap.html +538 -0
  86. data/docs/code/Utopia/Command.html +207 -0
  87. data/docs/code/Utopia/Command/Environment.html +321 -0
  88. data/docs/code/Utopia/Command/Server.html +214 -0
  89. data/docs/code/Utopia/Command/Server/Create.html +222 -0
  90. data/docs/code/Utopia/Command/Server/Environment.html +236 -0
  91. data/docs/code/Utopia/Command/Server/Update.html +317 -0
  92. data/docs/code/Utopia/Command/Setup.html +145 -0
  93. data/docs/code/Utopia/Command/Setup/Server.html +298 -0
  94. data/docs/code/Utopia/Command/Setup/Site.html +180 -0
  95. data/docs/code/Utopia/Command/Site.html +279 -0
  96. data/docs/code/Utopia/Command/Site/Create.html +324 -0
  97. data/docs/code/Utopia/Command/Site/Update.html +407 -0
  98. data/docs/code/Utopia/Command/Top.html +279 -0
  99. data/docs/code/Utopia/Content.html +826 -0
  100. data/docs/code/Utopia/Content/Document.html +1818 -0
  101. data/docs/code/Utopia/Content/Document/State.html +1220 -0
  102. data/docs/code/Utopia/Content/Link.html +1286 -0
  103. data/docs/code/Utopia/Content/Links.html +841 -0
  104. data/docs/code/Utopia/Content/MarkupParser.html +881 -0
  105. data/docs/code/Utopia/Content/MarkupParser/ParsedTag.html +422 -0
  106. data/docs/code/Utopia/Content/MarkupParser/UnbalancedTagError.html +615 -0
  107. data/docs/code/Utopia/Content/Namespace.html +485 -0
  108. data/docs/code/Utopia/Content/Node.html +1188 -0
  109. data/docs/code/Utopia/Content/Node/Context.html +938 -0
  110. data/docs/code/Utopia/Content/Response.html +813 -0
  111. data/docs/code/Utopia/Content/SymbolicHash.html +419 -0
  112. data/docs/code/Utopia/Content/Tag.html +399 -0
  113. data/docs/code/Utopia/Content/Tags.html +136 -0
  114. data/docs/code/Utopia/Content/Tags/ContentTag.html +187 -0
  115. data/docs/code/Utopia/Content/Tags/DeferredTag.html +193 -0
  116. data/docs/code/Utopia/Content/Tags/Library.html +333 -0
  117. data/docs/code/Utopia/Content/Tags/NodeTag.html +193 -0
  118. data/docs/code/Utopia/Content/UnbalancedTagError.html +298 -0
  119. data/docs/code/Utopia/ContentLength.html +339 -0
  120. data/docs/code/Utopia/Controller.html +901 -0
  121. data/docs/code/Utopia/Controller/Actions.html +289 -0
  122. data/docs/code/Utopia/Controller/Actions/Action.html +978 -0
  123. data/docs/code/Utopia/Controller/Actions/ClassMethods.html +442 -0
  124. data/docs/code/Utopia/Controller/Base.html +1216 -0
  125. data/docs/code/Utopia/Controller/Respond.html +283 -0
  126. data/docs/code/Utopia/Controller/Respond/ClassMethods.html +236 -0
  127. data/docs/code/Utopia/Controller/Respond/Converter.html +256 -0
  128. data/docs/code/Utopia/Controller/Respond/Converter/Callback.html +484 -0
  129. data/docs/code/Utopia/Controller/Respond/Converter/ToJSON.html +375 -0
  130. data/docs/code/Utopia/Controller/Respond/Passthrough.html +291 -0
  131. data/docs/code/Utopia/Controller/Respond/Responder.html +529 -0
  132. data/docs/code/Utopia/Controller/Rewrite.html +290 -0
  133. data/docs/code/Utopia/Controller/Rewrite/ClassMethods.html +242 -0
  134. data/docs/code/Utopia/Controller/Rewrite/ExtractPrefixRule.html +364 -0
  135. data/docs/code/Utopia/Controller/Rewrite/Rewriter.html +464 -0
  136. data/docs/code/Utopia/Controller/Rewrite/Rule.html +209 -0
  137. data/docs/code/Utopia/Controller/Variables.html +550 -0
  138. data/docs/code/Utopia/Controllers.html +244 -0
  139. data/docs/code/Utopia/Exceptions.html +127 -0
  140. data/docs/code/Utopia/Exceptions/Handler.html +526 -0
  141. data/docs/code/Utopia/Exceptions/Mailer.html +476 -0
  142. data/docs/code/Utopia/Extensions.html +117 -0
  143. data/docs/code/Utopia/Extensions/ArraySplit.html +183 -0
  144. data/docs/code/Utopia/Extensions/DateTimeComparison.html +193 -0
  145. data/docs/code/Utopia/Extensions/TimeDateComparison.html +193 -0
  146. data/docs/code/Utopia/HTTP.html +244 -0
  147. data/docs/code/Utopia/HTTP/Status.html +415 -0
  148. data/docs/code/Utopia/Locale.html +606 -0
  149. data/docs/code/Utopia/Localization.html +1235 -0
  150. data/docs/code/Utopia/Localization/Wrapper.html +459 -0
  151. data/docs/code/Utopia/Logger.html +205 -0
  152. data/docs/code/Utopia/Logger/CompactFormatter.html +335 -0
  153. data/docs/code/Utopia/Path.html +3304 -0
  154. data/docs/code/Utopia/Path/Matcher.html +518 -0
  155. data/docs/code/Utopia/Path/Matcher/MatchData.html +475 -0
  156. data/docs/code/Utopia/Redirection.html +145 -0
  157. data/docs/code/Utopia/Redirection/ClientRedirect.html +717 -0
  158. data/docs/code/Utopia/Redirection/DirectoryIndex.html +298 -0
  159. data/docs/code/Utopia/Redirection/Errors.html +470 -0
  160. data/docs/code/Utopia/Redirection/Moved.html +312 -0
  161. data/docs/code/Utopia/Redirection/RequestFailure.html +226 -0
  162. data/docs/code/Utopia/Redirection/Rewrite.html +296 -0
  163. data/docs/code/Utopia/Session.html +883 -0
  164. data/docs/code/Utopia/Session/LazyHash.html +859 -0
  165. data/docs/code/Utopia/Setup.html +964 -0
  166. data/docs/code/Utopia/Static.html +690 -0
  167. data/docs/code/Utopia/Static/LocalFile.html +1098 -0
  168. data/docs/code/Utopia/Static/MimeTypeLoader.html +541 -0
  169. data/docs/code/Utopia/Static/MimeTypeLoader/ExpansionError.html +124 -0
  170. data/docs/code/Utopia/Tags.html +115 -0
  171. data/docs/code/Utopia/Tags/Environment.html +314 -0
  172. data/docs/code/Utopia/Tags/EnvironmentTag.html +314 -0
  173. data/docs/code/Utopia/Tags/Library.html +340 -0
  174. data/docs/code/_index.html +758 -0
  175. data/docs/code/class_list.html +51 -0
  176. data/docs/code/css/common.css +1 -0
  177. data/docs/code/css/full_list.css +58 -0
  178. data/docs/code/css/style.css +499 -0
  179. data/docs/code/file.README.html +169 -0
  180. data/docs/code/file_list.html +56 -0
  181. data/docs/code/frames.html +17 -0
  182. data/docs/code/index.html +169 -0
  183. data/docs/code/js/app.js +248 -0
  184. data/docs/code/js/full_list.js +216 -0
  185. data/docs/code/js/jquery.js +4 -0
  186. data/docs/code/materials/utopia.png +0 -0
  187. data/docs/code/materials/utopia.svg +1 -0
  188. data/docs/code/method_list.html +3443 -0
  189. data/docs/code/top-level-namespace.html +110 -0
  190. data/docs/index.html +92 -0
  191. data/docs/wiki.html +92 -0
  192. data/docs/wiki/bower-integration.html +74 -0
  193. data/docs/wiki/bower-integration/index.html +74 -0
  194. data/docs/wiki/development-environment-setup.html +60 -0
  195. data/docs/wiki/development-environment-setup/index.html +60 -0
  196. data/docs/wiki/edit.html +103 -0
  197. data/docs/wiki/faq/what-is-xnode.html +79 -0
  198. data/docs/wiki/faq/what-is-xnode/index.html +79 -0
  199. data/docs/wiki/middleware/content.html +64 -0
  200. data/docs/wiki/middleware/content/index.html +64 -0
  201. data/docs/wiki/middleware/controller.html +104 -0
  202. data/docs/wiki/middleware/controller/actions.html +117 -0
  203. data/docs/wiki/middleware/controller/actions/index.html +117 -0
  204. data/docs/wiki/middleware/controller/actions/rewrite/index.html +48 -0
  205. data/docs/wiki/middleware/controller/index.html +104 -0
  206. data/docs/wiki/middleware/controller/rewrite.html +111 -0
  207. data/docs/wiki/middleware/controller/rewrite/index.html +111 -0
  208. data/docs/wiki/middleware/localization.html +59 -0
  209. data/docs/wiki/middleware/localization/index.html +59 -0
  210. data/docs/wiki/middleware/redirection.html +61 -0
  211. data/docs/wiki/middleware/redirection/index.html +61 -0
  212. data/docs/wiki/middleware/session.html +71 -0
  213. data/docs/wiki/middleware/session/index.html +71 -0
  214. data/docs/wiki/middleware/static.html +57 -0
  215. data/docs/wiki/middleware/static/index.html +57 -0
  216. data/docs/wiki/server-setup.html +118 -0
  217. data/docs/wiki/server-setup/index.html +118 -0
  218. data/docs/wiki/testing.html +59 -0
  219. data/docs/wiki/testing/index.html +59 -0
  220. data/docs/wiki/updating-utopia.html +108 -0
  221. data/docs/wiki/updating-utopia/index.html +108 -0
  222. data/docs/wiki/your-first-page.html +80 -0
  223. data/docs/wiki/your-first-page/index.html +80 -0
  224. data/documentation/Guardfile +0 -12
  225. data/documentation/Rakefile +3 -0
  226. data/documentation/pages/_page.xnode +2 -0
  227. data/documentation/pages/wiki/content.md +1 -0
  228. data/documentation/pages/wiki/faq/what-is-xnode/content.md +37 -0
  229. data/documentation/pages/wiki/links.yaml +3 -1
  230. data/documentation/pages/wiki/server-setup/content.md +1 -1
  231. data/documentation/pages/wiki/show.xnode +2 -0
  232. data/documentation/pages/wiki/your-first-page/content.md +1 -1
  233. data/lib/utopia/command.rb +4 -4
  234. data/lib/utopia/command/environment.rb +73 -0
  235. data/lib/utopia/command/server.rb +19 -32
  236. data/lib/utopia/command/site.rb +26 -9
  237. data/lib/utopia/content/markup.rb +1 -1
  238. data/lib/utopia/setup.rb +49 -20
  239. data/lib/utopia/version.rb +1 -1
  240. data/setup/site/README.md +6 -7
  241. data/setup/site/Rakefile +3 -0
  242. data/setup/site/pages/_page.xnode +1 -1
  243. data/setup/site/public/_static/site.css +1 -1
  244. data/setup/site/tasks/bower.rake +3 -6
  245. data/setup/site/tasks/deploy.rake +1 -1
  246. data/setup/site/tasks/development.rake +1 -1
  247. data/setup/site/tasks/environment.rake +2 -2
  248. data/setup/site/tasks/static.rake +43 -0
  249. data/spec/utopia/command_spec.rb +170 -0
  250. data/spec/utopia/setup_spec.rb +20 -142
  251. metadata +225 -42
  252. data/documentation/public/_components/jquery-syntax/.sass-cache/040afc1428b286fb3c50151378b349a6149698d3/jquery.syntax.core.sassc +0 -0
  253. data/documentation/public/_components/jquery-syntax/.sass-cache/098642d80a1682613dca2bba6fd0a3bc9fd2bf04/jquery.syntax.layout.editor.sassc +0 -0
  254. data/documentation/public/_components/jquery-syntax/.sass-cache/098642d80a1682613dca2bba6fd0a3bc9fd2bf04/jquery.syntax.layout.fixed.sassc +0 -0
  255. data/documentation/public/_components/jquery-syntax/.sass-cache/098642d80a1682613dca2bba6fd0a3bc9fd2bf04/jquery.syntax.layout.inline.sassc +0 -0
  256. data/documentation/public/_components/jquery-syntax/.sass-cache/098642d80a1682613dca2bba6fd0a3bc9fd2bf04/jquery.syntax.layout.list.sassc +0 -0
  257. data/documentation/public/_components/jquery-syntax/.sass-cache/098642d80a1682613dca2bba6fd0a3bc9fd2bf04/jquery.syntax.layout.plain.sassc +0 -0
  258. data/documentation/public/_components/jquery-syntax/.sass-cache/098642d80a1682613dca2bba6fd0a3bc9fd2bf04/jquery.syntax.layout.table.sassc +0 -0
  259. data/documentation/public/_components/jquery-syntax/.sass-cache/10c58b30c53bf84f8360af8a864797092be26882/jquery.syntax.core.sassc +0 -0
  260. data/documentation/public/_components/jquery-syntax/.sass-cache/10c58b30c53bf84f8360af8a864797092be26882/jquery.syntax.layout.fixed.sassc +0 -0
  261. data/documentation/public/_components/jquery-syntax/.sass-cache/10c58b30c53bf84f8360af8a864797092be26882/jquery.syntax.layout.inline.sassc +0 -0
  262. data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/_layout.scssc +0 -0
  263. data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.apache.sassc +0 -0
  264. data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.applescript.sassc +0 -0
  265. data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.assembly.sassc +0 -0
  266. data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.bash-script.sassc +0 -0
  267. data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.bash.sassc +0 -0
  268. data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.clang.sassc +0 -0
  269. data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.css.sassc +0 -0
  270. data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.diff.sassc +0 -0
  271. data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.html.sassc +0 -0
  272. data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.ocaml.sassc +0 -0
  273. data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.protobuf.sassc +0 -0
  274. data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.python.sassc +0 -0
  275. data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.ruby.sassc +0 -0
  276. data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.xml.sassc +0 -0
  277. data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.core.sassc +0 -0
  278. data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.editor.sassc +0 -0
  279. data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.layout.editor.sassc +0 -0
  280. data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.layout.fixed.sassc +0 -0
  281. data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.layout.list.sassc +0 -0
  282. data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.layout.plain.sassc +0 -0
  283. data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.layout.table.sassc +0 -0
  284. data/documentation/public/_components/jquery-syntax/.sass-cache/8638ad407c5ea29f6547cf8ac6983da587354889/master.sassc +0 -0
  285. data/documentation/public/_components/jquery-syntax/.sass-cache/b7ab87e6269b4fe89f9475b7a260077391d3567b/jquery.syntax.layout.editor.sassc +0 -0
  286. data/documentation/public/_components/jquery-syntax/.sass-cache/b7ab87e6269b4fe89f9475b7a260077391d3567b/jquery.syntax.layout.fixed.sassc +0 -0
  287. data/documentation/public/_components/jquery-syntax/.sass-cache/b7ab87e6269b4fe89f9475b7a260077391d3567b/jquery.syntax.layout.inline.sassc +0 -0
  288. data/documentation/public/_components/jquery-syntax/.sass-cache/b7ab87e6269b4fe89f9475b7a260077391d3567b/jquery.syntax.layout.plain.sassc +0 -0
  289. data/documentation/public/_components/jquery-syntax/.sass-cache/e82f8cf4c8436da086a4506e01ef78755ebab1ce/master.scssc +0 -0
  290. data/lib/utopia/command/setup.rb +0 -78
@@ -19,5 +19,5 @@
19
19
  # THE SOFTWARE.
20
20
 
21
21
  module Utopia
22
- VERSION = "2.2.0"
22
+ VERSION = "2.3.0"
23
23
  end
data/setup/site/README.md CHANGED
@@ -6,12 +6,11 @@ Welcome to Utopia, a Ruby framework for web site and application development. Fo
6
6
 
7
7
  To start the development server, simply execute
8
8
 
9
- > rake server
10
- Puma starting in single mode...
11
- * Version 2.15.3 (ruby 2.2.1-p85), codename: Autumn Arbor Airbrush
12
- * Min threads: 0, max threads: 16
13
- * Environment: development
14
- * Listening on tcp://0.0.0.0:9292
15
- Use Ctrl-C to stop
9
+ > rake
10
+ Generating transient session key for development...
11
+ 20:57:36 - INFO - Starting Falcon HTTP server on localhost:9292
12
+ 20:57:36 - INFO - Guard::RSpec is running
13
+ 20:57:36 - INFO - Guard is now watching at '...'
14
+ [1] guard(main)>
16
15
 
17
16
  Then browse http://localhost:9292 (or as specified) to see your new site.
data/setup/site/Rakefile CHANGED
@@ -1,4 +1,7 @@
1
1
 
2
+ require 'pathname'
3
+ SITE_ROOT = Pathname.new(__dir__).realpath
4
+
2
5
  # Load all rake tasks:
3
6
  import(*Dir.glob('tasks/**/*.rake'))
4
7
 
@@ -1,7 +1,6 @@
1
1
  <!DOCTYPE html>
2
2
  <html>
3
3
  <head>
4
- <?r response.content_type = "text/html; charset=utf-8" ?>
5
4
  <?r response.cache! ?>
6
5
 
7
6
  <?r if title = self[:title] ?>
@@ -11,6 +10,7 @@
11
10
  <?r end ?>
12
11
 
13
12
  <base href="#{first.node.uri_path}"/>
13
+ <meta name="viewport" content="width=device-width, initial-scale=1"/>
14
14
 
15
15
  <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous" />
16
16
 
@@ -40,7 +40,7 @@ body > header {
40
40
 
41
41
  background-color: white;
42
42
 
43
- background-image: url(/_static/utopia-background.svg);
43
+ background-image: url(utopia-background.svg);
44
44
 
45
45
  box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);
46
46
  }
@@ -3,15 +3,12 @@ namespace :bower do
3
3
  desc 'Load the .bowerrc file and setup the environment for other tasks.'
4
4
  task :bowerrc do
5
5
  require 'json'
6
- require 'pathname'
7
6
 
8
- root = Pathname.new(__dir__).dirname
9
-
10
- bowerrc_path = root + ".bowerrc"
7
+ bowerrc_path = SITE_ROOT + ".bowerrc"
11
8
  bowerrc = JSON.load(File.read(bowerrc_path))
12
9
 
13
- @bower_package_root = root + bowerrc['directory']
14
- @bower_install_root = root + bowerrc['public']
10
+ @bower_package_root = SITE_ROOT + bowerrc['directory']
11
+ @bower_install_root = SITE_ROOT + bowerrc['public']
15
12
  @bower_install_method = (bowerrc['install'] || :copy).to_sym
16
13
  end
17
14
 
@@ -8,6 +8,6 @@ desc 'Restart the application server'
8
8
  task :restart do
9
9
  # This task is run after the deployment task above.
10
10
  if passenger_config = `which passenger-config`.chomp!
11
- sh(passenger_config, 'restart-app', '--ignore-passenger-not-running', File.dirname(__dir__))
11
+ sh(passenger_config, 'restart-app', '--ignore-passenger-not-running', SITE_ROOT.to_s)
12
12
  end
13
13
  end
@@ -27,7 +27,7 @@ task :console => :environment do
27
27
  include Rack::Test::Methods
28
28
 
29
29
  def app
30
- @app ||= Rack::Builder.parse_file(File.expand_path("../config.ru", __dir__)).first
30
+ @app ||= Rack::Builder.parse_file(SITE_ROOT + 'config.ru').first
31
31
  end
32
32
 
33
33
  Pry.start
@@ -1,7 +1,7 @@
1
1
 
2
2
  desc 'Set up the environment for running your web application'
3
- task :environment do
4
- require_relative '../config/environment'
3
+ task :environment do |task|
4
+ require SITE_ROOT + 'config/environment'
5
5
 
6
6
  # We ensure this is part of the shell environment so if other commands are invoked they will work correctly.
7
7
  ENV['RACK_ENV'] = RACK_ENV.to_s if defined?(RACK_ENV)
@@ -0,0 +1,43 @@
1
+
2
+ namespace :static do
3
+ task :static_environment do
4
+ RACK_ENV ||= :static
5
+ DATABASE_ENV ||= :production
6
+ SERVER_PORT ||= 9291
7
+ end
8
+
9
+ desc "Generate a static copy of the site."
10
+ task :generate => [:static_environment, :environment] do
11
+ require 'falcon/server'
12
+ require 'async/io'
13
+ require 'async/container'
14
+
15
+ config_path = SITE_ROOT + 'config.ru'
16
+ container_class = Async::Container::Threaded
17
+
18
+ app, options = Rack::Builder.parse_file(config_path.to_s)
19
+
20
+ container = container_class.new(concurrency: 2) do
21
+ server = Falcon::Server.new(app, [
22
+ Async::IO::Endpoint.parse("tcp://localhost:#{SERVER_PORT}", reuse_port: true)
23
+ ])
24
+
25
+ server.run
26
+ end
27
+
28
+ output_path = ENV.fetch('OUTPUT_PATH') {SITE_ROOT + 'static'}
29
+
30
+ # Delete any existing stuff:
31
+ FileUtils.rm_rf(output_path)
32
+
33
+ # Copy all public assets:
34
+ Dir.glob(SITE_ROOT + 'public/*').each do |path|
35
+ FileUtils.cp_r(path, output_path)
36
+ end
37
+
38
+ # Generate HTML pages:
39
+ system("wget", "--mirror", "--recursive", "--continue", "--convert-links", "--adjust-extension", "--no-host-directories", "--directory-prefix", output_path.to_s, "http://localhost:#{SERVER_PORT}")
40
+
41
+ container.stop
42
+ end
43
+ end
@@ -0,0 +1,170 @@
1
+ # Copyright, 2016, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ # THE SOFTWARE.
20
+
21
+ require 'fileutils'
22
+ require 'tmpdir'
23
+ require 'yaml'
24
+
25
+ require 'open3'
26
+
27
+ RSpec.describe "utopia command" do
28
+ let(:utopia) {File.expand_path("../../bin/utopia", __dir__)}
29
+ let(:gemspec) {Gem::Specification.load File.expand_path("../../utopia.gemspec", __dir__)}
30
+ let(:package_path) {File.expand_path("../../pkg/#{gemspec.file_name}", __dir__)}
31
+
32
+ before(:all) do
33
+ # We need to build a package to test deployment:
34
+ system("rake", "build") or abort("Could not build package for setup spec!")
35
+
36
+ ENV['DEPLOY_USER'] = 'http'
37
+ ENV['DEPLOY_GROUP'] = 'http'
38
+ end
39
+
40
+ around(:each) do |example|
41
+ Bundler.with_clean_env do
42
+ # If we don't delete this, when running on travis, it will try submit the coverage report.
43
+ ENV.delete('COVERAGE')
44
+
45
+ # This allows the utopia command to load the correct library:
46
+ ENV['RUBYLIB'] = File.expand_path("../../lib", __dir__)
47
+
48
+ example.run
49
+ end
50
+ end
51
+
52
+ def sh_status(*args)
53
+ system(*args) ? 0 : false
54
+ end
55
+
56
+ def sh_stdout(*args)
57
+ output, status = Open3.capture2(*args)
58
+ return output
59
+ end
60
+
61
+ def git_config(name, value=nil)
62
+ unless value.nil?
63
+ return sh_status('git', 'config', name, value)
64
+ else
65
+ return sh_stdout('git', 'config', name).chomp
66
+ end
67
+ end
68
+
69
+ def group_rw(path)
70
+ gaccess = File.stat(path).mode.to_s(8)[-2]
71
+ return gaccess == '6' || gaccess == '7'
72
+ end
73
+
74
+ def install_packages(dir)
75
+ # We do a bit of a hack here to ensure the package is available:
76
+ FileUtils.mkpath File.join(dir, "vendor/cache")
77
+ FileUtils.cp package_path, File.join(dir, "vendor/cache")
78
+ end
79
+
80
+ it "should generate sample site" do
81
+ Dir.mktmpdir('test-site') do |dir|
82
+ install_packages(dir)
83
+
84
+ result = sh_status(utopia, "--in", dir, "site", "create")
85
+ expect(result).to be == 0
86
+
87
+ expect(Dir.entries(dir)).to include(".bowerrc", ".git", "Gemfile", "Gemfile.lock", "README.md", "Rakefile", "config.ru", "lib", "pages", "public", "spec")
88
+
89
+ Dir.chdir(dir) do
90
+ result = sh_status("rake", "test")
91
+ expect(result).to be == 0
92
+ end
93
+ end
94
+ end
95
+
96
+ it "should generate a sample server" do
97
+ Dir.mktmpdir('test-server') do |dir|
98
+ install_packages(dir)
99
+
100
+ result = sh_status(utopia, "--in", dir, "server", "create")
101
+ expect(result).to be == 0
102
+
103
+ expect(Dir.entries(dir)).to include(".git")
104
+
105
+ # make sure git is set up properly
106
+ Dir.chdir(dir) do
107
+ expect(git_config 'core.sharedRepository').to be == '1'
108
+ expect(git_config 'receive.denyCurrentBranch').to be == 'ignore'
109
+ expect(git_config 'core.worktree').to be == dir
110
+ end
111
+
112
+ environment = YAML.load_file(File.join(dir, 'config/environment.yaml'))
113
+ expect(environment).to include('RACK_ENV', 'UTOPIA_SESSION_SECRET')
114
+ end
115
+ end
116
+
117
+ it "should not trash the sample server during update" do
118
+ Dir.mktmpdir('test-server') do |dir|
119
+ install_packages(dir)
120
+
121
+ result = sh_status(utopia, "--in", dir, "server", "create")
122
+ expect(result).to be == 0
123
+
124
+ Dir.chdir(dir) do
125
+ # make the repository look a bit like like it's an old one
126
+ git_config 'core.sharedRepository', 'false'
127
+ sh_status 'chmod', '-Rf', 'g-x', '.git'
128
+ sh_status 'rm', '-f', '.git/hooks/post-receive'
129
+ end
130
+
131
+ result = sh_status(utopia, "--in", dir, "server", "update")
132
+ expect(result).to be == 0
133
+
134
+ # check a couple of files to make sure they have group read and write access
135
+ # after the update
136
+ Dir.glob(File.join(dir, '.git/**/*')).each do |path|
137
+ expect(group_rw path).to be == true
138
+ end
139
+ end
140
+ end
141
+
142
+ it "can generate sample site, server and push to the server" do
143
+ Dir.mktmpdir('test') do |dir|
144
+ site_path = File.join(dir, 'site')
145
+
146
+ install_packages(site_path)
147
+
148
+ server_path = File.join(dir, 'server')
149
+
150
+ result = sh_status(utopia, "--in", site_path, "site", "create")
151
+ expect(result).to be == 0
152
+
153
+ result = sh_status(utopia, "--in", server_path, "server", "create")
154
+ expect(result).to be == 0
155
+
156
+ Dir.chdir(site_path) do
157
+ result = sh_status("git", "push", "--set-upstream", server_path, "master")
158
+ expect(result).to be == 0
159
+ end
160
+
161
+ files = %W[.bowerrc .git Gemfile Gemfile.lock README.md Rakefile config.ru lib pages public]
162
+
163
+ expect(Dir.entries(server_path)).to include(*files)
164
+
165
+ expect(File.executable? File.join(server_path, 'config.ru')).to be == true
166
+
167
+ puts File.stat(File.join(dir, 'server', '.git')).mode
168
+ end
169
+ end
170
+ end
@@ -1,4 +1,4 @@
1
- # Copyright, 2016, by Samuel G. D. Williams. <http://www.codeotaku.com>
1
+ # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  # of this software and associated documentation files (the "Software"), to deal
@@ -18,153 +18,31 @@
18
18
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
19
  # THE SOFTWARE.
20
20
 
21
- require 'fileutils'
22
- require 'tmpdir'
23
- require 'yaml'
21
+ require 'utopia/setup'
24
22
 
25
- require 'open3'
26
-
27
- RSpec.describe "utopia executable" do
28
- let(:utopia) {File.expand_path("../../bin/utopia", __dir__)}
29
- let(:gemspec) {Gem::Specification.load File.expand_path("../../utopia.gemspec", __dir__)}
30
- let(:package_path) {File.expand_path("../../pkg/#{gemspec.file_name}", __dir__)}
23
+ RSpec.describe Utopia::Setup do
24
+ let(:config_root) {File.expand_path('setup_spec/config', __dir__)}
25
+ subject{Utopia::Setup.new(config_root)}
31
26
 
32
- before(:all) do
33
- # We need to build a package to test deployment:
34
- system("rake", "build") or abort("Could not build package for setup spec!")
27
+ it "should load specified environment" do
28
+ stub_const("Utopia::Setup::ENV", {'UTOPIA_ENV' => 'production'})
35
29
 
36
- ENV['DEPLOY_USER'] = 'http'
37
- ENV['DEPLOY_GROUP'] = 'http'
38
- end
39
-
40
- around(:each) do |example|
41
- Bundler.with_clean_env do
42
- # If we don't delete this, when running on travis, it will try submit the coverage report.
43
- ENV.delete('COVERAGE')
44
-
45
- # This allows the utopia command to load the correct library:
46
- ENV['RUBYLIB'] = File.expand_path("../../lib", __dir__)
47
-
48
- example.run
49
- end
50
- end
51
-
52
- def sh_status(*args)
53
- system(*args) ? 0 : false
54
- end
55
-
56
- def sh_stdout(*args)
57
- output, status = Open3.capture2(*args)
58
- return output
59
- end
60
-
61
- def git_config(name, value=nil)
62
- unless value.nil?
63
- return sh_status('git', 'config', name, value)
64
- else
65
- return sh_stdout('git', 'config', name).chomp
66
- end
67
- end
68
-
69
- def group_rw(path)
70
- gaccess = File.stat(path).mode.to_s(8)[-2]
71
- return gaccess == '6' || gaccess == '7'
72
- end
73
-
74
- def install_packages(dir)
75
- # We do a bit of a hack here to ensure the package is available:
76
- FileUtils.mkpath File.join(dir, "vendor/cache")
77
- FileUtils.cp package_path, File.join(dir, "vendor/cache")
78
- end
79
-
80
- it "should generate sample site" do
81
- Dir.mktmpdir('test-site') do |dir|
82
- install_packages(dir)
83
-
84
- result = sh_status(utopia, "--in", dir, "site", "create")
85
- expect(result).to be == 0
86
-
87
- expect(Dir.entries(dir)).to include(".bowerrc", ".git", "Gemfile", "Gemfile.lock", "README.md", "Rakefile", "config.ru", "lib", "pages", "public", "spec")
88
-
89
- Dir.chdir(dir) do
90
- result = sh_status("rake", "test")
91
- expect(result).to be == 0
92
- end
93
- end
94
- end
95
-
96
- it "should generate a sample server" do
97
- Dir.mktmpdir('test-server') do |dir|
98
- install_packages(dir)
99
-
100
- result = sh_status(utopia, "--in", dir, "server", "create")
101
- expect(result).to be == 0
102
-
103
- expect(Dir.entries(dir)).to include(".git")
104
-
105
- # make sure git is set up properly
106
- Dir.chdir(dir) do
107
- expect(git_config 'core.sharedRepository').to be == '1'
108
- expect(git_config 'receive.denyCurrentBranch').to be == 'ignore'
109
- expect(git_config 'core.worktree').to be == dir
110
- end
111
-
112
- environment = YAML.load_file(File.join(dir, 'config/environment.yaml'))
113
- expect(environment).to include('RACK_ENV', 'UTOPIA_SESSION_SECRET')
114
- end
30
+ expect(subject).to receive(:load_environment).with('production')
31
+
32
+ subject.apply_environment
115
33
  end
116
34
 
117
- it "should not trash the sample server during update" do
118
- Dir.mktmpdir('test-server') do |dir|
119
- install_packages(dir)
120
-
121
- result = sh_status(utopia, "--in", dir, "server", "create")
122
- expect(result).to be == 0
123
-
124
- Dir.chdir(dir) do
125
- # make the repository look a bit like like it's an old one
126
- git_config 'core.sharedRepository', 'false'
127
- sh_status 'chmod', '-Rf', 'g-x', '.git'
128
- sh_status 'rm', '-f', '.git/hooks/post-receive'
129
- end
130
-
131
- result = sh_status(utopia, "--in", dir, "server", "update")
132
- expect(result).to be == 0
133
-
134
- # check a couple of files to make sure they have group read and write access
135
- # after the update
136
- Dir.glob(File.join(dir, '.git/**/*')).each do |path|
137
- expect(group_rw path).to be == true
138
- end
139
- end
35
+ it "should load default environment" do
36
+ stub_const("Utopia::Setup::ENV", {})
37
+
38
+ expect(subject).to receive(:load_environment).with('environment')
39
+
40
+ subject.apply_environment
140
41
  end
141
42
 
142
- it "can generate sample site, server and push to the server" do
143
- Dir.mktmpdir('test') do |dir|
144
- site_path = File.join(dir, 'site')
145
-
146
- install_packages(site_path)
147
-
148
- server_path = File.join(dir, 'server')
149
-
150
- result = sh_status(utopia, "--in", site_path, "site", "create")
151
- expect(result).to be == 0
152
-
153
- result = sh_status(utopia, "--in", server_path, "server", "create")
154
- expect(result).to be == 0
155
-
156
- Dir.chdir(site_path) do
157
- result = sh_status("git", "push", "--set-upstream", server_path, "master")
158
- expect(result).to be == 0
159
- end
160
-
161
- files = %W[.bowerrc .git Gemfile Gemfile.lock README.md Rakefile config.ru lib pages public]
162
-
163
- expect(Dir.entries(server_path)).to include(*files)
164
-
165
- expect(File.executable? File.join(server_path, 'config.ru')).to be == true
166
-
167
- puts File.stat(File.join(dir, 'server', '.git')).mode
168
- end
43
+ it "should add load path" do
44
+ subject.add_load_path('lib')
45
+
46
+ expect($LOAD_PATH).to include(File.expand_path('lib', subject.site_root))
169
47
  end
170
48
  end