utopia 2.14.0 → 2.16.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (261) hide show
  1. checksums.yaml +4 -4
  2. data/bake/utopia/{yarn.rb → node.rb} +11 -5
  3. data/lib/utopia/command.rb +2 -2
  4. data/lib/utopia/command/site.rb +1 -1
  5. data/lib/utopia/content.rb +7 -5
  6. data/lib/utopia/content/markup.rb +1 -1
  7. data/lib/utopia/content/node.rb +2 -2
  8. data/lib/utopia/content/response.rb +3 -3
  9. data/lib/utopia/controller.rb +0 -17
  10. data/lib/utopia/controller/base.rb +27 -3
  11. data/lib/utopia/controller/respond.rb +50 -107
  12. data/lib/utopia/extensions/array_split.rb +2 -2
  13. data/lib/utopia/http.rb +3 -3
  14. data/lib/utopia/middleware.rb +2 -2
  15. data/lib/utopia/path.rb +13 -5
  16. data/lib/utopia/redirection.rb +0 -2
  17. data/lib/utopia/responder.rb +76 -0
  18. data/lib/utopia/version.rb +1 -1
  19. data/setup/site/.gitignore +8 -7
  20. metadata +71 -396
  21. data/.codeclimate.yml +0 -5
  22. data/.github/workflows/development.yml +0 -62
  23. data/.gitignore +0 -8
  24. data/.rspec +0 -4
  25. data/.yardopts +0 -2
  26. data/Gemfile +0 -28
  27. data/README.md +0 -90
  28. data/benchmark/call_vs_check.rb +0 -38
  29. data/benchmark/const_vs_hash.rb +0 -35
  30. data/benchmark/hash_vs_openstruct.rb +0 -54
  31. data/benchmark/string_vs_symbol.rb +0 -14
  32. data/benchmark/struct_vs_class.rb +0 -91
  33. data/docs/.nojekyll +0 -0
  34. data/docs/_components/jquery-litebox/jquery.litebox.css +0 -23
  35. data/docs/_components/jquery-litebox/jquery.litebox.gallery.css +0 -48
  36. data/docs/_components/jquery-litebox/jquery.litebox.js +0 -30
  37. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.apache.css +0 -12
  38. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.applescript.css +0 -5
  39. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.assembly.css +0 -8
  40. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.bash-script.css +0 -6
  41. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.bash.css +0 -4
  42. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.clang.css +0 -6
  43. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.css.css +0 -14
  44. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.diff.css +0 -16
  45. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.html.css +0 -5
  46. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.ocaml.css +0 -3
  47. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.protobuf.css +0 -2
  48. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.python.css +0 -6
  49. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.ruby.css +0 -2
  50. data/docs/_components/jquery-syntax/base/jquery.syntax.brush.xml.css +0 -18
  51. data/docs/_components/jquery-syntax/base/jquery.syntax.core.css +0 -58
  52. data/docs/_components/jquery-syntax/base/jquery.syntax.editor.css +0 -6
  53. data/docs/_components/jquery-syntax/base/theme.js +0 -1
  54. data/docs/_components/jquery-syntax/bright/jquery.syntax.core.css +0 -27
  55. data/docs/_components/jquery-syntax/bright/theme.js +0 -1
  56. data/docs/_components/jquery-syntax/jquery.syntax.brush.apache.js +0 -3
  57. data/docs/_components/jquery-syntax/jquery.syntax.brush.applescript.js +0 -5
  58. data/docs/_components/jquery-syntax/jquery.syntax.brush.assembly.js +0 -3
  59. data/docs/_components/jquery-syntax/jquery.syntax.brush.bash-script.js +0 -4
  60. data/docs/_components/jquery-syntax/jquery.syntax.brush.bash.js +0 -2
  61. data/docs/_components/jquery-syntax/jquery.syntax.brush.basic.js +0 -5
  62. data/docs/_components/jquery-syntax/jquery.syntax.brush.clang.js +0 -5
  63. data/docs/_components/jquery-syntax/jquery.syntax.brush.csharp.js +0 -4
  64. data/docs/_components/jquery-syntax/jquery.syntax.brush.css.js +0 -5
  65. data/docs/_components/jquery-syntax/jquery.syntax.brush.diff.js +0 -2
  66. data/docs/_components/jquery-syntax/jquery.syntax.brush.go.js +0 -3
  67. data/docs/_components/jquery-syntax/jquery.syntax.brush.haskell.js +0 -3
  68. data/docs/_components/jquery-syntax/jquery.syntax.brush.html.js +0 -4
  69. data/docs/_components/jquery-syntax/jquery.syntax.brush.io.js +0 -3
  70. data/docs/_components/jquery-syntax/jquery.syntax.brush.java.js +0 -4
  71. data/docs/_components/jquery-syntax/jquery.syntax.brush.javascript.js +0 -3
  72. data/docs/_components/jquery-syntax/jquery.syntax.brush.kai.js +0 -2
  73. data/docs/_components/jquery-syntax/jquery.syntax.brush.lisp.js +0 -2
  74. data/docs/_components/jquery-syntax/jquery.syntax.brush.lua.js +0 -3
  75. data/docs/_components/jquery-syntax/jquery.syntax.brush.nginx.js +0 -2
  76. data/docs/_components/jquery-syntax/jquery.syntax.brush.ocaml.js +0 -4
  77. data/docs/_components/jquery-syntax/jquery.syntax.brush.ooc.js +0 -4
  78. data/docs/_components/jquery-syntax/jquery.syntax.brush.pascal.js +0 -4
  79. data/docs/_components/jquery-syntax/jquery.syntax.brush.perl5.js +0 -3
  80. data/docs/_components/jquery-syntax/jquery.syntax.brush.php-script.js +0 -4
  81. data/docs/_components/jquery-syntax/jquery.syntax.brush.php.js +0 -2
  82. data/docs/_components/jquery-syntax/jquery.syntax.brush.plain.js +0 -2
  83. data/docs/_components/jquery-syntax/jquery.syntax.brush.protobuf.js +0 -3
  84. data/docs/_components/jquery-syntax/jquery.syntax.brush.python.js +0 -5
  85. data/docs/_components/jquery-syntax/jquery.syntax.brush.ruby.js +0 -5
  86. data/docs/_components/jquery-syntax/jquery.syntax.brush.scala.js +0 -4
  87. data/docs/_components/jquery-syntax/jquery.syntax.brush.smalltalk.js +0 -2
  88. data/docs/_components/jquery-syntax/jquery.syntax.brush.sql.js +0 -4
  89. data/docs/_components/jquery-syntax/jquery.syntax.brush.super-collider.js +0 -3
  90. data/docs/_components/jquery-syntax/jquery.syntax.brush.swift.js +0 -3
  91. data/docs/_components/jquery-syntax/jquery.syntax.brush.trenni.js +0 -2
  92. data/docs/_components/jquery-syntax/jquery.syntax.brush.xml.js +0 -4
  93. data/docs/_components/jquery-syntax/jquery.syntax.brush.yaml.js +0 -2
  94. data/docs/_components/jquery-syntax/jquery.syntax.cache.js +0 -7
  95. data/docs/_components/jquery-syntax/jquery.syntax.core.js +0 -34
  96. data/docs/_components/jquery-syntax/jquery.syntax.editor.js +0 -11
  97. data/docs/_components/jquery-syntax/jquery.syntax.js +0 -8
  98. data/docs/_components/jquery-syntax/jquery.syntax.min.js +0 -13
  99. data/docs/_components/jquery-syntax/paper/jquery.syntax.core.css +0 -31
  100. data/docs/_components/jquery-syntax/paper/theme.js +0 -1
  101. data/docs/_components/jquery/jquery.js +0 -10872
  102. data/docs/_components/jquery/jquery.min.js +0 -2
  103. data/docs/_components/jquery/jquery.min.map +0 -1
  104. data/docs/_components/jquery/jquery.slim.js +0 -8777
  105. data/docs/_components/jquery/jquery.slim.min.js +0 -2
  106. data/docs/_components/jquery/jquery.slim.min.map +0 -1
  107. data/docs/_static/icon.png +0 -0
  108. data/docs/_static/site.css +0 -191
  109. data/docs/development-environment-setup/index.html +0 -54
  110. data/docs/faq/what-is-xnode/index.html +0 -73
  111. data/docs/index.html +0 -86
  112. data/docs/javascript/index.html +0 -108
  113. data/docs/middleware/content/index.html +0 -58
  114. data/docs/middleware/controller/actions/index.html +0 -111
  115. data/docs/middleware/controller/index.html +0 -98
  116. data/docs/middleware/controller/rewrite/index.html +0 -105
  117. data/docs/middleware/localization/index.html +0 -53
  118. data/docs/middleware/redirection/index.html +0 -55
  119. data/docs/middleware/session/index.html +0 -65
  120. data/docs/middleware/static/index.html +0 -51
  121. data/docs/server-setup/index.html +0 -87
  122. data/docs/testing/index.html +0 -53
  123. data/docs/updating-utopia/index.html +0 -102
  124. data/docs/your-first-page/index.html +0 -74
  125. data/materials/utopia.png +0 -0
  126. data/materials/utopia.svg +0 -1
  127. data/setup/site/.yarnrc +0 -1
  128. data/spec/mock_node.rb +0 -16
  129. data/spec/spec_helper.rb +0 -13
  130. data/spec/utopia/command_spec.rb +0 -164
  131. data/spec/utopia/content/document_spec.rb +0 -60
  132. data/spec/utopia/content/links/bar/index.xnode +0 -0
  133. data/spec/utopia/content/links/bar/parent/child/index.en.xnode +0 -0
  134. data/spec/utopia/content/links/bar/parent/child/index.ja.xnode +0 -0
  135. data/spec/utopia/content/links/bar/parent/links.yaml +0 -2
  136. data/spec/utopia/content/links/foo/index.xnode +0 -0
  137. data/spec/utopia/content/links/foo/links.yaml +0 -2
  138. data/spec/utopia/content/links/foo/test.de.xnode +0 -0
  139. data/spec/utopia/content/links/foo/test.en.xnode +0 -0
  140. data/spec/utopia/content/links/index.xnode +0 -0
  141. data/spec/utopia/content/links/links.yaml +0 -18
  142. data/spec/utopia/content/links/redirect/links.yaml +0 -2
  143. data/spec/utopia/content/links/welcome.xnode +0 -0
  144. data/spec/utopia/content/links_spec.rb +0 -218
  145. data/spec/utopia/content/localized/five/index.en.xnode +0 -0
  146. data/spec/utopia/content/localized/four/index.en.xnode +0 -0
  147. data/spec/utopia/content/localized/four/index.zh.xnode +0 -0
  148. data/spec/utopia/content/localized/four/links.yaml +0 -4
  149. data/spec/utopia/content/localized/links.yaml +0 -13
  150. data/spec/utopia/content/localized/one.xnode +0 -0
  151. data/spec/utopia/content/localized/three/index.xnode +0 -0
  152. data/spec/utopia/content/localized/two.en.xnode +0 -0
  153. data/spec/utopia/content/localized/two.zh.xnode +0 -0
  154. data/spec/utopia/content/markup_spec.rb +0 -96
  155. data/spec/utopia/content/namespace_spec.rb +0 -45
  156. data/spec/utopia/content/node/lookup/content.xnode +0 -1
  157. data/spec/utopia/content/node/lookup/index.xnode +0 -1
  158. data/spec/utopia/content/node/ordered/first.xnode +0 -0
  159. data/spec/utopia/content/node/ordered/index.xnode +0 -0
  160. data/spec/utopia/content/node/ordered/links.yaml +0 -4
  161. data/spec/utopia/content/node/ordered/second.xnode +0 -0
  162. data/spec/utopia/content/node/related/foo.en.xnode +0 -0
  163. data/spec/utopia/content/node/related/foo.ja.xnode +0 -0
  164. data/spec/utopia/content/node/related/links.yaml +0 -4
  165. data/spec/utopia/content/node_spec.rb +0 -97
  166. data/spec/utopia/content/response_spec.rb +0 -54
  167. data/spec/utopia/content/tags_spec.rb +0 -82
  168. data/spec/utopia/content_spec.rb +0 -100
  169. data/spec/utopia/content_spec.ru +0 -6
  170. data/spec/utopia/content_spec/_heading.xnode +0 -1
  171. data/spec/utopia/content_spec/content/_show-value.xnode +0 -1
  172. data/spec/utopia/content_spec/content/links.yaml +0 -2
  173. data/spec/utopia/content_spec/content/test-partial.xnode +0 -1
  174. data/spec/utopia/content_spec/index.xnode +0 -1
  175. data/spec/utopia/content_spec/node/index.xnode +0 -1
  176. data/spec/utopia/content_spec/test.xnode +0 -10
  177. data/spec/utopia/controller/actions_spec.rb +0 -62
  178. data/spec/utopia/controller/middleware_spec.rb +0 -88
  179. data/spec/utopia/controller/middleware_spec.ru +0 -6
  180. data/spec/utopia/controller/middleware_spec/controller/controller.rb +0 -27
  181. data/spec/utopia/controller/middleware_spec/controller/index.xnode +0 -1
  182. data/spec/utopia/controller/middleware_spec/controller/nested/controller.rb +0 -7
  183. data/spec/utopia/controller/middleware_spec/empty/controller.rb +0 -0
  184. data/spec/utopia/controller/middleware_spec/redirect/controller.rb +0 -12
  185. data/spec/utopia/controller/middleware_spec/redirect/test/controller.rb +0 -9
  186. data/spec/utopia/controller/respond_spec.rb +0 -174
  187. data/spec/utopia/controller/respond_spec.ru +0 -12
  188. data/spec/utopia/controller/respond_spec/api/controller.rb +0 -28
  189. data/spec/utopia/controller/respond_spec/errors/controller.rb +0 -14
  190. data/spec/utopia/controller/respond_spec/errors/file-not-found.xnode +0 -8
  191. data/spec/utopia/controller/respond_spec/html/controller.rb +0 -11
  192. data/spec/utopia/controller/respond_spec/rewrite/controller.rb +0 -13
  193. data/spec/utopia/controller/rewrite_spec.rb +0 -80
  194. data/spec/utopia/controller/sequence_spec.rb +0 -135
  195. data/spec/utopia/controller/variables_spec.rb +0 -59
  196. data/spec/utopia/controller/websocket_spec.rb +0 -68
  197. data/spec/utopia/controller/websocket_spec.ru +0 -5
  198. data/spec/utopia/controller/websocket_spec/server/controller.rb +0 -11
  199. data/spec/utopia/exceptions/handler_spec.rb +0 -47
  200. data/spec/utopia/exceptions/handler_spec.ru +0 -8
  201. data/spec/utopia/exceptions/handler_spec/controller.rb +0 -19
  202. data/spec/utopia/exceptions/mailer_spec.rb +0 -43
  203. data/spec/utopia/exceptions/mailer_spec.ru +0 -10
  204. data/spec/utopia/extensions_spec.rb +0 -73
  205. data/spec/utopia/http/status_spec.rb +0 -44
  206. data/spec/utopia/locale_spec.rb +0 -58
  207. data/spec/utopia/localization_spec.rb +0 -92
  208. data/spec/utopia/localization_spec.ru +0 -15
  209. data/spec/utopia/localization_spec/controller.rb +0 -21
  210. data/spec/utopia/localization_spec/localized.de.txt +0 -1
  211. data/spec/utopia/localization_spec/localized.en.txt +0 -1
  212. data/spec/utopia/localization_spec/localized.ja.txt +0 -1
  213. data/spec/utopia/localization_spec/test.txt +0 -1
  214. data/spec/utopia/middleware_spec.rb +0 -31
  215. data/spec/utopia/path/matcher_spec.rb +0 -66
  216. data/spec/utopia/path_spec.rb +0 -207
  217. data/spec/utopia/performance_spec.rb +0 -92
  218. data/spec/utopia/performance_spec/cache/head/readme.txt +0 -1
  219. data/spec/utopia/performance_spec/cache/meta/readme.txt +0 -1
  220. data/spec/utopia/performance_spec/config.ru +0 -35
  221. data/spec/utopia/performance_spec/lib/readme.txt +0 -1
  222. data/spec/utopia/performance_spec/pages/_heading.xnode +0 -2
  223. data/spec/utopia/performance_spec/pages/_page.xnode +0 -26
  224. data/spec/utopia/performance_spec/pages/api/controller.rb +0 -8
  225. data/spec/utopia/performance_spec/pages/errors/exception.xnode +0 -5
  226. data/spec/utopia/performance_spec/pages/errors/file-not-found.xnode +0 -5
  227. data/spec/utopia/performance_spec/pages/links.yaml +0 -2
  228. data/spec/utopia/performance_spec/pages/welcome/index.xnode +0 -17
  229. data/spec/utopia/rack_helper.rb +0 -32
  230. data/spec/utopia/redirection_spec.rb +0 -77
  231. data/spec/utopia/redirection_spec.ru +0 -27
  232. data/spec/utopia/session_spec.rb +0 -189
  233. data/spec/utopia/session_spec.ru +0 -24
  234. data/spec/utopia/setup_spec.rb +0 -56
  235. data/spec/utopia/static_spec.rb +0 -49
  236. data/spec/utopia/static_spec.ru +0 -5
  237. data/spec/utopia/static_spec/test.txt +0 -1
  238. data/utopia.gemspec +0 -52
  239. data/wiki/Gemfile +0 -9
  240. data/wiki/config.ru +0 -7
  241. data/wiki/pages/development-environment-setup/index.md +0 -16
  242. data/wiki/pages/faq/links.yaml +0 -2
  243. data/wiki/pages/faq/what-is-xnode/index.md +0 -37
  244. data/wiki/pages/faq/what-is-xnode/links.yaml +0 -2
  245. data/wiki/pages/index.md +0 -35
  246. data/wiki/pages/javascript/index.md +0 -77
  247. data/wiki/pages/javascript/links.yaml +0 -2
  248. data/wiki/pages/links.yaml +0 -2
  249. data/wiki/pages/middleware/content/index.md +0 -21
  250. data/wiki/pages/middleware/controller/actions/index.md +0 -76
  251. data/wiki/pages/middleware/controller/index.md +0 -62
  252. data/wiki/pages/middleware/controller/links.yaml +0 -4
  253. data/wiki/pages/middleware/controller/rewrite/index.md +0 -69
  254. data/wiki/pages/middleware/localization/index.md +0 -16
  255. data/wiki/pages/middleware/redirection/index.md +0 -17
  256. data/wiki/pages/middleware/session/index.md +0 -29
  257. data/wiki/pages/middleware/static/index.md +0 -13
  258. data/wiki/pages/server-setup/index.md +0 -52
  259. data/wiki/pages/testing/index.md +0 -15
  260. data/wiki/pages/updating-utopia/index.md +0 -63
  261. data/wiki/pages/your-first-page/index.md +0 -38
@@ -1,49 +0,0 @@
1
- #!/usr/bin/env rspec
2
- # frozen_string_literal: true
3
-
4
- # Copyright, 2014, by Samuel G. D. Williams. <http://www.codeotaku.com>
5
- #
6
- # Permission is hereby granted, free of charge, to any person obtaining a copy
7
- # of this software and associated documentation files (the "Software"), to deal
8
- # in the Software without restriction, including without limitation the rights
9
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- # copies of the Software, and to permit persons to whom the Software is
11
- # furnished to do so, subject to the following conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be included in
14
- # all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
- # THE SOFTWARE.
23
-
24
- require 'rack'
25
- require 'rack/test'
26
-
27
- require 'utopia/static'
28
-
29
- module Utopia::StaticSpec
30
- describe Utopia::Static do
31
- include Rack::Test::Methods
32
-
33
- let(:app) {Rack::Builder.parse_file(File.expand_path('../static_spec.ru', __FILE__)).first}
34
-
35
- it "should give the correct mime type" do
36
- get "/test.txt"
37
-
38
- expect(last_response.header['Content-Type']).to be == 'text/plain'
39
- end
40
-
41
- it "should return partial content" do
42
- get "/test.txt", {}, 'HTTP_RANGE' => 'bytes=1-4'
43
-
44
- expect(last_response.status).to be == 206
45
- expect(last_response.content_length).to be == 4
46
- expect(last_response.body).to be == "ello"
47
- end
48
- end
49
- end
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- use Utopia::Static, root: File.expand_path('static_spec', __dir__)
4
-
5
- run lambda {|env| [404, {}, []]}
@@ -1 +0,0 @@
1
- Hello World!
@@ -1,52 +0,0 @@
1
-
2
- require_relative 'lib/utopia/version'
3
-
4
- Gem::Specification.new do |spec|
5
- spec.name = 'utopia'
6
- spec.version = Utopia::VERSION
7
- spec.authors = ['Samuel Williams']
8
- spec.email = ['samuel.williams@oriontransfer.co.nz']
9
- spec.description = <<-EOF
10
- Utopia is a website generation framework which provides a robust set of tools
11
- to build highly complex dynamic websites. It uses the filesystem heavily for
12
- content and provides frameworks for interacting with files and directories as
13
- structure representing the website.
14
- EOF
15
- spec.summary = %q{Utopia is a framework for building dynamic content-driven websites.}
16
- spec.homepage = 'https://github.com/ioquatix/utopia'
17
- spec.license = "MIT"
18
-
19
- spec.files = `git ls-files`.split($/)
20
- spec.executables = spec.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
21
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
22
- spec.require_paths = ['lib']
23
-
24
- spec.required_ruby_version = '~> 2.5'
25
-
26
- spec.add_dependency 'trenni', '~> 3.0'
27
- spec.add_dependency 'mime-types', '~> 3.0'
28
- spec.add_dependency 'msgpack'
29
-
30
- spec.add_dependency 'samovar', '~> 2.1'
31
- spec.add_dependency 'console', '~> 1.0'
32
- spec.add_dependency 'variant', '~> 0.1'
33
-
34
- spec.add_dependency 'rack', '~> 2.2'
35
-
36
- spec.add_dependency 'http-accept', '~> 2.1'
37
-
38
- spec.add_dependency 'mail', '~> 2.6'
39
-
40
- spec.add_dependency 'concurrent-ruby', '~> 1.0'
41
-
42
- spec.add_development_dependency 'bake'
43
-
44
- spec.add_development_dependency 'falcon'
45
- spec.add_development_dependency 'async-rspec'
46
- spec.add_development_dependency 'async-websocket'
47
-
48
- spec.add_development_dependency 'covered'
49
- spec.add_development_dependency 'bundler'
50
- spec.add_development_dependency 'rspec', '~> 3.6'
51
- spec.add_development_dependency 'bake-bundler'
52
- end
@@ -1,9 +0,0 @@
1
-
2
- source "https://rubygems.org"
3
-
4
- group :preload do
5
- gem "falcon"
6
- gem "utopia-wiki"
7
- end
8
-
9
- gem "utopia", path: "../"
@@ -1,7 +0,0 @@
1
-
2
- require 'utopia/setup'
3
- UTOPIA ||= Utopia.setup
4
-
5
- require 'utopia/wiki'
6
-
7
- Utopia::Wiki.call(self)
@@ -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,2 +0,0 @@
1
- index:
2
- title: FAQ
@@ -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,2 +0,0 @@
1
- index:
2
- title: "What is .xnode?"
@@ -1,35 +0,0 @@
1
- # Utopia
2
-
3
- Utopia is a content management system built on top of Ruby. It makes creating, deploying and updating content-driven websites easy.
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,77 +0,0 @@
1
- # Installing JavaScript Libraries
2
-
3
- Utopia integrates with Yarn and provides a [bake task](https://github.com/ioquatix/bake) 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 `bake utopia: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
- ```bash
12
- $ sudo npm install -g yarn
13
- ```
14
-
15
- ## Installing jQuery
16
-
17
- Firstly, ensure your project has a `package.json` file:
18
-
19
- ```bash
20
- $ yarn init
21
- ```
22
-
23
- Then install jquery using `yarn`:
24
-
25
- ```bash
26
- $ yarn install jquery
27
- ```
28
-
29
- Copy the distribution scripts to `public/_components`:
30
-
31
- ```bash
32
- $ bundle exec bake utopia:yarn:update
33
- ```
34
-
35
- Then add the appropriate `<script>` tags to `pages/_page.xnode`:
36
-
37
- ```html
38
- <script type="text/javascript" src="/_components/jquery/jquery.min.js"></script>
39
- ```
40
-
41
- ## Using JavaScript
42
-
43
- You can use JavaScript by embedding it directly into your HTML, or by creating a JavaScript source file and referencing that.
44
-
45
- ### Embedding Code
46
-
47
- In your HTML view:
48
-
49
- ```trenni
50
- <html>
51
- <body>
52
- <script type="text/javascript">
53
- //<![CDATA[
54
- console.log("Hello World")
55
- //]]>
56
- </script>
57
- </body>
58
- </html>
59
- ```
60
-
61
- ### External Script
62
-
63
- In `script.js`:
64
-
65
- ```javascript
66
- console.log("Hello World")
67
- ```
68
-
69
- In your HTML view:
70
-
71
- ```trenni
72
- <html>
73
- <body>
74
- <script type="text/javascript" src="script.js"></script>
75
- </body>
76
- </html>
77
- ```
@@ -1,2 +0,0 @@
1
- index:
2
- title: JavaScript
@@ -1,2 +0,0 @@
1
- index:
2
- title: Wiki
@@ -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
- ```