diff --git a/lib/hanami/router/leaf.rb b/lib/hanami/router/leaf.rb index df976137..40065b00 100644 --- a/lib/hanami/router/leaf.rb +++ b/lib/hanami/router/leaf.rb @@ -9,15 +9,14 @@ class Leaf # # @api private # @since 2.2.0 - attr_reader :to, :params + attr_reader :to, :params, :matcher # @api private # @since 2.2.0 def initialize(route, to, constraints) - @route = route @to = to - @constraints = constraints @params = nil + @matcher = Mustermann.new(route, type: :rails, version: "5.0", capture: constraints) end # @api private @@ -29,14 +28,6 @@ def match(path) match end - - private - - # @api private - # @since 2.2.0 - def matcher - @matcher ||= Mustermann.new(@route, type: :rails, version: "5.0", capture: @constraints) - end end end end diff --git a/lib/hanami/router/trie.rb b/lib/hanami/router/trie.rb index d46cc5af..e285193d 100644 --- a/lib/hanami/router/trie.rb +++ b/lib/hanami/router/trie.rb @@ -17,6 +17,7 @@ class Trie # @since 2.0.0 def initialize @root = Node.new + @segments_map = {} end # @api private @@ -47,15 +48,18 @@ def find(path) # @api private # @since 2.0.0 - SEGMENT_SEPARATOR = /\// + SEGMENT_SEPARATOR = "/" private_constant :SEGMENT_SEPARATOR # @api private # @since 2.2.0 def segments_from(path) - _, *segments = path.split(SEGMENT_SEPARATOR) - - segments + if @segments_map[path] + @segments_map[path] + else + _, *segments = path.split(SEGMENT_SEPARATOR) + @segments_map[path] = segments + end end end end