utopia 2.2.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -6,16 +6,4 @@ group :development do
6
6
  watch(%r{^config|lib|pages/.*})
7
7
  notification :off
8
8
  end
9
-
10
- # # Open the documentation website when the command is run, once puma has started:
11
- # require 'launchy'
12
- # $first_time = true
13
- #
14
- # url_path = 'run/url.txt'
15
- # watch(url_path) do
16
- # if $first_time
17
- # $first_time = false
18
- # Launchy.open(File.read(url_path))
19
- # end
20
- # end
21
9
  end
@@ -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
 
@@ -9,6 +9,8 @@
9
9
  <title>Utopia</title>
10
10
  <?r end ?>
11
11
 
12
+ <meta charset="UTF-8" />
13
+
12
14
  <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous" />
13
15
 
14
16
  <link rel="icon" type="image/png" href="/_static/icon.png" />
@@ -9,6 +9,7 @@ Reading these pages in order will give you an overview of the design of Utopia,
9
9
  - [Development Environment Setup](development-environment-setup/)
10
10
  - [Server Setup](server-setup/)
11
11
  - [Your First Page](your-first-page/)
12
+ - [What is `.xnode`?](faq/what-is-xnode/)
12
13
  - [Installing JavaScript Libraries](bower-integration/)
13
14
  - [Website Tests](testing/)
14
15
  - [Updating Your Site](updating-utopia/)
@@ -0,0 +1,37 @@
1
+ # What Is `.xnode`?
2
+
3
+ Xnodes are the files on disk which are used as part of Utopia's content/view layer. Xnode templates are designed to maximise the ratio of content to markup. They improve separation of concerns and semantic organisation because repeated markup can be reused easily.
4
+
5
+ Here is a example of a blog post:
6
+
7
+ ```xml
8
+ <content:entry title="My day as a fish">
9
+ <p>It was not very exciting</p>
10
+ </content:entry>
11
+ ```
12
+
13
+ The `Utopia::Content` middleware is built on top of the [Trenni](https://github.com/ioquatix/trenni) template language which uses two-phase evaluation.
14
+
15
+ ## Phase 1: Evaluation
16
+
17
+ Trenni processes the view content by evaluation `#{expressions}` and `<?r statements ?>`. This generates an output buffer. The output buffer should contain valid markup (i.e. balanced tags, no invalid characters).
18
+
19
+ ## Phase 2: Markup
20
+
21
+ Once the template is evaluated to text, it is parsed again into an event stream which is used to generate the final output. The event stream contains things like "open tag", "attribute", "close tag", and so on, and these are fed into the `Utopia::Content` middleware which generates the actual content. Tags without namespaces are output verbatim, while tags with namespaces invoke the tag lookup machinery. This uses the tag name to invoke further behaviour, e.g. inserting more content. Here is a simple example of a basic page:
22
+
23
+ ```xml
24
+ <content:page>
25
+ <content:heading>Welcome to my page</content:heading>
26
+
27
+ <p>This page is so awesome</p>
28
+ </content:page>
29
+ ```
30
+
31
+ In order to render this, you will need two additional files, `_page.xnode` and `_heading.xnode`. As a short example, `_heading.xnode` might look like this:
32
+
33
+ ```xml
34
+ <h1><utopia:content/></h1>
35
+ ```
36
+
37
+ When the parser encounters `<content:heading>...` in the main page, it would evaluate the above template. `<utopia:content/>` is a special tag that evaluates to the content that the parent tag provided, so in this case: `"Welcome to my page"`. Thus, the final output is `<h1>Welcome to my page</h1>`.
@@ -1,2 +1,4 @@
1
1
  index:
2
- title: "Wiki"
2
+ title: Wiki
3
+ faq:
4
+ title: FAQ
@@ -26,7 +26,7 @@ $ git push --set-upstream production master
26
26
  Utopia will load `config/environment.yaml` and update `ENV` before executing any code. You can set default environment values using the `utopia` command:
27
27
 
28
28
  ```bash
29
- $ sudo -u http utopia server environment RACK_ENV=production DATABASE_ENV=production_cluster_primary
29
+ $ sudo -u http utopia environment RACK_ENV=production DATABASE_ENV=production_cluster_primary
30
30
  ENV["RACK_ENV"] will default to "production" unless otherwise specified.
31
31
  ENV["DATABASE_ENV"] will default to "production_cluster_primary" unless otherwise specified.
32
32
  ```
@@ -5,6 +5,8 @@
5
5
 
6
6
  <footer>
7
7
  Last Modified: #{File.mtime(self[:page_file]) rescue "N/A"} &mdash;
8
+ <?r if RACK_ENV != :static ?>
8
9
  <a href="edit">Edit Page</a>
10
+ <?r end ?>
9
11
  </footer>
10
12
  </content:page>
@@ -9,7 +9,7 @@ $ utopia site create
9
9
  $ rake server
10
10
  ```
11
11
 
12
- You will now have a basic template site running on <a href="http://localhost:9292">http://localhost:9292</a>.
12
+ You will now have a basic template site running on `http://localhost:9292`.
13
13
 
14
14
  ## Welcome Page
15
15
 
@@ -22,6 +22,7 @@ require_relative 'version'
22
22
 
23
23
  require_relative 'command/site'
24
24
  require_relative 'command/server'
25
+ require_relative 'command/environment'
25
26
 
26
27
  module Utopia
27
28
  module Command
@@ -41,7 +42,8 @@ module Utopia
41
42
 
42
43
  nested '<command>',
43
44
  'site' => Site,
44
- 'server' => Server
45
+ 'server' => Server,
46
+ 'environment' => Environment
45
47
 
46
48
  # The root directory for the site.
47
49
  def root
@@ -54,9 +56,7 @@ module Utopia
54
56
  elsif @options[:help] or @command.nil?
55
57
  print_usage(program_name)
56
58
  else
57
- track_time do
58
- @command.invoke(self)
59
- end
59
+ @command.invoke(self)
60
60
  end
61
61
  end
62
62
  end
@@ -0,0 +1,73 @@
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 'securerandom'
22
+ require 'yaml/store'
23
+
24
+ module Utopia
25
+ module Command
26
+ # Set environment variables within the server deployment.
27
+ class Environment < Samovar::Command
28
+ self.description = "Update environment variables in config/environment.yaml"
29
+
30
+ options do
31
+ option '-e/--environment-name <name>', "The environment file to modify.", default: 'environment'
32
+ end
33
+
34
+ many :variables, "A list of environment KEY=VALUE pairs to set."
35
+
36
+ # Setup `config/environment.yaml` according to specified options.
37
+ def update_environment(root, name = @options[:environment_name])
38
+ environment_path = File.join(root, "config", "#{name}.yaml")
39
+ FileUtils.mkpath File.dirname(environment_path)
40
+
41
+ store = YAML::Store.new(environment_path)
42
+
43
+ store.transaction do
44
+ yield store
45
+ end
46
+ end
47
+
48
+ def invoke(parent)
49
+ destination_root = parent.root
50
+
51
+ update_environment(destination_root) do |store|
52
+ variables.each do |variable|
53
+ key, value = variable.split('=', 2)
54
+
55
+ if value
56
+ puts "ENV[#{key.inspect}] will default to #{value.inspect} unless otherwise specified."
57
+ store[key] = value
58
+ else
59
+ puts "ENV[#{key.inspect}] will be unset unless otherwise specified."
60
+ store.delete(key)
61
+ end
62
+ end
63
+
64
+ store.roots.each do |key|
65
+ value = store[key]
66
+
67
+ puts "#{Rainbow(key).blue}: #{Rainbow(value.inspect).green}"
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -18,7 +18,11 @@
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_relative 'setup'
21
+ require_relative 'site'
22
+
23
+ require 'fileutils'
24
+
25
+ require 'samovar'
22
26
 
23
27
  module Utopia
24
28
  module Command
@@ -46,6 +50,11 @@ module Utopia
46
50
  class Update < Samovar::Command
47
51
  self.description = "Update the git hooks in an existing server repository."
48
52
 
53
+ def template_root
54
+ # The root directory of the template server deployment:
55
+ File.join(SETUP_ROOT, 'server')
56
+ end
57
+
49
58
  def invoke(parent)
50
59
  destination_root = parent.root
51
60
 
@@ -64,49 +73,27 @@ module Utopia
64
73
  # chmod g+s `find . -type d` # New files get group id of directory
65
74
  end
66
75
 
67
- Setup::Server.update_default_environment(destination_root)
76
+ # Set some useful defaults for the environment.
77
+ environment = Environment[]
78
+ environment.update_environment(destination_root) do |store|
79
+ store['RACK_ENV'] ||= 'production'
80
+ store['DATABASE_ENV'] ||= 'production'
81
+ store['UTOPIA_SESSION_SECRET'] ||= SecureRandom.hex(40)
82
+ end
68
83
 
69
84
  # Copy git hooks:
70
- system("cp", "-r", File.join(Setup::Server::ROOT, 'git', 'hooks'), File.join(destination_root, '.git')) or fail "could not copy git hooks"
85
+ system("cp", "-r", File.join(template_root, 'git', 'hooks'), File.join(destination_root, '.git')) or fail "could not copy git hooks"
71
86
  # finally set everything in the .git directory to be group writable
72
87
  # This failed for me and I had to do sudo chown http:http .git -R first.
73
88
  system("chmod", "-Rf", "g+w", File.join(destination_root, '.git')) or fail "could not update permissions of .git directory"
74
89
  end
75
90
  end
76
91
 
77
- # Set environment variables within the server deployment.
78
- class Environment < Samovar::Command
79
- self.description = "Update environment variables in config/environment.yaml"
80
-
81
- many :variables, "A list of environment KEY=VALUE pairs to set."
82
-
83
- def invoke(parent)
84
- return if variables.empty?
85
-
86
- destination_root = parent.root
87
-
88
- Setup::Server.environment(destination_root) do |store|
89
- variables.each do |variable|
90
- key, value = variable.split('=', 2)
91
-
92
- if value
93
- puts "ENV[#{key.inspect}] will default to #{value.inspect} unless otherwise specified."
94
- store[key] = value
95
- else
96
- puts "ENV[#{key.inspect}] will be unset unless otherwise specified."
97
- store.delete(key)
98
- end
99
- end
100
- end
101
- end
102
- end
103
-
104
92
  self.description = "Manage server deployments."
105
93
 
106
94
  nested '<command>',
107
95
  'create' => Create,
108
- 'update' => Update,
109
- 'environment' => Environment
96
+ 'update' => Update
110
97
 
111
98
  def invoke(parent)
112
99
  @command.invoke(parent)
@@ -18,29 +18,46 @@
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_relative 'setup'
21
+ require 'fileutils'
22
+ require 'find'
23
+
24
+ require 'samovar'
22
25
 
23
26
  module Utopia
24
27
  module Command
28
+ # This path must point to utopia/setup in the gem source.
29
+ SETUP_ROOT = File.expand_path("../../../setup", __dir__)
30
+
25
31
  # Local site setup commands.
26
32
  class Site < Samovar::Command
33
+ # Configuration files which should be installed/updated:
34
+ CONFIGURATION_FILES = ['.bowerrc', '.gitignore', 'config.ru', 'config/environment.rb', 'Gemfile', 'Guardfile', 'Rakefile', 'tasks/bower.rake', 'tasks/deploy.rake', 'tasks/development.rake', 'tasks/environment.rake', 'tasks/log.rake']
35
+
36
+ # Directories that should exist:
37
+ DIRECTORIES = ["config", "lib", "pages", "public", "tasks"]
38
+
39
+ # Directories that should be removed during upgrade process:
40
+ OLD_PATHS = ["access_log", "cache", "tmp", 'tasks/test.rake', 'tasks/utopia.rake']
41
+
42
+ # The root directory of the template site:
43
+ ROOT = File.join(SETUP_ROOT, 'site')
44
+
27
45
  # Create a local site.
28
46
  class Create < Samovar::Command
29
47
  self.description = "Create a new local Utopia website using the default template."
30
- # self.example = "utopia --in www.example.com site create"
31
48
 
32
49
  def invoke(parent)
33
50
  destination_root = parent.root
34
51
 
35
52
  $stderr.puts "Setting up initial site in #{destination_root} for Utopia v#{Utopia::VERSION}..."
36
53
 
37
- Setup::Site::DIRECTORIES.each do |directory|
54
+ DIRECTORIES.each do |directory|
38
55
  FileUtils.mkdir_p(File.join(destination_root, directory))
39
56
  end
40
57
 
41
- Find.find(Setup::Site::ROOT) do |source_path|
58
+ Find.find(ROOT) do |source_path|
42
59
  # What is this doing?
43
- destination_path = File.join(destination_root, source_path[Setup::Site::ROOT.size..-1])
60
+ destination_path = File.join(destination_root, source_path[ROOT.size..-1])
44
61
 
45
62
  if File.directory?(source_path)
46
63
  FileUtils.mkdir_p(destination_path)
@@ -51,7 +68,7 @@ module Utopia
51
68
  end
52
69
  end
53
70
 
54
- Setup::Site::CONFIGURATION_FILES.each do |configuration_file|
71
+ CONFIGURATION_FILES.each do |configuration_file|
55
72
  destination_path = File.join(destination_root, configuration_file)
56
73
 
57
74
  buffer = File.read(destination_path).gsub('$UTOPIA_VERSION', Utopia::VERSION)
@@ -128,17 +145,17 @@ module Utopia
128
145
  system('git', 'checkout', '-b', branch_name) or fail "could not change branch"
129
146
  end
130
147
 
131
- Setup::Site::DIRECTORIES.each do |directory|
148
+ DIRECTORIES.each do |directory|
132
149
  FileUtils.mkdir_p(File.join(destination_root, directory))
133
150
  end
134
151
 
135
- Setup::Site::OLD_PATHS.each do |path|
152
+ OLD_PATHS.each do |path|
136
153
  path = File.join(destination_root, path)
137
154
  $stderr.puts "\tRemoving #{path}..."
138
155
  FileUtils.rm_rf(path)
139
156
  end
140
157
 
141
- Setup::Site::CONFIGURATION_FILES.each do |configuration_file|
158
+ CONFIGURATION_FILES.each do |configuration_file|
142
159
  source_path = File.join(Setup::Site::ROOT, configuration_file)
143
160
  destination_path = File.join(destination_root, configuration_file)
144
161
 
@@ -103,7 +103,7 @@ module Utopia
103
103
  # This is for compatibility with the existing API which passes in a string:
104
104
  buffer = Trenni::Buffer(buffer)
105
105
 
106
- self.new(buffer, delegate).parse!
106
+ self.new(buffer, delegate, entities).parse!
107
107
  end
108
108
 
109
109
  def initialize(buffer, delegate, entities = Trenni::Entities::HTML5)
data/lib/utopia/setup.rb CHANGED
@@ -18,55 +18,84 @@
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 'yaml'
22
+
21
23
  module Utopia
22
24
  # Used for setting up a Utopia web application, typically via `config/environment.rb`
23
- class Bootstrap
25
+ class Setup
24
26
  def initialize(config_root, external_encoding: Encoding::UTF_8)
25
27
  @config_root = config_root
26
28
 
27
29
  @external_encoding = external_encoding
30
+
31
+ @environment = nil
28
32
  end
29
33
 
30
- def setup
31
- setup_encoding
34
+ attr :config_root
35
+ attr :external_encoding
36
+ attr :environment
37
+
38
+ ENVIRONMENT_KEY = 'UTOPIA_ENV'.freeze
39
+ DEFAULT_ENVIRONMENT = 'environment'.freeze
40
+
41
+ def explicit_environment_name
42
+ ENV[ENVIRONMENT_KEY]
43
+ end
44
+
45
+ def site_root
46
+ File.dirname(@config_root)
47
+ end
48
+
49
+ def apply
50
+ set_external_encoding
32
51
 
33
- setup_environment
52
+ apply_environment
34
53
 
35
- setup_load_path
54
+ add_load_path('lib')
36
55
 
37
56
  require_relative '../utopia'
38
57
  end
39
58
 
40
- def environment_path
41
- File.expand_path('environment.yaml', @config_root)
59
+ def apply_environment
60
+ if name = explicit_environment_name
61
+ load_environment(name)
62
+ else
63
+ load_environment(DEFAULT_ENVIRONMENT)
64
+ end
65
+ end
66
+
67
+ def environment_path(name, root = @config_root)
68
+ File.expand_path("#{name}.yaml", root)
42
69
  end
43
70
 
44
71
  # If you don't specify these, it's possible to have issues when encodings mismatch on the server.
45
- def setup_encoding
72
+ def set_external_encoding(encoding = Encoding::UTF_8)
46
73
  # TODO: Deprecate and remove this setup - it should be the responsibility of the server to set this correctly.
47
- if @external_encoding and Encoding.default_external != @external_encoding
48
- warn "Updating Encoding.default_external from #{Encoding.default_external} to #{@external_encoding}" if $VERBOSE
49
- Encoding.default_external = @external_encoding
74
+ if Encoding.default_external != encoding
75
+ warn "Updating Encoding.default_external from #{Encoding.default_external} to #{encoding}" if $VERBOSE
76
+ Encoding.default_external = encoding
50
77
  end
51
78
  end
52
79
 
53
- def setup_environment
54
- if File.exist? environment_path
55
- require 'yaml'
56
-
80
+ # Load the named configuration file from the `config_root` directory.
81
+ def load_environment(*args)
82
+ path = environment_path(*args)
83
+
84
+ if File.exist?(path)
57
85
  # Load the YAML environment file:
58
- environment = YAML.load_file(environment_path)
86
+ @environment = YAML.load_file(path)
59
87
 
60
88
  # We update ENV but only when it's not already set to something:
61
- ENV.update(environment) do |name, old_value, new_value|
89
+ ENV.update(@environment) do |name, old_value, new_value|
62
90
  old_value || new_value
63
91
  end
64
92
  end
65
93
  end
66
94
 
67
- def setup_load_path
95
+ # Add the given path to $LOAD_PATH. If it's relative, make it absolute relative to `site_path`.
96
+ def add_load_path(path)
68
97
  # Allow loading library code from lib directory:
69
- $LOAD_PATH << File.expand_path('../lib', @config_root)
98
+ $LOAD_PATH << File.expand_path(path, site_root)
70
99
  end
71
100
  end
72
101
 
@@ -77,6 +106,6 @@ module Utopia
77
106
  config_root = File.dirname(caller[0])
78
107
  end
79
108
 
80
- Bootstrap.new(config_root, **options).tap(&:setup)
109
+ Setup.new(config_root, **options).tap(&:apply)
81
110
  end
82
111
  end