syntropy 0.27.5 → 0.27.7
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/CHANGELOG.md +9 -0
- data/lib/syntropy/app.rb +9 -3
- data/lib/syntropy/routing_tree.rb +36 -13
- data/lib/syntropy/version.rb +1 -1
- data/syntropy.gemspec +2 -2
- data/test/test_app.rb +6 -0
- data/test/test_routing_tree.rb +0 -2
- metadata +5 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: dec1337a818afc63d7160fe0aa771dfd12c0128c69307ebb9a2d87a8f4410d7d
|
|
4
|
+
data.tar.gz: dc4dccd65ac6dfacd5d16cd8b2294a7a52f07727fccf5c41da27a259bc9ab4c2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 589ac7d942379ceef292ba87eeee8cc01329eeb8abc8b627d8259fe02b7ec3e455b3c55fb956b438b0261564c47d122d87b4b759d8e42fe91719d526ad475846
|
|
7
|
+
data.tar.gz: dc6b9a9a530525f73e443cb407bdeb487c063fb6d7bafd4992144d3e22f8e92362c2b9e290f0b050b28e6f8b40468c6ad23786d8aa56d0900e71fce926dcbfe2
|
data/CHANGELOG.md
CHANGED
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
|
-
|
|
68
|
-
|
|
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:
|
|
83
|
+
path: path,
|
|
78
84
|
error: e
|
|
79
85
|
) if Error.log_error?(e)
|
|
80
86
|
error_handler = get_error_handler(route)
|
|
@@ -548,22 +548,30 @@ module Syntropy
|
|
|
548
548
|
end
|
|
549
549
|
end
|
|
550
550
|
|
|
551
|
-
|
|
552
|
-
emit_code_line(buffer, "#{ws}case (p = parts[#{segment_idx}])")
|
|
551
|
+
return if !entry[:target] && !entry[:children]
|
|
553
552
|
|
|
554
|
-
|
|
555
|
-
emit_code_line(buffer, "#{ws}when nil")
|
|
556
|
-
if entry[:target]
|
|
553
|
+
if entry[:target] && entry[:handle_subtree] && !entry[:children]
|
|
557
554
|
map = entry[:static] ? '@static_map' : '@dynamic_map'
|
|
558
|
-
emit_code_line(buffer, "#{ws}
|
|
559
|
-
|
|
560
|
-
emit_code_line(buffer, "#{ws} return nil")
|
|
555
|
+
emit_code_line(buffer, "#{ws}return #{map}[#{entry[:path].inspect}]")
|
|
556
|
+
return
|
|
561
557
|
end
|
|
562
558
|
|
|
559
|
+
case_buffer = +''
|
|
560
|
+
if entry[:target]
|
|
561
|
+
emit_code_line(case_buffer, "#{ws}when nil")
|
|
562
|
+
map = entry[:static] ? '@static_map' : '@dynamic_map'
|
|
563
|
+
emit_code_line(case_buffer, "#{ws} return #{map}[#{entry[:path].inspect}]")
|
|
564
|
+
end
|
|
563
565
|
if entry[:children]
|
|
564
|
-
emit_routing_tree_entry_children_clauses(buffer
|
|
566
|
+
emit_routing_tree_entry_children_clauses(buffer: case_buffer, entry:, indent:, segment_idx:)
|
|
567
|
+
end
|
|
568
|
+
|
|
569
|
+
# Get next segment
|
|
570
|
+
if !case_buffer.empty?
|
|
571
|
+
emit_code_line(buffer, "#{ws}case (p = parts[#{segment_idx}])")
|
|
572
|
+
buffer << case_buffer
|
|
573
|
+
emit_code_line(buffer, "#{ws}end")
|
|
565
574
|
end
|
|
566
|
-
emit_code_line(buffer, "#{ws}end")
|
|
567
575
|
end
|
|
568
576
|
|
|
569
577
|
# Returns the first target found in the given entry's subtree.
|
|
@@ -607,6 +615,7 @@ module Syntropy
|
|
|
607
615
|
ws = ' ' * (indent * 2)
|
|
608
616
|
|
|
609
617
|
param_entry = entry[:children]['[]']
|
|
618
|
+
when_count = 0
|
|
610
619
|
entry[:children].each do |k, child_entry|
|
|
611
620
|
# skip if wildcard entry (treated in else clause below)
|
|
612
621
|
next if k == '[]'
|
|
@@ -626,19 +635,33 @@ module Syntropy
|
|
|
626
635
|
child_path = child_entry[:path]
|
|
627
636
|
route_value = "@dynamic_map[#{child_path.inspect}]"
|
|
628
637
|
emit_code_line(buffer, "#{ws} return #{route_value}#{if_clause}")
|
|
638
|
+
when_count += 1
|
|
629
639
|
|
|
630
640
|
elsif has_children
|
|
631
641
|
# otherwise look at the next segment
|
|
632
642
|
next if is_void_route?(child_entry) && !param_entry
|
|
633
643
|
|
|
634
|
-
|
|
635
|
-
visit_routing_tree_entry(buffer
|
|
644
|
+
when_buffer = +''
|
|
645
|
+
visit_routing_tree_entry(buffer: when_buffer, entry: child_entry, indent: indent + 1, segment_idx: segment_idx + 1)
|
|
646
|
+
if when_buffer.empty? && param_entry
|
|
647
|
+
emit_code_line(when_buffer, "#{ws} return nil")
|
|
648
|
+
end
|
|
649
|
+
if !when_buffer.empty?
|
|
650
|
+
emit_code_line(buffer, "#{ws}when #{k.inspect}")
|
|
651
|
+
buffer << when_buffer
|
|
652
|
+
when_count += 1
|
|
653
|
+
end
|
|
636
654
|
end
|
|
637
655
|
end
|
|
638
656
|
|
|
639
657
|
# parametric route
|
|
640
658
|
if param_entry
|
|
641
|
-
|
|
659
|
+
if when_count == 0
|
|
660
|
+
emit_code_line(buffer, "#{ws}when p")
|
|
661
|
+
else
|
|
662
|
+
emit_code_line(buffer, "#{ws}else")
|
|
663
|
+
end
|
|
664
|
+
|
|
642
665
|
emit_code_line(buffer, "#{ws} params[#{param_entry[:param].inspect}] = p")
|
|
643
666
|
visit_routing_tree_entry(buffer:, entry: param_entry, indent: indent + 1, segment_idx: segment_idx + 1)
|
|
644
667
|
# wildcard route
|
data/lib/syntropy/version.rb
CHANGED
data/syntropy.gemspec
CHANGED
|
@@ -25,8 +25,8 @@ Gem::Specification.new do |s|
|
|
|
25
25
|
s.add_dependency 'json', '~>2.15.1'
|
|
26
26
|
s.add_dependency 'papercraft', '~>3.1.0'
|
|
27
27
|
s.add_dependency 'qeweney', '~>0.24'
|
|
28
|
-
s.add_dependency 'tp2', '~>0.19.
|
|
29
|
-
s.add_dependency 'uringmachine', '~>0.19'
|
|
28
|
+
s.add_dependency 'tp2', '~>0.19.2'
|
|
29
|
+
s.add_dependency 'uringmachine', '~>0.19.1'
|
|
30
30
|
|
|
31
31
|
s.add_dependency 'listen', '~>3.9.0'
|
|
32
32
|
s.add_dependency 'logger', '~>1.7.0'
|
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
|
|
data/test/test_routing_tree.rb
CHANGED
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
|
+
version: 0.27.7
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sharon Rosner
|
|
@@ -71,28 +71,28 @@ dependencies:
|
|
|
71
71
|
requirements:
|
|
72
72
|
- - "~>"
|
|
73
73
|
- !ruby/object:Gem::Version
|
|
74
|
-
version: 0.19.
|
|
74
|
+
version: 0.19.2
|
|
75
75
|
type: :runtime
|
|
76
76
|
prerelease: false
|
|
77
77
|
version_requirements: !ruby/object:Gem::Requirement
|
|
78
78
|
requirements:
|
|
79
79
|
- - "~>"
|
|
80
80
|
- !ruby/object:Gem::Version
|
|
81
|
-
version: 0.19.
|
|
81
|
+
version: 0.19.2
|
|
82
82
|
- !ruby/object:Gem::Dependency
|
|
83
83
|
name: uringmachine
|
|
84
84
|
requirement: !ruby/object:Gem::Requirement
|
|
85
85
|
requirements:
|
|
86
86
|
- - "~>"
|
|
87
87
|
- !ruby/object:Gem::Version
|
|
88
|
-
version:
|
|
88
|
+
version: 0.19.1
|
|
89
89
|
type: :runtime
|
|
90
90
|
prerelease: false
|
|
91
91
|
version_requirements: !ruby/object:Gem::Requirement
|
|
92
92
|
requirements:
|
|
93
93
|
- - "~>"
|
|
94
94
|
- !ruby/object:Gem::Version
|
|
95
|
-
version:
|
|
95
|
+
version: 0.19.1
|
|
96
96
|
- !ruby/object:Gem::Dependency
|
|
97
97
|
name: listen
|
|
98
98
|
requirement: !ruby/object:Gem::Requirement
|