syntropy 0.27.6 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7e8df1d7aac0cc40148bec47ea488aac153a10a120e1bb3c2f8233bbf5a1cb61
4
- data.tar.gz: 7654c5548f51b040ea7ca6e52bb522f83e0117717c0d1e29ad8cd20dc7e8c857
3
+ metadata.gz: dec1337a818afc63d7160fe0aa771dfd12c0128c69307ebb9a2d87a8f4410d7d
4
+ data.tar.gz: dc4dccd65ac6dfacd5d16cd8b2294a7a52f07727fccf5c41da27a259bc9ab4c2
5
5
  SHA512:
6
- metadata.gz: 1a522e390af9b35866b2fe9837a084d330ab42bef82b629978ed070e58353fc326a5380e4ffebb378d2ac2e27d18930be6eb3a65e74df3d1eebf12ff528d7f8b
7
- data.tar.gz: cdb0757c9a15cc285fb2900e695327da175712f92acbde2452c1c7d12a63f06f1d6223d642e836c1d0d673f4ee11d5bf16837dc3b06f5dd2e1340bbf9320e228
6
+ metadata.gz: 589ac7d942379ceef292ba87eeee8cc01329eeb8abc8b627d8259fe02b7ec3e455b3c55fb956b438b0261564c47d122d87b4b759d8e42fe91719d526ad475846
7
+ data.tar.gz: dc6b9a9a530525f73e443cb407bdeb487c063fb6d7bafd4992144d3e22f8e92362c2b9e290f0b050b28e6f8b40468c6ad23786d8aa56d0900e71fce926dcbfe2
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ # 0.27.7 2025-11-03
2
+
3
+ - Update UringMachine, TP2
4
+ - Optimize router generated code
5
+
1
6
  # 0.27.6 2025-10-30
2
7
 
3
8
  - Redirect automatically on trailing slash
@@ -548,22 +548,30 @@ module Syntropy
548
548
  end
549
549
  end
550
550
 
551
- # Get next segment
552
- emit_code_line(buffer, "#{ws}case (p = parts[#{segment_idx}])")
551
+ return if !entry[:target] && !entry[:children]
553
552
 
554
- # In case of no next segment
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} return #{map}[#{entry[:path].inspect}]")
559
- else
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:, entry:, indent:, segment_idx:)
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
- emit_code_line(buffer, "#{ws}when #{k.inspect}")
635
- visit_routing_tree_entry(buffer:, entry: child_entry, indent: indent + 1, segment_idx: segment_idx + 1)
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
- emit_code_line(buffer, "#{ws}else")
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Syntropy
4
- VERSION = '0.27.6'
4
+ VERSION = '0.27.7'
5
5
  end
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.1'
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'
@@ -569,6 +569,4 @@ class RoutingTreeWildcardIndexTest < Minitest::Test
569
569
  route = router.('/docs/bars/about', {})
570
570
  assert_nil route
571
571
  end
572
-
573
-
574
572
  end
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.6
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.1
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.1
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: '0.19'
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: '0.19'
95
+ version: 0.19.1
96
96
  - !ruby/object:Gem::Dependency
97
97
  name: listen
98
98
  requirement: !ruby/object:Gem::Requirement