utopia 2.17.1 → 2.18.4
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.
- checksums.yaml +4 -4
- data/lib/utopia/command/site.rb +2 -2
- data/lib/utopia/content/link.rb +8 -6
- data/lib/utopia/content/links.rb +8 -5
- data/lib/utopia/controller/actions.md +76 -0
- data/lib/utopia/controller/rewrite.md +69 -0
- data/lib/utopia/exceptions/mailer.rb +1 -1
- data/lib/utopia/path.rb +8 -2
- data/lib/utopia/version.rb +1 -1
- data/setup/site/README.md +2 -2
- data/setup/site/config.ru +2 -0
- data/setup/site/pages/_page.xnode +1 -1
- data/setup/site/public/_static/icon.svg +20 -0
- data/setup/site/public/_static/utopia-background.svg +11 -1
- data/setup/site/public/_static/utopia.svg +19 -1
- metadata +6 -46
- data/setup/site/public/_static/icon.png +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7d3b6e619bc7db476e12fb64c15765a84349a8aabc6ee8b2b4e46a8ea80936e4
|
4
|
+
data.tar.gz: 3fe0eeafcf89805747e888122545ac3ab73e0a87a61f6a157eb8c7a86a442135
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a3a7677b5ee5f54ceb5267614f46ca8791d6ac5db62db29485e9392cb993e4b6e39ab6be6a1bbbd9faa7182368612f3347cf4faa769e44ad00d35b9c2abe99b
|
7
|
+
data.tar.gz: 5f9b615c2fe980279cbc0a5516d0e69e7c94af88805dce6d1c5409b860b5fb2be29f575da05c21aa750056232ef95c0fb802a789cc6630b24ff3fcd8514d0d49
|
data/lib/utopia/command/site.rb
CHANGED
@@ -110,10 +110,10 @@ module Utopia
|
|
110
110
|
puts "make your life easier and more enjoyable.".center(78)
|
111
111
|
puts ""
|
112
112
|
puts "To start the development server, run:".center(78)
|
113
|
-
puts "
|
113
|
+
puts "bake utopia:development".center(78)
|
114
114
|
puts ""
|
115
115
|
puts "For extreme productivity, please consult the online documentation".center(78)
|
116
|
-
puts "https://github.com/
|
116
|
+
puts "https://github.com/socketry/utopia".center(78)
|
117
117
|
puts " ~ Samuel. ".rjust(78)
|
118
118
|
end
|
119
119
|
end
|
data/lib/utopia/content/link.rb
CHANGED
@@ -52,7 +52,9 @@ module Utopia
|
|
52
52
|
|
53
53
|
def href
|
54
54
|
@href ||= @info.fetch(:uri) do
|
55
|
-
|
55
|
+
@info.fetch(:href) do
|
56
|
+
(@path.dirname + @path.basename).to_s if @path
|
57
|
+
end
|
56
58
|
end
|
57
59
|
end
|
58
60
|
|
@@ -94,17 +96,17 @@ module Utopia
|
|
94
96
|
def to_anchor(base: nil, content: self.title, builder: nil, **attributes)
|
95
97
|
attributes[:class] ||= 'link'
|
96
98
|
|
97
|
-
Trenni::Builder.fragment(builder) do |
|
99
|
+
Trenni::Builder.fragment(builder) do |inner_builder|
|
98
100
|
if href?
|
99
101
|
attributes[:href] ||= relative_href(base)
|
100
102
|
attributes[:target] ||= @info[:target]
|
101
103
|
|
102
|
-
|
103
|
-
|
104
|
+
inner_builder.inline('a', attributes) do
|
105
|
+
inner_builder.text(content)
|
104
106
|
end
|
105
107
|
else
|
106
|
-
|
107
|
-
|
108
|
+
inner_builder.inline('span', attributes) do
|
109
|
+
inner_builder.text(content)
|
108
110
|
end
|
109
111
|
end
|
110
112
|
end
|
data/lib/utopia/content/links.rb
CHANGED
@@ -142,7 +142,7 @@ module Utopia
|
|
142
142
|
def load_metadata(path)
|
143
143
|
yaml_path = File.join(path, LINKS_YAML)
|
144
144
|
|
145
|
-
if File.exist?(yaml_path) && data = YAML
|
145
|
+
if File.exist?(yaml_path) && data = YAML.load_file(yaml_path)
|
146
146
|
return symbolize_keys(data)
|
147
147
|
else
|
148
148
|
return {}
|
@@ -234,7 +234,7 @@ module Utopia
|
|
234
234
|
end
|
235
235
|
|
236
236
|
def load_index(name, locale, info)
|
237
|
-
info ||=
|
237
|
+
info ||= {}
|
238
238
|
|
239
239
|
if locale and defaults = @metadata[name]
|
240
240
|
info = defaults.merge(info)
|
@@ -245,17 +245,20 @@ module Utopia
|
|
245
245
|
yield Link.new(:index, name, locale, path, info, path[-2])
|
246
246
|
end
|
247
247
|
|
248
|
+
DEFAULT_INDEX_INFO = {href: nil}.freeze
|
249
|
+
|
250
|
+
# The default index for a directory which has no contents.
|
248
251
|
def load_default_index(name = INDEX, info = {})
|
249
252
|
path = @top + name
|
250
253
|
|
251
254
|
if info
|
252
|
-
info =
|
255
|
+
info = DEFAULT_INDEX_INFO.merge(info)
|
253
256
|
else
|
254
|
-
info =
|
257
|
+
info = DEFAULT_INDEX_INFO
|
255
258
|
end
|
256
259
|
|
257
260
|
# Specify a nil uri if no index could be found for the directory:
|
258
|
-
yield Link.new(:index, name, nil, @top, info, path[-2])
|
261
|
+
yield Link.new(:index, name, nil, @top.to_directory, info, path[-2])
|
259
262
|
end
|
260
263
|
|
261
264
|
def load_file(name, locale, info)
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# Utopia::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.
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# Utopia::Controller::Rewrite
|
2
|
+
|
3
|
+
This module can match and rewrite requests before they processed. This allows you to handle URLs like `/post/15/view` or `/blog/123-pictures-of-my-cat` easily. The basic rewrite operation is to extract some part of the path and optionally executes a block. That means that the path is modified before being passed on to the next layer in the controller, and controller instance variables may be set.
|
4
|
+
|
5
|
+
## Regular Expressions
|
6
|
+
|
7
|
+
In your `controller.rb`:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
prepend Rewrite, Actions
|
11
|
+
|
12
|
+
rewrite.extract_prefix permalink: /(?<id>\d+)-(?<title>.*)/ do |request, path, match|
|
13
|
+
# The rewrite matched, but there was no valid post, so we fail:
|
14
|
+
fail! unless @post = Post.find(@permalink[:id])
|
15
|
+
|
16
|
+
# If the path matched, but there was no suffix, we make it default to the post action:
|
17
|
+
if match.post_match.empty?
|
18
|
+
match.post_match.components << "post"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
on 'post' do
|
23
|
+
# You can do further processing here.
|
24
|
+
fail! unless @post.published?
|
25
|
+
|
26
|
+
@comments = @post.comments.first(5)
|
27
|
+
end
|
28
|
+
|
29
|
+
on 'edit' do
|
30
|
+
# You can do further processing here.
|
31
|
+
fail! unless @current_user&.editor?
|
32
|
+
end
|
33
|
+
```
|
34
|
+
|
35
|
+
In your `post.xnode`, as an example:
|
36
|
+
|
37
|
+
```trenni
|
38
|
+
<content:page>
|
39
|
+
<content:heading>Post #{attributes[:permalink][:id]} about #{attributes[:permalink][:title]}</content:heading>
|
40
|
+
|
41
|
+
<p>#{attributes[:post].content}</p>
|
42
|
+
</content:page>
|
43
|
+
```
|
44
|
+
|
45
|
+
Keep in mind, that URLs like `/123-pictures-of-my-cat/edit` will work as expected, and hit the `edit` action of the controller.
|
46
|
+
|
47
|
+
## Restful Resources
|
48
|
+
|
49
|
+
Similar to the above, if we were solely interested in IDs, we could do the following:
|
50
|
+
|
51
|
+
```ruby
|
52
|
+
prepend Rewrite, Actions
|
53
|
+
|
54
|
+
rewrite.extract_prefix post_id: Integer do |request, path, match|
|
55
|
+
# The rewrite matched, but there was no valid post, so we fail:
|
56
|
+
fail! unless @post = Post.find(@post_id)
|
57
|
+
|
58
|
+
# If the path matched, but there was no suffix, we make it default to the post action:
|
59
|
+
if match.post_match.empty?
|
60
|
+
match.post_match.components << "post"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
```
|
64
|
+
|
65
|
+
This will only match complete integers. Assuming this code is in `/blog/controller.rb`, it would match something like `/blog/123/view` and assign <code class="language-ruby">Integer("123")</code> to <code class="language-ruby">@post_id</code>.
|
66
|
+
|
67
|
+
### Matching.. other things
|
68
|
+
|
69
|
+
It's possible to match using <code class="language-ruby">Integer</code>, <code class="language-ruby">Float</code>, <code class="language-ruby">String</code>, and you can provide your own class which will be instantiated. If it doesn't match, raise an exception and the rewrite rule will fail.
|
data/lib/utopia/path.rb
CHANGED
@@ -140,7 +140,7 @@ module Utopia
|
|
140
140
|
if directory?
|
141
141
|
return self
|
142
142
|
else
|
143
|
-
return
|
143
|
+
return self.class.new(@components + [''])
|
144
144
|
end
|
145
145
|
end
|
146
146
|
|
@@ -178,8 +178,14 @@ module Utopia
|
|
178
178
|
@components
|
179
179
|
end
|
180
180
|
|
181
|
+
# @parameter other [Array(String)] The path components to append.
|
181
182
|
def join(other)
|
182
|
-
|
183
|
+
# Check whether other is an absolute path:
|
184
|
+
if other.first == ''
|
185
|
+
self.class.new(other)
|
186
|
+
else
|
187
|
+
self.class.new(@components + other).simplify
|
188
|
+
end
|
183
189
|
end
|
184
190
|
|
185
191
|
def expand(root)
|
data/lib/utopia/version.rb
CHANGED
data/setup/site/README.md
CHANGED
@@ -6,11 +6,11 @@ Welcome to Utopia, a Ruby framework for web site and application development. Fo
|
|
6
6
|
|
7
7
|
To start the development server, simply execute
|
8
8
|
|
9
|
-
>
|
9
|
+
> bake
|
10
10
|
Generating transient session key for development...
|
11
11
|
20:57:36 - INFO - Starting Falcon HTTP server on localhost:9292
|
12
12
|
20:57:36 - INFO - Guard::RSpec is running
|
13
13
|
20:57:36 - INFO - Guard is now watching at '...'
|
14
14
|
[1] guard(main)>
|
15
15
|
|
16
|
-
Then browse
|
16
|
+
Then browse https://localhost:9292 (or as specified) to see your new site.
|
data/setup/site/config.ru
CHANGED
@@ -14,6 +14,7 @@ else
|
|
14
14
|
use Rack::ShowExceptions unless UTOPIA.testing?
|
15
15
|
end
|
16
16
|
|
17
|
+
# serve static files from public/
|
17
18
|
use Utopia::Static, root: 'public'
|
18
19
|
|
19
20
|
use Utopia::Redirection::Rewrite, {
|
@@ -39,6 +40,7 @@ use Utopia::Session,
|
|
39
40
|
|
40
41
|
use Utopia::Controller
|
41
42
|
|
43
|
+
# serve static files from pages/
|
42
44
|
use Utopia::Static
|
43
45
|
|
44
46
|
# Serve dynamic content
|
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous" />
|
16
16
|
|
17
|
-
<link rel="icon" type="image/png" href="/_static/icon.
|
17
|
+
<link rel="icon" type="image/png" href="/_static/icon.svg" />
|
18
18
|
<link rel="stylesheet" href="/_static/site.css" type="text/css" media="screen" />
|
19
19
|
</head>
|
20
20
|
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2
|
+
<svg width="100%" height="100%" viewBox="0 0 256 256" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-miterlimit:1.5;">
|
3
|
+
<g transform="matrix(0.922789,0,0,0.922789,16.591,0.837867)">
|
4
|
+
<path d="M120.731,31.594L212.702,84.694L212.702,190.893L120.731,243.993L28.759,190.893L28.759,84.694L120.731,31.594Z" style="fill:none;"/>
|
5
|
+
<clipPath id="_clip1">
|
6
|
+
<path d="M120.731,31.594L212.702,84.694L212.702,190.893L120.731,243.993L28.759,190.893L28.759,84.694L120.731,31.594Z"/>
|
7
|
+
</clipPath>
|
8
|
+
<g clip-path="url(#_clip1)">
|
9
|
+
<g transform="matrix(18.3943,0,0,10.62,-1929.57,-966.601)">
|
10
|
+
<g transform="matrix(1,0,0,0.178571,106.463,93.9922)">
|
11
|
+
<rect x="0" y="0" width="10" height="56" style="fill:#f79433;"/>
|
12
|
+
</g>
|
13
|
+
<g transform="matrix(1,0,0,0.416667,106.463,80.6588)">
|
14
|
+
<rect x="0" y="56" width="10" height="24" style="fill:#4e8dd8;"/>
|
15
|
+
</g>
|
16
|
+
</g>
|
17
|
+
</g>
|
18
|
+
<path d="M120.731,31.594L212.702,84.694L212.702,190.893L120.731,243.993L28.759,190.893L28.759,84.694L120.731,31.594Z" style="fill:none;stroke:black;stroke-width:26.01px;"/>
|
19
|
+
</g>
|
20
|
+
</svg>
|
@@ -1 +1,11 @@
|
|
1
|
-
<?xml version="1.0" standalone="no"
|
1
|
+
<?xml version="1.0" standalone="no"?>
|
2
|
+
<svg
|
3
|
+
width="100%" height="100%"
|
4
|
+
viewBox="0 0 10 80"
|
5
|
+
preserveAspectRatio="none"
|
6
|
+
version="1.1"
|
7
|
+
xmlns="http://www.w3.org/2000/svg"
|
8
|
+
xmlns:xlink= "http://www.w3.org/1999/xlink">
|
9
|
+
<rect x="0" y="0" width="10" height="56" style="fill:#f79433;"/>
|
10
|
+
<rect x="0" y="56" width="10" height="24" style="fill:#4e8dd8;"/>
|
11
|
+
</svg>
|
@@ -1 +1,19 @@
|
|
1
|
-
<?xml version="1.0" standalone="no"
|
1
|
+
<?xml version="1.0" standalone="no"?>
|
2
|
+
<svg
|
3
|
+
width="100%" height="100%"
|
4
|
+
viewBox="0 0 420 80"
|
5
|
+
preserveAspectRatio="none"
|
6
|
+
version="1.1"
|
7
|
+
xmlns="http://www.w3.org/2000/svg"
|
8
|
+
xmlns:xlink= "http://www.w3.org/1999/xlink">
|
9
|
+
<rect x="0" y="0" width="420" height="56" style="fill:#f79433;"/>
|
10
|
+
<rect x="0" y="56" width="420" height="24" style="fill:#4e8dd8;"/>
|
11
|
+
<g>
|
12
|
+
<path d="M75.145,70.819c2.37,-3.097 4.173,-6.921 5.111,-11.365c0.91,-4.318 1.498,-9.261 1.498,-14.692l0,-44.762l-62.754,0l0,44.762c0,2.628 0.244,5.333 0.407,8.035c0.168,2.782 0.674,5.515 1.345,8.118c0.68,2.644 1.739,5.173 3.067,7.517c1.363,2.405 3.263,4.526 5.609,6.303c2.319,1.755 5.245,3.163 8.677,4.172c1.617,0.478 3.416,1.093 5.354,1.093l13.856,0c3.071,0 5.797,-1.058 8.131,-2.001c4.042,-1.631 7.305,-4.049 9.699,-7.18Z" style="fill:#fff;fill-rule:nonzero;"/>
|
13
|
+
<path d="M151.481,18.701l0,-18.701l-62.754,-0.022l0,18.723l22.246,0l0.02,61.299l17.93,0l-0.02,-61.299l22.578,0Z" style="fill:#fff;fill-rule:nonzero;"/>
|
14
|
+
<path d="M229.926,39.999c0,-22.051 -16.979,-39.992 -37.852,-39.992c-20.872,0 -37.851,17.942 -37.851,39.992c0,22.054 16.979,39.994 37.851,39.994c20.873,0 37.852,-17.94 37.852,-39.994Z" style="fill:#fff;fill-rule:nonzero;"/>
|
15
|
+
<path d="M269.238,50.909c9.717,0 17.181,-2.066 22.183,-6.395c5.087,-4.399 7.667,-10.942 7.667,-19.575c0,-3.257 -0.393,-5.962 -1.167,-8.476c-0.778,-2.528 -1.883,-4.934 -3.281,-6.814c-1.401,-1.882 -3.098,-3.458 -5.045,-4.703c-1.895,-1.21 -4.003,-2.198 -6.264,-2.943c-2.239,-0.737 -4.64,-1.263 -7.139,-1.56c-2.464,-0.292 -5.016,-0.443 -7.587,-0.443l-29.468,0l0,80l17.93,0l0,-29.091l12.171,0Z" style="fill:#fff;fill-rule:nonzero;"/>
|
16
|
+
<path d="M362.589,0l-29.477,80l75.888,0l-31.247,-80l-15.164,0Z" style="fill:#fff;fill-rule:nonzero;"/>
|
17
|
+
<rect x="304.879" y="0" width="17.93" height="80" style="fill:#fff;"/>
|
18
|
+
</g>
|
19
|
+
</svg>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: utopia
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.18.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-11-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -192,34 +192,6 @@ dependencies:
|
|
192
192
|
- - ">="
|
193
193
|
- !ruby/object:Gem::Version
|
194
194
|
version: '0'
|
195
|
-
- !ruby/object:Gem::Dependency
|
196
|
-
name: bake-bundler
|
197
|
-
requirement: !ruby/object:Gem::Requirement
|
198
|
-
requirements:
|
199
|
-
- - ">="
|
200
|
-
- !ruby/object:Gem::Version
|
201
|
-
version: '0'
|
202
|
-
type: :development
|
203
|
-
prerelease: false
|
204
|
-
version_requirements: !ruby/object:Gem::Requirement
|
205
|
-
requirements:
|
206
|
-
- - ">="
|
207
|
-
- !ruby/object:Gem::Version
|
208
|
-
version: '0'
|
209
|
-
- !ruby/object:Gem::Dependency
|
210
|
-
name: bake-modernize
|
211
|
-
requirement: !ruby/object:Gem::Requirement
|
212
|
-
requirements:
|
213
|
-
- - ">="
|
214
|
-
- !ruby/object:Gem::Version
|
215
|
-
version: '0'
|
216
|
-
type: :development
|
217
|
-
prerelease: false
|
218
|
-
version_requirements: !ruby/object:Gem::Requirement
|
219
|
-
requirements:
|
220
|
-
- - ">="
|
221
|
-
- !ruby/object:Gem::Version
|
222
|
-
version: '0'
|
223
195
|
- !ruby/object:Gem::Dependency
|
224
196
|
name: bundler
|
225
197
|
requirement: !ruby/object:Gem::Requirement
|
@@ -276,20 +248,6 @@ dependencies:
|
|
276
248
|
- - "~>"
|
277
249
|
- !ruby/object:Gem::Version
|
278
250
|
version: '3.6'
|
279
|
-
- !ruby/object:Gem::Dependency
|
280
|
-
name: utopia-project
|
281
|
-
requirement: !ruby/object:Gem::Requirement
|
282
|
-
requirements:
|
283
|
-
- - ">="
|
284
|
-
- !ruby/object:Gem::Version
|
285
|
-
version: '0'
|
286
|
-
type: :development
|
287
|
-
prerelease: false
|
288
|
-
version_requirements: !ruby/object:Gem::Requirement
|
289
|
-
requirements:
|
290
|
-
- - ">="
|
291
|
-
- !ruby/object:Gem::Version
|
292
|
-
version: '0'
|
293
251
|
description:
|
294
252
|
email:
|
295
253
|
executables:
|
@@ -319,9 +277,11 @@ files:
|
|
319
277
|
- lib/utopia/content/tags.rb
|
320
278
|
- lib/utopia/content_length.rb
|
321
279
|
- lib/utopia/controller.rb
|
280
|
+
- lib/utopia/controller/actions.md
|
322
281
|
- lib/utopia/controller/actions.rb
|
323
282
|
- lib/utopia/controller/base.rb
|
324
283
|
- lib/utopia/controller/respond.rb
|
284
|
+
- lib/utopia/controller/rewrite.md
|
325
285
|
- lib/utopia/controller/rewrite.rb
|
326
286
|
- lib/utopia/controller/variables.rb
|
327
287
|
- lib/utopia/exceptions.rb
|
@@ -365,7 +325,7 @@ files:
|
|
365
325
|
- setup/site/pages/errors/file-not-found.xnode
|
366
326
|
- setup/site/pages/links.yaml
|
367
327
|
- setup/site/pages/welcome/index.xnode
|
368
|
-
- setup/site/public/_static/icon.
|
328
|
+
- setup/site/public/_static/icon.svg
|
369
329
|
- setup/site/public/_static/site.css
|
370
330
|
- setup/site/public/_static/utopia-background.svg
|
371
331
|
- setup/site/public/_static/utopia.svg
|
@@ -384,7 +344,7 @@ require_paths:
|
|
384
344
|
- lib
|
385
345
|
required_ruby_version: !ruby/object:Gem::Requirement
|
386
346
|
requirements:
|
387
|
-
- - "
|
347
|
+
- - ">="
|
388
348
|
- !ruby/object:Gem::Version
|
389
349
|
version: '2.5'
|
390
350
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
Binary file
|