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,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- prepend Respond, Actions
4
- respond.with_json
5
-
6
- class VersionedResponse
7
- def to_json(options = {})
8
- JSON::dump(self.as_json(options))
9
- end
10
-
11
- # Modelled after http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html
12
- def as_json(options = {})
13
- if options[:version] == '1'
14
- {"message" => "Hello World"}
15
- elsif options[:version] == '2'
16
- {"message" => "Goodbye World"}
17
- else
18
- {}
19
- end
20
- end
21
- end
22
-
23
- # To get different verions of the response, use:
24
- # Accept: application/json;version=1
25
- # Accept: application/json;version=2
26
- on 'fetch' do
27
- succeed! content: VersionedResponse.new
28
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- prepend Respond, Actions
4
-
5
- # If the request doesn't match application/json specifically, it would be passed through:
6
- respond.with_passthrough
7
- respond.with_json
8
-
9
- # The reason why this test is important is that it tests the behaviour of error handling. Normally, if a request comes into the middleware and fails due to an unhandled exception, this is passed along by Utopia::ExceptionHandler. If the client is expecting JSON, they should get a JSON error response.
10
- on 'file-not-found' do
11
- fail! 404, {message: 'File not found'}
12
- end
13
-
14
- # Accept: text/html, application/json, */*
@@ -1,8 +0,0 @@
1
- <html>
2
- <head><title>Error</title></head>
3
- <body>
4
- <h1>File Not Found</h1>
5
-
6
- <p>The file you requested is unfortunately not available at this time!</p>
7
- </body>
8
- </html>
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- prepend Respond, Actions
4
-
5
- # Respond with json:
6
- respond.with_json
7
-
8
- # This method should return HTML, even thought this controller responds with JSON.
9
- on 'hello-world' do
10
- succeed! content: "<p>Hello World</p>", :type => 'text/html'
11
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- prepend Respond, Rewrite, Actions
4
-
5
- respond.with_json
6
-
7
- rewrite.extract_prefix id: Integer do |request|
8
- fail! :not_found, message: "Could not find record" if @id == 1
9
- end
10
-
11
- on 'show' do
12
- succeed! content: {id: @id, foo: 'bar'}
13
- end
@@ -1,80 +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
-
26
- require 'utopia/controller'
27
-
28
- module Utopia::Controller::RewriteSpec
29
- describe Utopia::Controller do
30
- class TestController < Utopia::Controller::Base
31
- prepend Utopia::Controller::Rewrite, Utopia::Controller::Actions
32
-
33
- on 'edit' do |request, path|
34
- @edit = true
35
- end
36
-
37
- attr :edit
38
-
39
- rewrite.extract_prefix user_id: Integer, summary: 'summary', order_id: Integer
40
-
41
- attr :user_id
42
- attr :order_id
43
-
44
- rewrite.extract_prefix fail: 'fail' do
45
- fail! 444
46
- end
47
-
48
- def self.uri_path
49
- Utopia::Path['/']
50
- end
51
- end
52
-
53
- let(:controller) {TestController.new}
54
-
55
- def mock_request(*args)
56
- request = Rack::Request.new(Rack::MockRequest.env_for(*args))
57
- return request, Utopia::Path[request.path_info]
58
- end
59
-
60
- it "should match path prefix and extract parameters" do
61
- request, path = mock_request("/10/summary/20/edit")
62
- relative_path = path - controller.class.uri_path
63
-
64
- controller.process!(request, relative_path)
65
-
66
- expect(controller.user_id).to be == 10
67
- expect(controller.order_id).to be == 20
68
- expect(controller.edit).to be true
69
- end
70
-
71
- it "should allow rewrite to fail request" do
72
- request, path = mock_request("/fail")
73
- relative_path = path - controller.class.uri_path
74
-
75
- response = controller.process!(request, relative_path)
76
-
77
- expect(response[0]).to be == 444
78
- end
79
- end
80
- end
@@ -1,135 +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::SequenceSpec
29
- class TestController < Utopia::Controller::Base
30
- prepend Utopia::Controller::Actions
31
-
32
- on 'success' do
33
- succeed!
34
- end
35
-
36
- on :failure do
37
- fail! 400
38
- end
39
-
40
- on :variable do |request, path|
41
- @variable = :value
42
- end
43
- end
44
-
45
- class TestIndirectController < Utopia::Controller::Base
46
- prepend Utopia::Controller::Actions
47
-
48
- def initialize
49
- @sequence = String.new
50
- end
51
-
52
- on('user/update') do
53
- @sequence << 'A'
54
- end
55
-
56
- on('**/comment/post') do
57
- @sequence << 'B'
58
- end
59
-
60
- on('comment/delete') do
61
- @sequence << 'C'
62
- end
63
-
64
- on('**/comment/delete') do
65
- @sequence << 'D'
66
- end
67
-
68
- on('**') do
69
- @sequence << 'E'
70
- end
71
-
72
- on('*') do
73
- @sequence << 'F'
74
- end
75
- end
76
-
77
- describe Utopia::Controller do
78
- let(:variables) {Utopia::Controller::Variables.new}
79
-
80
- it "should call controller methods" do
81
- request = Rack::Request.new(Utopia::VARIABLES_KEY => variables)
82
- controller = TestController.new
83
- variables << controller
84
-
85
- result = controller.process!(request, Utopia::Path["success"])
86
- expect(result).to be == [200, {}, []]
87
-
88
- result = controller.process!(request, Utopia::Path["foo/bar/failure"])
89
- expect(result).to be == [400, {}, ["Bad Request"]]
90
-
91
- result = controller.process!(request, Utopia::Path["variable"])
92
- expect(result).to be == nil
93
- expect(variables.to_hash).to be == {:variable => :value}
94
- end
95
-
96
- it "should call direct controller methods" do
97
- request = Rack::Request.new(Utopia::VARIABLES_KEY => variables)
98
- controller = TestIndirectController.new
99
- variables << controller
100
-
101
- controller.process!(request, Utopia::Path["user/update"])
102
- expect(variables['sequence']).to be == 'EA'
103
- end
104
-
105
- it "should call indirect controller methods" do
106
- request = Rack::Request.new(Utopia::VARIABLES_KEY => variables)
107
- controller = TestIndirectController.new
108
- variables << controller
109
-
110
- result = controller.process!(request, Utopia::Path["foo/comment/post"])
111
- expect(result).to be nil
112
- expect(variables['sequence']).to be == 'EB'
113
- end
114
-
115
- it "should call multiple indirect controller methods in order" do
116
- request = Rack::Request.new(Utopia::VARIABLES_KEY => variables)
117
- controller = TestIndirectController.new
118
- variables << controller
119
-
120
- result = controller.process!(request, Utopia::Path["comment/delete"])
121
- expect(result).to be nil
122
- expect(variables['sequence']).to be == 'EDC'
123
- end
124
-
125
- it "should match single patterns" do
126
- request = Rack::Request.new(Utopia::VARIABLES_KEY => variables)
127
- controller = TestIndirectController.new
128
- variables << controller
129
-
130
- result = controller.process!(request, Utopia::Path["foo"])
131
- expect(result).to be nil
132
- expect(variables['sequence']).to be == 'EF'
133
- end
134
- end
135
- end
@@ -1,59 +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/variables'
25
-
26
- RSpec.describe Utopia::Controller::Variables do
27
- class TestController
28
- attr_accessor :x, :y, :z
29
-
30
- def copy_instance_variables(from)
31
- from.instance_variables.each do |name|
32
- self.instance_variable_set(name, from.instance_variable_get(name))
33
- end
34
- end
35
- end
36
-
37
- let(:a) {TestController.new.tap{|controller| controller.x = 10}}
38
- let(:b) {TestController.new.tap{|controller| controller.y = 20}}
39
- let(:c) {TestController.new.tap{|controller| controller.z = 30}}
40
-
41
- it "should fetch a key" do
42
- subject << a
43
-
44
- expect(subject[:x]).to be == 10
45
- end
46
-
47
- it "should give a default when key is not found" do
48
- subject << a
49
-
50
- expect(subject.fetch(:y, :default)).to be == :default
51
- expect(subject.fetch(:y){:default}).to be == :default
52
- end
53
-
54
- it "should convert to hash" do
55
- subject << a << b
56
-
57
- expect(subject.to_hash).to be == {x: 10, y: 20}
58
- end
59
- end
@@ -1,68 +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 'utopia/controller'
26
-
27
- require 'async/websocket/client'
28
- require 'async/websocket/adapters/rack'
29
-
30
- require 'falcon/server'
31
- require 'falcon/adapters/rack'
32
-
33
- require 'async/http/client'
34
- require 'async/http/endpoint'
35
-
36
- RSpec.describe Utopia::Controller do
37
- context Async::WebSocket::Client do
38
- include Rack::Test::Methods
39
- include_context Async::RSpec::Reactor
40
-
41
- let(:endpoint) {Async::HTTP::Endpoint.parse("http://localhost:7050/server/events")}
42
- let(:app) {Rack::Builder.parse_file(File.expand_path('websocket_spec.ru', __dir__)).first}
43
- let(:server) {Falcon::Server.new(Falcon::Server.middleware(app), endpoint)}
44
- let(:client) {Async::HTTP::Client.new(endpoint)}
45
-
46
- let!(:server_task) do
47
- reactor.async do
48
- server.run
49
- end
50
- end
51
-
52
- after do
53
- server_task.stop
54
- end
55
-
56
- it "fails for normal requests" do
57
- get "/server/events"
58
-
59
- expect(last_response.status).to be == 400
60
- end
61
-
62
- it "can connect to websocket" do
63
- Async::WebSocket::Client.connect(endpoint) do |connection|
64
- expect(connection.read).to be == {type: "test", data: "Hello World"}
65
- end
66
- end
67
- end
68
- end
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- use Utopia::Controller, root: File.expand_path('websocket_spec', __dir__)
4
-
5
- run lambda {|env| [404, {}, []]}
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- prepend Actions
4
-
5
- on 'events' do |request|
6
- upgrade = Async::WebSocket::Adapters::Rack.open(request.env) do |connection|
7
- connection.write({type: "test", data: "Hello World"})
8
- end
9
-
10
- respond?(upgrade) or fail!
11
- end