utopia 2.2.0 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.codeclimate.yml +1 -0
- data/.travis.yml +3 -1
- data/Gemfile +2 -0
- data/README.md +2 -2
- data/Rakefile +19 -7
- data/docs/.nojekyll +0 -0
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.apache.css +6 -0
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.applescript.css +5 -0
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.assembly.css +8 -0
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.bash-script.css +6 -0
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.bash.css +10 -0
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.clang.css +3 -0
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.css.css +14 -0
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.diff.css +16 -0
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.html.css +5 -0
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.ocaml.css +3 -0
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.protobuf.css +2 -0
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.python.css +6 -0
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.ruby.css +2 -0
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.xml.css +18 -0
- data/docs/_components/jquery-syntax/base/jquery.syntax.core.css +62 -0
- data/docs/_components/jquery-syntax/base/jquery.syntax.editor.css +6 -0
- data/docs/_components/jquery-syntax/base/theme.js +1 -0
- data/docs/_components/jquery-syntax/bright/jquery.syntax.core.css +27 -0
- data/docs/_components/jquery-syntax/bright/theme.js +1 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.apache.js +41 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.applescript.js +57 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.assembly.js +37 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.bash-script.js +67 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.bash.js +33 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.basic.js +51 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.clang.js +89 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.csharp.js +47 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.css.js +80 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.diff.js +24 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.go.js +47 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.haskell.js +45 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.html.js +66 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.io.js +45 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.java.js +45 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.javascript.js +40 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.kai.js +29 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.lisp.js +34 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.lua.js +44 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.nginx.js +31 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.ocaml.js +73 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.ooc.js +46 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.pascal.js +51 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.perl5.js +52 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.php-script.js +48 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.php.js +15 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.plain.js +10 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.protobuf.js +43 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.python.js +44 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.ruby.js +77 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.scala.js +44 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.smalltalk.js +29 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.sql.js +31 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.super-collider.js +57 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.swift.js +55 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.trenni.js +35 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.xml.js +50 -0
- data/docs/_components/jquery-syntax/jquery.syntax.brush.yaml.js +29 -0
- data/docs/_components/jquery-syntax/jquery.syntax.cache.js +65 -0
- data/docs/_components/jquery-syntax/jquery.syntax.core.js +1098 -0
- data/docs/_components/jquery-syntax/jquery.syntax.editor.js +291 -0
- data/docs/_components/jquery-syntax/jquery.syntax.js +258 -0
- data/docs/_components/jquery-syntax/jquery.syntax.min.js +13 -0
- data/docs/_components/jquery-syntax/paper/jquery.syntax.core.css +31 -0
- data/docs/_components/jquery-syntax/paper/theme.js +1 -0
- data/docs/_components/jquery/core.js +482 -0
- data/docs/_components/jquery/jquery.js +10220 -0
- data/docs/_components/jquery/jquery.min.js +4 -0
- data/docs/_components/jquery/jquery.min.map +1 -0
- data/docs/_components/jquery/jquery.slim.js +8107 -0
- data/docs/_components/jquery/jquery.slim.min.js +4 -0
- data/docs/_components/jquery/jquery.slim.min.map +1 -0
- data/docs/_static/icon.png +0 -0
- data/docs/_static/site.css +205 -0
- data/docs/_static/utopia-background.svg +1 -0
- data/docs/_static/utopia.svg +1 -0
- data/docs/code/Utopia.html +511 -0
- data/docs/code/Utopia/Basename.html +654 -0
- data/docs/code/Utopia/Bootstrap.html +538 -0
- data/docs/code/Utopia/Command.html +207 -0
- data/docs/code/Utopia/Command/Environment.html +321 -0
- data/docs/code/Utopia/Command/Server.html +214 -0
- data/docs/code/Utopia/Command/Server/Create.html +222 -0
- data/docs/code/Utopia/Command/Server/Environment.html +236 -0
- data/docs/code/Utopia/Command/Server/Update.html +317 -0
- data/docs/code/Utopia/Command/Setup.html +145 -0
- data/docs/code/Utopia/Command/Setup/Server.html +298 -0
- data/docs/code/Utopia/Command/Setup/Site.html +180 -0
- data/docs/code/Utopia/Command/Site.html +279 -0
- data/docs/code/Utopia/Command/Site/Create.html +324 -0
- data/docs/code/Utopia/Command/Site/Update.html +407 -0
- data/docs/code/Utopia/Command/Top.html +279 -0
- data/docs/code/Utopia/Content.html +826 -0
- data/docs/code/Utopia/Content/Document.html +1818 -0
- data/docs/code/Utopia/Content/Document/State.html +1220 -0
- data/docs/code/Utopia/Content/Link.html +1286 -0
- data/docs/code/Utopia/Content/Links.html +841 -0
- data/docs/code/Utopia/Content/MarkupParser.html +881 -0
- data/docs/code/Utopia/Content/MarkupParser/ParsedTag.html +422 -0
- data/docs/code/Utopia/Content/MarkupParser/UnbalancedTagError.html +615 -0
- data/docs/code/Utopia/Content/Namespace.html +485 -0
- data/docs/code/Utopia/Content/Node.html +1188 -0
- data/docs/code/Utopia/Content/Node/Context.html +938 -0
- data/docs/code/Utopia/Content/Response.html +813 -0
- data/docs/code/Utopia/Content/SymbolicHash.html +419 -0
- data/docs/code/Utopia/Content/Tag.html +399 -0
- data/docs/code/Utopia/Content/Tags.html +136 -0
- data/docs/code/Utopia/Content/Tags/ContentTag.html +187 -0
- data/docs/code/Utopia/Content/Tags/DeferredTag.html +193 -0
- data/docs/code/Utopia/Content/Tags/Library.html +333 -0
- data/docs/code/Utopia/Content/Tags/NodeTag.html +193 -0
- data/docs/code/Utopia/Content/UnbalancedTagError.html +298 -0
- data/docs/code/Utopia/ContentLength.html +339 -0
- data/docs/code/Utopia/Controller.html +901 -0
- data/docs/code/Utopia/Controller/Actions.html +289 -0
- data/docs/code/Utopia/Controller/Actions/Action.html +978 -0
- data/docs/code/Utopia/Controller/Actions/ClassMethods.html +442 -0
- data/docs/code/Utopia/Controller/Base.html +1216 -0
- data/docs/code/Utopia/Controller/Respond.html +283 -0
- data/docs/code/Utopia/Controller/Respond/ClassMethods.html +236 -0
- data/docs/code/Utopia/Controller/Respond/Converter.html +256 -0
- data/docs/code/Utopia/Controller/Respond/Converter/Callback.html +484 -0
- data/docs/code/Utopia/Controller/Respond/Converter/ToJSON.html +375 -0
- data/docs/code/Utopia/Controller/Respond/Passthrough.html +291 -0
- data/docs/code/Utopia/Controller/Respond/Responder.html +529 -0
- data/docs/code/Utopia/Controller/Rewrite.html +290 -0
- data/docs/code/Utopia/Controller/Rewrite/ClassMethods.html +242 -0
- data/docs/code/Utopia/Controller/Rewrite/ExtractPrefixRule.html +364 -0
- data/docs/code/Utopia/Controller/Rewrite/Rewriter.html +464 -0
- data/docs/code/Utopia/Controller/Rewrite/Rule.html +209 -0
- data/docs/code/Utopia/Controller/Variables.html +550 -0
- data/docs/code/Utopia/Controllers.html +244 -0
- data/docs/code/Utopia/Exceptions.html +127 -0
- data/docs/code/Utopia/Exceptions/Handler.html +526 -0
- data/docs/code/Utopia/Exceptions/Mailer.html +476 -0
- data/docs/code/Utopia/Extensions.html +117 -0
- data/docs/code/Utopia/Extensions/ArraySplit.html +183 -0
- data/docs/code/Utopia/Extensions/DateTimeComparison.html +193 -0
- data/docs/code/Utopia/Extensions/TimeDateComparison.html +193 -0
- data/docs/code/Utopia/HTTP.html +244 -0
- data/docs/code/Utopia/HTTP/Status.html +415 -0
- data/docs/code/Utopia/Locale.html +606 -0
- data/docs/code/Utopia/Localization.html +1235 -0
- data/docs/code/Utopia/Localization/Wrapper.html +459 -0
- data/docs/code/Utopia/Logger.html +205 -0
- data/docs/code/Utopia/Logger/CompactFormatter.html +335 -0
- data/docs/code/Utopia/Path.html +3304 -0
- data/docs/code/Utopia/Path/Matcher.html +518 -0
- data/docs/code/Utopia/Path/Matcher/MatchData.html +475 -0
- data/docs/code/Utopia/Redirection.html +145 -0
- data/docs/code/Utopia/Redirection/ClientRedirect.html +717 -0
- data/docs/code/Utopia/Redirection/DirectoryIndex.html +298 -0
- data/docs/code/Utopia/Redirection/Errors.html +470 -0
- data/docs/code/Utopia/Redirection/Moved.html +312 -0
- data/docs/code/Utopia/Redirection/RequestFailure.html +226 -0
- data/docs/code/Utopia/Redirection/Rewrite.html +296 -0
- data/docs/code/Utopia/Session.html +883 -0
- data/docs/code/Utopia/Session/LazyHash.html +859 -0
- data/docs/code/Utopia/Setup.html +964 -0
- data/docs/code/Utopia/Static.html +690 -0
- data/docs/code/Utopia/Static/LocalFile.html +1098 -0
- data/docs/code/Utopia/Static/MimeTypeLoader.html +541 -0
- data/docs/code/Utopia/Static/MimeTypeLoader/ExpansionError.html +124 -0
- data/docs/code/Utopia/Tags.html +115 -0
- data/docs/code/Utopia/Tags/Environment.html +314 -0
- data/docs/code/Utopia/Tags/EnvironmentTag.html +314 -0
- data/docs/code/Utopia/Tags/Library.html +340 -0
- data/docs/code/_index.html +758 -0
- data/docs/code/class_list.html +51 -0
- data/docs/code/css/common.css +1 -0
- data/docs/code/css/full_list.css +58 -0
- data/docs/code/css/style.css +499 -0
- data/docs/code/file.README.html +169 -0
- data/docs/code/file_list.html +56 -0
- data/docs/code/frames.html +17 -0
- data/docs/code/index.html +169 -0
- data/docs/code/js/app.js +248 -0
- data/docs/code/js/full_list.js +216 -0
- data/docs/code/js/jquery.js +4 -0
- data/docs/code/materials/utopia.png +0 -0
- data/docs/code/materials/utopia.svg +1 -0
- data/docs/code/method_list.html +3443 -0
- data/docs/code/top-level-namespace.html +110 -0
- data/docs/index.html +92 -0
- data/docs/wiki.html +92 -0
- data/docs/wiki/bower-integration.html +74 -0
- data/docs/wiki/bower-integration/index.html +74 -0
- data/docs/wiki/development-environment-setup.html +60 -0
- data/docs/wiki/development-environment-setup/index.html +60 -0
- data/docs/wiki/edit.html +103 -0
- data/docs/wiki/faq/what-is-xnode.html +79 -0
- data/docs/wiki/faq/what-is-xnode/index.html +79 -0
- data/docs/wiki/middleware/content.html +64 -0
- data/docs/wiki/middleware/content/index.html +64 -0
- data/docs/wiki/middleware/controller.html +104 -0
- data/docs/wiki/middleware/controller/actions.html +117 -0
- data/docs/wiki/middleware/controller/actions/index.html +117 -0
- data/docs/wiki/middleware/controller/actions/rewrite/index.html +48 -0
- data/docs/wiki/middleware/controller/index.html +104 -0
- data/docs/wiki/middleware/controller/rewrite.html +111 -0
- data/docs/wiki/middleware/controller/rewrite/index.html +111 -0
- data/docs/wiki/middleware/localization.html +59 -0
- data/docs/wiki/middleware/localization/index.html +59 -0
- data/docs/wiki/middleware/redirection.html +61 -0
- data/docs/wiki/middleware/redirection/index.html +61 -0
- data/docs/wiki/middleware/session.html +71 -0
- data/docs/wiki/middleware/session/index.html +71 -0
- data/docs/wiki/middleware/static.html +57 -0
- data/docs/wiki/middleware/static/index.html +57 -0
- data/docs/wiki/server-setup.html +118 -0
- data/docs/wiki/server-setup/index.html +118 -0
- data/docs/wiki/testing.html +59 -0
- data/docs/wiki/testing/index.html +59 -0
- data/docs/wiki/updating-utopia.html +108 -0
- data/docs/wiki/updating-utopia/index.html +108 -0
- data/docs/wiki/your-first-page.html +80 -0
- data/docs/wiki/your-first-page/index.html +80 -0
- data/documentation/Guardfile +0 -12
- data/documentation/Rakefile +3 -0
- data/documentation/pages/_page.xnode +2 -0
- data/documentation/pages/wiki/content.md +1 -0
- data/documentation/pages/wiki/faq/what-is-xnode/content.md +37 -0
- data/documentation/pages/wiki/links.yaml +3 -1
- data/documentation/pages/wiki/server-setup/content.md +1 -1
- data/documentation/pages/wiki/show.xnode +2 -0
- data/documentation/pages/wiki/your-first-page/content.md +1 -1
- data/lib/utopia/command.rb +4 -4
- data/lib/utopia/command/environment.rb +73 -0
- data/lib/utopia/command/server.rb +19 -32
- data/lib/utopia/command/site.rb +26 -9
- data/lib/utopia/content/markup.rb +1 -1
- data/lib/utopia/setup.rb +49 -20
- data/lib/utopia/version.rb +1 -1
- data/setup/site/README.md +6 -7
- data/setup/site/Rakefile +3 -0
- data/setup/site/pages/_page.xnode +1 -1
- data/setup/site/public/_static/site.css +1 -1
- data/setup/site/tasks/bower.rake +3 -6
- data/setup/site/tasks/deploy.rake +1 -1
- data/setup/site/tasks/development.rake +1 -1
- data/setup/site/tasks/environment.rake +2 -2
- data/setup/site/tasks/static.rake +43 -0
- data/spec/utopia/command_spec.rb +170 -0
- data/spec/utopia/setup_spec.rb +20 -142
- metadata +225 -42
- data/documentation/public/_components/jquery-syntax/.sass-cache/040afc1428b286fb3c50151378b349a6149698d3/jquery.syntax.core.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/098642d80a1682613dca2bba6fd0a3bc9fd2bf04/jquery.syntax.layout.editor.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/098642d80a1682613dca2bba6fd0a3bc9fd2bf04/jquery.syntax.layout.fixed.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/098642d80a1682613dca2bba6fd0a3bc9fd2bf04/jquery.syntax.layout.inline.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/098642d80a1682613dca2bba6fd0a3bc9fd2bf04/jquery.syntax.layout.list.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/098642d80a1682613dca2bba6fd0a3bc9fd2bf04/jquery.syntax.layout.plain.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/098642d80a1682613dca2bba6fd0a3bc9fd2bf04/jquery.syntax.layout.table.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/10c58b30c53bf84f8360af8a864797092be26882/jquery.syntax.core.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/10c58b30c53bf84f8360af8a864797092be26882/jquery.syntax.layout.fixed.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/10c58b30c53bf84f8360af8a864797092be26882/jquery.syntax.layout.inline.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/_layout.scssc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.apache.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.applescript.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.assembly.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.bash-script.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.bash.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.clang.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.css.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.diff.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.html.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.ocaml.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.protobuf.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.python.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.ruby.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.brush.xml.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.core.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.editor.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.layout.editor.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.layout.fixed.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.layout.list.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.layout.plain.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/3c69ad94149e2a6d9f4ffda01814fee3947b1389/jquery.syntax.layout.table.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/8638ad407c5ea29f6547cf8ac6983da587354889/master.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/b7ab87e6269b4fe89f9475b7a260077391d3567b/jquery.syntax.layout.editor.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/b7ab87e6269b4fe89f9475b7a260077391d3567b/jquery.syntax.layout.fixed.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/b7ab87e6269b4fe89f9475b7a260077391d3567b/jquery.syntax.layout.inline.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/b7ab87e6269b4fe89f9475b7a260077391d3567b/jquery.syntax.layout.plain.sassc +0 -0
- data/documentation/public/_components/jquery-syntax/.sass-cache/e82f8cf4c8436da086a4506e01ef78755ebab1ce/master.scssc +0 -0
- data/lib/utopia/command/setup.rb +0 -78
data/lib/utopia/version.rb
CHANGED
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
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
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,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
|
|
data/setup/site/tasks/bower.rake
CHANGED
@@ -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
|
-
|
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 =
|
14
|
-
@bower_install_root =
|
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',
|
11
|
+
sh(passenger_config, 'restart-app', '--ignore-passenger-not-running', SITE_ROOT.to_s)
|
12
12
|
end
|
13
13
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
2
|
desc 'Set up the environment for running your web application'
|
3
|
-
task :environment do
|
4
|
-
|
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
|
data/spec/utopia/setup_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright,
|
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 '
|
22
|
-
require 'tmpdir'
|
23
|
-
require 'yaml'
|
21
|
+
require 'utopia/setup'
|
24
22
|
|
25
|
-
|
26
|
-
|
27
|
-
|
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
|
-
|
33
|
-
|
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
|
-
|
37
|
-
|
38
|
-
|
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
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
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 "
|
143
|
-
|
144
|
-
|
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
|