utopia 2.19.1 → 2.20.1
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
- checksums.yaml.gz.sig +3 -0
- data/lib/utopia/content/link.rb +6 -4
- data/lib/utopia/content.rb +25 -6
- data/lib/utopia/localization.rb +2 -0
- data/lib/utopia/static/mime_types.rb +1 -1
- data/lib/utopia/static.rb +41 -23
- data/lib/utopia/version.rb +1 -1
- data/setup/site/spec/website_spec.rb +1 -2
- data.tar.gz.sig +0 -0
- metadata +53 -6
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 98a414341752cd45376ffac50a8ebd4b5e3ee49eb2868ce87dc41f3696c07d76
|
4
|
+
data.tar.gz: 989e031a0c3f3680d52f28540f94712f32e00cb95af7c5575a81ef7f7b8ed6d6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d8ff1cf0d72eabbef7550ef1c049f6af84c9cd110403cff6999c506ac8200697fa8930cc2db29cc666b23dd13b144a81c45301d669c43bff618719254247293
|
7
|
+
data.tar.gz: dbd8e4c9379ad5d539a8e099402630a23b9c7a5422d369a2f5cdcea1426d07b1bffb2532b1694dad71b8966dcdb8a8084d4270af809ce3ef23e3b0dfddd48883
|
checksums.yaml.gz.sig
ADDED
data/lib/utopia/content/link.rb
CHANGED
data/lib/utopia/content.rb
CHANGED
@@ -32,6 +32,8 @@ require 'trenni/template'
|
|
32
32
|
|
33
33
|
require 'concurrent/map'
|
34
34
|
|
35
|
+
require 'traces/provider'
|
36
|
+
|
35
37
|
module Utopia
|
36
38
|
# A middleware which serves dynamically generated content based on markup files.
|
37
39
|
class Content
|
@@ -107,6 +109,16 @@ module Utopia
|
|
107
109
|
end
|
108
110
|
end
|
109
111
|
|
112
|
+
def respond(link, request)
|
113
|
+
if node = resolve_link(link)
|
114
|
+
attributes = request.env.fetch(VARIABLES_KEY, {}).to_hash
|
115
|
+
|
116
|
+
return node.process!(request, attributes)
|
117
|
+
elsif redirect_uri = link[:uri]
|
118
|
+
return [307, {HTTP::LOCATION => redirect_uri}, []]
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
110
122
|
def call(env)
|
111
123
|
request = Rack::Request.new(env)
|
112
124
|
path = Path.create(request.path_info)
|
@@ -124,12 +136,8 @@ module Utopia
|
|
124
136
|
|
125
137
|
locale = env[Localization::CURRENT_LOCALE_KEY]
|
126
138
|
if link = @links.for(path, locale)
|
127
|
-
if
|
128
|
-
|
129
|
-
|
130
|
-
return node.process!(request, attributes)
|
131
|
-
elsif redirect_uri = link[:uri]
|
132
|
-
return [307, {HTTP::LOCATION => redirect_uri}, []]
|
139
|
+
if response = self.respond(link, request)
|
140
|
+
return response
|
133
141
|
end
|
134
142
|
end
|
135
143
|
|
@@ -191,4 +199,15 @@ module Utopia
|
|
191
199
|
end
|
192
200
|
end
|
193
201
|
end
|
202
|
+
|
203
|
+
Traces::Provider(Content) do
|
204
|
+
def respond(link, request)
|
205
|
+
attributes = {
|
206
|
+
'link.key' => link.key,
|
207
|
+
'link.href' => link.href
|
208
|
+
}
|
209
|
+
|
210
|
+
trace("utopia.content.respond", attributes: attributes) {super}
|
211
|
+
end
|
212
|
+
end
|
194
213
|
end
|
data/lib/utopia/localization.rb
CHANGED
data/lib/utopia/static.rb
CHANGED
@@ -26,6 +26,8 @@ require_relative 'localization'
|
|
26
26
|
require_relative 'static/local_file'
|
27
27
|
require_relative 'static/mime_types'
|
28
28
|
|
29
|
+
require 'traces/provider'
|
30
|
+
|
29
31
|
module Utopia
|
30
32
|
# A middleware which serves static files from the specified root directory.
|
31
33
|
class Static
|
@@ -72,36 +74,52 @@ module Utopia
|
|
72
74
|
ETAG = 'ETag'.freeze
|
73
75
|
ACCEPT_RANGES = 'Accept-Ranges'.freeze
|
74
76
|
|
77
|
+
def respond(env, path_info, extension)
|
78
|
+
path = Path[path_info].simplify
|
79
|
+
|
80
|
+
if locale = env[Localization::CURRENT_LOCALE_KEY]
|
81
|
+
path.last.insert(path.last.rindex('.') || -1, ".#{locale}")
|
82
|
+
end
|
83
|
+
|
84
|
+
if file = fetch_file(path)
|
85
|
+
response_headers = {
|
86
|
+
LAST_MODIFIED => file.mtime_date,
|
87
|
+
CONTENT_TYPE => @extensions[extension],
|
88
|
+
CACHE_CONTROL => @cache_control,
|
89
|
+
ETAG => file.etag,
|
90
|
+
ACCEPT_RANGES => "bytes"
|
91
|
+
}
|
92
|
+
|
93
|
+
if file.modified?(env)
|
94
|
+
return file.serve(env, response_headers)
|
95
|
+
else
|
96
|
+
return [304, response_headers, []]
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
75
101
|
def call(env)
|
76
102
|
path_info = env[Rack::PATH_INFO]
|
77
103
|
extension = File.extname(path_info)
|
78
|
-
|
79
|
-
if @extensions.key?
|
80
|
-
|
81
|
-
|
82
|
-
if locale = env[Localization::CURRENT_LOCALE_KEY]
|
83
|
-
path.last.insert(path.last.rindex('.') || -1, ".#{locale}")
|
84
|
-
end
|
85
|
-
|
86
|
-
if file = fetch_file(path)
|
87
|
-
response_headers = {
|
88
|
-
LAST_MODIFIED => file.mtime_date,
|
89
|
-
CONTENT_TYPE => @extensions[extension],
|
90
|
-
CACHE_CONTROL => @cache_control,
|
91
|
-
ETAG => file.etag,
|
92
|
-
ACCEPT_RANGES => "bytes"
|
93
|
-
}
|
94
|
-
|
95
|
-
if file.modified?(env)
|
96
|
-
return file.serve(env, response_headers)
|
97
|
-
else
|
98
|
-
return [304, response_headers, []]
|
99
|
-
end
|
104
|
+
|
105
|
+
if @extensions.key?(extension.downcase)
|
106
|
+
if response = self.respond(env, path_info, extension)
|
107
|
+
return response
|
100
108
|
end
|
101
109
|
end
|
102
|
-
|
110
|
+
|
103
111
|
# else if no file was found:
|
104
112
|
return @app.call(env)
|
105
113
|
end
|
106
114
|
end
|
115
|
+
|
116
|
+
Traces::Provider(Static) do
|
117
|
+
def respond(env, path_info, extension)
|
118
|
+
attributes = {
|
119
|
+
path_info: path_info,
|
120
|
+
}
|
121
|
+
|
122
|
+
trace("utopia.static.respond", attributes: attributes) {super}
|
123
|
+
end
|
124
|
+
end
|
107
125
|
end
|
data/lib/utopia/version.rb
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
require_relative 'website_context'
|
4
4
|
|
5
|
-
# Learn about best practice specs from http://betterspecs.org
|
6
5
|
RSpec.describe "website", timeout: 120 do
|
7
6
|
include_context "server"
|
8
7
|
|
@@ -13,7 +12,7 @@ RSpec.describe "website", timeout: 120 do
|
|
13
12
|
Async::HTTP::Client.open(endpoint, connection_limit: 8) do |client|
|
14
13
|
spider.fetch(statistics, client, endpoint.url) do |method, uri, response|
|
15
14
|
if response.failure?
|
16
|
-
|
15
|
+
Console.logger.error(endpoint) {"#{method} #{uri} -> #{response.status}"}
|
17
16
|
end
|
18
17
|
end.wait
|
19
18
|
end
|
data.tar.gz.sig
ADDED
Binary file
|
metadata
CHANGED
@@ -1,14 +1,47 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: utopia
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.20.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
8
|
+
- Huba Nagy
|
9
|
+
- Michael Adams
|
10
|
+
- Olle Jonsson
|
11
|
+
- System Administrator
|
12
|
+
- k1tsu
|
8
13
|
autorequire:
|
9
14
|
bindir: bin
|
10
|
-
cert_chain:
|
11
|
-
|
15
|
+
cert_chain:
|
16
|
+
- |
|
17
|
+
-----BEGIN CERTIFICATE-----
|
18
|
+
MIIEhDCCAuygAwIBAgIBATANBgkqhkiG9w0BAQsFADA3MTUwMwYDVQQDDCxzYW11
|
19
|
+
ZWwud2lsbGlhbXMvREM9b3Jpb250cmFuc2Zlci9EQz1jby9EQz1uejAeFw0yMTA4
|
20
|
+
MTYwNjMzNDRaFw0yMjA4MTYwNjMzNDRaMDcxNTAzBgNVBAMMLHNhbXVlbC53aWxs
|
21
|
+
aWFtcy9EQz1vcmlvbnRyYW5zZmVyL0RDPWNvL0RDPW56MIIBojANBgkqhkiG9w0B
|
22
|
+
AQEFAAOCAY8AMIIBigKCAYEAyXLSS/cw+fXJ5e7hi+U/TeChPWeYdwJojDsFY1xr
|
23
|
+
xvtqbTTL8gbLHz5LW3QD2nfwCv3qTlw0qI3Ie7a9VMJMbSvgVEGEfQirqIgJXWMj
|
24
|
+
eNMDgKsMJtC7u/43abRKx7TCURW3iWyR19NRngsJJmaR51yGGGm2Kfsr+JtKKLtL
|
25
|
+
L188Wm3f13KAx7QJU8qyuBnj1/gWem076hzdA7xi1DbrZrch9GCRz62xymJlrJHn
|
26
|
+
9iZEZ7AxrS7vokhMlzSr/XMUihx/8aFKtk+tMLClqxZSmBWIErWdicCGTULXCBNb
|
27
|
+
E/mljo4zEVKhlTWpJklMIhr55ZRrSarKFuW7en0+tpJrfsYiAmXMJNi4XAYJH7uL
|
28
|
+
rgJuJwSaa/dMz+VmUoo7VKtSfCoOI+6v5/z0sK3oT6sG6ZwyI47DBq2XqNC6tnAj
|
29
|
+
w+XmCywiTQrFzMMAvcA7rPI4F0nU1rZId51rOvvfxaONp+wgTi4P8owZLw0/j0m4
|
30
|
+
8C20DYi6EYx4AHDXiLpElWh3AgMBAAGjgZowgZcwCQYDVR0TBAIwADALBgNVHQ8E
|
31
|
+
BAMCBLAwHQYDVR0OBBYEFB6ZaeWKxQjGTI+pmz7cKRmMIywwMC4GA1UdEQQnMCWB
|
32
|
+
I3NhbXVlbC53aWxsaWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MC4GA1UdEgQnMCWB
|
33
|
+
I3NhbXVlbC53aWxsaWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MA0GCSqGSIb3DQEB
|
34
|
+
CwUAA4IBgQBVoM+pu3dpdUhZM1w051iw5GfiqclAr1Psypf16Tiod/ho//4oAu6T
|
35
|
+
9fj3DPX/acWV9P/FScvqo4Qgv6g4VWO5ZU7z2JmPoTXZtYMunRAmQPFL/gSUc6aK
|
36
|
+
vszMHIyhtyzRc6DnfW2AiVOjMBjaYv8xXZc9bduniRVPrLR4J7ozmGLh4o4uJp7w
|
37
|
+
x9KCFaR8Lvn/r0oJWJOqb/DMAYI83YeN2Dlt3jpwrsmsONrtC5S3gOUle5afSGos
|
38
|
+
bYt5ocnEpKSomR9ZtnCGljds/aeO1Xgpn2r9HHcjwnH346iNrnHmMlC7BtHUFPDg
|
39
|
+
Ts92S47PTOXzwPBDsrFiq3VLbRjHSwf8rpqybQBH9MfzxGGxTaETQYOd6b4e4Ag6
|
40
|
+
y92abGna0bmIEb4+Tx9rQ10Uijh1POzvr/VTH4bbIPy9FbKrRsIQ24qDbNJRtOpE
|
41
|
+
RAOsIl+HOBTb252nx1kIRN5hqQx272AJCbCjKx8egcUQKffFVVCI0nye09v5CK+a
|
42
|
+
HiLJ8VOFx6w=
|
43
|
+
-----END CERTIFICATE-----
|
44
|
+
date: 2022-08-03 00:00:00.000000000 Z
|
12
45
|
dependencies:
|
13
46
|
- !ruby/object:Gem::Dependency
|
14
47
|
name: concurrent-ruby
|
@@ -112,14 +145,14 @@ dependencies:
|
|
112
145
|
name: rack
|
113
146
|
requirement: !ruby/object:Gem::Requirement
|
114
147
|
requirements:
|
115
|
-
- - "
|
148
|
+
- - ">="
|
116
149
|
- !ruby/object:Gem::Version
|
117
150
|
version: '2.2'
|
118
151
|
type: :runtime
|
119
152
|
prerelease: false
|
120
153
|
version_requirements: !ruby/object:Gem::Requirement
|
121
154
|
requirements:
|
122
|
-
- - "
|
155
|
+
- - ">="
|
123
156
|
- !ruby/object:Gem::Version
|
124
157
|
version: '2.2'
|
125
158
|
- !ruby/object:Gem::Dependency
|
@@ -136,6 +169,20 @@ dependencies:
|
|
136
169
|
- - "~>"
|
137
170
|
- !ruby/object:Gem::Version
|
138
171
|
version: '2.1'
|
172
|
+
- !ruby/object:Gem::Dependency
|
173
|
+
name: traces
|
174
|
+
requirement: !ruby/object:Gem::Requirement
|
175
|
+
requirements:
|
176
|
+
- - ">="
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
version: '0'
|
179
|
+
type: :runtime
|
180
|
+
prerelease: false
|
181
|
+
version_requirements: !ruby/object:Gem::Requirement
|
182
|
+
requirements:
|
183
|
+
- - ">="
|
184
|
+
- !ruby/object:Gem::Version
|
185
|
+
version: '0'
|
139
186
|
- !ruby/object:Gem::Dependency
|
140
187
|
name: trenni
|
141
188
|
requirement: !ruby/object:Gem::Requirement
|
@@ -367,7 +414,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
367
414
|
- !ruby/object:Gem::Version
|
368
415
|
version: '0'
|
369
416
|
requirements: []
|
370
|
-
rubygems_version: 3.3.
|
417
|
+
rubygems_version: 3.3.7
|
371
418
|
signing_key:
|
372
419
|
specification_version: 4
|
373
420
|
summary: Utopia is a framework for building dynamic content-driven websites.
|
metadata.gz.sig
ADDED
Binary file
|