utopia 2.14.0 → 2.16.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- use Utopia::Content,
4
- root: File.expand_path('content_spec', __dir__)
5
-
6
- run lambda {|env| [404, {}, []]}
@@ -1 +0,0 @@
1
- <h1><utopia:content/></h1>
@@ -1 +0,0 @@
1
- #{attributes[:value]}
@@ -1,2 +0,0 @@
1
- redirect:
2
- uri: foo
@@ -1 +0,0 @@
1
- #{partial 'content:show-value', value: 10}
@@ -1 +0,0 @@
1
- <content:heading>Hello World</content:heading>
@@ -1 +0,0 @@
1
- #{current.node.local_path}
@@ -1,10 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>Testing</title>
5
- </head>
6
- <body>
7
- <h1>Testing</h1>
8
- <p>This is a test.</p>
9
- </body>
10
- </html>
@@ -1,62 +0,0 @@
1
- #!/usr/bin/env rspec
2
- # frozen_string_literal: true
3
-
4
- # Copyright, 2012, 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 'utopia/controller'
25
-
26
- module Utopia::Controller::ActionsSpec
27
- describe Utopia::Controller::Actions::Action do
28
- it "can be a hash key" do
29
- expect(subject).to be == subject
30
- expect(subject.hash).to be == subject.hash
31
- expect(subject).to be_eql subject
32
- end
33
-
34
- it "should resolve callbacks" do
35
- specific_action = subject.define(['a', 'b', 'c']) {puts 'specific_action'}
36
- indirect_action = subject.define(['**']) {puts 'indirect_action'}
37
- indirect_named_action = subject.define(['**', 'r']) {puts 'indirect_named_action'}
38
-
39
- expect(specific_action).to_not be == indirect_action
40
- expect(indirect_action).to_not be == indirect_named_action
41
-
42
- expect(subject.matching(['a', 'b', 'c'])).to be == [indirect_action, specific_action]
43
- expect(subject.matching(['q'])).to be == [indirect_action]
44
-
45
- expect(subject.matching(['q', 'r'])).to be == [indirect_action, indirect_named_action]
46
- expect(subject.matching(['q', 'r', 's'])).to be == [indirect_action]
47
- end
48
-
49
- it "should be greedy matching" do
50
- greedy_action = subject.define(['**', 'r']) {puts 'greedy_action'}
51
-
52
- expect(subject.matching(['g', 'r'])).to be_include greedy_action
53
- expect(subject.matching(['r'])).to be_include greedy_action
54
- end
55
-
56
- it "should match patterns" do
57
- variable_action = subject.define(['*', 'summary', '*']) {puts 'variable_action'}
58
-
59
- expect(subject.matching(['10', 'summary', '20'])).to be_include variable_action
60
- end
61
- end
62
- end
@@ -1,88 +0,0 @@
1
- #!/usr/bin/env rspec
2
- # frozen_string_literal: true
3
-
4
- # Copyright, 2012, 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/mock'
25
- require 'rack/test'
26
- require 'utopia/controller'
27
-
28
- module Utopia::Controller::MiddlewareSpec
29
- describe Utopia::Controller do
30
- include Rack::Test::Methods
31
-
32
- let(:app) {Rack::Builder.parse_file(File.expand_path('../middleware_spec.ru', __FILE__)).first}
33
-
34
- it "should successfully call empty controller" do
35
- get "/empty/index"
36
-
37
- expect(last_response.status).to be == 404
38
- end
39
-
40
- it "should successfully call the controller method" do
41
- get "/controller/flat"
42
-
43
- expect(last_response.status).to be == 200
44
- expect(last_response.body).to be == 'flat'
45
- end
46
-
47
- it "should invoke controller method from the top level" do
48
- get "/controller/hello-world"
49
-
50
- expect(last_response.status).to be == 200
51
- expect(last_response.body).to be == 'Hello World'
52
- end
53
-
54
- it "should invoke the controller method with a nested path" do
55
- get "/controller/nested/hello-world"
56
-
57
- expect(last_response.status).to be == 200
58
- expect(last_response.body).to be == 'Hello World'
59
- end
60
-
61
- it "shouldn't call the nested controller method" do
62
- get "/controller/nested/flat"
63
-
64
- expect(last_response.status).to be == 404
65
- end
66
-
67
- it "should perform ignore the request" do
68
- get '/controller/ignore'
69
- expect(last_response.status).to be == 404
70
- end
71
-
72
- it "should redirect the request" do
73
- get '/controller/redirect'
74
- expect(last_response.status).to be == 302
75
- expect(last_response.headers['Location']).to be == 'bar'
76
- end
77
-
78
- # This was a bug, where by the controller URI_PATH was being mutated by Controller#invoke_controllers.
79
- it "should give the correct URI_PATH" do
80
- get '/redirect/test/bar'
81
- expect(last_response.status).to be == 200
82
-
83
- get '/redirect/test/foo'
84
- expect(last_response.status).to be == 200
85
- expect(last_response.body).to be == '/redirect'
86
- end
87
- end
88
- end
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- use Utopia::Controller,
4
- root: File.expand_path('middleware_spec', __dir__)
5
-
6
- run lambda {|env| [404, {}, []]}
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- prepend Actions
4
-
5
- on 'flat' do
6
- succeed! content: "flat"
7
- end
8
-
9
- on '**/hello-world' do
10
- succeed! content: @hello_world
11
- end
12
-
13
- on '**' do
14
- @hello_world = "Hello World"
15
- end
16
-
17
- on 'ignore' do
18
- ignore!
19
- end
20
-
21
- on 'redirect' do
22
- redirect! 'bar'
23
- end
24
-
25
- on 'index' do
26
- succeed! content: 'Hello World'
27
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- prepend Actions
4
-
5
- on 'foobar' do
6
- succeed! content: "Foobar"
7
- end
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- prepend Actions
4
-
5
- on '**' do |request, path|
6
- # puts "**: #{URI_PATH.inspect}"
7
-
8
- if path.include? 'foo'
9
- # This should ALWAYS give /redirect
10
- succeed! content: URI_PATH.to_s
11
- end
12
- end
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- prepend Actions
4
-
5
- on 'bar' do |request, path|
6
- # puts "bar: #{URI_PATH.inspect}"
7
-
8
- succeed!
9
- end
@@ -1,174 +0,0 @@
1
- #!/usr/bin/env rspec
2
- # frozen_string_literal: true
3
-
4
- # Copyright, 2012, 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/test'
25
- require 'rack/mock'
26
- require 'json'
27
-
28
- require 'utopia/content'
29
- require 'utopia/controller'
30
- require 'utopia/redirection'
31
-
32
- module Utopia::Controller::RespondSpec
33
- describe Utopia::Controller do
34
- class TestController < Utopia::Controller::Base
35
- # Request goes from right to left.
36
- prepend Utopia::Controller::Respond, Utopia::Controller::Actions
37
-
38
- respond.with("application/json") do |content|
39
- JSON::dump(content)
40
- end
41
-
42
- respond.with("text/plain") do |content|
43
- content.inspect
44
- end
45
-
46
- on 'fetch' do |request, path|
47
- succeed! content: {user_id: 10}
48
- end
49
-
50
- def self.uri_path
51
- Utopia::Path['/']
52
- end
53
- end
54
-
55
- let(:controller) {TestController.new}
56
-
57
- def mock_request(*args)
58
- request = Rack::Request.new(Rack::MockRequest.env_for(*args))
59
- return request, Utopia::Path[request.path_info]
60
- end
61
-
62
- it "should serialize response as JSON" do
63
- request, path = mock_request("/fetch")
64
- relative_path = path - controller.class.uri_path
65
-
66
- request.env['HTTP_ACCEPT'] = "application/json"
67
-
68
- status, headers, body = controller.process!(request, relative_path)
69
-
70
- expect(status).to be == 200
71
- expect(headers['Content-Type']).to be == "application/json"
72
- expect(body.join).to be == '{"user_id":10}'
73
- end
74
-
75
- it "should serialize response as text" do
76
- request, path = mock_request("/fetch")
77
- relative_path = path - controller.class.uri_path
78
-
79
- request.env['HTTP_ACCEPT'] = "text/*"
80
-
81
- status, headers, body = controller.process!(request, relative_path)
82
-
83
- expect(status).to be == 200
84
- expect(headers['Content-Type']).to be == "text/plain"
85
- expect(body.join).to be == '{:user_id=>10}'
86
- end
87
- end
88
-
89
- describe Utopia::Controller do
90
- include Rack::Test::Methods
91
-
92
- let(:app) {Rack::Builder.parse_file(File.expand_path('respond_spec.ru', __dir__)).first}
93
-
94
- it "should get html error page" do
95
- # Standard web browser header:
96
- header 'Accept', 'text/html, text/*, */*'
97
-
98
- get '/errors/file-not-found'
99
-
100
- expect(last_response.status).to be == 200
101
- expect(last_response.headers['Content-Type']).to include('text/html')
102
- expect(last_response.body).to be_include "<h1>File Not Found</h1>"
103
- end
104
-
105
- it "should get json error response" do
106
- header 'Accept', 'application/json'
107
-
108
- get '/errors/file-not-found'
109
-
110
- expect(last_response.status).to be == 404
111
- expect(last_response.headers['Content-Type']).to be == 'application/json; charset=utf-8'
112
- expect(last_response.body).to be == '{"message":"File not found"}'
113
- end
114
-
115
- it 'should get html response' do
116
- header 'Accept', '*/*'
117
-
118
- get '/html/hello-world'
119
-
120
- expect(last_response.status).to be == 200
121
- expect(last_response.headers['Content-Type']).to be == 'text/html'
122
- expect(last_response.body).to be == '<p>Hello World</p>'
123
- end
124
-
125
- it "should get version 1 response" do
126
- header 'Accept', 'application/json;version=1'
127
-
128
- get '/api/fetch'
129
-
130
- expect(last_response.status).to be == 200
131
- expect(last_response.headers['Content-Type']).to be == 'application/json; charset=utf-8'
132
- expect(last_response.body).to be == '{"message":"Hello World"}'
133
- end
134
-
135
- it "should get version 2 response" do
136
- header 'Accept', 'application/json;version=2'
137
-
138
- get '/api/fetch'
139
-
140
- expect(last_response.status).to be == 200
141
- expect(last_response.headers['Content-Type']).to be == 'application/json; charset=utf-8'
142
- expect(last_response.body).to be == '{"message":"Goodbye World"}'
143
- end
144
-
145
-
146
- it "should work even if no accept header specified" do
147
- get '/api/fetch'
148
-
149
- expect(last_response.status).to be == 200
150
- expect(last_response.headers['Content-Type']).to be == 'application/json; charset=utf-8'
151
- expect(last_response.body).to be == '{}'
152
- end
153
-
154
- it "should give record as JSON" do
155
- header 'Accept', 'application/json'
156
-
157
- get '/rewrite/2/show'
158
-
159
- expect(last_response.status).to be == 200
160
- expect(last_response.headers['Content-Type']).to be == 'application/json; charset=utf-8'
161
- expect(last_response.body).to be == '{"id":2,"foo":"bar"}'
162
- end
163
-
164
- it "should give error as JSON" do
165
- header 'Accept', 'application/json'
166
-
167
- get '/rewrite/1/show'
168
-
169
- expect(last_response.status).to be == 404
170
- expect(last_response.headers['Content-Type']).to be == 'application/json; charset=utf-8'
171
- expect(last_response.body).to be == '{"message":"Could not find record"}'
172
- end
173
- end
174
- end
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- use Utopia::Redirection::Errors,
4
- 404 => '/fail'
5
-
6
- use Utopia::Controller,
7
- root: File.expand_path('respond_spec', __dir__)
8
-
9
- use Utopia::Content,
10
- root: File.expand_path('respond_spec', __dir__)
11
-
12
- run lambda {|env| [404, {}, []]}