syntropy 0.27.4 → 0.27.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d318a5f3877d1b289e642facd9b1c6baadbc0922dbdeb55ba74063c845d592f0
4
- data.tar.gz: 3c090a80c73c5d860bd5f2363bacb4f10baba383ca49cfa2653f1c5a0e1272b7
3
+ metadata.gz: 7e8df1d7aac0cc40148bec47ea488aac153a10a120e1bb3c2f8233bbf5a1cb61
4
+ data.tar.gz: 7654c5548f51b040ea7ca6e52bb522f83e0117717c0d1e29ad8cd20dc7e8c857
5
5
  SHA512:
6
- metadata.gz: 7171a5c781df8c829690babf4d1fb558432dd29bf70a8bec63474bc2c36254752bbc8ba4ced9f77600f7168d20ba83cbd78eb43fd6751a5b1133a284c1f55118
7
- data.tar.gz: 198039710382692b4777491b4e3f4cc1588632e2f8e0e3639f8b4c55d8831a68f693bb1227a2aca95084722f1b45f0c97893fd166a44909cf685a3c226e1424e
6
+ metadata.gz: 1a522e390af9b35866b2fe9837a084d330ab42bef82b629978ed070e58353fc326a5380e4ffebb378d2ac2e27d18930be6eb3a65e74df3d1eebf12ff528d7f8b
7
+ data.tar.gz: cdb0757c9a15cc285fb2900e695327da175712f92acbde2452c1c7d12a63f06f1d6223d642e836c1d0d673f4ee11d5bf16837dc3b06f5dd2e1340bbf9320e228
data/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ # 0.27.6 2025-10-30
2
+
3
+ - Redirect automatically on trailing slash
4
+
5
+ # 0.27.5 2025-10-28
6
+
7
+ - Update Papercraft
8
+ - Fix backtrace display in error page
9
+ - Make auto_refresh, tag debug extensions noops when not in dev mode
10
+
1
11
  # 0.27.4 2025-10-27
2
12
 
3
13
  - Update dependencies
data/TODO.md CHANGED
@@ -1,17 +1,5 @@
1
1
  ## Immediate
2
2
 
3
- - [ ] Deal correctly with NoMethodError raised while rendering template, example:
4
-
5
- ```ruby
6
- div {
7
- markdown <<~MD
8
- ```ruby
9
- @buffer << #{foo}
10
- ```
11
- MD
12
- }
13
- ```
14
-
15
3
  - [ ] Collection - treat directories and files as collections of data.
16
4
 
17
5
  Kind of similar to the routing tree, but instead of routes it just takes a
data/bin/syntropy CHANGED
@@ -70,6 +70,7 @@ rescue StandardError => e
70
70
  exit
71
71
  end
72
72
 
73
+ $syntropy_dev_mode = env[:dev_mode]
73
74
  env[:root_dir] = (ARGV.shift || '.').gsub(/\/$/, '')
74
75
 
75
76
  if !File.directory?(env[:root_dir])
data/examples/bad.rb ADDED
@@ -0,0 +1,9 @@
1
+ export template {
2
+ div {
3
+ markdown <<~MD
4
+ ```ruby
5
+ @buffer << #{foo}
6
+ ```
7
+ MD
8
+ }
9
+ }.tap { puts '!' * 40; puts Papercraft.compiled_code(it.proc); puts}
data/lib/syntropy/app.rb CHANGED
@@ -64,8 +64,14 @@ module Syntropy
64
64
  # @param req [Qeweney::Request] HTTP request
65
65
  # @return [void]
66
66
  def call(req)
67
- route = @router_proc.(req.path, req.route_params)
68
- raise Syntropy::Error.not_found('Not found') if !route
67
+ path = req.path
68
+ route = @router_proc.(path, req.route_params)
69
+ if !route
70
+ if (m = path.match(/^(.+)\/$/))
71
+ return req.redirect(m[1], Qeweney::Status::MOVED_PERMANENTLY)
72
+ end
73
+ raise Syntropy::Error.not_found('Not found')
74
+ end
69
75
 
70
76
  req.route = route
71
77
  proc = route[:proc] ||= compute_route_proc(route)
@@ -74,7 +80,7 @@ module Syntropy
74
80
  @logger&.error(
75
81
  message: "Error while serving request: #{e.message}",
76
82
  method: req.method,
77
- path: req.path,
83
+ path: path,
78
84
  error: e
79
85
  ) if Error.log_error?(e)
80
86
  error_handler = get_error_handler(route)
@@ -30,8 +30,12 @@ ErrorPage = ->(error:, status:, backtrace:) {
30
30
 
31
31
  def transform_backtrace(backtrace)
32
32
  backtrace.map do
33
- location = it.match(/^(.+:\d+):/)[1]
34
- { entry: it, url: "vscode://file/#{location}" }
33
+ if (m = it.match(/^(.+:\d+):/))
34
+ location = m[1]
35
+ { entry: it, url: "vscode://file/#{location}" }
36
+ else
37
+ { entry: it, url: nil }
38
+ end
35
39
  end
36
40
  end
37
41
 
@@ -4,9 +4,13 @@ require 'papercraft'
4
4
 
5
5
  Papercraft.extension(
6
6
  'auto_refresh_watch!': ->(loc = '/.syntropy') {
7
- script(src: File.join(loc, 'auto_refresh/watch.js'), type: 'module')
7
+ if $syntropy_dev_mode
8
+ script(src: File.join(loc, 'auto_refresh/watch.js'), type: 'module')
9
+ end
8
10
  },
9
11
  'debug_template!': ->(loc = '/.syntropy') {
10
- script(src: File.join(loc, 'debug/debug.js'), type: 'module')
12
+ if $syntropy_dev_mode
13
+ script(src: File.join(loc, 'debug/debug.js'), type: 'module')
14
+ end
11
15
  }
12
16
  )
@@ -219,7 +219,7 @@ module Syntropy
219
219
  # @param mime_type [String] MIME type
220
220
  # @return [bool]
221
221
  def accept?(mime_type)
222
- accept = headers['accept']
222
+ accept = headers['accept']
223
223
  return nil if !accept
224
224
 
225
225
  @accept_parts ||= parse_accept_parts(accept)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Syntropy
4
- VERSION = '0.27.4'
4
+ VERSION = '0.27.6'
5
5
  end
data/syntropy.gemspec CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
23
23
 
24
24
  s.add_dependency 'extralite', '~>2.13'
25
25
  s.add_dependency 'json', '~>2.15.1'
26
- s.add_dependency 'papercraft', '~>3.0.2'
26
+ s.add_dependency 'papercraft', '~>3.1.0'
27
27
  s.add_dependency 'qeweney', '~>0.24'
28
28
  s.add_dependency 'tp2', '~>0.19.1'
29
29
  s.add_dependency 'uringmachine', '~>0.19'
data/test/test_app.rb CHANGED
@@ -122,6 +122,12 @@ class AppTest < Minitest::Test
122
122
  assert_equal Status::INTERNAL_SERVER_ERROR, req.response_status
123
123
  end
124
124
 
125
+ def test_automatic_redirect_on_trailing_slash
126
+ req = make_request(':method' => 'GET', ':path' => '/test/rss/')
127
+ assert_equal Status::MOVED_PERMANENTLY, req.response_status
128
+ assert_equal '/test/rss', req.response_headers['Location']
129
+ end
130
+
125
131
  def test_app_file_watching
126
132
  @machine.sleep 0.3
127
133
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: syntropy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.27.4
4
+ version: 0.27.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sharon Rosner
@@ -43,14 +43,14 @@ dependencies:
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: 3.0.2
46
+ version: 3.1.0
47
47
  type: :runtime
48
48
  prerelease: false
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: 3.0.2
53
+ version: 3.1.0
54
54
  - !ruby/object:Gem::Dependency
55
55
  name: qeweney
56
56
  requirement: !ruby/object:Gem::Requirement
@@ -190,6 +190,7 @@ files:
190
190
  - cmd/setup/template/site/site/assets/img/syntropy.png
191
191
  - cmd/setup/template/site/site/index.rb
192
192
  - docker-compose.yml
193
+ - examples/bad.rb
193
194
  - examples/card.rb
194
195
  - examples/counter.js
195
196
  - examples/counter.rb