Sha256: 7ec991a52b94a8240c5ae9e38f41a0623ba90ac2785beab7df51528410ea702a
Contents?: true
Size: 1.78 KB
Versions: 9
Compression:
Stored size: 1.78 KB
Contents
# frozen_string_literal: true require "hanami/router/segment" module Hanami module Middleware # Trie node to register scopes with custom Rack middleware # # @api private # @since 2.0.0 class Node # @api private # @since 2.0.0 attr_reader :app # @api private # @since 2.0.0 def initialize @app = nil @variable = nil @fixed = nil end # @api private # @since 2.0.0 def freeze @variable.freeze @fixed.freeze super end # @api private # @since 2.0.0 def put(segment) if variable?(segment) @variable ||= {} @variable[segment_for(segment)] ||= self.class.new else @fixed ||= {} @fixed[segment] ||= self.class.new end end # @api private # @since 2.0.0 def get(segment) # rubocop:disable Metrics/PerceivedComplexity found = @fixed&.fetch(segment, nil) return found if found @variable&.each do |matcher, node| break if found captured = matcher.match(segment) found = node if captured end return found if found self if leaf? end # @api private # @since 2.0.0 def app!(app) @app = app end # @api private # @since 2.0.0 def app? !@app.nil? end # @api private # @since 2.0.0 def leaf? @fixed.nil? && @variable.nil? end # @api private # @since 2.0.3 def variable?(segment) Router::ROUTE_VARIABLE_MATCHER.match?(segment) end # @api private # @since 2.0.3 def segment_for(segment) Router::Segment.fabricate(segment) end end end end
Version data entries
9 entries across 9 versions & 1 rubygems