impression 0.12 → 0.14
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/.github/FUNDING.yml +1 -1
- data/.github/workflows/test.yml +1 -1
- data/CHANGELOG.md +8 -0
- data/Gemfile.lock +8 -58
- data/impression.gemspec +2 -2
- data/lib/impression/app.rb +69 -15
- data/lib/impression/rack_app.rb +1 -1
- data/lib/impression/request_extensions/responses.rb +1 -1
- data/lib/impression/request_extensions/routing.rb +1 -1
- data/lib/impression/request_extensions.rb +1 -1
- data/lib/impression/version.rb +1 -1
- data/lib/impression.rb +1 -1
- data/test/test_app.rb +3 -3
- data/test/test_resource.rb +1 -1
- metadata +3 -31
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 76c18adee5b69fe0e3d02d2eeb8530142899f9de803ee7eed1f3c131884022f6
|
|
4
|
+
data.tar.gz: 29914f3e6cc48f4205422f6e50ecd36f6114b9a731fdec8a58998eaf73319cfb
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 86d4bd1c95d1de78ebb38b76ad7c8d2aa3227cd0229c3874bac78704f2d3407efb8eecf301d982305dd8e74169a3d20299770b624b5a76aea79dda42fdbddceb
|
|
7
|
+
data.tar.gz: 486af13f289f550d8fe5c4c48805697d32c50ed3f813f4517335718eb0c754337e125ea9a552e1fc0f954adb4e2fca4efbfed58982cc309c175521bc840357b6
|
data/.github/FUNDING.yml
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
github:
|
|
1
|
+
github: noteflakes
|
data/.github/workflows/test.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,88 +1,38 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
impression (0.
|
|
4
|
+
impression (0.14)
|
|
5
5
|
modulation (~> 1.1)
|
|
6
6
|
papercraft (~> 0.23)
|
|
7
|
-
polyphony (~> 0.77)
|
|
8
7
|
qeweney (~> 0.18)
|
|
9
|
-
tipi (~> 0.50)
|
|
10
8
|
|
|
11
9
|
GEM
|
|
12
10
|
remote: https://rubygems.org/
|
|
13
11
|
specs:
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
ever (0.1)
|
|
19
|
-
extralite (1.12)
|
|
20
|
-
faraday (1.9.3)
|
|
21
|
-
faraday-em_http (~> 1.0)
|
|
22
|
-
faraday-em_synchrony (~> 1.0)
|
|
23
|
-
faraday-excon (~> 1.1)
|
|
24
|
-
faraday-httpclient (~> 1.0)
|
|
25
|
-
faraday-multipart (~> 1.0)
|
|
26
|
-
faraday-net_http (~> 1.0)
|
|
27
|
-
faraday-net_http_persistent (~> 1.0)
|
|
28
|
-
faraday-patron (~> 1.0)
|
|
29
|
-
faraday-rack (~> 1.0)
|
|
30
|
-
faraday-retry (~> 1.0)
|
|
31
|
-
ruby2_keywords (>= 0.0.4)
|
|
32
|
-
faraday-em_http (1.0.0)
|
|
33
|
-
faraday-em_synchrony (1.0.0)
|
|
34
|
-
faraday-excon (1.1.0)
|
|
35
|
-
faraday-httpclient (1.0.1)
|
|
36
|
-
faraday-multipart (1.0.3)
|
|
37
|
-
multipart-post (>= 1.2, < 3)
|
|
38
|
-
faraday-net_http (1.0.1)
|
|
39
|
-
faraday-net_http_persistent (1.2.0)
|
|
40
|
-
faraday-patron (1.0.0)
|
|
41
|
-
faraday-rack (1.0.0)
|
|
42
|
-
faraday-retry (1.0.3)
|
|
43
|
-
h1p (0.3)
|
|
44
|
-
http-2 (0.11.0)
|
|
45
|
-
json (2.6.1)
|
|
46
|
-
kramdown (2.3.1)
|
|
12
|
+
docile (1.4.1)
|
|
13
|
+
escape_utils (1.2.2)
|
|
14
|
+
json (2.8.2)
|
|
15
|
+
kramdown (2.3.2)
|
|
47
16
|
rexml
|
|
48
17
|
kramdown-parser-gfm (1.1.0)
|
|
49
18
|
kramdown (~> 2.0)
|
|
50
|
-
localhost (1.1.9)
|
|
51
19
|
minitest (5.11.3)
|
|
52
|
-
modulation (1.
|
|
53
|
-
|
|
54
|
-
multipart-post (2.1.1)
|
|
55
|
-
papercraft (0.23)
|
|
20
|
+
modulation (1.2)
|
|
21
|
+
papercraft (0.29)
|
|
56
22
|
escape_utils (~> 1.2.1)
|
|
57
23
|
kramdown (~> 2.3.1)
|
|
58
24
|
kramdown-parser-gfm (~> 1.1.0)
|
|
59
25
|
rouge (~> 3.27.0)
|
|
60
|
-
polyphony (0.77)
|
|
61
26
|
qeweney (0.18)
|
|
62
27
|
escape_utils (~> 1.2.1)
|
|
63
|
-
rack (2.2.3)
|
|
64
28
|
rake (12.3.3)
|
|
65
|
-
rexml (3.
|
|
29
|
+
rexml (3.3.9)
|
|
66
30
|
rouge (3.27.0)
|
|
67
|
-
ruby2_keywords (0.0.5)
|
|
68
31
|
simplecov (0.17.1)
|
|
69
32
|
docile (~> 1.1)
|
|
70
33
|
json (>= 1.8, < 3)
|
|
71
34
|
simplecov-html (~> 0.10.0)
|
|
72
35
|
simplecov-html (0.10.2)
|
|
73
|
-
tipi (0.50)
|
|
74
|
-
acme-client (~> 2.0.9)
|
|
75
|
-
ever (~> 0.1)
|
|
76
|
-
extralite (~> 1.2)
|
|
77
|
-
h1p (~> 0.3)
|
|
78
|
-
http-2 (~> 0.11)
|
|
79
|
-
localhost (~> 1.1.4)
|
|
80
|
-
msgpack (~> 1.4.2)
|
|
81
|
-
polyphony (~> 0.77)
|
|
82
|
-
qeweney (~> 0.17)
|
|
83
|
-
rack (>= 2.0.8, < 2.3.0)
|
|
84
|
-
websocket (~> 1.2.8)
|
|
85
|
-
websocket (1.2.9)
|
|
86
36
|
|
|
87
37
|
PLATFORMS
|
|
88
38
|
ruby
|
data/impression.gemspec
CHANGED
|
@@ -20,8 +20,8 @@ Gem::Specification.new do |s|
|
|
|
20
20
|
s.require_paths = ["lib"]
|
|
21
21
|
s.required_ruby_version = '>= 2.6'
|
|
22
22
|
|
|
23
|
-
s.add_runtime_dependency 'polyphony', '~>0.
|
|
24
|
-
s.add_runtime_dependency 'tipi', '~>0.
|
|
23
|
+
# s.add_runtime_dependency 'polyphony', '~>0.93'
|
|
24
|
+
# s.add_runtime_dependency 'tipi', '~>0.52'
|
|
25
25
|
s.add_runtime_dependency 'qeweney', '~>0.18'
|
|
26
26
|
|
|
27
27
|
s.add_runtime_dependency 'papercraft', '~>0.23'
|
data/lib/impression/app.rb
CHANGED
|
@@ -16,6 +16,7 @@ module Impression
|
|
|
16
16
|
def initialize(**props)
|
|
17
17
|
super
|
|
18
18
|
@layouts = {}
|
|
19
|
+
# @file_info_loader = spin { run_file_info_loader }
|
|
19
20
|
end
|
|
20
21
|
|
|
21
22
|
# Returns a list of pages found in the given directory (relative to the base
|
|
@@ -46,6 +47,66 @@ module Impression
|
|
|
46
47
|
symbolize_names: true
|
|
47
48
|
}.freeze
|
|
48
49
|
|
|
50
|
+
# Runs a file info loader handling incoming requests for file info. This
|
|
51
|
+
# method is run in a fiber setup in #initialize.
|
|
52
|
+
#
|
|
53
|
+
# @return [void]
|
|
54
|
+
def run_file_info_loader
|
|
55
|
+
loop do
|
|
56
|
+
peer, path = receive
|
|
57
|
+
begin
|
|
58
|
+
info = calculate_path_info(path)
|
|
59
|
+
peer << info
|
|
60
|
+
rescue Polyphony::BaseException
|
|
61
|
+
raise
|
|
62
|
+
rescue => e
|
|
63
|
+
peer.raise(e)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def safe_calculate_path_info(path)
|
|
69
|
+
# @file_info_loader << [Fiber.current, path]
|
|
70
|
+
# receive
|
|
71
|
+
calculate_path_info(path)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Returns the path info for the given relative path.
|
|
75
|
+
#
|
|
76
|
+
# @param path [String] relative path
|
|
77
|
+
# @return [Hash] path info
|
|
78
|
+
def get_path_info(path)
|
|
79
|
+
@path_info_cache[path] ||= safe_calculate_path_info(path)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Returns complete file info for Markdown files
|
|
83
|
+
#
|
|
84
|
+
# @param info [Hash] file info
|
|
85
|
+
# @param path [String] file path
|
|
86
|
+
# @return [Hash] file info
|
|
87
|
+
def file_info_md(info, path)
|
|
88
|
+
atts, content = parse_markdown_file(path)
|
|
89
|
+
info = info.merge(atts)
|
|
90
|
+
info[:html_content] = Papercraft.markdown(content)
|
|
91
|
+
info[:kind] = :markdown
|
|
92
|
+
if !info[:date] && (m = path.match(DATE_REGEXP))
|
|
93
|
+
info[:date] = Date.parse(m[1])
|
|
94
|
+
end
|
|
95
|
+
info
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Returns complete file info for Ruby files
|
|
99
|
+
#
|
|
100
|
+
# @param info [Hash] file info
|
|
101
|
+
# @param path [String] file path
|
|
102
|
+
# @return [Hash] file info
|
|
103
|
+
def file_info_rb(info, path)
|
|
104
|
+
info.merge(
|
|
105
|
+
kind: :module,
|
|
106
|
+
module: import(path)
|
|
107
|
+
)
|
|
108
|
+
end
|
|
109
|
+
|
|
49
110
|
# Returns the path info for the given file path.
|
|
50
111
|
#
|
|
51
112
|
# @param path [String] file path
|
|
@@ -54,19 +115,12 @@ module Impression
|
|
|
54
115
|
info = super
|
|
55
116
|
case info[:ext]
|
|
56
117
|
when '.md'
|
|
57
|
-
|
|
58
|
-
info = info.merge(atts)
|
|
59
|
-
info[:html_content] = Papercraft.markdown(content)
|
|
60
|
-
info[:kind] = :markdown
|
|
118
|
+
file_info_md(info, path)
|
|
61
119
|
when '.rb'
|
|
62
|
-
info
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
if (m = path.match(DATE_REGEXP))
|
|
66
|
-
info[:date] ||= Date.parse(m[1])
|
|
120
|
+
file_info_rb(info, path)
|
|
121
|
+
else
|
|
122
|
+
info
|
|
67
123
|
end
|
|
68
|
-
|
|
69
|
-
info
|
|
70
124
|
end
|
|
71
125
|
|
|
72
126
|
# Returns the pretty URL for the given relative path. For pages, the
|
|
@@ -238,10 +292,10 @@ module Impression
|
|
|
238
292
|
layout ||= 'default'
|
|
239
293
|
path = File.join(@directory, "_layouts/#{layout}.rb")
|
|
240
294
|
raise "Layout not found #{path}" unless File.file?(path)
|
|
241
|
-
|
|
295
|
+
|
|
242
296
|
import path
|
|
243
297
|
end
|
|
244
|
-
|
|
298
|
+
|
|
245
299
|
# Parses the markdown file at the given path.
|
|
246
300
|
#
|
|
247
301
|
# @param path [String] file path
|
|
@@ -258,11 +312,11 @@ module Impression
|
|
|
258
312
|
if (m = content.match(FRONT_MATTER_REGEXP))
|
|
259
313
|
front_matter = m[1]
|
|
260
314
|
content = m.post_match
|
|
261
|
-
|
|
315
|
+
|
|
262
316
|
yaml = YAML.safe_load(front_matter, **YAML_OPTS)
|
|
263
317
|
atts = atts.merge(yaml)
|
|
264
318
|
end
|
|
265
|
-
|
|
319
|
+
|
|
266
320
|
[atts, content]
|
|
267
321
|
end
|
|
268
322
|
|
data/lib/impression/rack_app.rb
CHANGED
|
@@ -8,7 +8,7 @@ require_relative './request_extensions/responses'
|
|
|
8
8
|
|
|
9
9
|
# Extensions to `Qeweney::Request`
|
|
10
10
|
class Qeweney::Request
|
|
11
|
-
|
|
11
|
+
|
|
12
12
|
# include Impression::Pages::RequestMethods
|
|
13
13
|
include Impression::RequestExtensions::Routing
|
|
14
14
|
include Impression::RequestExtensions::Responses
|
data/lib/impression/version.rb
CHANGED
data/lib/impression.rb
CHANGED
data/test/test_app.rb
CHANGED
|
@@ -260,7 +260,7 @@ class AppTest < MiniTest::Test
|
|
|
260
260
|
def test_template_resource_and_request
|
|
261
261
|
req = mock_req(':method' => 'GET', ':path' => '/foobar?q=42')
|
|
262
262
|
@app.route_and_call(req)
|
|
263
|
-
|
|
263
|
+
|
|
264
264
|
foo = Papercraft.html {
|
|
265
265
|
html5 {
|
|
266
266
|
head {
|
|
@@ -360,14 +360,14 @@ class AbstractAppTest < MiniTest::Test
|
|
|
360
360
|
|
|
361
361
|
def test_abstract_app_each
|
|
362
362
|
app = Impression::App.new(path: '/')
|
|
363
|
-
|
|
363
|
+
|
|
364
364
|
buffer = []
|
|
365
365
|
app.each { |r| buffer << r }
|
|
366
366
|
assert_equal [app], buffer
|
|
367
367
|
|
|
368
368
|
foo = PathRenderingResource.new(parent: app, path: 'foo')
|
|
369
369
|
bar = PathRenderingResource.new(parent: app, path: 'bar')
|
|
370
|
-
|
|
370
|
+
|
|
371
371
|
buffer = []
|
|
372
372
|
app.each { |r| buffer << r }
|
|
373
373
|
assert_equal [app, foo, bar], buffer
|
data/test/test_resource.rb
CHANGED
|
@@ -55,7 +55,7 @@ class ResourceTest < MiniTest::Test
|
|
|
55
55
|
req = mock_req(':method' => 'GET', ':path' => '/foo/bar/littlebar')
|
|
56
56
|
assert_equal r4, r1.route(req)
|
|
57
57
|
assert_equal '/', req.resource_relative_path
|
|
58
|
-
|
|
58
|
+
|
|
59
59
|
req = mock_req(':method' => 'GET', ':path' => '/foo/bar/littlebar/littlebaz')
|
|
60
60
|
assert_equal r4, r1.route(req)
|
|
61
61
|
assert_equal '/littlebaz', req.resource_relative_path
|
metadata
CHANGED
|
@@ -1,43 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: impression
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: '0.
|
|
4
|
+
version: '0.14'
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sharon Rosner
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2024-12-11 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
-
- !ruby/object:Gem::Dependency
|
|
14
|
-
name: polyphony
|
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
|
16
|
-
requirements:
|
|
17
|
-
- - "~>"
|
|
18
|
-
- !ruby/object:Gem::Version
|
|
19
|
-
version: '0.77'
|
|
20
|
-
type: :runtime
|
|
21
|
-
prerelease: false
|
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
-
requirements:
|
|
24
|
-
- - "~>"
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
version: '0.77'
|
|
27
|
-
- !ruby/object:Gem::Dependency
|
|
28
|
-
name: tipi
|
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
|
30
|
-
requirements:
|
|
31
|
-
- - "~>"
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: '0.50'
|
|
34
|
-
type: :runtime
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - "~>"
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: '0.50'
|
|
41
13
|
- !ruby/object:Gem::Dependency
|
|
42
14
|
name: qeweney
|
|
43
15
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -208,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
208
180
|
- !ruby/object:Gem::Version
|
|
209
181
|
version: '0'
|
|
210
182
|
requirements: []
|
|
211
|
-
rubygems_version: 3.
|
|
183
|
+
rubygems_version: 3.5.16
|
|
212
184
|
signing_key:
|
|
213
185
|
specification_version: 4
|
|
214
186
|
summary: Impression - a modern web framework for Ruby
|