utopia 2.13.3 → 2.16.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bake/utopia/{yarn.rb → node.rb} +13 -5
- data/lib/utopia/command.rb +2 -2
- data/lib/utopia/command/site.rb +1 -1
- data/lib/utopia/content.rb +23 -19
- data/lib/utopia/content/link.rb +29 -34
- data/lib/utopia/content/links.rb +185 -123
- data/lib/utopia/content/markup.rb +1 -1
- data/lib/utopia/content/node.rb +15 -19
- data/lib/utopia/content/response.rb +5 -5
- data/lib/utopia/controller.rb +0 -17
- data/lib/utopia/controller/base.rb +23 -3
- data/lib/utopia/controller/respond.rb +50 -107
- data/lib/utopia/extensions/array_split.rb +2 -2
- data/lib/utopia/http.rb +3 -3
- data/lib/utopia/localization.rb +18 -10
- data/lib/utopia/middleware.rb +2 -2
- data/lib/utopia/path.rb +40 -36
- data/lib/utopia/redirection.rb +0 -2
- data/lib/utopia/responder.rb +76 -0
- data/lib/utopia/version.rb +1 -1
- data/setup/site/.gitignore +8 -7
- metadata +75 -607
- data/.codeclimate.yml +0 -5
- data/.gitignore +0 -8
- data/.rspec +0 -4
- data/.travis.yml +0 -28
- data/.yardopts +0 -2
- data/Gemfile +0 -28
- data/README.md +0 -92
- data/Rakefile +0 -33
- data/benchmark/call_vs_check.rb +0 -38
- data/benchmark/const_vs_hash.rb +0 -35
- data/benchmark/hash_vs_openstruct.rb +0 -54
- data/benchmark/string_vs_symbol.rb +0 -14
- data/benchmark/struct_vs_class.rb +0 -91
- data/docs/.nojekyll +0 -0
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.apache.css +0 -6
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.applescript.css +0 -5
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.assembly.css +0 -8
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.bash-script.css +0 -6
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.bash.css +0 -10
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.clang.css +0 -3
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.css.css +0 -14
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.diff.css +0 -16
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.html.css +0 -5
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.ocaml.css +0 -3
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.protobuf.css +0 -2
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.python.css +0 -6
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.ruby.css +0 -2
- data/docs/_components/jquery-syntax/base/jquery.syntax.brush.xml.css +0 -18
- data/docs/_components/jquery-syntax/base/jquery.syntax.core.css +0 -62
- data/docs/_components/jquery-syntax/base/jquery.syntax.editor.css +0 -6
- data/docs/_components/jquery-syntax/base/theme.js +0 -1
- data/docs/_components/jquery-syntax/bright/jquery.syntax.core.css +0 -27
- data/docs/_components/jquery-syntax/bright/theme.js +0 -1
- data/docs/_components/jquery-syntax/jquery.syntax.brush.apache.js +0 -41
- data/docs/_components/jquery-syntax/jquery.syntax.brush.applescript.js +0 -57
- data/docs/_components/jquery-syntax/jquery.syntax.brush.assembly.js +0 -37
- data/docs/_components/jquery-syntax/jquery.syntax.brush.bash-script.js +0 -67
- data/docs/_components/jquery-syntax/jquery.syntax.brush.bash.js +0 -33
- data/docs/_components/jquery-syntax/jquery.syntax.brush.basic.js +0 -51
- data/docs/_components/jquery-syntax/jquery.syntax.brush.clang.js +0 -89
- data/docs/_components/jquery-syntax/jquery.syntax.brush.csharp.js +0 -47
- data/docs/_components/jquery-syntax/jquery.syntax.brush.css.js +0 -80
- data/docs/_components/jquery-syntax/jquery.syntax.brush.diff.js +0 -24
- data/docs/_components/jquery-syntax/jquery.syntax.brush.go.js +0 -47
- data/docs/_components/jquery-syntax/jquery.syntax.brush.haskell.js +0 -45
- data/docs/_components/jquery-syntax/jquery.syntax.brush.html.js +0 -66
- data/docs/_components/jquery-syntax/jquery.syntax.brush.io.js +0 -45
- data/docs/_components/jquery-syntax/jquery.syntax.brush.java.js +0 -45
- data/docs/_components/jquery-syntax/jquery.syntax.brush.javascript.js +0 -40
- data/docs/_components/jquery-syntax/jquery.syntax.brush.kai.js +0 -29
- data/docs/_components/jquery-syntax/jquery.syntax.brush.lisp.js +0 -34
- data/docs/_components/jquery-syntax/jquery.syntax.brush.lua.js +0 -44
- data/docs/_components/jquery-syntax/jquery.syntax.brush.nginx.js +0 -31
- data/docs/_components/jquery-syntax/jquery.syntax.brush.ocaml.js +0 -73
- data/docs/_components/jquery-syntax/jquery.syntax.brush.ooc.js +0 -46
- data/docs/_components/jquery-syntax/jquery.syntax.brush.pascal.js +0 -51
- data/docs/_components/jquery-syntax/jquery.syntax.brush.perl5.js +0 -52
- data/docs/_components/jquery-syntax/jquery.syntax.brush.php-script.js +0 -48
- data/docs/_components/jquery-syntax/jquery.syntax.brush.php.js +0 -15
- data/docs/_components/jquery-syntax/jquery.syntax.brush.plain.js +0 -10
- data/docs/_components/jquery-syntax/jquery.syntax.brush.protobuf.js +0 -43
- data/docs/_components/jquery-syntax/jquery.syntax.brush.python.js +0 -44
- data/docs/_components/jquery-syntax/jquery.syntax.brush.ruby.js +0 -77
- data/docs/_components/jquery-syntax/jquery.syntax.brush.scala.js +0 -44
- data/docs/_components/jquery-syntax/jquery.syntax.brush.smalltalk.js +0 -29
- data/docs/_components/jquery-syntax/jquery.syntax.brush.sql.js +0 -31
- data/docs/_components/jquery-syntax/jquery.syntax.brush.super-collider.js +0 -57
- data/docs/_components/jquery-syntax/jquery.syntax.brush.swift.js +0 -55
- data/docs/_components/jquery-syntax/jquery.syntax.brush.trenni.js +0 -35
- data/docs/_components/jquery-syntax/jquery.syntax.brush.xml.js +0 -50
- data/docs/_components/jquery-syntax/jquery.syntax.brush.yaml.js +0 -29
- data/docs/_components/jquery-syntax/jquery.syntax.cache.js +0 -65
- data/docs/_components/jquery-syntax/jquery.syntax.core.js +0 -1098
- data/docs/_components/jquery-syntax/jquery.syntax.editor.js +0 -291
- data/docs/_components/jquery-syntax/jquery.syntax.js +0 -258
- data/docs/_components/jquery-syntax/jquery.syntax.min.js +0 -13
- data/docs/_components/jquery-syntax/paper/jquery.syntax.core.css +0 -31
- data/docs/_components/jquery-syntax/paper/theme.js +0 -1
- data/docs/_components/jquery/core.js +0 -482
- data/docs/_components/jquery/jquery.js +0 -10220
- data/docs/_components/jquery/jquery.min.js +0 -4
- data/docs/_components/jquery/jquery.min.map +0 -1
- data/docs/_components/jquery/jquery.slim.js +0 -8107
- data/docs/_components/jquery/jquery.slim.min.js +0 -4
- data/docs/_components/jquery/jquery.slim.min.map +0 -1
- data/docs/_static/icon.png +0 -0
- data/docs/_static/site.css +0 -205
- data/docs/_static/utopia-background.svg +0 -1
- data/docs/_static/utopia.svg +0 -1
- data/docs/code/Utopia.html +0 -517
- data/docs/code/Utopia/Basename.html +0 -654
- data/docs/code/Utopia/Bootstrap.html +0 -538
- data/docs/code/Utopia/Command.html +0 -213
- data/docs/code/Utopia/Command/Environment.html +0 -321
- data/docs/code/Utopia/Command/Server.html +0 -214
- data/docs/code/Utopia/Command/Server/Create.html +0 -222
- data/docs/code/Utopia/Command/Server/Environment.html +0 -236
- data/docs/code/Utopia/Command/Server/Update.html +0 -317
- data/docs/code/Utopia/Command/Setup.html +0 -145
- data/docs/code/Utopia/Command/Setup/Server.html +0 -298
- data/docs/code/Utopia/Command/Setup/Site.html +0 -180
- data/docs/code/Utopia/Command/Site.html +0 -285
- data/docs/code/Utopia/Command/Site/Create.html +0 -324
- data/docs/code/Utopia/Command/Site/Update.html +0 -407
- data/docs/code/Utopia/Command/Top.html +0 -279
- data/docs/code/Utopia/Content.html +0 -832
- data/docs/code/Utopia/Content/Document.html +0 -1822
- data/docs/code/Utopia/Content/Document/State.html +0 -1220
- data/docs/code/Utopia/Content/Link.html +0 -1286
- data/docs/code/Utopia/Content/Links.html +0 -847
- data/docs/code/Utopia/Content/MarkupParser.html +0 -881
- data/docs/code/Utopia/Content/MarkupParser/ParsedTag.html +0 -422
- data/docs/code/Utopia/Content/MarkupParser/UnbalancedTagError.html +0 -615
- data/docs/code/Utopia/Content/Namespace.html +0 -485
- data/docs/code/Utopia/Content/Node.html +0 -1188
- data/docs/code/Utopia/Content/Node/Context.html +0 -938
- data/docs/code/Utopia/Content/Response.html +0 -813
- data/docs/code/Utopia/Content/SymbolicHash.html +0 -419
- data/docs/code/Utopia/Content/Tag.html +0 -399
- data/docs/code/Utopia/Content/Tags.html +0 -136
- data/docs/code/Utopia/Content/Tags/ContentTag.html +0 -187
- data/docs/code/Utopia/Content/Tags/DeferredTag.html +0 -193
- data/docs/code/Utopia/Content/Tags/Library.html +0 -333
- data/docs/code/Utopia/Content/Tags/NodeTag.html +0 -193
- data/docs/code/Utopia/Content/UnbalancedTagError.html +0 -298
- data/docs/code/Utopia/ContentLength.html +0 -343
- data/docs/code/Utopia/Controller.html +0 -907
- data/docs/code/Utopia/Controller/Actions.html +0 -289
- data/docs/code/Utopia/Controller/Actions/Action.html +0 -984
- data/docs/code/Utopia/Controller/Actions/ClassMethods.html +0 -442
- data/docs/code/Utopia/Controller/Base.html +0 -1216
- data/docs/code/Utopia/Controller/Respond.html +0 -293
- data/docs/code/Utopia/Controller/Respond/ClassMethods.html +0 -236
- data/docs/code/Utopia/Controller/Respond/Converter.html +0 -256
- data/docs/code/Utopia/Controller/Respond/Converter/Callback.html +0 -484
- data/docs/code/Utopia/Controller/Respond/Converter/ToJSON.html +0 -381
- data/docs/code/Utopia/Controller/Respond/Passthrough.html +0 -297
- data/docs/code/Utopia/Controller/Respond/Responder.html +0 -535
- data/docs/code/Utopia/Controller/Rewrite.html +0 -290
- data/docs/code/Utopia/Controller/Rewrite/ClassMethods.html +0 -242
- data/docs/code/Utopia/Controller/Rewrite/ExtractPrefixRule.html +0 -364
- data/docs/code/Utopia/Controller/Rewrite/Rewriter.html +0 -464
- data/docs/code/Utopia/Controller/Rewrite/Rule.html +0 -209
- data/docs/code/Utopia/Controller/Variables.html +0 -550
- data/docs/code/Utopia/Controllers.html +0 -244
- data/docs/code/Utopia/Exceptions.html +0 -127
- data/docs/code/Utopia/Exceptions/Handler.html +0 -526
- data/docs/code/Utopia/Exceptions/Mailer.html +0 -482
- data/docs/code/Utopia/Extensions.html +0 -117
- data/docs/code/Utopia/Extensions/ArraySplit.html +0 -183
- data/docs/code/Utopia/Extensions/DateTimeComparison.html +0 -193
- data/docs/code/Utopia/Extensions/TimeDateComparison.html +0 -193
- data/docs/code/Utopia/HTTP.html +0 -250
- data/docs/code/Utopia/HTTP/Status.html +0 -415
- data/docs/code/Utopia/Locale.html +0 -606
- data/docs/code/Utopia/Localization.html +0 -1241
- data/docs/code/Utopia/Localization/Wrapper.html +0 -459
- data/docs/code/Utopia/Logger.html +0 -205
- data/docs/code/Utopia/Logger/CompactFormatter.html +0 -335
- data/docs/code/Utopia/Path.html +0 -3310
- data/docs/code/Utopia/Path/Matcher.html +0 -518
- data/docs/code/Utopia/Path/Matcher/MatchData.html +0 -475
- data/docs/code/Utopia/Redirection.html +0 -151
- data/docs/code/Utopia/Redirection/ClientRedirect.html +0 -717
- data/docs/code/Utopia/Redirection/DirectoryIndex.html +0 -298
- data/docs/code/Utopia/Redirection/Errors.html +0 -476
- data/docs/code/Utopia/Redirection/Moved.html +0 -312
- data/docs/code/Utopia/Redirection/RequestFailure.html +0 -226
- data/docs/code/Utopia/Redirection/Rewrite.html +0 -296
- data/docs/code/Utopia/Session.html +0 -889
- data/docs/code/Utopia/Session/LazyHash.html +0 -859
- data/docs/code/Utopia/Setup.html +0 -970
- data/docs/code/Utopia/Static.html +0 -696
- data/docs/code/Utopia/Static/LocalFile.html +0 -1104
- data/docs/code/Utopia/Static/MimeTypeLoader.html +0 -541
- data/docs/code/Utopia/Static/MimeTypeLoader/ExpansionError.html +0 -124
- data/docs/code/Utopia/Tags.html +0 -115
- data/docs/code/Utopia/Tags/Environment.html +0 -314
- data/docs/code/Utopia/Tags/EnvironmentTag.html +0 -314
- data/docs/code/Utopia/Tags/Library.html +0 -340
- data/docs/code/_index.html +0 -758
- data/docs/code/class_list.html +0 -51
- data/docs/code/css/common.css +0 -1
- data/docs/code/css/full_list.css +0 -58
- data/docs/code/css/style.css +0 -496
- data/docs/code/file.README.html +0 -171
- data/docs/code/file_list.html +0 -56
- data/docs/code/frames.html +0 -17
- data/docs/code/index.html +0 -171
- data/docs/code/js/app.js +0 -292
- data/docs/code/js/full_list.js +0 -216
- data/docs/code/js/jquery.js +0 -4
- data/docs/code/materials/utopia.png +0 -0
- data/docs/code/materials/utopia.svg +0 -1
- data/docs/code/method_list.html +0 -3443
- data/docs/code/top-level-namespace.html +0 -110
- data/docs/index.html +0 -92
- data/docs/wiki.html +0 -92
- data/docs/wiki/development-environment-setup.html +0 -60
- data/docs/wiki/development-environment-setup/index.html +0 -60
- data/docs/wiki/edit.html +0 -103
- data/docs/wiki/faq/what-is-xnode.html +0 -79
- data/docs/wiki/faq/what-is-xnode/index.html +0 -79
- data/docs/wiki/javascript.html +0 -153
- data/docs/wiki/javascript/index.html +0 -153
- data/docs/wiki/middleware/content.html +0 -64
- data/docs/wiki/middleware/content/index.html +0 -64
- data/docs/wiki/middleware/controller.html +0 -104
- data/docs/wiki/middleware/controller/actions.html +0 -117
- data/docs/wiki/middleware/controller/actions/index.html +0 -117
- data/docs/wiki/middleware/controller/actions/rewrite/index.html +0 -48
- data/docs/wiki/middleware/controller/index.html +0 -104
- data/docs/wiki/middleware/controller/rewrite.html +0 -111
- data/docs/wiki/middleware/controller/rewrite/index.html +0 -111
- data/docs/wiki/middleware/localization.html +0 -59
- data/docs/wiki/middleware/localization/index.html +0 -59
- data/docs/wiki/middleware/redirection.html +0 -61
- data/docs/wiki/middleware/redirection/index.html +0 -61
- data/docs/wiki/middleware/session.html +0 -71
- data/docs/wiki/middleware/session/index.html +0 -71
- data/docs/wiki/middleware/static.html +0 -57
- data/docs/wiki/middleware/static/index.html +0 -57
- data/docs/wiki/server-setup.html +0 -118
- data/docs/wiki/server-setup/index.html +0 -118
- data/docs/wiki/testing.html +0 -59
- data/docs/wiki/testing/index.html +0 -59
- data/docs/wiki/updating-utopia.html +0 -108
- data/docs/wiki/updating-utopia/index.html +0 -108
- data/docs/wiki/your-first-page.html +0 -80
- data/docs/wiki/your-first-page/index.html +0 -80
- data/documentation/.rspec +0 -4
- data/documentation/.yarnrc +0 -1
- data/documentation/Gemfile +0 -19
- data/documentation/Guardfile +0 -9
- data/documentation/Rakefile +0 -9
- data/documentation/config.ru +0 -41
- data/documentation/config/README.md +0 -7
- data/documentation/config/environment.rb +0 -12
- data/documentation/lib/readme.txt +0 -1
- data/documentation/pages/_editor.xnode +0 -64
- data/documentation/pages/_heading.xnode +0 -2
- data/documentation/pages/_page.xnode +0 -40
- data/documentation/pages/errors/exception.xnode +0 -5
- data/documentation/pages/errors/file-not-found.xnode +0 -5
- data/documentation/pages/links.yaml +0 -2
- data/documentation/pages/wiki/_listing.xnode +0 -32
- data/documentation/pages/wiki/_navigation.xnode +0 -15
- data/documentation/pages/wiki/content.md +0 -35
- data/documentation/pages/wiki/controller.rb +0 -48
- data/documentation/pages/wiki/development-environment-setup/content.md +0 -16
- data/documentation/pages/wiki/edit.xnode +0 -10
- data/documentation/pages/wiki/faq/what-is-xnode/content.md +0 -37
- data/documentation/pages/wiki/javascript/content.md +0 -75
- data/documentation/pages/wiki/links.yaml +0 -6
- data/documentation/pages/wiki/middleware/content/content.md +0 -21
- data/documentation/pages/wiki/middleware/controller/actions/content.md +0 -76
- data/documentation/pages/wiki/middleware/controller/content.md +0 -62
- data/documentation/pages/wiki/middleware/controller/links.yaml +0 -4
- data/documentation/pages/wiki/middleware/controller/rewrite/content.md +0 -69
- data/documentation/pages/wiki/middleware/localization/content.md +0 -16
- data/documentation/pages/wiki/middleware/redirection/content.md +0 -17
- data/documentation/pages/wiki/middleware/session/content.md +0 -29
- data/documentation/pages/wiki/middleware/static/content.md +0 -13
- data/documentation/pages/wiki/server-setup/content.md +0 -52
- data/documentation/pages/wiki/show.xnode +0 -12
- data/documentation/pages/wiki/testing/content.md +0 -15
- data/documentation/pages/wiki/updating-utopia/content.md +0 -63
- data/documentation/pages/wiki/your-first-page/content.md +0 -38
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.apache.css +0 -6
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.applescript.css +0 -5
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.assembly.css +0 -8
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.bash-script.css +0 -6
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.bash.css +0 -10
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.clang.css +0 -3
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.css.css +0 -14
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.diff.css +0 -16
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.html.css +0 -5
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.ocaml.css +0 -3
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.protobuf.css +0 -2
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.python.css +0 -6
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.ruby.css +0 -2
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.brush.xml.css +0 -18
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.core.css +0 -62
- data/documentation/public/_components/jquery-syntax/base/jquery.syntax.editor.css +0 -6
- data/documentation/public/_components/jquery-syntax/base/theme.js +0 -1
- data/documentation/public/_components/jquery-syntax/bright/jquery.syntax.core.css +0 -27
- data/documentation/public/_components/jquery-syntax/bright/theme.js +0 -1
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.apache.js +0 -41
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.applescript.js +0 -57
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.assembly.js +0 -37
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.bash-script.js +0 -67
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.bash.js +0 -33
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.basic.js +0 -51
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.clang.js +0 -89
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.csharp.js +0 -47
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.css.js +0 -80
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.diff.js +0 -24
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.go.js +0 -47
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.haskell.js +0 -45
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.html.js +0 -66
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.io.js +0 -45
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.java.js +0 -45
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.javascript.js +0 -40
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.kai.js +0 -29
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.lisp.js +0 -34
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.lua.js +0 -44
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.nginx.js +0 -31
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.ocaml.js +0 -73
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.ooc.js +0 -46
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.pascal.js +0 -51
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.perl5.js +0 -52
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.php-script.js +0 -48
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.php.js +0 -15
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.plain.js +0 -10
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.protobuf.js +0 -43
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.python.js +0 -44
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.ruby.js +0 -77
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.scala.js +0 -44
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.smalltalk.js +0 -29
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.sql.js +0 -31
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.super-collider.js +0 -57
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.swift.js +0 -55
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.trenni.js +0 -35
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.xml.js +0 -50
- data/documentation/public/_components/jquery-syntax/jquery.syntax.brush.yaml.js +0 -29
- data/documentation/public/_components/jquery-syntax/jquery.syntax.cache.js +0 -65
- data/documentation/public/_components/jquery-syntax/jquery.syntax.core.js +0 -1098
- data/documentation/public/_components/jquery-syntax/jquery.syntax.editor.js +0 -291
- data/documentation/public/_components/jquery-syntax/jquery.syntax.js +0 -258
- data/documentation/public/_components/jquery-syntax/jquery.syntax.min.js +0 -13
- data/documentation/public/_components/jquery-syntax/paper/jquery.syntax.core.css +0 -31
- data/documentation/public/_components/jquery-syntax/paper/theme.js +0 -1
- data/documentation/public/_components/jquery/core.js +0 -482
- data/documentation/public/_components/jquery/jquery.js +0 -10220
- data/documentation/public/_components/jquery/jquery.min.js +0 -4
- data/documentation/public/_components/jquery/jquery.min.map +0 -1
- data/documentation/public/_components/jquery/jquery.slim.js +0 -8107
- data/documentation/public/_components/jquery/jquery.slim.min.js +0 -4
- data/documentation/public/_components/jquery/jquery.slim.min.map +0 -1
- data/documentation/public/_static +0 -1
- data/documentation/public/materials +0 -1
- data/documentation/spec/website_context.rb +0 -12
- data/documentation/spec/website_spec.rb +0 -16
- data/documentation/tasks +0 -1
- data/materials/utopia.png +0 -0
- data/materials/utopia.svg +0 -1
- data/setup/site/.yarnrc +0 -1
- data/spec/mock_node.rb +0 -16
- data/spec/spec_helper.rb +0 -13
- data/spec/utopia/command_spec.rb +0 -164
- data/spec/utopia/content/document_spec.rb +0 -60
- data/spec/utopia/content/link_spec.rb +0 -47
- data/spec/utopia/content/links/foo/index.xnode +0 -0
- data/spec/utopia/content/links/foo/links.yaml +0 -2
- data/spec/utopia/content/links/foo/test.de.xnode +0 -0
- data/spec/utopia/content/links/foo/test.en.xnode +0 -0
- data/spec/utopia/content/links/links.yaml +0 -9
- data/spec/utopia/content/links/welcome.xnode +0 -0
- data/spec/utopia/content/links_spec.rb +0 -101
- data/spec/utopia/content/localized/five/index.en.xnode +0 -0
- data/spec/utopia/content/localized/four/index.en.xnode +0 -0
- data/spec/utopia/content/localized/four/index.zh.xnode +0 -0
- data/spec/utopia/content/localized/four/links.yaml +0 -4
- data/spec/utopia/content/localized/links.yaml +0 -16
- data/spec/utopia/content/localized/one.xnode +0 -0
- data/spec/utopia/content/localized/three/index.xnode +0 -0
- data/spec/utopia/content/localized/two.en.xnode +0 -0
- data/spec/utopia/content/localized/two.zh.xnode +0 -0
- data/spec/utopia/content/markup_spec.rb +0 -96
- data/spec/utopia/content/namespace_spec.rb +0 -45
- data/spec/utopia/content/node/lookup/content.xnode +0 -1
- data/spec/utopia/content/node/lookup/index.xnode +0 -1
- data/spec/utopia/content/node/ordered/first.xnode +0 -0
- data/spec/utopia/content/node/ordered/index.xnode +0 -0
- data/spec/utopia/content/node/ordered/links.yaml +0 -4
- data/spec/utopia/content/node/ordered/second.xnode +0 -0
- data/spec/utopia/content/node/related/foo.en.xnode +0 -0
- data/spec/utopia/content/node/related/foo.ja.xnode +0 -0
- data/spec/utopia/content/node/related/links.yaml +0 -4
- data/spec/utopia/content/node_spec.rb +0 -97
- data/spec/utopia/content/response_spec.rb +0 -54
- data/spec/utopia/content/tags_spec.rb +0 -82
- data/spec/utopia/content_spec.rb +0 -100
- data/spec/utopia/content_spec.ru +0 -6
- data/spec/utopia/content_spec/_heading.xnode +0 -1
- data/spec/utopia/content_spec/content/_show-value.xnode +0 -1
- data/spec/utopia/content_spec/content/links.yaml +0 -2
- data/spec/utopia/content_spec/content/test-partial.xnode +0 -1
- data/spec/utopia/content_spec/index.xnode +0 -1
- data/spec/utopia/content_spec/node/index.xnode +0 -1
- data/spec/utopia/content_spec/test.xnode +0 -10
- data/spec/utopia/controller/actions_spec.rb +0 -62
- data/spec/utopia/controller/middleware_spec.rb +0 -88
- data/spec/utopia/controller/middleware_spec.ru +0 -6
- data/spec/utopia/controller/middleware_spec/controller/controller.rb +0 -27
- data/spec/utopia/controller/middleware_spec/controller/index.xnode +0 -1
- data/spec/utopia/controller/middleware_spec/controller/nested/controller.rb +0 -7
- data/spec/utopia/controller/middleware_spec/empty/controller.rb +0 -0
- data/spec/utopia/controller/middleware_spec/redirect/controller.rb +0 -12
- data/spec/utopia/controller/middleware_spec/redirect/test/controller.rb +0 -9
- data/spec/utopia/controller/respond_spec.rb +0 -174
- data/spec/utopia/controller/respond_spec.ru +0 -12
- data/spec/utopia/controller/respond_spec/api/controller.rb +0 -28
- data/spec/utopia/controller/respond_spec/errors/controller.rb +0 -14
- data/spec/utopia/controller/respond_spec/errors/file-not-found.xnode +0 -8
- data/spec/utopia/controller/respond_spec/html/controller.rb +0 -11
- data/spec/utopia/controller/respond_spec/rewrite/controller.rb +0 -13
- data/spec/utopia/controller/rewrite_spec.rb +0 -80
- data/spec/utopia/controller/sequence_spec.rb +0 -135
- data/spec/utopia/controller/variables_spec.rb +0 -59
- data/spec/utopia/controller/websocket_spec.rb +0 -68
- data/spec/utopia/controller/websocket_spec.ru +0 -5
- data/spec/utopia/controller/websocket_spec/server/controller.rb +0 -11
- data/spec/utopia/exceptions/handler_spec.rb +0 -47
- data/spec/utopia/exceptions/handler_spec.ru +0 -8
- data/spec/utopia/exceptions/handler_spec/controller.rb +0 -19
- data/spec/utopia/exceptions/mailer_spec.rb +0 -43
- data/spec/utopia/exceptions/mailer_spec.ru +0 -10
- data/spec/utopia/extensions_spec.rb +0 -73
- data/spec/utopia/http/status_spec.rb +0 -44
- data/spec/utopia/locale_spec.rb +0 -58
- data/spec/utopia/localization_spec.rb +0 -92
- data/spec/utopia/localization_spec.ru +0 -15
- data/spec/utopia/localization_spec/controller.rb +0 -21
- data/spec/utopia/localization_spec/localized.de.txt +0 -1
- data/spec/utopia/localization_spec/localized.en.txt +0 -1
- data/spec/utopia/localization_spec/localized.ja.txt +0 -1
- data/spec/utopia/localization_spec/test.txt +0 -1
- data/spec/utopia/middleware_spec.rb +0 -31
- data/spec/utopia/path/matcher_spec.rb +0 -66
- data/spec/utopia/path_spec.rb +0 -162
- data/spec/utopia/performance_spec.rb +0 -92
- data/spec/utopia/performance_spec/cache/head/readme.txt +0 -1
- data/spec/utopia/performance_spec/cache/meta/readme.txt +0 -1
- data/spec/utopia/performance_spec/config.ru +0 -35
- data/spec/utopia/performance_spec/lib/readme.txt +0 -1
- data/spec/utopia/performance_spec/pages/_heading.xnode +0 -2
- data/spec/utopia/performance_spec/pages/_page.xnode +0 -26
- data/spec/utopia/performance_spec/pages/api/controller.rb +0 -8
- data/spec/utopia/performance_spec/pages/errors/exception.xnode +0 -5
- data/spec/utopia/performance_spec/pages/errors/file-not-found.xnode +0 -5
- data/spec/utopia/performance_spec/pages/links.yaml +0 -2
- data/spec/utopia/performance_spec/pages/welcome/index.xnode +0 -17
- data/spec/utopia/rack_helper.rb +0 -32
- data/spec/utopia/redirection_spec.rb +0 -77
- data/spec/utopia/redirection_spec.ru +0 -27
- data/spec/utopia/session_spec.rb +0 -189
- data/spec/utopia/session_spec.ru +0 -24
- data/spec/utopia/setup_spec.rb +0 -56
- data/spec/utopia/static_spec.rb +0 -49
- data/spec/utopia/static_spec.ru +0 -5
- data/spec/utopia/static_spec/test.txt +0 -1
- data/utopia.gemspec +0 -52
@@ -1,35 +0,0 @@
|
|
1
|
-
# Utopia Documentation Wiki
|
2
|
-
|
3
|
-
This wiki includes documentation and examples showing how to use Utopia. You can also browse the [code documentation](/code/index.html) for more detail. Feel free to [edit](edit) any part of this documentation and submit a PR.
|
4
|
-
|
5
|
-
## Introduction Guide
|
6
|
-
|
7
|
-
Reading these pages in order will give you an overview of the design of Utopia, how to set it up for local development and how to deploy it.
|
8
|
-
|
9
|
-
- [Development Environment Setup](development-environment-setup/)
|
10
|
-
- [Server Setup](server-setup/)
|
11
|
-
- [Your First Page](your-first-page/)
|
12
|
-
- [What is `.xnode`?](faq/what-is-xnode/)
|
13
|
-
- [Installing JavaScript Libraries](javascript/)
|
14
|
-
- [Website Tests](testing/)
|
15
|
-
- [Updating Your Site](updating-utopia/)
|
16
|
-
|
17
|
-
## Middleware
|
18
|
-
|
19
|
-
The following are Rack Middleware which provide the core of Utopia.
|
20
|
-
|
21
|
-
- [Static](middleware/static/) — Serve static files efficiently.
|
22
|
-
- [Redirection](middleware/redirection/) — Redirect URL patterns and status codes.
|
23
|
-
- [Localization](middleware/localization/) — Non-intrusive localization of resources.
|
24
|
-
- [Controller](middleware/controller/) — Flexible nested controllers with efficient behaviour.
|
25
|
-
- [Controller Actions](middleware/controller/actions/) — Invoke named actions.
|
26
|
-
- [Controller Rewrite](middleware/controller/rewrite/) — Pattern match requests.
|
27
|
-
- [Content](middleware/content/) — XML-style template engine with dynamic markup.
|
28
|
-
- [Session](middleware/session/) — Session storage using encrypted client-side cookies.
|
29
|
-
|
30
|
-
## Examples
|
31
|
-
|
32
|
-
Here are some open-source sites built on Utopia.
|
33
|
-
|
34
|
-
- [www.codeotaku.com](http://www.codeotaku.com) ([source](https://github.com/ioquatix/www.codeotaku.com)) — Personal website, blog.
|
35
|
-
- Financier ([source](https://github.com/ioquatix/financier)) — Small business management platform, invoicing.
|
@@ -1,48 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
prepend Actions
|
4
|
-
|
5
|
-
on '**' do |request, path|
|
6
|
-
@full_path = URI_PATH + path
|
7
|
-
@page_path = path.components[0..-2]
|
8
|
-
|
9
|
-
@page_file = File.join(BASE_PATH, @page_path, "content.md")
|
10
|
-
|
11
|
-
if last_path_component = @page_path.last
|
12
|
-
@title = Trenni::Strings::to_title(last_path_component)
|
13
|
-
else
|
14
|
-
@title = "Wiki"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def read_contents
|
19
|
-
if File.exist? @page_file
|
20
|
-
File.read(@page_file)
|
21
|
-
else
|
22
|
-
"\# #{@title}\n\n" +
|
23
|
-
"This page is empty."
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
on '**/edit' do |request, path|
|
28
|
-
if request.post?
|
29
|
-
FileUtils.mkdir_p File.dirname(@page_file)
|
30
|
-
|
31
|
-
# Get the content and normalize newlines:
|
32
|
-
content = request.params['content'].gsub /\r\n?/, "\n"
|
33
|
-
File.write(@page_file, content)
|
34
|
-
|
35
|
-
# Redirect relative to controller.
|
36
|
-
goto! @page_path
|
37
|
-
else
|
38
|
-
@content = read_contents
|
39
|
-
end
|
40
|
-
|
41
|
-
path.components = ["edit"]
|
42
|
-
end
|
43
|
-
|
44
|
-
on '**/index' do |request, path|
|
45
|
-
@content = read_contents
|
46
|
-
|
47
|
-
path.components = ["show"]
|
48
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
# Development Environment Setup
|
2
|
-
|
3
|
-
Utopia is built on Ruby and Rack. Therefore, Ruby (suggested 2.0+) should be installed and working. Then, simply run:
|
4
|
-
|
5
|
-
```bash
|
6
|
-
$ gem install utopia
|
7
|
-
```
|
8
|
-
|
9
|
-
To install all required dependencies.
|
10
|
-
|
11
|
-
Utopia and it's dependencies are built on Linux and Mac by default, and therefore compatibility with Windows is not guaranteed.
|
12
|
-
|
13
|
-
## Atom Integration
|
14
|
-
|
15
|
-
Utopia uses [Trenni](https://github.com/ioquatix/trenni) for templates and it has a syntax slightly different from ERB. However, there is a [package for Atom](https://atom.io/packages/language-trenni) which provides accurate syntax highlighting.
|
16
|
-
|
@@ -1,37 +0,0 @@
|
|
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,75 +0,0 @@
|
|
1
|
-
# Yarn Integration
|
2
|
-
|
3
|
-
Utopia integrates with Yarn and provides a rake task to simplify deployment packages distributed using `yarn` that implement the `dist` sub-directory convention.
|
4
|
-
|
5
|
-
By default, utopia includes a `.yarnrc` file which installs modules into `lib/components`. This code can then be copied into `public/_components` using `rake yarn:update`.
|
6
|
-
|
7
|
-
## Installing Yarn
|
8
|
-
|
9
|
-
If you don't already have yarn installed, make sure you have npm installed and then run the following command:
|
10
|
-
|
11
|
-
$ sudo npm install -g yarn
|
12
|
-
|
13
|
-
## Installing jQuery
|
14
|
-
|
15
|
-
Firstly, ensure your project has a `package.json` file:
|
16
|
-
|
17
|
-
$ yarn init
|
18
|
-
|
19
|
-
Then install jquery using `yarn`:
|
20
|
-
|
21
|
-
$ bower install jquery
|
22
|
-
|
23
|
-
Copy the distribution scripts to `public/_components`:
|
24
|
-
|
25
|
-
$ rake yarn:update
|
26
|
-
|
27
|
-
Then add the appropriate `<script>` tags to `pages/_page.xnode`:
|
28
|
-
|
29
|
-
```html
|
30
|
-
<script type="text/javascript" src="/_components/jquery/jquery.min.js"></script>
|
31
|
-
```
|
32
|
-
|
33
|
-
### What does `rake yarn:update` do?
|
34
|
-
|
35
|
-
This task copies only the contents of the `dist` directory. This ensures that you only get files intended for distribution. If the bower package doesn't have a `dist` directory, the entire contents is copied.
|
36
|
-
|
37
|
-
<content:listing rel="site" src="tasks/yarn.rake" brush="ruby" />
|
38
|
-
|
39
|
-
## Using JavaScript
|
40
|
-
|
41
|
-
You can use JavaScript by embedding it directly into your HTML, or by creating a JavaScript source file and referencing that.
|
42
|
-
|
43
|
-
### Embedding Code
|
44
|
-
|
45
|
-
In your HTML view:
|
46
|
-
|
47
|
-
```trenni
|
48
|
-
<html>
|
49
|
-
<body>
|
50
|
-
<script type="text/javascript">
|
51
|
-
//<![CDATA[
|
52
|
-
console.log("Hello World")
|
53
|
-
//]]>
|
54
|
-
</script>
|
55
|
-
</body>
|
56
|
-
</html>
|
57
|
-
```
|
58
|
-
|
59
|
-
### External Script
|
60
|
-
|
61
|
-
In `script.js`:
|
62
|
-
|
63
|
-
```javascript
|
64
|
-
console.log("Hello World")
|
65
|
-
```
|
66
|
-
|
67
|
-
In your HTML view:
|
68
|
-
|
69
|
-
```trenni
|
70
|
-
<html>
|
71
|
-
<body>
|
72
|
-
<script type="text/javascript" src="script.js"></script>
|
73
|
-
</body>
|
74
|
-
</html>
|
75
|
-
```
|
@@ -1,21 +0,0 @@
|
|
1
|
-
# Content
|
2
|
-
A tag based content generation system which integrates nicely with HTML5. Supports structures which separate generic page templates from dynamically generated content in an easy and consistent way.
|
3
|
-
|
4
|
-
```ruby
|
5
|
-
use Utopia::Content,
|
6
|
-
cache_templates: (RACK_ENV == :production)
|
7
|
-
```
|
8
|
-
|
9
|
-
A basic template `create.xnode` looks something like:
|
10
|
-
|
11
|
-
```trenni
|
12
|
-
<content:page>
|
13
|
-
<content:heading>Create User</content:heading>
|
14
|
-
<form action="#">
|
15
|
-
<input name="name" />
|
16
|
-
<input type="submit" />
|
17
|
-
</form>
|
18
|
-
</content:page>
|
19
|
-
```
|
20
|
-
|
21
|
-
This template would typically be designed with supporting `_page.xnode` and `_heading.xnode` in the same directory or, more typically, somewhere further up the directory hierarchy.
|
@@ -1,76 +0,0 @@
|
|
1
|
-
# Controller::Actions
|
2
|
-
|
3
|
-
Actions let you match path patterns in your controller and execute code. In your `controller.rb` simply add:
|
4
|
-
|
5
|
-
```ruby
|
6
|
-
prepend Actions
|
7
|
-
```
|
8
|
-
|
9
|
-
If you are adding multiple things, like rewriting, they should come earlier in the chain, e.g:
|
10
|
-
|
11
|
-
```ruby
|
12
|
-
prepend Rewrite, Actions
|
13
|
-
```
|
14
|
-
|
15
|
-
A simple CRUD controller might look like:
|
16
|
-
|
17
|
-
```ruby
|
18
|
-
prepend Actions
|
19
|
-
|
20
|
-
on 'index' do
|
21
|
-
@users = User.all
|
22
|
-
end
|
23
|
-
|
24
|
-
on 'new' do |request|
|
25
|
-
@user = User.new
|
26
|
-
|
27
|
-
if request.post?
|
28
|
-
@user.update_attributes(request.params['user'])
|
29
|
-
|
30
|
-
redirect! "index"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
on 'edit' do |request|
|
35
|
-
@user = User.find(request.params['id'])
|
36
|
-
|
37
|
-
if request.post?
|
38
|
-
@user.update_attributes(request.params['user'])
|
39
|
-
|
40
|
-
redirect! "index"
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
on 'delete' do |request|
|
45
|
-
User.find(request.params['id']).destroy
|
46
|
-
|
47
|
-
redirect! "index"
|
48
|
-
end
|
49
|
-
```
|
50
|
-
|
51
|
-
## Path Matching
|
52
|
-
|
53
|
-
Path matching works from right to left, and '**' is a greedy operator. Controllers are invoked with a path relative to the controller's `URI_PATH`, so all lookups are relative to the controller.
|
54
|
-
|
55
|
-
<dl>
|
56
|
-
<dt><code class="language-ruby">"*"</code></dt>
|
57
|
-
<dd>Match a single path element</dd>
|
58
|
-
<dt><code class="language-ruby">"**"</code></dt>
|
59
|
-
<dd>Match all remaining path elements</dd>
|
60
|
-
<dt><code class="language-ruby">String</code></dt>
|
61
|
-
<dd>Match a named path component, e.g. <code class="language-ruby">"edit"</code>.</dd>
|
62
|
-
<dt><code class="language-ruby">Symbol</code></dt>
|
63
|
-
<dd>Equivalent to <code class="language-ruby">["**", symbol.to_s]</code>, e.g. <code class="language-ruby">:logout</code>.</dd>
|
64
|
-
</dl>
|
65
|
-
|
66
|
-
## Otherwise Matching
|
67
|
-
|
68
|
-
If no action was matched, it is sometimes useful to perform some specific behaviour. You can specify this by using the otherwise handler:
|
69
|
-
|
70
|
-
```ruby
|
71
|
-
otherwise do |request, path|
|
72
|
-
fail! :teapot
|
73
|
-
end
|
74
|
-
```
|
75
|
-
|
76
|
-
If you are doing this to perform some kind of rewriting, it may be preferable to use the [Rewrite](rewrite/) controller layer.
|
@@ -1,62 +0,0 @@
|
|
1
|
-
# Controller
|
2
|
-
|
3
|
-
A simple recursive controller layer which works in isolation from the view rendering middleware.
|
4
|
-
|
5
|
-
```ruby
|
6
|
-
use Utopia::Controller,
|
7
|
-
# The root directory where `controller.rb` files can be found.
|
8
|
-
root: 'path/to/root',
|
9
|
-
# The base class to use for all controllers:
|
10
|
-
base: Utopia::Controller::Base,
|
11
|
-
# Whether or not to cache controller classes:
|
12
|
-
cache_controllers: (RACK_ENV == :production)
|
13
|
-
```
|
14
|
-
|
15
|
-
A controller is a file within the root directory (or subdirectory) with the name `controller.rb`. This code is dynamically loaded into an anonymous class and executed. The default controller has only a single function:
|
16
|
-
|
17
|
-
```ruby
|
18
|
-
def passthrough(request, path)
|
19
|
-
# Call one of:
|
20
|
-
|
21
|
-
# This will cause the middleware to generate a response.
|
22
|
-
# def respond!(response)
|
23
|
-
|
24
|
-
# This will cause the controller to skip the request.
|
25
|
-
# def ignore!
|
26
|
-
|
27
|
-
# Request relative redirect. Respond with a redirect to the given target.
|
28
|
-
# def redirect! (target, status = 302)
|
29
|
-
|
30
|
-
# Controller relative redirect.
|
31
|
-
# def goto!(target, status = 302)
|
32
|
-
|
33
|
-
# Respond with an error which indiciates some kind of failure.
|
34
|
-
# def fail!(error = 400, message = nil)
|
35
|
-
|
36
|
-
# Succeed the request and immediately respond.
|
37
|
-
# def succeed!(status: 200, headers: {}, **options)
|
38
|
-
# options may include content: string or body: Enumerable (as per Rack specifications
|
39
|
-
end
|
40
|
-
```
|
41
|
-
|
42
|
-
The controller layer can do more complex operations by prepending modules into it.
|
43
|
-
|
44
|
-
```ruby
|
45
|
-
prepend Rewrite, Actions
|
46
|
-
|
47
|
-
# Extracts an Integer
|
48
|
-
rewrite.extract_prefix id: Integer do
|
49
|
-
@user = User.find_by_id(@id)
|
50
|
-
end
|
51
|
-
|
52
|
-
on 'edit' do |request, path|
|
53
|
-
if request.post?
|
54
|
-
@user.update_attributes(request[:user])
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
otherwise do |request, path|
|
59
|
-
# Executed if no specific named actions were executed.
|
60
|
-
succeed!
|
61
|
-
end
|
62
|
-
```
|
@@ -1,69 +0,0 @@
|
|
1
|
-
# Controller::Rewrite
|
2
|
-
|
3
|
-
The <code class="language-ruby">Controller::Rewrite</code> layer can match and rewrite requests before they processed. This allows you to handle URLs like `/post/15/view` or `/blog/123-pictures-of-my-cat` easily. The basic rewrite operation is to extract some part of the path and optionally executes a block. That means that the path is modified before being passed on to the next layer in the controller, and controller instance variables may be set.
|
4
|
-
|
5
|
-
## Regular Expressions
|
6
|
-
|
7
|
-
In your `controller.rb`:
|
8
|
-
|
9
|
-
```ruby
|
10
|
-
prepend Rewrite, Actions
|
11
|
-
|
12
|
-
rewrite.extract_prefix permalink: /(?<id>\d+)-(?<title>.*)/ do |request, path, match|
|
13
|
-
# The rewrite matched, but there was no valid post, so we fail:
|
14
|
-
fail! unless @post = Post.find(@permalink[:id])
|
15
|
-
|
16
|
-
# If the path matched, but there was no suffix, we make it default to the post action:
|
17
|
-
if match.post_match.empty?
|
18
|
-
match.post_match.components << "post"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
on 'post' do
|
23
|
-
# You can do further processing here.
|
24
|
-
fail! unless @post.published?
|
25
|
-
|
26
|
-
@comments = @post.comments.first(5)
|
27
|
-
end
|
28
|
-
|
29
|
-
on 'edit' do
|
30
|
-
# You can do further processing here.
|
31
|
-
fail! unless @current_user&.editor?
|
32
|
-
end
|
33
|
-
```
|
34
|
-
|
35
|
-
In your `post.xnode`, as an example:
|
36
|
-
|
37
|
-
```trenni
|
38
|
-
<content:page>
|
39
|
-
<content:heading>Post #{attributes[:permalink][:id]} about #{attributes[:permalink][:title]}</content:heading>
|
40
|
-
|
41
|
-
<p>#{attributes[:post].content}</p>
|
42
|
-
</content:page>
|
43
|
-
```
|
44
|
-
|
45
|
-
Keep in mind, that URLs like `/123-pictures-of-my-cat/edit` will work as expected, and hit the `edit` action of the controller.
|
46
|
-
|
47
|
-
## Restful Resources
|
48
|
-
|
49
|
-
Similar to the above, if we were solely interested in IDs, we could do the following:
|
50
|
-
|
51
|
-
```ruby
|
52
|
-
prepend Rewrite, Actions
|
53
|
-
|
54
|
-
rewrite.extract_prefix post_id: Integer do |request, path, match|
|
55
|
-
# The rewrite matched, but there was no valid post, so we fail:
|
56
|
-
fail! unless @post = Post.find(@post_id)
|
57
|
-
|
58
|
-
# If the path matched, but there was no suffix, we make it default to the post action:
|
59
|
-
if match.post_match.empty?
|
60
|
-
match.post_match.components << "post"
|
61
|
-
end
|
62
|
-
end
|
63
|
-
```
|
64
|
-
|
65
|
-
This will only match complete integers. Assuming this code is in `/blog/controller.rb`, it would match something like `/blog/123/view` and assign <code class="language-ruby">Integer("123")</code> to <code class="language-ruby">@post_id</code>.
|
66
|
-
|
67
|
-
### Matching.. other things
|
68
|
-
|
69
|
-
It's possible to match using <code class="language-ruby">Integer</code>, <code class="language-ruby">Float</code>, <code class="language-ruby">String</code>, and you can provide your own class which will be instantiated. If it doesn't match, raise an exception and the rewrite rule will fail.
|