1
1
# frozen_string_literal: true
2
2
3
- require "hanami/router/segment "
3
+ require "hanami/router/leaf "
4
4
5
5
module Hanami
6
6
class Router
@@ -18,15 +18,14 @@ class Node
18
18
def initialize
19
19
@variable = nil
20
20
@fixed = nil
21
- @to = nil
21
+ @leaves = nil
22
22
end
23
23
24
24
# @api private
25
25
# @since 2.0.0
26
- def put ( segment , constraints )
26
+ def put ( segment )
27
27
if variable? ( segment )
28
- @variable ||= { }
29
- @variable [ segment_for ( segment , constraints ) ] ||= self . class . new
28
+ @variable ||= self . class . new
30
29
else
31
30
@fixed ||= { }
32
31
@fixed [ segment ] ||= self . class . new
@@ -35,35 +34,21 @@ def put(segment, constraints)
35
34
36
35
# @api private
37
36
# @since 2.0.0
38
- #
39
- def get ( segment ) # rubocop:disable Metrics/PerceivedComplexity
40
- return unless @variable || @fixed
41
-
42
- captured = nil
43
-
44
- found = @fixed &.fetch ( segment , nil )
45
- return [ found , nil ] if found
46
-
47
- @variable &.each do |matcher , node |
48
- break if found
49
-
50
- captured = matcher . match ( segment )
51
- found = node if captured
52
- end
53
-
54
- [ found , captured &.named_captures ]
37
+ def get ( segment )
38
+ @fixed &.fetch ( segment , nil ) || @variable
55
39
end
56
40
57
41
# @api private
58
42
# @since 2.0.0
59
- def leaf?
60
- @to
43
+ def leaf! ( route , to , constraints )
44
+ @leaves ||= [ ]
45
+ @leaves << Leaf . new ( route , to , constraints )
61
46
end
62
47
63
48
# @api private
64
- # @since 2.0 .0
65
- def leaf! ( to )
66
- @to = to
49
+ # @since 2.2 .0
50
+ def match ( path )
51
+ @leaves &. find { | leaf | leaf . match ( path ) }
67
52
end
68
53
69
54
private
@@ -73,18 +58,6 @@ def leaf!(to)
73
58
def variable? ( segment )
74
59
Router ::ROUTE_VARIABLE_MATCHER . match? ( segment )
75
60
end
76
-
77
- # @api private
78
- # @since 2.0.0
79
- def segment_for ( segment , constraints )
80
- Segment . fabricate ( segment , **constraints )
81
- end
82
-
83
- # @api private
84
- # @since 2.0.0
85
- def fixed? ( matcher )
86
- matcher . names . empty?
87
- end
88
61
end
89
62
end
90
63
end
0 commit comments